1 | /* 2 | * Layer Two Tunnelling Protocol Daemon 3 | * Copyright (C) 1998 Adtran, Inc. 4 | * 5 | * Mark Spencer 6 | * 7 | * This software is distributed under the terms 8 | * of the GPL, which you should have received 9 | * along with this source. 10 | * 11 | * Attribute Value Pair structures and 12 | * definitions 13 | */ 14 | 15 | #include "common.h" 16 | 17 | struct avp_hdr 18 | { 19 | _u16 length; 20 | _u16 vendorid; 21 | _u16 attr; 22 | }; 23 | 24 | struct avp 25 | { 26 | int num; /* Number of AVP */ 27 | int m; /* Set M? */ 28 | int (*handler) (struct tunnel *, struct call *, void *, int); 29 | /* This should handle the AVP 30 | taking a tunnel, call, the data, 31 | and the length of the AVP as 32 | parameters. Should return 0 33 | upon success */ 34 | char *description; /* A name, for debugging */ 35 | }; 36 | 37 | extern int handle_avps (struct buffer *buf, struct tunnel *t, struct call *c); 38 | 39 | extern char *msgtypes[]; 40 | 41 | #define VENDOR_ID 0 /* We don't have any extensions 42 | so we shoouldn't have to 43 | worry about this */ 44 | 45 | /* 46 | * Macros to extract information from length field of AVP 47 | */ 48 | 49 | #define AMBIT(len) (len & 0x8000) /* Mandatory bit: If this is 50 | set on an unknown AVP, 51 | we MUST terminate */ 52 | 53 | #define AHBIT(len) (len & 0x4000) /* Hidden bit: Specifies 54 | information hiding */ 55 | 56 | #define AZBITS(len) (len & 0x3C00) /* Reserved bits: We must 57 | drop anything with any 58 | of these set. */ 59 | 60 | #define ALENGTH(len) (len & 0x03FF) /* Length: Lenth of AVP */ 61 | 62 | #define MAXTIME 300 /* time to wait before checking 63 | Ns and Nr, in ms */ 64 | 65 | #define MBIT 0x8000 /* for setting */ 66 | #define HBIT 0x4000 /* Set on hidden avp's */ 67 | 68 | #define ASYNC_FRAMING 2 69 | #define SYNC_FRAMING 1 70 | 71 | #define ANALOG_BEARER 2 72 | #define DIGITAL_BEARER 1 73 | 74 | #define VENDOR_ERROR 6 75 | 76 | #define ERROR_RESERVED 3 77 | #define ERROR_LENGTH 2 78 | #define ERROR_NOTEXIST 1 79 | #define ERROR_NORES 4 80 | #define ERROR_INVALID 6 81 | #define RESULT_CLEAR 1 82 | #define RESULT_ERROR 2 83 | #define RESULT_EXISTS 3 84 | extern void encrypt_avp (struct buffer *, _u16, struct tunnel *); 85 | extern int decrypt_avp (char *, struct tunnel *); 86 | extern int message_type_avp (struct tunnel *, struct call *, void *, int); 87 | extern int protocol_version_avp (struct tunnel *, struct call *, void *, int); 88 | extern int framing_caps_avp (struct tunnel *, struct call *, void *, int); 89 | extern int bearer_caps_avp (struct tunnel *, struct call *, void *, int); 90 | extern int firmware_rev_avp (struct tunnel *, struct call *, void *, int); 91 | extern int hostname_avp (struct tunnel *, struct call *, void *, int); 92 | extern int vendor_avp (struct tunnel *, struct call *, void *, int); 93 | extern int assigned_tunnel_avp (struct tunnel *, struct call *, void *, int); 94 | extern int receive_window_size_avp (struct tunnel *, struct call *, void *, 95 | int); 96 | extern int result_code_avp (struct tunnel *, struct call *, void *, int); 97 | extern int assigned_call_avp (struct tunnel *, struct call *, void *, int); 98 | extern int call_serno_avp (struct tunnel *, struct call *, void *, int); 99 | extern int bearer_type_avp (struct tunnel *, struct call *, void *, int); 100 | extern int call_physchan_avp (struct tunnel *, struct call *, void *, int); 101 | extern int dialed_number_avp (struct tunnel *, struct call *, void *, int); 102 | extern int dialing_number_avp (struct tunnel *, struct call *, void *, int); 103 | extern int sub_address_avp (struct tunnel *, struct call *, void *, int); 104 | extern int frame_type_avp (struct tunnel *, struct call *, void *, int); 105 | extern int rx_speed_avp (struct tunnel *, struct call *, void *, int); 106 | extern int tx_speed_avp (struct tunnel *, struct call *, void *, int); 107 | extern int packet_delay_avp (struct tunnel *, struct call *, void *, int); 108 | extern int ignore_avp (struct tunnel *, struct call *, void *, int); 109 | extern int seq_reqd_avp (struct tunnel *, struct call *, void *, int); 110 | extern int challenge_avp (struct tunnel *, struct call *, void *, int); 111 | extern int chalresp_avp (struct tunnel *, struct call *, void *, int); 112 | extern int rand_vector_avp (struct tunnel *, struct call *, void *, int); 113 | 114 | extern int add_challenge_avp (struct buffer *, char *, int); 115 | extern int add_avp_rws (struct buffer *, _u16); 116 | extern int add_tunnelid_avp (struct buffer *, _u16); 117 | extern int add_vendor_avp (struct buffer *); 118 | extern int add_hostname_avp (struct buffer *); 119 | extern int add_firmware_avp (struct buffer *); 120 | extern int add_bearer_caps_avp (struct buffer *buf, _u16 caps); 121 | extern int add_frame_caps_avp (struct buffer *buf, _u16 caps); 122 | extern int add_protocol_avp (struct buffer *buf); 123 | extern int add_message_type_avp (struct buffer *buf, _u16 type); 124 | extern int add_result_code_avp (struct buffer *buf, _u16, _u16, char *, int); 125 | extern int add_bearer_avp (struct buffer *, int); 126 | extern int add_frame_avp (struct buffer *, int); 127 | extern int add_rxspeed_avp (struct buffer *, int); 128 | extern int add_txspeed_avp (struct buffer *, int); 129 | extern int add_serno_avp (struct buffer *, unsigned int); 130 | #ifdef TEST_HIDDEN 131 | extern int add_callid_avp (struct buffer *, _u16, struct tunnel *); 132 | #else 133 | extern int add_callid_avp (struct buffer *, _u16); 134 | #endif 135 | extern int add_ppd_avp (struct buffer *, _u16); 136 | extern int add_seqreqd_avp (struct buffer *); 137 | extern int add_chalresp_avp (struct buffer *, char *, int); 138 | extern int add_randvect_avp (struct buffer *, char *, int); 139 | extern int add_minbps_avp (struct buffer *buf, int speed); /* jz: needed for outgoing call */ 140 | extern int add_maxbps_avp (struct buffer *buf, int speed); /* jz: needed for outgoing call */ 141 | extern int add_number_avp (struct buffer *buf, char *no); /* jz: needed for outgoing call */