| /********************************************************************************************************* |
| * Software License Agreement (BSD License) * |
| * Author: Sebastien Decugis <sdecugis@freediameter.net> * |
| * * |
| * Copyright (c) 2013, WIDE Project and NICT * |
| * All rights reserved. * |
| * * |
| * Redistribution and use of this software in source and binary forms, with or without modification, are * |
| * permitted provided that the following conditions are met: * |
| * * |
| * * Redistributions of source code must retain the above * |
| * copyright notice, this list of conditions and the * |
| * following disclaimer. * |
| * * |
| * * Redistributions in binary form must reproduce the above * |
| * copyright notice, this list of conditions and the * |
| * following disclaimer in the documentation and/or other * |
| * materials provided with the distribution. * |
| * * |
| * * Neither the name of the WIDE Project or NICT nor the * |
| * names of its contributors may be used to endorse or * |
| * promote products derived from this software without * |
| * specific prior written permission of WIDE Project and * |
| * NICT. * |
| * * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED * |
| * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * |
| * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * |
| * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * |
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * |
| * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR * |
| * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * |
| * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * |
| *********************************************************************************************************/ |
| |
| /* |
| * Dictionary definitions of objects specified in Diameter NASREQ (RFC4005). |
| */ |
| #include <freeDiameter/extension.h> |
| |
| /* The content of this file follows the same structure as dict_base_proto.c */ |
| |
| #define CHECK_dict_new( _type, _data, _parent, _ref ) \ |
| CHECK_FCT( fd_dict_new( fd_g_config->cnf_dict, (_type), (_data), (_parent), (_ref)) ); |
| |
| #define CHECK_dict_search( _type, _criteria, _what, _result ) \ |
| CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, (_type), (_criteria), (_what), (_result), ENOENT) ); |
| |
| struct local_rules_definition { |
| char *avp_name; |
| enum rule_position position; |
| int min; |
| int max; |
| }; |
| |
| #define RULE_ORDER( _position ) ((((_position) == RULE_FIXED_HEAD) || ((_position) == RULE_FIXED_TAIL)) ? 1 : 0 ) |
| |
| #define PARSE_loc_rules( _rulearray, _parent) { \ |
| int __ar; \ |
| for (__ar=0; __ar < sizeof(_rulearray) / sizeof((_rulearray)[0]); __ar++) { \ |
| struct dict_rule_data __data = { NULL, \ |
| (_rulearray)[__ar].position, \ |
| 0, \ |
| (_rulearray)[__ar].min, \ |
| (_rulearray)[__ar].max}; \ |
| __data.rule_order = RULE_ORDER(__data.rule_position); \ |
| CHECK_FCT( fd_dict_search( \ |
| fd_g_config->cnf_dict, \ |
| DICT_AVP, \ |
| AVP_BY_NAME, \ |
| (_rulearray)[__ar].avp_name, \ |
| &__data.rule_avp, 0 ) ); \ |
| if ( !__data.rule_avp ) { \ |
| TRACE_DEBUG(INFO, "AVP Not found: '%s'", (_rulearray)[__ar].avp_name ); \ |
| return ENOENT; \ |
| } \ |
| CHECK_FCT_DO( fd_dict_new( fd_g_config->cnf_dict, DICT_RULE, &__data, _parent, NULL), \ |
| { \ |
| TRACE_DEBUG(INFO, "Error on rule with AVP '%s'", \ |
| (_rulearray)[__ar].avp_name ); \ |
| return EINVAL; \ |
| } ); \ |
| } \ |
| } |
| |
| #define enumval_def_u32( _val_, _str_ ) \ |
| { _str_, { .u32 = _val_ }} |
| |
| #define enumval_def_os( _len_, _val_, _str_ ) \ |
| { _str_, { .os = { .data = (unsigned char *)_val_, .len = _len_ }}} |
| |
| |
| static int dnr_entry(char * conffile) |
| { |
| struct dict_object * nasreq; |
| TRACE_ENTRY("%p", conffile); |
| |
| /* No Vendors definitions */ |
| |
| /* Applications section */ |
| { |
| /* NASREQ (RFC 4005) */ |
| { |
| struct dict_application_data data = { 1, "Diameter Network Access Server Application" }; |
| CHECK_dict_new( DICT_APPLICATION, &data, NULL, &nasreq); |
| } |
| } |
| |
| /* Derived AVP types section */ |
| { |
| /* QoSFilterRule */ |
| { |
| /* |
| The QosFilterRule format is derived from the OctetString AVP Base |
| Format. It uses the ASCII charset. Packets may be marked or |
| metered based on the following information: |
| |
| Direction (in or out) |
| Source and destination IP address (possibly masked) |
| Protocol |
| Source and destination port (lists or ranges) |
| DSCP values (no mask or range) |
| |
| Rules for the appropriate direction are evaluated in order; the |
| first matched rule terminates the evaluation. Each packet is |
| evaluated once. If no rule matches, the packet is treated as best |
| effort. An access device unable to interpret or apply a QoS rule |
| SHOULD NOT terminate the session. |
| |
| QoSFilterRule filters MUST follow the following format: |
| |
| action dir proto from src to dst [options] |
| |
| tag - Mark packet with a specific DSCP |
| [DIFFSERV]. The DSCP option MUST be |
| included. |
| meter - Meter traffic. The metering options |
| MUST be included. |
| |
| dir The format is as described under IPFilterRule. |
| |
| proto The format is as described under IPFilterRule. |
| |
| src and dst The format is as described under IPFilterRule. |
| |
| options: |
| |
| DSCP <color> |
| Color values as defined in [DIFFSERV]. Exact |
| matching of DSCP values is required (no masks or |
| ranges). |
| |
| metering <rate> <color_under> <color_over> |
| The metering option provides Assured Forwarding, |
| as defined in [DIFFSERVAF], and MUST be present |
| if the action is set to meter. The rate option is |
| the throughput, in bits per second, used |
| by the access device to mark packets. Traffic |
| over the rate is marked with the color_over |
| codepoint, and traffic under the rate is marked |
| with the color_under codepoint. The color_under |
| and color_over options contain the drop |
| preferences and MUST conform to the recommended |
| codepoint keywords described in [DIFFSERVAF] |
| (e.g., AF13). |
| |
| The metering option also supports the strict |
| limit on traffic required by Expedited |
| Forwarding, as defined in [DIFFSERVEF]. The |
| color_over option may contain the keyword "drop" |
| to prevent forwarding of traffic that exceeds the |
| rate parameter. |
| |
| The rule syntax is a modified subset of ipfw(8) from FreeBSD, |
| and the ipfw.c code may provide a useful base for |
| implementations. |
| */ |
| struct dict_type_data data = { AVP_TYPE_OCTETSTRING, "QoSFilterRule" , NULL , NULL }; |
| CHECK_dict_new( DICT_TYPE, &data , NULL, NULL); |
| } |
| |
| } |
| |
| /* AVP section */ |
| { |
| struct dict_object * UTF8String_type; |
| struct dict_object * IPFilterRule_type; |
| struct dict_object * QoSFilterRule_type; |
| CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "UTF8String", &UTF8String_type); |
| CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "IPFilterRule", &IPFilterRule_type); |
| CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "QoSFilterRule", &QoSFilterRule_type); |
| |
| /******************************** |
| * NAS Session AVPs * |
| ********************************/ |
| /* NAS-Port */ |
| { |
| /* |
| The NAS-Port AVP (AVP Code 5) is of type Unsigned32 and contains the |
| physical or virtual port number of the NAS which is authenticating |
| the user. Note that "port" is meant in its sense as a service |
| connection on the NAS, not as an IP protocol identifier. |
| |
| Either NAS-Port or NAS-Port-Id (AVP Code 87) SHOULD be present in |
| AA-Request (AAR) commands if the NAS differentiates among its ports. |
| */ |
| struct dict_avp_data data = { |
| 5, /* Code */ |
| 0, /* Vendor */ |
| "NAS-Port", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_UNSIGNED32 /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /* NAS-Port-Id */ |
| { |
| /* |
| The NAS-Port-Id AVP (AVP Code 87) is of type UTF8String and consists |
| of ASCII text identifying the port of the NAS authenticating the |
| user. Note that "port" is meant in its sense as a service connection |
| on the NAS, not as an IP protocol identifier. |
| |
| Either NAS-Port or NAS-Port-Id SHOULD be present in AA-Request (AAR) |
| commands if the NAS differentiates among its ports. NAS-Port-Id is |
| intended for use by NASes that cannot conveniently number their |
| ports. |
| */ |
| struct dict_avp_data data = { |
| 87, /* Code */ |
| 0, /* Vendor */ |
| "NAS-Port-Id", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL); |
| } |
| |
| /* NAS-Port-Type */ |
| { |
| /* |
| The NAS-Port-Type AVP (AVP Code 61) is of type Enumerated and |
| contains the type of the port on which the NAS is authenticating the |
| user. This AVP SHOULD be present if the NAS uses the same NAS-Port |
| number ranges for different service types concurrently. |
| |
| The supported values are defined in [RADIUSTypes]. The following |
| list is informational and subject to change by the IANA. |
| |
| http://www.iana.org/assignments/radius-types |
| Sub-registry: Values for RADIUS Attribute 61, NAS-Port-Type |
| Reference: [RFC2865] |
| |
| Extract on 2009.06.01: |
| 0 Async [RFC2865] |
| 1 Sync [RFC2865] |
| 2 ISDN Sync [RFC2865] |
| 3 ISDN Async V.120 [RFC2865] |
| 4 ISDN Async V.110 [RFC2865] |
| 5 Virtual [RFC2865] |
| 6 PIAFS [RFC2865] |
| 7 HDLC Clear Channel [RFC2865] |
| 8 X.25 [RFC2865] |
| 9 X.75 [RFC2865] |
| 10 G.3 Fax [RFC2865] |
| 11 SDSL - Symmetric DSL [RFC2865] |
| 12 ADSL-CAP - Asymmetric DSL, Carrierless Amplitude Phase Modulation [RFC2865] |
| 13 ADSL-DMT - Asymmetric DSL, Discrete Multi-Tone [RFC2865] |
| 14 IDSL - ISDN Digital Subscriber Line [RFC2865] |
| 15 Ethernet [RFC2865] |
| 16 xDSL - Digital Subscriber Line of unknown type [RFC2865] |
| 17 Cable [RFC2865] |
| 18 Wireless - Other [RFC2865] |
| 19 Wireless - IEEE 802.11 [RFC2865] |
| 20 Token-Ring [RFC3580] |
| 21 FDDI [RFC3580] |
| 22 Wireless - CDMA2000 [McCann] |
| 23 Wireless - UMTS [McCann] |
| 24 Wireless - 1X-EV [McCann] |
| 25 IAPP [IEEE 802.11F][Kerry] |
| 26 FTTP - Fiber to the Premises [Nyce] |
| 27 Wireless - IEEE 802.16 [IEEE 802.16] 12 December 2006 |
| 28 Wireless - IEEE 802.20 [IEEE 802.20] 12 December 2006 |
| 29 Wireless - IEEE 802.22 [IEEE 802.22] 12 December 2006 |
| 30 PPPoA - PPP over ATM [RFC4603] |
| 31 PPPoEoA - PPP over Ethernet over ATM [RFC4603] |
| 32 PPPoEoE - PPP over Ethernet over Ethernet [RFC4603] |
| 33 PPPoEoVLAN - PPP over Ethernet over VLAN [RFC4603] |
| 34 PPPoEoQinQ - PPP over Ethernet over IEEE 802.1QinQ [RFC4603] |
| 35 xPON - Passive Optical Network [Hublet][Yan] 19 June 2007 |
| */ |
| |
| struct dict_object *type; |
| struct dict_type_data tdata = { AVP_TYPE_UNSIGNED32, "Enumerated(NAS-Port-Type)" , NULL, NULL}; |
| struct dict_enumval_data tvals[] = { |
| enumval_def_u32( 0, "Async [RFC2865]"), |
| enumval_def_u32( 1, "Sync [RFC2865]"), |
| enumval_def_u32( 2, "ISDN Sync [RFC2865]"), |
| enumval_def_u32( 3, "ISDN Async V.120 [RFC2865]"), |
| enumval_def_u32( 4, "ISDN Async V.110 [RFC2865]"), |
| enumval_def_u32( 5, "Virtual [RFC2865]"), |
| enumval_def_u32( 6, "PIAFS [RFC2865]"), |
| enumval_def_u32( 7, "HDLC Clear Channel [RFC2865]"), |
| enumval_def_u32( 8, "X.25 [RFC2865]"), |
| enumval_def_u32( 9, "X.75 [RFC2865]"), |
| enumval_def_u32(10, "G.3 Fax [RFC2865]"), |
| enumval_def_u32(11, "SDSL - Symmetric DSL [RFC2865]"), |
| enumval_def_u32(12, "ADSL-CAP - Asymmetric DSL, Carrierless Amplitude Phase Modulation [RFC2865]"), |
| enumval_def_u32(13, "ADSL-DMT - Asymmetric DSL, Discrete Multi-Tone [RFC2865]"), |
| enumval_def_u32(14, "IDSL - ISDN Digital Subscriber Line [RFC2865]"), |
| enumval_def_u32(15, "Ethernet [RFC2865]"), |
| enumval_def_u32(16, "xDSL - Digital Subscriber Line of unknown type [RFC2865]"), |
| enumval_def_u32(17, "Cable [RFC2865]"), |
| enumval_def_u32(18, "Wireless - Other [RFC2865]"), |
| enumval_def_u32(19, "Wireless - IEEE 802.11 [RFC2865]"), |
| enumval_def_u32(20, "Token-Ring [RFC3580]"), |
| enumval_def_u32(21, "FDDI [RFC3580]"), |
| enumval_def_u32(22, "Wireless - CDMA2000 [McCann]"), |
| enumval_def_u32(23, "Wireless - UMTS [McCann]"), |
| enumval_def_u32(24, "Wireless - 1X-EV [McCann]"), |
| enumval_def_u32(25, "IAPP [IEEE 802.11F][Kerry]"), |
| enumval_def_u32(26, "FTTP - Fiber to the Premises [Nyce]"), |
| enumval_def_u32(27, "Wireless - IEEE 802.16 [IEEE 802.16]"), |
| enumval_def_u32(28, "Wireless - IEEE 802.20 [IEEE 802.20]"), |
| enumval_def_u32(29, "Wireless - IEEE 802.22 [IEEE 802.22]"), |
| enumval_def_u32(30, "PPPoA - PPP over ATM [RFC4603]"), |
| enumval_def_u32(31, "PPPoEoA - PPP over Ethernet over ATM [RFC4603]"), |
| enumval_def_u32(32, "PPPoEoE - PPP over Ethernet over Ethernet [RFC4603]"), |
| enumval_def_u32(33, "PPPoEoVLAN - PPP over Ethernet over VLAN [RFC4603]"), |
| enumval_def_u32(34, "PPPoEoQinQ - PPP over Ethernet over IEEE 802.1QinQ [RFC4603]"), |
| enumval_def_u32(35, "xPON - Passive Optical Network [Hublet][Yan]") |
| }; |
| struct dict_avp_data data = { |
| 61, /* Code */ |
| 0, /* Vendor */ |
| "NAS-Port-Type", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_UNSIGNED32 /* base type of data */ |
| }; |
| int i; |
| /* Create the Enumerated type, enumerated values, and the AVP */ |
| CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type); |
| for (i = 0; i < sizeof(tvals) / sizeof(tvals[0]); i++) { |
| CHECK_dict_new( DICT_ENUMVAL, &tvals[i], type, NULL); |
| } |
| CHECK_dict_new( DICT_AVP, &data , type, NULL); |
| } |
| |
| /* Called-Station-Id */ |
| { |
| /* |
| The Called-Station-Id AVP (AVP Code 30) is of type UTF8String and |
| allows the NAS to send the ASCII string describing the layer 2 |
| address the user contacted in the request. For dialup access, this |
| can be a phone number obtained by using Dialed Number Identification |
| (DNIS) or a similar technology. Note that this may be different from |
| the phone number the call comes in on. For use with IEEE 802 access, |
| the Called-Station-Id MAY contain a MAC address formatted as |
| described in [RAD802.1X]. It SHOULD only be present in |
| authentication and/or authorization requests. |
| |
| If the Auth-Request-Type AVP is set to authorization-only and the |
| User-Name AVP is absent, the Diameter Server MAY perform |
| authorization based on this field. This can be used by a NAS to |
| request whether a call should be answered based on the DNIS. |
| */ |
| struct dict_avp_data data = { |
| 30, /* Code */ |
| 0, /* Vendor */ |
| "Called-Station-Id", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL); |
| } |
| |
| /* Calling-Station-Id */ |
| { |
| /* |
| The Calling-Station-Id AVP (AVP Code 31) is of type UTF8String and |
| allows the NAS to send the ASCII string describing the layer 2 |
| address from which the user connected in the request. For dialup |
| access, this is the phone number the call came from, using Automatic |
| Number Identification (ANI) or a similar technology. For use with |
| IEEE 802 access, the Calling-Station-Id AVP MAY contain a MAC |
| address, formated as described in [RAD802.1X]. It SHOULD only be |
| present in authentication and/or authorization requests. |
| |
| If the Auth-Request-Type AVP is set to authorization-only and the |
| User-Name AVP is absent, the Diameter Server MAY perform |
| authorization based on this field. This can be used by a NAS to |
| request whether a call should be answered based on the layer 2 |
| address (ANI, MAC Address, etc.) |
| */ |
| struct dict_avp_data data = { |
| 31, /* Code */ |
| 0, /* Vendor */ |
| "Calling-Station-Id", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL); |
| } |
| |
| /* Connect-Info */ |
| { |
| /* |
| The Connect-Info AVP (AVP Code 77) is of type UTF8String and is sent |
| in the AA-Request message or ACR STOP message. When sent in the |
| Access-Request, it indicates the nature of the user's connection. |
| The connection speed SHOULD be included at the beginning of the first |
| Connect-Info AVP in the message. If the transmit and receive |
| connection speeds differ, both may be included in the first AVP with |
| the transmit speed listed first (the speed the NAS modem transmits |
| at), then a slash (/), then the receive speed, and then other |
| optional information. |
| |
| For example: "28800 V42BIS/LAPM" or "52000/31200 V90" |
| |
| More than one Connect-Info attribute may be present in an |
| Accounting-Request packet to accommodate expected efforts by the ITU |
| to have modems report more connection information in a standard |
| format that might exceed 252 octets. |
| |
| If sent in the ACR STOP, this attribute may summarize statistics |
| relating to session quality. For example, in IEEE 802.11, the |
| Connect-Info attribute may contain information on the number of link |
| layer retransmissions. The exact format of this attribute is |
| implementation specific. |
| */ |
| struct dict_avp_data data = { |
| 77, /* Code */ |
| 0, /* Vendor */ |
| "Connect-Info", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL); |
| } |
| |
| /* Originating-Line-Info */ |
| { |
| /* |
| The Originating-Line-Info AVP (AVP Code 94) is of type OctetString |
| and is sent by the NAS system to convey information about the origin |
| of the call from an SS7 system. |
| |
| The originating line information (OLI) element indicates the nature |
| and/or characteristics of the line from which a call originated |
| (e.g., pay phone, hotel, cellular). Telephone companies are starting |
| to offer OLI to their customers as an option over Primary Rate |
| Interface (PRI). Internet Service Providers (ISPs) can use OLI in |
| addition to Called-Station-Id and Calling-Station-Id attributes to |
| differentiate customer calls and to define different services. |
| |
| The Value field contains two octets (00 - 99). ANSI T1.113 and |
| BELLCORE 394 can be used for additional information about these |
| values and their use. For more information on current assignment |
| values, see [http://www.nanpa.com/number_resource_info/ani_ii_assignments.html]. |
| |
| */ |
| struct dict_object *type; |
| struct dict_type_data tdata = { AVP_TYPE_OCTETSTRING, "Enumerated(Originating-Line-Info)" , NULL, NULL}; |
| struct dict_enumval_data tvals[] = { |
| enumval_def_os( 2, "00", "Plain Old Telephone Service (POTS)"), |
| enumval_def_os( 2, "01", "Multiparty Line (more than 2)"), |
| enumval_def_os( 2, "02", "ANI Failure"), |
| enumval_def_os( 2, "06", "Station Level Rating"), |
| enumval_def_os( 2, "07", "Special Operator Handling Required"), |
| enumval_def_os( 2, "20", "Automatic Identified Outward Dialing (AIOD)"), |
| enumval_def_os( 2, "23", "Coin or Non-Coin"), |
| enumval_def_os( 2, "24", "Toll Free Service (Non-Pay Origination)"), |
| enumval_def_os( 2, "25", "Toll Free Service (Pay Origination)"), |
| enumval_def_os( 2, "27", "Toll Free Service (Coin Control Origination)"), |
| enumval_def_os( 2, "29", "Prison/Inmate Service"), |
| enumval_def_os( 2, "30", "Intercept (Blank)"), |
| enumval_def_os( 2, "31", "Intercept (Trouble)"), |
| enumval_def_os( 2, "32", "Intercept (Regular)"), |
| enumval_def_os( 2, "34", "Telco Operator Handled Call"), |
| enumval_def_os( 2, "52", "Outward Wide Area Telecommunications Service (OUTWATS)"), |
| enumval_def_os( 2, "60", "Telecommunications Relay Service (TRS)(Unrestricted)"), |
| enumval_def_os( 2, "61", "Cellular/Wireless PCS (Type 1)"), |
| enumval_def_os( 2, "62", "Cellular/Wireless PCS (Type 2)"), |
| enumval_def_os( 2, "63", "Cellular/Wireless PCS (Roaming)"), |
| enumval_def_os( 2, "66", "TRS (Hotel)"), |
| enumval_def_os( 2, "67", "TRS (Restricted)"), |
| enumval_def_os( 2, "70", "Pay Station, No Coin Control"), |
| enumval_def_os( 2, "93", "Access for Private Virtual Network Service") |
| }; |
| struct dict_avp_data data = { |
| 94, /* Code */ |
| 0, /* Vendor */ |
| "Originating-Line-Info", /* Name */ |
| AVP_FLAG_VENDOR, /* Fixed flags */ |
| 0, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| int i; |
| /* Create the Enumerated type, enumerated values, and the AVP */ |
| CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type); |
| for (i = 0; i < sizeof(tvals) / sizeof(tvals[0]); i++) { |
| CHECK_dict_new( DICT_ENUMVAL, &tvals[i], type, NULL); |
| } |
| CHECK_dict_new( DICT_AVP, &data , type, NULL); |
| } |
| |
| /* Reply-Message */ |
| { |
| /* |
| The Reply-Message AVP (AVP Code 18) is of type UTF8String and |
| contains text that MAY be displayed to the user. When used in an |
| AA-Answer message with a successful Result-Code AVP, it indicates |
| success. When found in an AAA message with a Result-Code other than |
| DIAMETER_SUCCESS, the AVP contains a failure message. |
| |
| The Reply-Message AVP MAY indicate dialog text to prompt the user |
| before another AA-Request attempt. When used in an AA-Answer with a |
| Result-Code of DIAMETER_MULTI_ROUND_AUTH or in an Re-Auth-Request |
| message, it MAY contain a dialog text to prompt the user for a |
| response. |
| |
| Multiple Reply-Messages MAY be included, and if any are displayed, |
| they MUST be displayed in the same order as they appear in the |
| Diameter message. |
| */ |
| struct dict_avp_data data = { |
| 18, /* Code */ |
| 0, /* Vendor */ |
| "Reply-Message", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL); |
| } |
| |
| /******************************** |
| * NAS Authentication AVPs * |
| ********************************/ |
| /* User-Password */ |
| { |
| /* |
| The User-Password AVP (AVP Code 2) is of type OctetString and |
| contains the password of the user to be authenticated, or the user's |
| input in a multi-round authentication exchange. |
| |
| The User-Password AVP contains a user password or one-time password |
| and therefore represents sensitive information. As required in |
| [BASE], Diameter messages are encrypted by using IPsec or TLS. |
| Unless this AVP is used for one-time passwords, the User-Password AVP |
| SHOULD NOT be used in untrusted proxy environments without encrypting |
| it by using end-to-end security techniques, such as the proposed CMS |
| Security [DiamCMS]. |
| |
| The clear-text password (prior to encryption) MUST NOT be longer than |
| 128 bytes in length. |
| */ |
| struct dict_avp_data data = { |
| 2, /* Code */ |
| 0, /* Vendor */ |
| "User-Password", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /* Password-Retry */ |
| { |
| /* |
| The Password-Retry AVP (AVP Code 75) is of type Unsigned32 and MAY be |
| included in the AA-Answer if the Result-Code indicates an |
| authentication failure. The value of this AVP indicates how many |
| authentication attempts a user is permitted before being |
| disconnected. This AVP is primarily intended for use when the |
| Framed-Protocol AVP (see section 6.10.1) is set to ARAP. |
| */ |
| struct dict_avp_data data = { |
| 75, /* Code */ |
| 0, /* Vendor */ |
| "Password-Retry", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_UNSIGNED32 /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /* Prompt */ |
| { |
| /* |
| The Prompt AVP (AVP Code 76) is of type Enumerated and MAY be present |
| in the AA-Answer message. When present, it is used by the NAS to |
| determine whether the user's response, when entered, should be |
| echoed. |
| |
| The supported values are listed in http://www.iana.org/assignments/radius-types |
| Sub-registry: Values for RADIUS Attribute 76, Prompt |
| Reference: [RFC2869] |
| */ |
| struct dict_object *type; |
| struct dict_type_data tdata = { AVP_TYPE_UNSIGNED32, "Enumerated(Prompt)" , NULL, NULL}; |
| struct dict_enumval_data tvals[] = { |
| enumval_def_u32( 0, "No Echo [RFC2869]"), |
| enumval_def_u32( 1, "Echo [RFC2869]") |
| }; |
| struct dict_avp_data data = { |
| 76, /* Code */ |
| 0, /* Vendor */ |
| "Prompt", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_UNSIGNED32 /* base type of data */ |
| }; |
| int i; |
| /* Create the Enumerated type, enumerated values, and the AVP */ |
| CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type); |
| for (i = 0; i < sizeof(tvals) / sizeof(tvals[0]); i++) { |
| CHECK_dict_new( DICT_ENUMVAL, &tvals[i], type, NULL); |
| } |
| CHECK_dict_new( DICT_AVP, &data , type, NULL); |
| } |
| |
| /* CHAP-Algorithm */ |
| { |
| /* |
| The CHAP-Algorithm AVP (AVP Code 403) is of type Enumerated and |
| contains the algorithm identifier used in the computation of the CHAP |
| response [PPPCHAP]. The following values are currently supported: |
| |
| CHAP with MD5 5 |
| The CHAP response is computed by using the procedure described |
| in [PPPCHAP]. This algorithm requires that the CHAP-Response |
| AVP MUST be present in the CHAP-Auth AVP. |
| */ |
| struct dict_object *type; |
| struct dict_type_data tdata = { AVP_TYPE_UNSIGNED32, "Enumerated(CHAP-Algorithm)" , NULL, NULL}; |
| struct dict_enumval_data tvals[] = { |
| enumval_def_u32( 5, "CHAP with MD5") |
| }; |
| struct dict_avp_data adata = { |
| 403, /* Code */ |
| 0, /* Vendor */ |
| "CHAP-Algorithm", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_UNSIGNED32 /* base type of data */ |
| }; |
| int i; |
| CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type); |
| for (i = 0; i < sizeof(tvals) / sizeof(tvals[0]); i++) { |
| CHECK_dict_new( DICT_ENUMVAL, &tvals[i], type, NULL); |
| } |
| CHECK_dict_new( DICT_AVP, &adata , type, NULL); |
| } |
| |
| /* CHAP-Ident */ |
| { |
| /* |
| The CHAP-Ident AVP (AVP Code 404) is of type OctetString and contains |
| the 1 octet CHAP Identifier used in the computation of the CHAP |
| response [PPPCHAP]. |
| */ |
| struct dict_avp_data adata = { |
| 404, /* Code */ |
| 0, /* Vendor */ |
| "CHAP-Ident", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &adata , NULL, NULL); |
| } |
| |
| /* CHAP-Response */ |
| { |
| /* |
| The CHAP-Response AVP (AVP Code 405) is of type OctetString and |
| contains the 16 octet authentication data provided by the user in |
| response to the CHAP challenge [PPPCHAP]. |
| */ |
| struct dict_avp_data adata = { |
| 405, /* Code */ |
| 0, /* Vendor */ |
| "CHAP-Response", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &adata , NULL, NULL); |
| } |
| |
| /* CHAP-Auth */ |
| { |
| /* |
| The CHAP-Auth AVP (AVP Code 402) is of type Grouped and contains the |
| information necessary to authenticate a user using the PPP |
| Challenge-Handshake Authentication Protocol (CHAP) [PPPCHAP]. If the |
| CHAP-Auth AVP is found in a message, the CHAP-Challenge AVP MUST be |
| present as well. The optional AVPs containing the CHAP response |
| depend upon the value of the CHAP-Algorithm AVP. The grouped AVP has |
| the following ABNF grammar: |
| |
| CHAP-Auth ::= < AVP Header: 402 > |
| { CHAP-Algorithm } |
| { CHAP-Ident } |
| [ CHAP-Response ] |
| * [ AVP ] |
| */ |
| struct dict_object * avp; |
| struct dict_avp_data data = { |
| 402, /* Code */ |
| 0, /* Vendor */ |
| "CHAP-Auth", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_GROUPED /* base type of data */ |
| }; |
| struct local_rules_definition rules[] = |
| { { "CHAP-Algorithm", RULE_REQUIRED, -1, 1 } |
| ,{ "CHAP-Ident", RULE_REQUIRED, -1, 1 } |
| ,{ "CHAP-Response", RULE_OPTIONAL, -1, 1 } |
| }; |
| |
| CHECK_dict_new( DICT_AVP, &data , NULL, &avp); |
| PARSE_loc_rules( rules, avp ); |
| } |
| |
| /* CHAP-Challenge */ |
| { |
| /* |
| The CHAP-Challenge AVP (AVP Code 60) is of type OctetString and |
| contains the CHAP Challenge sent by the NAS to the CHAP peer |
| [PPPCHAP]. |
| */ |
| struct dict_avp_data data = { |
| 60, /* Code */ |
| 0, /* Vendor */ |
| "CHAP-Challenge", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /* ARAP-Password */ |
| { |
| /* |
| The ARAP-Password AVP (AVP Code 70) is of type OctetString and is |
| only present when the Framed-Protocol AVP (see section 6.10.1) is |
| included in the message and is set to ARAP. This AVP MUST NOT be |
| present if either the User-Password or the CHAP-Auth AVP is present. |
| See [RADIUSExt] for more information on the contents of this AVP. |
| */ |
| struct dict_avp_data data = { |
| 70, /* Code */ |
| 0, /* Vendor */ |
| "ARAP-Password", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /* ARAP-Challenge-Response */ |
| { |
| /* |
| The ARAP-Challenge-Response AVP (AVP Code 84) is of type OctetString |
| and is only present when the Framed-Protocol AVP (see section 6.10.1) |
| is included in the message and is set to ARAP. This AVP contains an |
| 8 octet response to the dial-in client's challenge. The RADIUS |
| server calculates this value by taking the dial-in client's challenge |
| from the high-order 8 octets of the ARAP-Password AVP and performing |
| DES encryption on this value with the authenticating user's password |
| as the key. If the user's password is fewer than 8 octets in length, |
| the password is padded at the end with NULL octets to a length of 8 |
| before it is used as a key. |
| */ |
| struct dict_avp_data data = { |
| 84, /* Code */ |
| 0, /* Vendor */ |
| "ARAP-Challenge-Response", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /* ARAP-Security */ |
| { |
| /* |
| The ARAP-Security AVP (AVP Code 73) is of type Unsigned32 and MAY be |
| present in the AA-Answer message if the Framed-Protocol AVP (see |
| section 6.10.1) is set to the value of ARAP, and the Result-Code AVP |
| is set to DIAMETER_MULTI_ROUND_AUTH. See [RADIUSExt] for more |
| information on the format of this AVP. |
| */ |
| struct dict_avp_data data = { |
| 73, /* Code */ |
| 0, /* Vendor */ |
| "ARAP-Security", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_UNSIGNED32 /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /* ARAP-Security-Data */ |
| { |
| /* |
| The ARAP-Security-Data AVP (AVP Code 74) is of type OctetString and MAY be |
| present in the AA-Request or AA-Answer message if the Framed-Protocol |
| AVP is set to the value of ARAP, and the Result-Code AVP is set to |
| DIAMETER_MULTI_ROUND_AUTH. This AVP contains the security module |
| challenge or response associated with the ARAP Security Module |
| specified in ARAP-Security. |
| */ |
| struct dict_avp_data data = { |
| 74, /* Code */ |
| 0, /* Vendor */ |
| "ARAP-Security-Data", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /******************************** |
| * NAS Authorization AVPs * |
| ********************************/ |
| /* Service-Type */ |
| { |
| /* |
| The Service-Type AVP (AVP Code 6) is of type Enumerated and contains |
| the type of service the user has requested or the type of service to |
| be provided. One such AVP MAY be present in an authentication and/or |
| authorization request or response. A NAS is not required to |
| implement all of these service types. It MUST treat unknown or |
| unsupported Service-Types received in a response as a failure and end |
| the session with a DIAMETER_INVALID_AVP_VALUE Result-Code. |
| |
| When used in a request, the Service-Type AVP SHOULD be considered a |
| hint to the server that the NAS believes the user would prefer the |
| kind of service indicated. The server is not required to honor the |
| hint. Furthermore, if the service specified by the server is |
| supported, but not compatible with the current mode of access, the |
| NAS MUST fail to start the session. The NAS MUST also generate the |
| appropriate error message(s). |
| |
| The following values have been defined for the Service-Type AVP. The |
| complete list of defined values can be found in [RADIUS] and |
| [RADIUSTypes]. |
| |
| Registry Name: Radius Attribute Values |
| Reference: [RFC2865][RFC3575] |
| |
| Sub-registry: Values for RADIUS Attribute 6, Service-Type |
| Reference: [RFC2865][RFC3575] |
| |
| 1 Login |
| 2 Framed |
| 3 Callback Login |
| 4 Callback Framed |
| 5 Outbound |
| 6 Administrative |
| 7 NAS Prompt |
| 8 Authenticate Only |
| 9 Callback NAS Prompt |
| 10 Call Check |
| 11 Callback Administrative |
| 12 Voice [Chiba] |
| 13 Fax [Chiba] |
| 14 Modem Relay [Chiba] |
| 15 IAPP-Register [IEEE 802.11f][Kerry] |
| 16 IAPP-AP-Check [IEEE 802.11f][Kerry] |
| 17 Authorize Only [RFC3576] |
| |
| The following values are further qualified: |
| |
| Login 1 |
| The user should be connected to a host. The message MAY |
| include additional AVPs defined in sections 6.16 or 6.17. |
| |
| Framed 2 |
| A Framed Protocol, such as PPP or SLIP, should be started for |
| the User. The message MAY include additional AVPs defined in |
| section 6.10, or section 7 for tunneling services. |
| |
| Callback Login 3 |
| The user should be disconnected and called back, then connected |
| to a host. The message MAY include additional AVPs defined in |
| this section. |
| |
| Callback Framed 4 |
| The user should be disconnected and called back, and then a |
| Framed Protocol, such as PPP or SLIP, should be started for the |
| User. The message MAY include additional AVPs defined in |
| section 6.10, or in section 7 for tunneling services. |
| |
| */ |
| struct dict_object *type; |
| struct dict_type_data tdata = { AVP_TYPE_UNSIGNED32, "Enumerated(Service-Type)" , NULL, NULL}; |
| struct dict_enumval_data tvals[] = { |
| enumval_def_u32( 1, "Login"), |
| enumval_def_u32( 2, "Framed"), |
| enumval_def_u32( 3, "Callback Login"), |
| enumval_def_u32( 4, "Callback Framed"), |
| enumval_def_u32( 5, "Outbound"), |
| enumval_def_u32( 6, "Administrative"), |
| enumval_def_u32( 7, "NAS Prompt"), |
| enumval_def_u32( 8, "Authenticate Only"), |
| enumval_def_u32( 9, "Callback NAS Prompt"), |
| enumval_def_u32(10, "Call Check"), |
| enumval_def_u32(11, "Callback Administrative"), |
| enumval_def_u32(12, "Voice [Chiba]"), |
| enumval_def_u32(13, "Fax [Chiba]"), |
| enumval_def_u32(14, "Modem Relay [Chiba]"), |
| enumval_def_u32(15, "IAPP-Register [IEEE 802.11f][Kerry]"), |
| enumval_def_u32(16, "IAPP-AP-Check [IEEE 802.11f][Kerry]"), |
| enumval_def_u32(17, "Authorize Only [RFC3576]") |
| }; |
| struct dict_avp_data data = { |
| 6, /* Code */ |
| 0, /* Vendor */ |
| "Service-Type", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_UNSIGNED32 /* base type of data */ |
| }; |
| int i; |
| /* Create the Enumerated type, enumerated values, and the AVP */ |
| CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type); |
| for (i = 0; i < sizeof(tvals) / sizeof(tvals[0]); i++) { |
| CHECK_dict_new( DICT_ENUMVAL, &tvals[i], type, NULL); |
| } |
| CHECK_dict_new( DICT_AVP, &data , type, NULL); |
| } |
| |
| /* Callback-Number */ |
| { |
| /* |
| The Callback-Number AVP (AVP Code 19) is of type UTF8String and |
| contains a dialing string to be used for callback. It MAY be used in |
| an authentication and/or authorization request as a hint to the |
| server that a Callback service is desired, but the server is not |
| required to honor the hint in the corresponding response. |
| */ |
| struct dict_avp_data data = { |
| 19, /* Code */ |
| 0, /* Vendor */ |
| "Callback-Number", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL); |
| } |
| |
| /* Callback-Id */ |
| { |
| /* |
| The Callback-Id AVP (AVP Code 20) is of type UTF8String and contains |
| the name of a place to be called, to be interpreted by the NAS. This |
| AVP MAY be present in an authentication and/or authorization |
| response. |
| |
| This AVP is not roaming-friendly as it assumes that the Callback-Id |
| is configured on the NAS. Using the Callback-Number AVP therefore |
| preferable. |
| */ |
| struct dict_avp_data data = { |
| 20, /* Code */ |
| 0, /* Vendor */ |
| "Callback-Id", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL); |
| } |
| |
| /* Idle-Timeout */ |
| { |
| /* |
| The Idle-Timeout AVP (AVP Code 28) is of type Unsigned32 and sets the |
| maximum number of consecutive seconds of idle connection allowable to |
| the user before termination of the session or before a prompt is |
| issued. The default is none, or system specific. |
| */ |
| struct dict_avp_data data = { |
| 28, /* Code */ |
| 0, /* Vendor */ |
| "Idle-Timeout", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_UNSIGNED32 /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /* Port-Limit */ |
| { |
| /* |
| The Port-Limit AVP (AVP Code 62) is of type Unsigned32 and sets the |
| maximum number of ports the NAS provides to the user. It MAY be used |
| in an authentication and/or authorization request as a hint to the |
| server that multilink PPP [PPPMP] service is desired, but the server |
| is not required to honor the hint in the corresponding response. |
| */ |
| struct dict_avp_data data = { |
| 62, /* Code */ |
| 0, /* Vendor */ |
| "Port-Limit", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_UNSIGNED32 /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /* NAS-Filter-Rule */ |
| { |
| /* |
| The NAS-Filter-Rule AVP (AVP Code 400) is of type IPFilterRule and |
| provides filter rules that need to be configured on the NAS for the |
| user. One or more of these AVPs MAY be present in an authorization |
| response. |
| */ |
| struct dict_avp_data data = { |
| 400, /* Code */ |
| 0, /* Vendor */ |
| "NAS-Filter-Rule", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , IPFilterRule_type, NULL); |
| } |
| |
| /* Filter-Id */ |
| { |
| /* |
| The Filter-Id AVP (AVP Code 11) is of type UTF8String and contains |
| the name of the filter list for this user. Zero or more Filter-Id |
| AVPs MAY be sent in an authorization answer. |
| |
| Identifying a filter list by name allows the filter to be used on |
| different NASes without regard to filter-list implementation details. |
| However, this AVP is not roaming friendly, as filter naming differs |
| from one service provider to another. |
| |
| In non-RADIUS environments, it is RECOMMENDED that the NAS-Filter- |
| Rule AVP be used instead. |
| */ |
| struct dict_avp_data data = { |
| 11, /* Code */ |
| 0, /* Vendor */ |
| "Filter-Id", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL); |
| } |
| |
| /* Configuration-Token */ |
| { |
| /* |
| The Configuration-Token AVP (AVP Code 78) is of type OctetString and |
| is sent by a Diameter Server to a Diameter Proxy Agent or Translation |
| Agent in an AA-Answer command to indicate a type of user profile to |
| be used. It should not be sent to a Diameter Client (NAS). |
| |
| The format of the Data field of this AVP is site specific. |
| */ |
| struct dict_avp_data data = { |
| 78, /* Code */ |
| 0, /* Vendor */ |
| "Configuration-Token", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /* QoS-Filter-Rule */ |
| { |
| /* |
| The QoS-Filter-Rule AVP (AVP Code 407) is of type QoSFilterRule and |
| provides QoS filter rules that need to be configured on the NAS for |
| the user. One or more such AVPs MAY be present in an authorization |
| response. |
| */ |
| struct dict_avp_data data = { |
| 407, /* Code */ |
| 0, /* Vendor */ |
| "QoS-Filter-Rule", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , QoSFilterRule_type, NULL); |
| } |
| |
| /*** Framed Access Authorization AVPs ***/ |
| |
| /* Framed-Protocol */ |
| { |
| /* |
| The Framed-Protocol AVP (AVP Code 7) is of type Enumerated and |
| contains the framing to be used for framed access. This AVP MAY be |
| present in both requests and responses. The supported values are |
| listed in [RADIUSTypes]. |
| |
| Sub-registry: Values for RADIUS Attribute 7, Framed-Protocol |
| Reference: [RFC2865] |
| */ |
| struct dict_object *type; |
| struct dict_type_data tdata = { AVP_TYPE_UNSIGNED32, "Enumerated(Framed-Protocol)" , NULL, NULL}; |
| struct dict_enumval_data tvals[] = { |
| enumval_def_u32( 1, "PPP"), |
| enumval_def_u32( 2, "SLIP"), |
| enumval_def_u32( 3, "AppleTalk Remote Access Protocol (ARAP)"), |
| enumval_def_u32( 4, "Gandalf proprietary SingleLink/MultiLink protocol"), |
| enumval_def_u32( 5, "Xylogics proprietary IPX/SLIP"), |
| enumval_def_u32( 6, "X.75 Synchronous"), |
| enumval_def_u32( 7, "GPRS PDP Context [Moore]") |
| }; |
| struct dict_avp_data data = { |
| 7, /* Code */ |
| 0, /* Vendor */ |
| "Framed-Protocol", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_UNSIGNED32 /* base type of data */ |
| }; |
| int i; |
| /* Create the Enumerated type, enumerated values, and the AVP */ |
| CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type); |
| for (i = 0; i < sizeof(tvals) / sizeof(tvals[0]); i++) { |
| CHECK_dict_new( DICT_ENUMVAL, &tvals[i], type, NULL); |
| } |
| CHECK_dict_new( DICT_AVP, &data , type, NULL); |
| } |
| |
| /* Framed-Routing */ |
| { |
| /* |
| The Framed-Routing AVP (AVP Code 10) is of type Enumerated and |
| contains the routing method for the user when the user is a router to |
| a network. This AVP SHOULD only be present in authorization |
| responses. The supported values are listed in [RADIUSTypes]. |
| |
| Sub-registry: Values for RADIUS Attribute 10, Framed-Routing |
| Reference: [RFC2865] |
| */ |
| struct dict_object *type; |
| struct dict_type_data tdata = { AVP_TYPE_UNSIGNED32, "Enumerated(Framed-Routing)" , NULL, NULL}; |
| struct dict_enumval_data tvals[] = { |
| enumval_def_u32( 0, "None"), |
| enumval_def_u32( 1, "Send routing packets"), |
| enumval_def_u32( 2, "Listen for routing packets"), |
| enumval_def_u32( 3, "Send and Listen") |
| }; |
| struct dict_avp_data data = { |
| 10, /* Code */ |
| 0, /* Vendor */ |
| "Framed-Routing", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_UNSIGNED32 /* base type of data */ |
| }; |
| int i; |
| /* Create the Enumerated type, enumerated values, and the AVP */ |
| CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type); |
| for (i = 0; i < sizeof(tvals) / sizeof(tvals[0]); i++) { |
| CHECK_dict_new( DICT_ENUMVAL, &tvals[i], type, NULL); |
| } |
| CHECK_dict_new( DICT_AVP, &data , type, NULL); |
| } |
| |
| /* Framed-MTU */ |
| { |
| /* |
| The Framed-MTU AVP (AVP Code 12) is of type Unsigned32 and contains |
| the Maximum Transmission Unit to be configured for the user, when it |
| is not negotiated by some other means (such as PPP). This AVP SHOULD |
| only be present in authorization responses. The MTU value MUST be in |
| the range from 64 to 65535. |
| */ |
| struct dict_avp_data data = { |
| 12, /* Code */ |
| 0, /* Vendor */ |
| "Framed-MTU", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_UNSIGNED32 /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /* Framed-Compression */ |
| { |
| /* |
| The Framed-Compression AVP (AVP Code 13) is of type Enumerated and |
| contains the compression protocol to be used for the link. It MAY be |
| used in an authorization request as a hint to the server that a |
| specific compression type is desired, but the server is not required |
| to honor the hint in the corresponding response. |
| |
| More than one compression protocol AVP MAY be sent. The NAS is |
| responsible for applying the proper compression protocol to the |
| appropriate link traffic. |
| |
| The supported values are listed in [RADIUSTypes]. |
| Sub-registry: Values for RADIUS Attribute 13, Framed-Compression |
| Reference: [RFC2865] |
| */ |
| struct dict_object *type; |
| struct dict_type_data tdata = { AVP_TYPE_UNSIGNED32, "Enumerated(Framed-Compression)" , NULL, NULL}; |
| struct dict_enumval_data tvals[] = { |
| enumval_def_u32( 0, "None"), |
| enumval_def_u32( 1, "VJ TCP/IP header compression"), |
| enumval_def_u32( 2, "IPX header compression"), |
| enumval_def_u32( 3, "Stac-LZS compression") |
| }; |
| struct dict_avp_data data = { |
| 13, /* Code */ |
| 0, /* Vendor */ |
| "Framed-Compression", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_UNSIGNED32 /* base type of data */ |
| }; |
| int i; |
| /* Create the Enumerated type, enumerated values, and the AVP */ |
| CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type); |
| for (i = 0; i < sizeof(tvals) / sizeof(tvals[0]); i++) { |
| CHECK_dict_new( DICT_ENUMVAL, &tvals[i], type, NULL); |
| } |
| CHECK_dict_new( DICT_AVP, &data , type, NULL); |
| } |
| |
| /*** IP Access Authorization AVPs ***/ |
| |
| /* Framed-IP-Address */ |
| { |
| /* |
| The Framed-IP-Address AVP (AVP Code 8) [RADIUS] is of type |
| OctetString and contains an IPv4 address of the type specified in the |
| attribute value to be configured for the user. It MAY be used in an |
| authorization request as a hint to the server that a specific address |
| is desired, but the server is not required to honor the hint in the |
| corresponding response. |
| |
| Two values have special significance: 0xFFFFFFFF and 0xFFFFFFFE. The |
| value 0xFFFFFFFF indicates that the NAS should allow the user to |
| select an address (i.e., negotiated). The value 0xFFFFFFFE indicates |
| that the NAS should select an address for the user (e.g., assigned |
| from a pool of addresses kept by the NAS). |
| */ |
| struct dict_avp_data data = { |
| 8, /* Code */ |
| 0, /* Vendor */ |
| "Framed-IP-Address", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /* Framed-IP-Netmask */ |
| { |
| /* |
| The Framed-IP-Netmask AVP (AVP Code 9) is of type OctetString and |
| contains the four octets of the IPv4 netmask to be configured for the |
| user when the user is a router to a network. It MAY be used in an |
| authorization request as a hint to the server that a specific netmask |
| is desired, but the server is not required to honor the hint in the |
| corresponding response. This AVP MUST be present in a response if |
| the request included this AVP with a value of 0xFFFFFFFF. |
| */ |
| struct dict_avp_data data = { |
| 9, /* Code */ |
| 0, /* Vendor */ |
| "Framed-IP-Netmask", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /* Framed-Route */ |
| { |
| /* |
| The Framed-Route AVP (AVP Code 22) is of type UTF8String and contains |
| the ASCII routing information to be configured for the user on the |
| NAS. Zero or more of these AVPs MAY be present in an authorization |
| response. |
| |
| The string MUST contain a destination prefix in dotted quad form |
| optionally followed by a slash and a decimal length specifier stating |
| how many high-order bits of the prefix should be used. This is |
| followed by a space, a gateway address in dotted quad form, a space, |
| and one or more metrics separated by spaces; for example, |
| |
| "192.168.1.0/24 192.168.1.1 1". |
| |
| The length specifier may be omitted, in which case it should default |
| to 8 bits for class A prefixes, to 16 bits for class B prefixes, and |
| to 24 bits for class C prefixes; for example, |
| |
| "192.168.1.0 192.168.1.1 1". |
| |
| Whenever the gateway address is specified as "0.0.0.0" the IP address |
| of the user SHOULD be used as the gateway address. |
| */ |
| struct dict_avp_data data = { |
| 22, /* Code */ |
| 0, /* Vendor */ |
| "Framed-Route", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL); |
| } |
| |
| /* Framed-Pool */ |
| { |
| /* |
| The Framed-Pool AVP (AVP Code 88) is of type OctetString and contains |
| the name of an assigned address pool that SHOULD be used to assign an |
| address for the user. If a NAS does not support multiple address |
| pools, the NAS SHOULD ignore this AVP. Address pools are usually |
| used for IP addresses but can be used for other protocols if the NAS |
| supports pools for those protocols. |
| |
| Although specified as type OctetString for compatibility with RADIUS |
| [RADIUSExt], the encoding of the Data field SHOULD also conform to |
| the rules for the UTF8String Data Format. |
| */ |
| struct dict_avp_data data = { |
| 88, /* Code */ |
| 0, /* Vendor */ |
| "Framed-Pool", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /* Framed-Interface-Id */ |
| { |
| /* |
| The Framed-Interface-Id AVP (AVP Code 96) is of type Unsigned64 and |
| contains the IPv6 interface identifier to be configured for the user. |
| It MAY be used in authorization requests as a hint to the server that |
| a specific interface id is desired, but the server is not required to |
| honor the hint in the corresponding response. |
| */ |
| struct dict_avp_data data = { |
| 96, /* Code */ |
| 0, /* Vendor */ |
| "Framed-Interface-Id", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_UNSIGNED64 /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /* Framed-IPv6-Prefix */ |
| { |
| /* |
| The Framed-IPv6-Prefix AVP (AVP Code 97) is of type OctetString and |
| contains the IPv6 prefix to be configured for the user. One or more |
| AVPs MAY be used in authorization requests as a hint to the server |
| that specific IPv6 prefixes are desired, but the server is not |
| required to honor the hint in the corresponding response. |
| */ |
| struct dict_avp_data data = { |
| 97, /* Code */ |
| 0, /* Vendor */ |
| "Framed-IPv6-Prefix", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /* Framed-IPv6-Route */ |
| { |
| /* |
| The Framed-IPv6-Route AVP (AVP Code 99) is of type UTF8String and |
| contains the ASCII routing information to be configured for the user |
| on the NAS. Zero or more of these AVPs MAY be present in an |
| authorization response. |
| |
| The string MUST contain an IPv6 address prefix followed by a slash |
| and a decimal length specifier stating how many high order bits of |
| the prefix should be used. This is followed by a space, a gateway |
| address in hexadecimal notation, a space, and one or more metrics |
| separated by spaces; for example, |
| |
| "2000:0:0:106::/64 2000::106:a00:20ff:fe99:a998 1". |
| |
| Whenever the gateway address is the IPv6 unspecified address, the IP |
| address of the user SHOULD be used as the gateway address, such as |
| in: |
| |
| "2000:0:0:106::/64 :: 1". |
| */ |
| struct dict_avp_data data = { |
| 99, /* Code */ |
| 0, /* Vendor */ |
| "Framed-IPv6-Route", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL); |
| } |
| |
| /* Framed-IPv6-Pool */ |
| { |
| /* |
| The Framed-IPv6-Pool AVP (AVP Code 100) is of type OctetString and |
| contains the name of an assigned pool that SHOULD be used to assign |
| an IPv6 prefix for the user. If the access device does not support |
| multiple prefix pools, it MUST ignore this AVP. |
| |
| Although specified as type OctetString for compatibility with RADIUS |
| [RADIUSIPv6], the encoding of the Data field SHOULD also conform to |
| the rules for the UTF8String Data Format. |
| */ |
| struct dict_avp_data data = { |
| 100, /* Code */ |
| 0, /* Vendor */ |
| "Framed-IPv6-Pool", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /*** IPX Access ***/ |
| |
| /* Framed-IPX-Network */ |
| { |
| /* |
| The Framed-IPX-Network AVP (AVP Code 23) is of type Unsigned32 and |
| contains the IPX Network number to be configured for the user. It |
| MAY be used in an authorization request as a hint to the server that |
| a specific address is desired, but the server is not required to |
| honor the hint in the corresponding response. |
| |
| Two addresses have special significance: 0xFFFFFFFF and 0xFFFFFFFE. |
| The value 0xFFFFFFFF indicates that the NAS should allow the user to |
| select an address (i.e., Negotiated). The value 0xFFFFFFFE indicates |
| that the NAS should select an address for the user (e.g., assign it |
| from a pool of one or more IPX networks kept by the NAS). |
| */ |
| struct dict_avp_data data = { |
| 23, /* Code */ |
| 0, /* Vendor */ |
| "Framed-IPX-Network", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_UNSIGNED32 /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /*** AppleTalk Network Access ***/ |
| |
| /* Framed-AppleTalk-Link */ |
| { |
| /* |
| The Framed-AppleTalk-Link AVP (AVP Code 37) is of type Unsigned32 and |
| contains the AppleTalk network number that should be used for the |
| serial link to the user, which is another AppleTalk router. This AVP |
| MUST only be present in an authorization response and is never used |
| when the user is not another router. |
| |
| Despite the size of the field, values range from 0 to 65,535. The |
| special value of 0 indicates an unnumbered serial link. A value of 1 |
| to 65,535 means that the serial line between the NAS and the user |
| should be assigned that value as an AppleTalk network number. |
| */ |
| struct dict_avp_data data = { |
| 37, /* Code */ |
| 0, /* Vendor */ |
| "Framed-AppleTalk-Link", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_UNSIGNED32 /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /* Framed-AppleTalk-Network */ |
| { |
| /* |
| The Framed-AppleTalk-Network AVP (AVP Code 38) is of type Unsigned32 |
| and contains the AppleTalk Network number that the NAS should probe |
| to allocate an AppleTalk node for the user. This AVP MUST only be |
| present in an authorization response and is never used when the user |
| is not another router. Multiple instances of this AVP indicate that |
| the NAS may probe, using any of the network numbers specified. |
| |
| Despite the size of the field, values range from 0 to 65,535. The |
| special value 0 indicates that the NAS should assign a network for |
| the user, using its default cable range. A value between 1 and |
| 65,535 (inclusive) indicates to the AppleTalk Network that the NAS |
| should probe to find an address for the user. |
| */ |
| struct dict_avp_data data = { |
| 38, /* Code */ |
| 0, /* Vendor */ |
| "Framed-AppleTalk-Network", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_UNSIGNED32 /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /* Framed-AppleTalk-Zone */ |
| { |
| /* |
| The Framed-AppleTalk-Zone AVP (AVP Code 39) is of type OctetString |
| and contains the AppleTalk Default Zone to be used for this user. |
| This AVP MUST only be present in an authorization response. Multiple |
| instances of this AVP in the same message are not allowed. |
| |
| The codification of this field's allowed range is outside the scope |
| of this specification. |
| */ |
| struct dict_avp_data data = { |
| 39, /* Code */ |
| 0, /* Vendor */ |
| "Framed-AppleTalk-Zone", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /*** AppleTalk Remote Access [RFC2869] ***/ |
| |
| /* ARAP-Features */ |
| { |
| /* |
| The ARAP-Features AVP (AVP Code 71) is of type OctetString and MAY be |
| present in the AA-Accept message if the Framed-Protocol AVP is set to |
| the value of ARAP. See [RADIUSExt] for more information about the |
| format of this AVP. |
| */ |
| struct dict_avp_data data = { |
| 71, /* Code */ |
| 0, /* Vendor */ |
| "ARAP-Features", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /* ARAP-Zone-Access */ |
| { |
| /* |
| The ARAP-Zone-Access AVP (AVP Code 72) is of type Enumerated and MAY |
| be present in the AA-Accept message if the Framed-Protocol AVP is set |
| to the value of ARAP. |
| |
| The supported values are listed in [RADIUSTypes] and defined in |
| [RADIUSExt]. |
| Sub-registry: Values for RADIUS Attribute 72, ARAP-Zone-Access |
| Reference: [RFC2869] |
| */ |
| struct dict_object *type; |
| struct dict_type_data tdata = { AVP_TYPE_UNSIGNED32, "Enumerated(ARAP-Zone-Access)" , NULL, NULL}; |
| struct dict_enumval_data tvals[] = { |
| enumval_def_u32( 1, "Only allow access to default zone [RFC2869]"), |
| enumval_def_u32( 2, "Use zone filter inclusively [RFC2869]"), |
| enumval_def_u32( 3, "Not used [RFC2869]"), |
| enumval_def_u32( 4, "Use zone filter exclusively [RFC2869]") |
| }; |
| struct dict_avp_data data = { |
| 72, /* Code */ |
| 0, /* Vendor */ |
| "ARAP-Zone-Access", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_UNSIGNED32 /* base type of data */ |
| }; |
| int i; |
| /* Create the Enumerated type, enumerated values, and the AVP */ |
| CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type); |
| for (i = 0; i < sizeof(tvals) / sizeof(tvals[0]); i++) { |
| CHECK_dict_new( DICT_ENUMVAL, &tvals[i], type, NULL); |
| } |
| CHECK_dict_new( DICT_AVP, &data , type, NULL); |
| } |
| |
| /*** Non-Framed Access Authorization AVPs ***/ |
| |
| /* Login-IP-Host */ |
| { |
| /* |
| The Login-IP-Host AVP (AVP Code 14) [RADIUS] is of type OctetString |
| and contains the IPv4 address of a host with which to connect the |
| user when the Login-Service AVP is included. It MAY be used in an |
| AA-Request command as a hint to the Diameter Server that a specific |
| host is desired, but the Diameter Server is not required to honor the |
| hint in the AA-Answer. |
| |
| Two addresses have special significance: all ones and 0. The value |
| of all ones indicates that the NAS SHOULD allow the user to select an |
| address. The value 0 indicates that the NAS SHOULD select a host to |
| connect the user to. |
| */ |
| struct dict_object *type; |
| uint32_t allzeros = 0; |
| uint32_t allones = (uint32_t) -1; |
| struct dict_type_data tdata = { AVP_TYPE_OCTETSTRING, "Enumerated(Login-IP-Host)" , NULL, NULL}; |
| struct dict_enumval_data tvals[] = { |
| enumval_def_os( 4, &allzeros, "(0) NAS selects the host"), |
| enumval_def_os( 4, &allones , "(1) User selects the address") |
| }; |
| struct dict_avp_data data = { |
| 14, /* Code */ |
| 0, /* Vendor */ |
| "Login-IP-Host", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| int i; |
| /* Create the Enumerated type, enumerated values, and the AVP */ |
| CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type); |
| for (i = 0; i < sizeof(tvals) / sizeof(tvals[0]); i++) { |
| CHECK_dict_new( DICT_ENUMVAL, &tvals[i], type, NULL); |
| } |
| CHECK_dict_new( DICT_AVP, &data , type, NULL); |
| } |
| |
| /* Login-IPv6-Host */ |
| { |
| /* |
| The Login-IPv6-Host AVP (AVP Code 98) [RADIUSIPv6] is of type |
| OctetString and contains the IPv6 address of a host with which to |
| connect the user when the Login-Service AVP is included. It MAY be |
| used in an AA-Request command as a hint to the Diameter Server that a |
| specific host is desired, but the Diameter Server is not required to |
| honor the hint in the AA-Answer. |
| |
| Two addresses have special significance: |
| |
| 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF and 0. The value |
| 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF indicates that the NAS SHOULD |
| allow the user to select an address. The value 0 indicates that the |
| NAS SHOULD select a host to connect the user to. |
| |
| */ |
| struct dict_object *type; |
| unsigned char allzeros[16]; |
| unsigned char allones[16]; |
| struct dict_type_data tdata = { AVP_TYPE_OCTETSTRING, "Enumerated(Login-IPv6-Host)" , NULL, NULL}; |
| struct dict_enumval_data tvals[] = { |
| enumval_def_os( 16, &allzeros, "(0) NAS selects the host"), |
| enumval_def_os( 16, &allones , "(1) User selects the address") |
| }; |
| struct dict_avp_data data = { |
| 98, /* Code */ |
| 0, /* Vendor */ |
| "Login-IPv6-Host", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| int i; |
| memset(allzeros, 0, sizeof(allzeros)); |
| memset(allones, 0xff, sizeof(allones)); |
| /* Create the Enumerated type, enumerated values, and the AVP */ |
| CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type); |
| for (i = 0; i < sizeof(tvals) / sizeof(tvals[0]); i++) { |
| CHECK_dict_new( DICT_ENUMVAL, &tvals[i], type, NULL); |
| } |
| CHECK_dict_new( DICT_AVP, &data , type, NULL); |
| } |
| |
| /* Login-Service */ |
| { |
| /* |
| The Login-Service AVP (AVP Code 15) is of type Enumerated and |
| contains the service that should be used to connect the user to the |
| login host. This AVP SHOULD only be present in authorization |
| responses. |
| |
| The supported values are listed in [RADIUSTypes]. |
| Sub-registry: Values for RADIUS Attribute 15, Login-Service |
| Reference: [RFC2865] |
| */ |
| struct dict_object *type; |
| struct dict_type_data tdata = { AVP_TYPE_UNSIGNED32, "Enumerated(Login-Service)" , NULL, NULL}; |
| struct dict_enumval_data tvals[] = { |
| enumval_def_u32( 0, "Telnet"), |
| enumval_def_u32( 1, "Rlogin"), |
| enumval_def_u32( 2, "TCP Clear"), |
| enumval_def_u32( 3, "PortMaster (proprietary)"), |
| enumval_def_u32( 4, "LAT"), |
| enumval_def_u32( 5, "X25-PAD"), |
| enumval_def_u32( 6, "X25-T3POS"), |
| enumval_def_u32( 8, "TCP Clear Quiet (suppresses any NAS-generated connect string)") |
| }; |
| struct dict_avp_data data = { |
| 15, /* Code */ |
| 0, /* Vendor */ |
| "Login-Service", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_UNSIGNED32 /* base type of data */ |
| }; |
| int i; |
| /* Create the Enumerated type, enumerated values, and the AVP */ |
| CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type); |
| for (i = 0; i < sizeof(tvals) / sizeof(tvals[0]); i++) { |
| CHECK_dict_new( DICT_ENUMVAL, &tvals[i], type, NULL); |
| } |
| CHECK_dict_new( DICT_AVP, &data , type, NULL); |
| } |
| |
| /*** TCP Services ***/ |
| |
| /* Login-TCP-Port */ |
| { |
| /* |
| The Login-TCP-Port AVP (AVP Code 16) is of type Unsigned32 and |
| contains the TCP port with which the user is to be connected when the |
| Login-Service AVP is also present. This AVP SHOULD only be present |
| in authorization responses. The value MUST NOT be greater than |
| 65,535. |
| */ |
| struct dict_avp_data data = { |
| 16, /* Code */ |
| 0, /* Vendor */ |
| "Login-TCP-Port", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_UNSIGNED32 /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /*** LAT Services ***/ |
| |
| /* Login-LAT-Service */ |
| { |
| /* |
| The Login-LAT-Service AVP (AVP Code 34) is of type OctetString and |
| contains the system with which the user is to be connected by LAT. |
| It MAY be used in an authorization request as a hint to the server |
| that a specific service is desired, but the server is not required to |
| honor the hint in the corresponding response. This AVP MUST only be |
| present in the response if the Login-Service AVP states that LAT is |
| desired. |
| |
| Administrators use this service attribute when dealing with clustered |
| systems, such as a VAX or Alpha cluster. In these environments, |
| several different time-sharing hosts share the same resources (disks, |
| printers, etc.), and administrators often configure each host to |
| offer access (service) to each of the shared resources. In this |
| case, each host in the cluster advertises its services through LAT |
| broadcasts. |
| |
| Sophisticated users often know which service providers (machines) are |
| faster and tend to use a node name when initiating a LAT connection. |
| Some administrators want particular users to use certain machines as |
| a primitive form of load balancing (although LAT knows how to do load |
| balancing itself). |
| |
| The String field contains the identity of the LAT service to use. |
| The LAT Architecture allows this string to contain $ (dollar), - |
| (hyphen), . (period), _ (underscore), numerics, upper- and lowercase |
| alphabetics, and the ISO Latin-1 character set extension [ISOLatin]. |
| All LAT string comparisons are case insensitive. |
| */ |
| struct dict_avp_data data = { |
| 34, /* Code */ |
| 0, /* Vendor */ |
| "Login-LAT-Service", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /* Login-LAT-Node */ |
| { |
| /* |
| The Login-LAT-Node AVP (AVP Code 35) is of type OctetString and |
| contains the Node with which the user is to be automatically |
| connected by LAT. It MAY be used in an authorization request as a |
| hint to the server that a specific LAT node is desired, but the |
| server is not required to honor the hint in the corresponding |
| response. This AVP MUST only be present in a response if the Login- |
| Service-Type AVP is set to LAT. |
| |
| The String field contains the identity of the LAT service to use. |
| The LAT Architecture allows this string to contain $ (dollar), - |
| (hyphen), . (period), _ (underscore), numerics, upper- and lowercase |
| alphabetics, and the ISO Latin-1 character set extension [ISOLatin]. |
| All LAT string comparisons are case insensitive. |
| */ |
| struct dict_avp_data data = { |
| 35, /* Code */ |
| 0, /* Vendor */ |
| "Login-LAT-Node", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /* Login-LAT-Group */ |
| { |
| /* |
| The Login-LAT-Group AVP (AVP Code 36) is of type OctetString and |
| contains a string identifying the LAT group codes this user is |
| authorized to use. It MAY be used in an authorization request as a |
| hint to the server that a specific group is desired, but the server |
| is not required to honor the hint in the corresponding response. |
| This AVP MUST only be present in a response if the Login-Service-Type |
| AVP is set to LAT. |
| |
| LAT supports 256 different group codes, which LAT uses as a form of |
| access rights. LAT encodes the group codes as a 256-bit bitmap. |
| |
| Administrators can assign one or more of the group code bits at the |
| LAT service provider; it will only accept LAT connections that have |
| these group codes set in the bitmap. The administrators assign a |
| bitmap of authorized group codes to each user. LAT gets these from |
| the operating system and uses them in its requests to the service |
| providers. |
| |
| The codification of the range of allowed usage of this field is |
| outside the scope of this specification. |
| */ |
| struct dict_avp_data data = { |
| 36, /* Code */ |
| 0, /* Vendor */ |
| "Login-LAT-Group", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /* Login-LAT-Port */ |
| { |
| /* |
| The Login-LAT-Port AVP (AVP Code 63) is of type OctetString and |
| contains the Port with which the user is to be connected by LAT. It |
| MAY be used in an authorization request as a hint to the server that |
| a specific port is desired, but the server is not required to honor |
| the hint in the corresponding response. This AVP MUST only be |
| present in a response if the Login-Service-Type AVP is set to LAT. |
| |
| The String field contains the identity of the LAT service to use. |
| The LAT Architecture allows this string to contain $ (dollar), - |
| (hyphen), . (period), _ (underscore), numerics, upper- and lower-case |
| alphabetics, and the ISO Latin-1 character set extension [ISOLatin]. |
| All LAT string comparisons are case insensitive. |
| */ |
| struct dict_avp_data data = { |
| 63, /* Code */ |
| 0, /* Vendor */ |
| "Login-LAT-Port", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /******************************** |
| * NAS Tunneling AVPs * |
| ********************************/ |
| /* Tunnel-Type */ |
| { |
| /* |
| The Tunnel-Type AVP (AVP Code 64) is of type Enumerated and contains |
| the tunneling protocol(s) to be used (in the case of a tunnel |
| initiator) or in use (in the case of a tunnel terminator). It MAY be |
| used in an authorization request as a hint to the server that a |
| specific tunnel type is desired, but the server is not required to |
| honor the hint in the corresponding response. |
| |
| The Tunnel-Type AVP SHOULD also be included in Accounting-Request |
| messages. |
| |
| A tunnel initiator is not required to implement any of these tunnel |
| types. If a tunnel initiator receives a response that contains only |
| unknown or unsupported Tunnel-Types, the tunnel initiator MUST behave |
| as though a response were received with the Result-Code indicating a |
| failure. |
| |
| The supported values are listed in [RADIUSTypes]. |
| Sub-registry: Values for RADIUS Attribute 64, Tunnel-Type |
| Reference: [RFC2868] |
| */ |
| struct dict_object *type; |
| struct dict_type_data tdata = { AVP_TYPE_UNSIGNED32, "Enumerated(Tunnel-Type)" , NULL, NULL}; |
| struct dict_enumval_data tvals[] = { |
| enumval_def_u32( 1, "Point-to-Point Tunneling Protocol (PPTP) [RFC2868]"), |
| enumval_def_u32( 2, "Layer Two Forwarding (L2F) [RFC2868]"), |
| enumval_def_u32( 3, "Layer Two Tunneling Protocol (L2TP) [RFC2868]"), |
| enumval_def_u32( 4, "Ascend Tunnel Management Protocol (ATMP) [RFC2868]"), |
| enumval_def_u32( 5, "Virtual Tunneling Protocol (VTP) [RFC2868]"), |
| enumval_def_u32( 6, "IP Authentication Header in the Tunnel-mode (AH) [RFC2868]"), |
| enumval_def_u32( 7, "IP-in-IP Encapsulation (IP-IP) [RFC2868]"), |
| enumval_def_u32( 8, "Minimal IP-in-IP Encapsulation (MIN-IP-IP) [RFC2868]"), |
| enumval_def_u32( 9, "IP Encapsulating Security Payload in the Tunnel-mode (ESP) [RFC2868]"), |
| enumval_def_u32(10, "Generic Route Encapsulation (GRE) [RFC2868]"), |
| enumval_def_u32(11, "Bay Dial Virtual Services (DVS) [RFC2868]"), |
| enumval_def_u32(12, "IP-in-IP Tunneling [RFC2868]"), |
| enumval_def_u32(13, "Virtual LANs (VLAN) [RFC3580]") |
| }; |
| struct dict_avp_data adata = { |
| 64, /* Code */ |
| 0, /* Vendor */ |
| "Tunnel-Type", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_UNSIGNED32 /* base type of data */ |
| }; |
| int i; |
| CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type); |
| for (i = 0; i < sizeof(tvals) / sizeof(tvals[0]); i++) { |
| CHECK_dict_new( DICT_ENUMVAL, &tvals[i], type, NULL); |
| } |
| CHECK_dict_new( DICT_AVP, &adata , type, NULL); |
| } |
| |
| /* Tunnel-Medium-Type */ |
| { |
| /* |
| The Tunnel-Medium-Type AVP (AVP Code 65) is of type Enumerated and |
| contains the transport medium to use when creating a tunnel for |
| protocols (such as L2TP) that can operate over multiple transports. |
| It MAY be used in an authorization request as a hint to the server |
| that a specific medium is desired, but the server is not required to |
| honor the hint in the corresponding response. |
| |
| The supported values are listed in [RADIUSTypes]. |
| Sub-registry: Values for RADIUS Attribute 65, Tunnel-Medium-Type |
| Reference: [RFC2868] |
| */ |
| struct dict_object *type; |
| struct dict_type_data tdata = { AVP_TYPE_UNSIGNED32, "Enumerated(Tunnel-Medium-Type)" , NULL, NULL}; |
| struct dict_enumval_data tvals[] = { |
| enumval_def_u32( 1, "IPv4 (IP version 4) [RFC2868]"), |
| enumval_def_u32( 2, "IPv6 (IP version 6) [RFC2868]"), |
| enumval_def_u32( 3, "NSAP [RFC2868]"), |
| enumval_def_u32( 4, "HDLC (8-bit multidrop) [RFC2868]"), |
| enumval_def_u32( 5, "BBN 1822 [RFC2868]"), |
| enumval_def_u32( 6, "802 (includes all 802 media plus Ethernet \"canonical format\") [RFC2868]"), |
| enumval_def_u32( 7, "E.163 (POTS) [RFC2868]"), |
| enumval_def_u32( 8, "E.164 (SMDS, Frame Relay, ATM) [RFC2868]"), |
| enumval_def_u32( 9, "F.69 (Telex) [RFC2868]"), |
| enumval_def_u32(10, "X.121 (X.25, Frame Relay) [RFC2868]"), |
| enumval_def_u32(11, "IPX [RFC2868]"), |
| enumval_def_u32(12, "Appletalk [RFC2868]"), |
| enumval_def_u32(13, "Decnet IV [RFC2868]"), |
| enumval_def_u32(14, "Banyan Vines [RFC2868]"), |
| enumval_def_u32(15, "E.164 with NSAP format subaddress [RFC2868]") |
| }; |
| struct dict_avp_data adata = { |
| 65, /* Code */ |
| 0, /* Vendor */ |
| "Tunnel-Medium-Type", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_UNSIGNED32 /* base type of data */ |
| }; |
| int i; |
| CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type); |
| for (i = 0; i < sizeof(tvals) / sizeof(tvals[0]); i++) { |
| CHECK_dict_new( DICT_ENUMVAL, &tvals[i], type, NULL); |
| } |
| CHECK_dict_new( DICT_AVP, &adata , type, NULL); |
| } |
| |
| /* Tunnel-Client-Endpoint */ |
| { |
| /* |
| The Tunnel-Client-Endpoint AVP (AVP Code 66) is of type UTF8String |
| and contains the address of the initiator end of the tunnel. It MAY |
| be used in an authorization request as a hint to the server that a |
| specific endpoint is desired, but the server is not required to honor |
| the hint in the corresponding response. |
| |
| This AVP SHOULD be included in the corresponding Accounting-Request |
| messages, in which case it indicates the address from which the |
| tunnel was initiated. This AVP, along with the Tunnel-Server- |
| Endpoint and Session-Id AVP [BASE], MAY be used to provide a globally |
| unique means to identify a tunnel for accounting and auditing |
| purposes. |
| |
| If Tunnel-Medium-Type is IPv4 (1), then this string is either the |
| fully qualified domain name (FQDN) of the tunnel client machine, or a |
| "dotted-decimal" IP address. Implementations MUST support the |
| dotted-decimal format and SHOULD support the FQDN format for IP |
| addresses. |
| |
| If Tunnel-Medium-Type is IPv6 (2), then this string is either the |
| FQDN of the tunnel client machine, or a text representation of the |
| address in either the preferred or alternate form [IPv6Addr]. |
| Conforming implementations MUST support the preferred form and SHOULD |
| support both the alternate text form and the FQDN format for IPv6 |
| addresses. |
| |
| If Tunnel-Medium-Type is neither IPv4 nor IPv6, then this string is a |
| tag referring to configuration data local to the Diameter client that |
| describes the interface or medium-specific client address to use. |
| */ |
| struct dict_avp_data adata = { |
| 66, /* Code */ |
| 0, /* Vendor */ |
| "Tunnel-Client-Endpoint", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &adata , UTF8String_type, NULL); |
| } |
| |
| /* Tunnel-Server-Endpoint */ |
| { |
| /* |
| The Tunnel-Server-Endpoint AVP (AVP Code 67) is of type UTF8String |
| and contains the address of the server end of the tunnel. It MAY be |
| used in an authorization request as a hint to the server that a |
| specific endpoint is desired, but the server is not required to honor |
| the hint in the corresponding response. |
| |
| This AVP SHOULD be included in the corresponding Accounting-Request |
| messages, in which case it indicates the address from which the |
| tunnel was initiated. This AVP, along with the Tunnel-Client- |
| Endpoint and Session-Id AVP [BASE], MAY be used to provide a globally |
| unique means to identify a tunnel for accounting and auditing |
| purposes. |
| |
| If Tunnel-Medium-Type is IPv4 (1), then this string is either the |
| fully qualified domain name (FQDN) of the tunnel server machine, or a |
| "dotted-decimal" IP address. Implementations MUST support the |
| dotted-decimal format and SHOULD support the FQDN format for IP |
| addresses. |
| |
| If Tunnel-Medium-Type is IPv6 (2), then this string is either the |
| FQDN of the tunnel server machine, or a text representation of the |
| address in either the preferred or alternate form [IPv6Addr]. |
| Implementations MUST support the preferred form and SHOULD support |
| both the alternate text form and the FQDN format for IPv6 addresses. |
| |
| If Tunnel-Medium-Type is not IPv4 or IPv6, this string is a tag |
| referring to configuration data local to the Diameter client that |
| describes the interface or medium-specific server address to use. |
| */ |
| struct dict_avp_data adata = { |
| 67, /* Code */ |
| 0, /* Vendor */ |
| "Tunnel-Server-Endpoint", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &adata , UTF8String_type, NULL); |
| } |
| |
| /* Tunnel-Password */ |
| { |
| /* |
| The Tunnel-Password AVP (AVP Code 69) is of type OctetString and may |
| contain a password to be used to authenticate to a remote server. |
| The Tunnel-Password AVP contains sensitive information. This value |
| is not protected in the same manner as RADIUS [RADTunnels]. |
| |
| As required in [BASE], Diameter messages are encrypted by using IPsec |
| or TLS. The Tunnel-Password AVP SHOULD NOT be used in untrusted |
| proxy environments without encrypting it by using end-to-end security |
| techniques, such as CMS Security [DiamCMS]. |
| */ |
| struct dict_avp_data adata = { |
| 69, /* Code */ |
| 0, /* Vendor */ |
| "Tunnel-Password", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &adata , NULL, NULL); |
| } |
| |
| /* Tunnel-Private-Group-Id */ |
| { |
| /* |
| The Tunnel-Private-Group-Id AVP (AVP Code 81) is of type OctetString |
| and contains the group Id for a particular tunneled session. The |
| Tunnel-Private-Group-Id AVP MAY be included in an authorization |
| request if the tunnel initiator can predetermine the group resulting |
| from a particular connection. It SHOULD be included in the |
| authorization response if this tunnel session is to be treated as |
| belonging to a particular private group. Private groups may be used |
| to associate a tunneled session with a particular group of users. |
| For example, it MAY be used to facilitate routing of unregistered IP |
| addresses through a particular interface. This AVP SHOULD be |
| included in the Accounting-Request messages that pertain to the |
| tunneled session. |
| */ |
| struct dict_avp_data adata = { |
| 81, /* Code */ |
| 0, /* Vendor */ |
| "Tunnel-Private-Group-Id", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &adata , NULL, NULL); |
| } |
| |
| /* Tunnel-Assignment-Id */ |
| { |
| /* |
| The Tunnel-Assignment-Id AVP (AVP Code 82) is of type OctetString and |
| is used to indicate to the tunnel initiator the particular tunnel to |
| which a session is to be assigned. Some tunneling protocols, such as |
| [PPTP] and [L2TP], allow for sessions between the same two tunnel |
| endpoints to be multiplexed over the same tunnel and also for a given |
| session to use its own dedicated tunnel. This attribute provides a |
| mechanism for Diameter to inform the tunnel initiator (e.g., PAC, |
| LAC) whether to assign the session to a multiplexed tunnel or to a |
| separate tunnel. Furthermore, it allows for sessions sharing |
| multiplexed tunnels to be assigned to different multiplexed tunnels. |
| |
| A particular tunneling implementation may assign differing |
| characteristics to particular tunnels. For example, different |
| tunnels may be assigned different QoS parameters. Such tunnels may |
| be used to carry either individual or multiple sessions. The |
| Tunnel-Assignment-Id attribute thus allows the Diameter server to |
| indicate that a particular session is to be assigned to a tunnel |
| providing an appropriate level of service. It is expected that any |
| QoS-related Diameter tunneling attributes defined in the future |
| accompanying this one will be associated by the tunnel initiator with |
| the Id given by this attribute. In the meantime, any semantic given |
| to a particular Id string is a matter left to local configuration in |
| the tunnel initiator. |
| |
| The Tunnel-Assignment-Id AVP is of significance only to Diameter and |
| the tunnel initiator. The Id it specifies is only intended to be of |
| local use to Diameter and the tunnel initiator. The Id assigned by |
| the tunnel initiator is not conveyed to the tunnel peer. |
| |
| This attribute MAY be included in authorization responses. The |
| tunnel initiator receiving this attribute MAY choose to ignore it and |
| to assign the session to an arbitrary multiplexed or non-multiplexed |
| tunnel between the desired endpoints. This AVP SHOULD also be |
| included in the Accounting-Request messages pertaining to the |
| tunneled session. |
| |
| If a tunnel initiator supports the Tunnel-Assignment-Id AVP, then it |
| should assign a session to a tunnel in the following manner: |
| |
| - If this AVP is present and a tunnel exists between the |
| specified endpoints with the specified Id, then the session |
| should be assigned to that tunnel. |
| |
| - If this AVP is present and no tunnel exists between the |
| specified endpoints with the specified Id, then a new tunnel |
| should be established for the session and the specified Id |
| should be associated with the new tunnel. |
| |
| - If this AVP is not present, then the session is assigned to an |
| unnamed tunnel. If an unnamed tunnel does not yet exist |
| between the specified endpoints, then it is established and |
| used for this session and for subsequent ones established |
| without the Tunnel-Assignment-Id attribute. A tunnel initiator |
| MUST NOT assign a session for which a Tunnel-Assignment-Id AVP |
| was not specified to a named tunnel (i.e., one that was |
| initiated by a session specifying this AVP). |
| |
| Note that the same Id may be used to name different tunnels if these |
| tunnels are between different endpoints. |
| |
| */ |
| struct dict_avp_data adata = { |
| 82, /* Code */ |
| 0, /* Vendor */ |
| "Tunnel-Assignment-Id", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &adata , NULL, NULL); |
| } |
| |
| /* Tunnel-Preference */ |
| { |
| /* |
| The Tunnel-Preference AVP (AVP Code 83) is of type Unsigned32 and is |
| used to identify the relative preference assigned to each tunnel when |
| more than one set of tunneling AVPs is returned within separate |
| Grouped-AVP AVPs. It MAY be used in an authorization request as a |
| hint to the server that a specific preference is desired, but the |
| server is not required to honor the hint in the corresponding |
| response. |
| |
| For example, suppose that AVPs describing two tunnels are returned by |
| the server, one with a Tunnel-Type of PPTP and the other with a |
| Tunnel-Type of L2TP. If the tunnel initiator supports only one of |
| the Tunnel-Types returned, it will initiate a tunnel of that type. |
| If, however, it supports both tunnel protocols, it SHOULD use the |
| value of the Tunnel-Preference AVP to decide which tunnel should be |
| started. The tunnel with the lowest numerical value in the Value |
| field of this AVP SHOULD be given the highest preference. The values |
| assigned to two or more instances of the Tunnel-Preference AVP within |
| a given authorization response MAY be identical. In this case, the |
| tunnel initiator SHOULD use locally configured metrics to decide |
| which set of AVPs to use. |
| */ |
| struct dict_avp_data adata = { |
| 83, /* Code */ |
| 0, /* Vendor */ |
| "Tunnel-Preference", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_UNSIGNED32 /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &adata , NULL, NULL); |
| } |
| |
| /* Tunnel-Client-Auth-Id */ |
| { |
| /* |
| The Tunnel-Client-Auth-Id AVP (AVP Code 90) is of type UTF8String and |
| specifies the name used by the tunnel initiator during the |
| authentication phase of tunnel establishment. It MAY be used in an |
| authorization request as a hint to the server that a specific |
| preference is desired, but the server is not required to honor the |
| hint in the corresponding response. This AVP MUST be present in the |
| authorization response if an authentication name other than the |
| default is desired. This AVP SHOULD be included in the Accounting- |
| Request messages pertaining to the tunneled session. |
| */ |
| struct dict_avp_data adata = { |
| 90, /* Code */ |
| 0, /* Vendor */ |
| "Tunnel-Client-Auth-Id", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &adata , UTF8String_type, NULL); |
| } |
| |
| /* Tunnel-Server-Auth-Id */ |
| { |
| /* |
| The Tunnel-Server-Auth-Id AVP (AVP Code 91) is of type UTF8String and |
| specifies the name used by the tunnel terminator during the |
| authentication phase of tunnel establishment. It MAY be used in an |
| authorization request as a hint to the server that a specific |
| preference is desired, but the server is not required to honor the |
| hint in the corresponding response. This AVP MUST be present in the |
| authorization response if an authentication name other than the |
| default is desired. This AVP SHOULD be included in the Accounting- |
| Request messages pertaining to the tunneled session. |
| */ |
| struct dict_avp_data adata = { |
| 91, /* Code */ |
| 0, /* Vendor */ |
| "Tunnel-Server-Auth-Id", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &adata , UTF8String_type, NULL); |
| } |
| |
| /* Tunneling */ |
| { |
| /* |
| The Tunneling AVP (AVP Code 401) is of type Grouped and contains the |
| following AVPs, used to describe a compulsory tunnel service: |
| [RADTunnels], [RADTunlAcct]. Its data field has the following ABNF |
| grammar: |
| |
| Tunneling ::= < AVP Header: 401 > |
| { Tunnel-Type } |
| { Tunnel-Medium-Type } |
| { Tunnel-Client-Endpoint } |
| { Tunnel-Server-Endpoint } |
| [ Tunnel-Preference ] |
| [ Tunnel-Client-Auth-Id ] |
| [ Tunnel-Server-Auth-Id ] |
| [ Tunnel-Assignment-Id ] |
| [ Tunnel-Password ] |
| [ Tunnel-Private-Group-Id ] |
| */ |
| struct dict_object * avp; |
| struct dict_avp_data data = { |
| 401, /* Code */ |
| 0, /* Vendor */ |
| "Tunneling", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_GROUPED /* base type of data */ |
| }; |
| struct local_rules_definition rules[] = |
| { { "Tunnel-Type", RULE_REQUIRED, -1, 1 } |
| ,{ "Tunnel-Medium-Type", RULE_OPTIONAL, -1, 1 } |
| ,{ "Tunnel-Client-Endpoint", RULE_OPTIONAL, -1, 1 } |
| ,{ "Tunnel-Server-Endpoint", RULE_OPTIONAL, -1, 1 } |
| ,{ "Tunnel-Preference", RULE_OPTIONAL, -1, 1 } |
| ,{ "Tunnel-Client-Auth-Id", RULE_OPTIONAL, -1, 1 } |
| ,{ "Tunnel-Server-Auth-Id", RULE_OPTIONAL, -1, 1 } |
| ,{ "Tunnel-Assignment-Id", RULE_OPTIONAL, -1, 1 } |
| ,{ "Tunnel-Password", RULE_OPTIONAL, -1, 1 } |
| ,{ "Tunnel-Private-Group-Id", RULE_OPTIONAL, -1, 1 } |
| }; |
| |
| CHECK_dict_new( DICT_AVP, &data , NULL, &avp); |
| PARSE_loc_rules( rules, avp ); |
| } |
| |
| /******************************** |
| * NAS Accounting AVPs * |
| ********************************/ |
| /* Accounting-Input-Octets */ |
| { |
| /* |
| The Accounting-Input-Octets AVP (AVP Code 363) is of type Unsigned64 |
| and contains the number of octets received from the user. |
| |
| For NAS usage, this AVP indicates how many octets have been received |
| from the port in the course of this session. It can only be present |
| in ACR messages with an Accounting-Record-Type of INTERIM_RECORD or |
| STOP_RECORD. |
| */ |
| struct dict_avp_data data = { |
| 363, /* Code */ |
| 0, /* Vendor */ |
| "Accounting-Input-Octets", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_UNSIGNED64 /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /* Accounting-Output-Octets */ |
| { |
| /* |
| The Accounting-Output-Octets AVP (AVP Code 364) is of type Unsigned64 |
| and contains the number of octets sent to the user. |
| |
| For NAS usage, this AVP indicates how many octets have been sent to |
| the port in the course of this session. It can only be present in |
| ACR messages with an Accounting-Record-Type of INTERIM_RECORD or |
| STOP_RECORD. |
| */ |
| struct dict_avp_data data = { |
| 364, /* Code */ |
| 0, /* Vendor */ |
| "Accounting-Output-Octets", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_UNSIGNED64 /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /* Accounting-Input-Packets */ |
| { |
| /* |
| The Accounting-Input-Packets (AVP Code 365) is of type Unsigned64 and |
| contains the number of packets received from the user. |
| |
| For NAS usage, this AVP indicates how many packets have been received |
| from the port over the course of a session being provided to a Framed |
| User. It can only be present in ACR messages with an Accounting- |
| Record-Type of INTERIM_RECORD or STOP_RECORD. |
| */ |
| struct dict_avp_data data = { |
| 365, /* Code */ |
| 0, /* Vendor */ |
| "Accounting-Input-Packets", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_UNSIGNED64 /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /* Accounting-Output-Packets */ |
| { |
| /* |
| The Accounting-Output-Packets (AVP Code 366) is of type Unsigned64 |
| and contains the number of IP packets sent to the user. |
| |
| For NAS usage, this AVP indicates how many packets have been sent to |
| the port over the course of a session being provided to a Framed |
| User. It can only be present in ACR messages with an Accounting- |
| Record-Type of INTERIM_RECORD or STOP_RECORD. |
| */ |
| struct dict_avp_data data = { |
| 366, /* Code */ |
| 0, /* Vendor */ |
| "Accounting-Output-Packets", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_UNSIGNED64 /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /* Acct-Session-Time */ |
| { |
| /* |
| The Acct-Session-Time AVP (AVP Code 46) is of type Unsigned32 and |
| indicates the length of the current session in seconds. It can only |
| be present in ACR messages with an Accounting-Record-Type of |
| INTERIM_RECORD or STOP_RECORD. |
| */ |
| struct dict_avp_data data = { |
| 46, /* Code */ |
| 0, /* Vendor */ |
| "Acct-Session-Time", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_UNSIGNED32 /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /* Acct-Authentic */ |
| { |
| /* |
| The Acct-Authentic AVP (AVP Code 45) is of type Enumerated and |
| specifies how the user was authenticated. The supported values are |
| listed in [RADIUSTypes]. |
| Sub-registry: Values for RADIUS Attribute 45, Acct-Authentic |
| Reference: [RFC2866] |
| */ |
| struct dict_object *type; |
| struct dict_type_data tdata = { AVP_TYPE_UNSIGNED32, "Enumerated(Acct-Authentic)" , NULL, NULL}; |
| struct dict_enumval_data tvals[] = { |
| enumval_def_u32( 1, "RADIUS"), |
| enumval_def_u32( 2, "Local"), |
| enumval_def_u32( 3, "Remote"), |
| enumval_def_u32( 4, "Diameter") |
| }; |
| struct dict_avp_data data = { |
| 45, /* Code */ |
| 0, /* Vendor */ |
| "Acct-Authentic", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_UNSIGNED32 /* base type of data */ |
| }; |
| int i; |
| /* Create the Enumerated type, enumerated values, and the AVP */ |
| CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type); |
| for (i = 0; i < sizeof(tvals) / sizeof(tvals[0]); i++) { |
| CHECK_dict_new( DICT_ENUMVAL, &tvals[i], type, NULL); |
| } |
| CHECK_dict_new( DICT_AVP, &data , type, NULL); |
| } |
| |
| /* Accounting-Auth-Method */ |
| { |
| /* |
| The Accounting-Auth-Method AVP (AVP Code 406) is of type Enumerated. |
| A NAS MAY include this AVP in an Accounting-Request message to |
| indicate the method used to authenticate the user. (Note that this |
| is equivalent to the RADIUS MS-Acct-Auth-Type VSA attribute). |
| |
| The following values are defined: |
| |
| 1 PAP |
| 2 CHAP |
| 3 MS-CHAP-1 |
| 4 MS-CHAP-2 |
| 5 EAP |
| 7 None |
| */ |
| struct dict_object *type; |
| struct dict_type_data tdata = { AVP_TYPE_UNSIGNED32, "Enumerated(Accounting-Auth-Method)" , NULL, NULL}; |
| struct dict_enumval_data tvals[] = { |
| enumval_def_u32( 1, "PAP"), |
| enumval_def_u32( 2, "CHAP"), |
| enumval_def_u32( 3, "MS-CHAP-1"), |
| enumval_def_u32( 4, "MS-CHAP-2"), |
| enumval_def_u32( 5, "EAP"), |
| enumval_def_u32( 7, "None") |
| }; |
| struct dict_avp_data data = { |
| 406, /* Code */ |
| 0, /* Vendor */ |
| "Accounting-Auth-Method", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_UNSIGNED32 /* base type of data */ |
| }; |
| int i; |
| /* Create the Enumerated type, enumerated values, and the AVP */ |
| CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type); |
| for (i = 0; i < sizeof(tvals) / sizeof(tvals[0]); i++) { |
| CHECK_dict_new( DICT_ENUMVAL, &tvals[i], type, NULL); |
| } |
| CHECK_dict_new( DICT_AVP, &data , type, NULL); |
| } |
| |
| /* Acct-Delay-Time */ |
| { |
| /* |
| The Acct-Delay-Time AVP (AVP Code 41) is of type Unsigned32 and |
| indicates the number of seconds the Diameter client has been trying |
| to send the Accounting-Request (ACR). The accounting server may |
| subtract this value from the time when the ACR arrives at the server |
| to calculate the approximate time of the event that caused the ACR to |
| be generated. |
| |
| This AVP is not used for retransmissions at the transport level (TCP |
| or SCTP). Rather, it may be used when an ACR command cannot be |
| transmitted because there is no appropriate peer to transmit it to or |
| was rejected because it could not be delivered. In these cases, the |
| command MAY be buffered and transmitted later, when an appropriate |
| peer-connection is available or after sufficient time has passed that |
| the destination-host may be reachable and operational. If the ACR is |
| resent in this way, the Acct-Delay-Time AVP SHOULD be included. The |
| value of this AVP indicates the number of seconds that elapsed |
| between the time of the first attempt at transmission and the current |
| attempt. |
| */ |
| struct dict_avp_data data = { |
| 41, /* Code */ |
| 0, /* Vendor */ |
| "Acct-Delay-Time", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_UNSIGNED32 /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /* Acct-Link-Count */ |
| { |
| /* |
| The Acct-Link-Count AVP (AVP Code 51) is of type Unsigned32 and |
| indicates the total number of links that have been active (current or |
| closed) in a given multilink session at the time the accounting |
| record is generated. This AVP MAY be included in Accounting-Requests |
| for any session that may be part of a multilink service. |
| |
| The Acct-Link-Count AVP may be used to make it easier for an |
| accounting server to know when it has all the records for a given |
| multilink service. When the number of Accounting-Requests received |
| with Accounting-Record-Type = STOP_RECORD and with the same Acct- |
| Multi-Session-Id and unique Session-Ids equals the largest value of |
| Acct-Link-Count seen in those Accounting-Requests, all STOP_RECORD |
| Accounting-Requests for that multilink service have been received. |
| |
| The following example, showing eight Accounting-Requests, illustrates |
| how the Acct-Link-Count AVP is used. In the table below, only the |
| relevant AVPs are shown, although additional AVPs containing |
| accounting information will be present in the Accounting-Requests. |
| |
| Acct-Multi- Accounting- Acct- |
| Session-Id Session-Id Record-Type Link-Count |
| -------------------------------------------------------- |
| "...10" "...10" START_RECORD 1 |
| "...10" "...11" START_RECORD 2 |
| "...10" "...11" STOP_RECORD 2 |
| "...10" "...12" START_RECORD 3 |
| "...10" "...13" START_RECORD 4 |
| "...10" "...12" STOP_RECORD 4 |
| "...10" "...13" STOP_RECORD 4 |
| "...10" "...10" STOP_RECORD 4 |
| |
| */ |
| struct dict_avp_data data = { |
| 51, /* Code */ |
| 0, /* Vendor */ |
| "Acct-Link-Count", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_UNSIGNED32 /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /* Acct-Tunnel-Connection */ |
| { |
| /* |
| The Acct-Tunnel-Connection AVP (AVP Code 68) is of type OctetString |
| and contains the identifier assigned to the tunnel session. This |
| AVP, along with the Tunnel-Client-Endpoint and Tunnel-Server-Endpoint |
| AVPs, may be used to provide a means to uniquely identify a tunnel |
| session for auditing purposes. |
| |
| The format of the identifier in this AVP depends upon the value of |
| the Tunnel-Type AVP. For example, to identify an L2TP tunnel |
| connection fully, the L2TP Tunnel Id and Call Id might be encoded in |
| this field. The exact encoding of this field is implementation |
| dependent. |
| */ |
| struct dict_avp_data data = { |
| 68, /* Code */ |
| 0, /* Vendor */ |
| "Acct-Tunnel-Connection", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /* Acct-Tunnel-Packets-Lost */ |
| { |
| /* |
| The Acct-Tunnel-Packets-Lost AVP (AVP Code 86) is of type Unsigned32 |
| and contains the number of packets lost on a given link. |
| */ |
| struct dict_avp_data data = { |
| 86, /* Code */ |
| 0, /* Vendor */ |
| "Acct-Tunnel-Packets-Lost", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_UNSIGNED32 /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /*********************************** |
| * Compatibility with RADIUS AVPs * |
| ***********************************/ |
| /* NAS-Identifier */ |
| { |
| /* |
| The NAS-Identifier AVP (AVP Code 32) [RADIUS] is of type UTF8String |
| and contains the identity of the NAS providing service to the user. |
| This AVP SHOULD only be added by a RADIUS/Diameter Translation Agent. |
| When this AVP is present, the Origin-Host AVP identifies the NAS |
| providing service to the user. |
| |
| In RADIUS it would be possible for a rogue NAS to forge the NAS- |
| Identifier attribute. Diameter/RADIUS translation agents SHOULD |
| attempt to check a received NAS-Identifier attribute against the |
| source address of the RADIUS packet, by doing an A/AAAA RR query. If |
| the NAS-Identifier attribute contains an FQDN, then such a query |
| would resolve to an IP address matching the source address. However, |
| the NAS-Identifier attribute is not required to contain an FQDN, so |
| such a query could fail. If it fails, an error should be logged, but |
| no action should be taken, other than a reverse lookup on the source |
| address and insert the resulting FQDN into the Route-Record AVP. |
| |
| Diameter agents and servers SHOULD check whether a NAS-Identifier AVP |
| corresponds to an entry in the Route-Record AVP. If no match is |
| found, then an error is logged, but no other action is taken. |
| */ |
| struct dict_avp_data data = { |
| 32, /* Code */ |
| 0, /* Vendor */ |
| "NAS-Identifier", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL); |
| } |
| |
| /* NAS-IP-Address */ |
| { |
| /* |
| The NAS-IP-Address AVP (AVP Code 4) [RADIUS] is of type OctetString |
| and contains the IP Address of the NAS providing service to the user. |
| This AVP SHOULD only be added by a RADIUS/Diameter Translation Agent. |
| When this AVP is present, the Origin-Host AVP identifies the NAS |
| providing service to the user. |
| |
| In RADIUS it would be possible for a rogue NAS to forge the NAS-IP- |
| Address attribute value. Diameter/RADIUS translation agents MUST |
| check a received NAS-IP-Address or NAS-IPv6-Address attribute against |
| the source address of the RADIUS packet. If they do not match and |
| the Diameter/RADIUS translation agent does not know whether the |
| packet was sent by a RADIUS proxy or NAS (e.g., no Proxy-State |
| attribute), then by default it is assumed that the source address |
| corresponds to a RADIUS proxy, and that the NAS Address is behind |
| that proxy, potentially with some additional RADIUS proxies in |
| between. The Diameter/RADIUS translation agent MUST insert entries |
| in the Route-Record AVP corresponding to the apparent route. This |
| implies doing a reverse lookup on the source address and NAS-IP- |
| Address or NAS-IPv6-Address attributes to determine the corresponding |
| FQDNs. |
| |
| If the source address and the NAS-IP-Address or NAS-IPv6-Address do |
| not match, and the Diameter/RADIUS translation agent knows that it is |
| talking directly to the NAS (e.g., there are no RADIUS proxies |
| between it and the NAS), then the error should be logged, and the |
| packet MUST be discarded. |
| |
| Diameter agents and servers MUST check whether the NAS-IP-Address AVP |
| corresponds to an entry in the Route-Record AVP. This is done by |
| doing a reverse lookup (PTR RR) for the NAS-IP-Address to retrieve |
| the corresponding FQDN, and by checking for a match with the Route- |
| Record AVP. If no match is found, then an error is logged, but no |
| other action is taken. |
| */ |
| struct dict_avp_data data = { |
| 4, /* Code */ |
| 0, /* Vendor */ |
| "NAS-IP-Address", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /* NAS-IPv6-Address */ |
| { |
| /* |
| The NAS-IPv6-Address AVP (AVP Code 95) [RADIUSIPv6] is of type |
| OctetString and contains the IPv6 Address of the NAS providing |
| service to the user. This AVP SHOULD only be added by a |
| RADIUS/Diameter Translation Agent. When this AVP is present, the |
| Origin-Host AVP identifies the NAS providing service to the user. |
| |
| In RADIUS it would be possible for a rogue NAS to forge the NAS- |
| IPv6-Address attribute. Diameter/RADIUS translation agents MUST |
| check a received NAS-IPv6-Address attribute against the source |
| address of the RADIUS packet. If they do not match and the |
| Diameter/RADIUS translation agent does not know whether the packet |
| was sent by a RADIUS proxy or NAS (e.g., no Proxy-State attribute), |
| then by default it is assumed that the source address corresponds to |
| a RADIUS proxy, and that the NAS-IPv6-Address is behind that proxy, |
| potentially with some additional RADIUS proxies in between. The |
| Diameter/RADIUS translation agent MUST insert entries in the Route- |
| Record AVP corresponding to the apparent route. This implies doing a |
| reverse lookup on the source address and NAS-IPv6-Address attributes |
| to determine the corresponding FQDNs. |
| |
| If the source address and the NAS-IPv6-Address do not match, and the |
| Diameter/RADIUS translation agent knows that it is talking directly |
| to the NAS (e.g., there are no RADIUS proxies between it and the |
| NAS), then the error should be logged, and the packet MUST be |
| discarded. |
| |
| Diameter agents and servers MUST check whether the NAS-IPv6-Address |
| AVP corresponds to an entry in the Route-Record AVP. This is done by |
| doing a reverse lookup (PTR RR) for the NAS-IPv6-Address to retrieve |
| the corresponding FQDN, and by checking for a match with the Record- |
| Route AVP. If no match is found, then an error is logged, but no |
| other action is taken. |
| */ |
| struct dict_avp_data data = { |
| 95, /* Code */ |
| 0, /* Vendor */ |
| "NAS-IPv6-Address", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /* State */ |
| { |
| /* |
| The State AVP (AVP Code 24) [RADIUS] is of type OctetString and has |
| two uses in the Diameter NAS application. |
| |
| The State AVP MAY be sent by a Diameter Server to a NAS in an AA- |
| Response command that contains a Result-Code of |
| DIAMETER_MULTI_ROUND_AUTH. If so, the NAS MUST return it unmodified |
| in the subsequent AA-Request command. |
| |
| The State AVP MAY also be sent by a Diameter Server to a NAS in an |
| AA-Response command that also includes a Termination-Action AVP with |
| the value of AA-REQUEST. If the NAS performs the Termination-Action |
| by sending a new AA-Request command upon termination of the current |
| service, it MUST return the State AVP unmodified in the new request |
| command. |
| |
| In either usage, the NAS MUST NOT interpret the AVP locally. Usage |
| of the State AVP is implementation dependent. |
| */ |
| struct dict_avp_data data = { |
| 24, /* Code */ |
| 0, /* Vendor */ |
| "State", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_OCTETSTRING /* base type of data */ |
| }; |
| CHECK_dict_new( DICT_AVP, &data , NULL, NULL); |
| } |
| |
| /* Termination-Cause mapping */ |
| { |
| |
| struct dict_object *type; |
| struct dict_enumval_data tvals[] = { |
| enumval_def_u32(11, "[RADIUS] User Request"), |
| enumval_def_u32(12, "[RADIUS] Lost Carrier"), |
| enumval_def_u32(13, "[RADIUS] Lost Service"), |
| enumval_def_u32(14, "[RADIUS] Idle Timeout"), |
| enumval_def_u32(15, "[RADIUS] Session Timeout"), |
| enumval_def_u32(16, "[RADIUS] Admin Reset"), |
| enumval_def_u32(17, "[RADIUS] Admin Reboot"), |
| enumval_def_u32(18, "[RADIUS] Port Error"), |
| enumval_def_u32(19, "[RADIUS] NAS Error"), |
| enumval_def_u32(20, "[RADIUS] NAS Request"), |
| enumval_def_u32(21, "[RADIUS] NAS Reboot"), |
| enumval_def_u32(22, "[RADIUS] Port Unneeded"), |
| enumval_def_u32(23, "[RADIUS] Port Preempted"), |
| enumval_def_u32(24, "[RADIUS] Port Suspended"), |
| enumval_def_u32(25, "[RADIUS] Service Unavailable"), |
| enumval_def_u32(26, "[RADIUS] Callback"), |
| enumval_def_u32(27, "[RADIUS] User Error"), |
| enumval_def_u32(28, "[RADIUS] Host Request"), |
| enumval_def_u32(29, "[RADIUS] Supplicant Restart"), |
| enumval_def_u32(30, "[RADIUS] Reauthentication Failure"), |
| enumval_def_u32(31, "[RADIUS] Port Reinit"), |
| enumval_def_u32(32, "[RADIUS] Port Disabled") |
| }; |
| int i; |
| |
| CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "Enumerated(Termination-Cause)", &type); |
| for (i = 0; i < sizeof(tvals) / sizeof(tvals[0]); i++) { |
| CHECK_dict_new( DICT_ENUMVAL, &tvals[i], type, NULL); |
| } |
| |
| } |
| |
| /* Origin-AAA-Protocol */ |
| { |
| /* |
| The Origin-AAA-Protocol AVP (AVP Code 408) is of the type Enumerated |
| and should be inserted in a Diameter message translated by a gateway |
| system from another AAA protocol, such as RADIUS. It identifies the |
| source protocol of the message to the Diameter system receiving the |
| message. |
| |
| The supported values are: |
| |
| 1 RADIUS |
| */ |
| struct dict_object *type; |
| struct dict_type_data tdata = { AVP_TYPE_UNSIGNED32, "Enumerated(Origin-AAA-Protocol)" , NULL, NULL}; |
| struct dict_enumval_data tvals[] = { |
| enumval_def_u32( 1, "RADIUS") |
| }; |
| struct dict_avp_data data = { |
| 408, /* Code */ |
| 0, /* Vendor */ |
| "Origin-AAA-Protocol", /* Name */ |
| AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ |
| AVP_FLAG_MANDATORY, /* Fixed flag values */ |
| AVP_TYPE_UNSIGNED32 /* base type of data */ |
| }; |
| int i; |
| /* Create the Enumerated type, enumerated values, and the AVP */ |
| CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type); |
| for (i = 0; i < sizeof(tvals) / sizeof(tvals[0]); i++) { |
| CHECK_dict_new( DICT_ENUMVAL, &tvals[i], type, NULL); |
| } |
| CHECK_dict_new( DICT_AVP, &data , type, NULL); |
| } |
| |
| } |
| |
| /********************/ |
| /* Commands section */ |
| /********************/ |
| { |
| /* To avoid defining global variables for all the AVP that we use here, we do search the dictionary in each sub-block. |
| * This is far from optimal, but the code is clearer like this, and the time it requires at execution is not noticeable. |
| */ |
| |
| /* AA-Request (AAR) Command */ |
| { |
| /* |
| The AA-Request (AAR), which is indicated by setting the Command-Code |
| field to 265 and the 'R' bit in the Command Flags field, is used to |
| request authentication and/or authorization for a given NAS user. |
| The type of request is identified through the Auth-Request-Type AVP |
| [BASE]. The recommended value for most RADIUS interoperabily |
| situations is AUTHORIZE_AUTHENTICATE. |
| |
| If Authentication is requested, the User-Name attribute SHOULD be |
| present, as well as any additional authentication AVPs that would |
| carry the password information. A request for authorization SHOULD |
| only include the information from which the authorization will be |
| performed, such as the User-Name, Called-Station-Id, or Calling- |
| Station-Id AVPs. All requests SHOULD contain AVPs uniquely |
| identifying the source of the call, such as Origin-Host and NAS-Port. |
| Certain networks MAY use different AVPs for authorization purposes. |
| A request for authorization will include some AVPs defined in section |
| 6. |
| |
| It is possible for a single session to be authorized first and then |
| for an authentication request to follow. |
| |
| This AA-Request message MAY be the result of a multi-round |
| authentication exchange, which occurs when the AA-Answer message is |
| received with the Result-Code AVP set to DIAMETER_MULTI_ROUND_AUTH. |
| A subsequent AAR message SHOULD be sent, with the User-Password AVP |
| that includes the user's response to the prompt, and MUST include any |
| State AVPs that were present in the AAA message. |
| |
| Message Format |
| <AA-Request> ::= < Diameter Header: 265, REQ, PXY > |
| < Session-Id > |
| { Auth-Application-Id } |
| { Origin-Host } |
| { Origin-Realm } |
| { Destination-Realm } |
| { Auth-Request-Type } |
| [ Destination-Host ] |
| [ NAS-Identifier ] |
| [ NAS-IP-Address ] |
| [ NAS-IPv6-Address ] |
| [ NAS-Port ] |
| [ NAS-Port-Id ] |
| [ NAS-Port-Type ] |
| [ Origin-AAA-Protocol ] |
| [ Origin-State-Id ] |
| [ Port-Limit ] |
| [ User-Name ] |
| [ User-Password ] |
| [ Service-Type ] |
| [ State ] |
| [ Authorization-Lifetime ] |
| [ Auth-Grace-Period ] |
| [ Auth-Session-State ] |
| [ Callback-Number ] |
| [ Called-Station-Id ] |
| [ Calling-Station-Id ] |
| [ Originating-Line-Info ] |
| [ Connect-Info ] |
| [ CHAP-Auth ] |
| [ CHAP-Challenge ] |
| * [ Framed-Compression ] |
| [ Framed-Interface-Id ] |
| [ Framed-IP-Address ] |
| * [ Framed-IPv6-Prefix ] |
| [ Framed-IP-Netmask ] |
| [ Framed-MTU ] |
| [ Framed-Protocol ] |
| [ ARAP-Password ] |
| [ ARAP-Security ] |
| * [ ARAP-Security-Data ] |
| * [ Login-IP-Host ] |
| * [ Login-IPv6-Host ] |
| [ Login-LAT-Group ] |
| [ Login-LAT-Node ] |
| [ Login-LAT-Port ] |
| [ Login-LAT-Service ] |
| * [ Tunneling ] |
| * [ Proxy-Info ] |
| * [ Route-Record ] |
| * [ AVP ] |
| */ |
| struct dict_object * cmd; |
| struct dict_cmd_data data = { |
| 265, /* Code */ |
| "AA-Request", /* Name */ |
| CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ |
| CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE /* Fixed flag values */ |
| }; |
| struct local_rules_definition rules[] = |
| { { "Session-Id", RULE_FIXED_HEAD, -1, 1 } |
| ,{ "Auth-Application-Id", RULE_REQUIRED, -1, 1 } |
| ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } |
| ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } |
| ,{ "Destination-Realm", RULE_REQUIRED, -1, 1 } |
| ,{ "Auth-Request-Type", RULE_REQUIRED, -1, 1 } |
| ,{ "Destination-Host", RULE_OPTIONAL, -1, 1 } |
| ,{ "NAS-Identifier", RULE_OPTIONAL, -1, 1 } |
| ,{ "NAS-IP-Address", RULE_OPTIONAL, -1, 1 } |
| ,{ "NAS-IPv6-Address", RULE_OPTIONAL, -1, 1 } |
| ,{ "NAS-Port", RULE_OPTIONAL, -1, 1 } |
| ,{ "NAS-Port-Id", RULE_OPTIONAL, -1, 1 } |
| ,{ "NAS-Port-Type", RULE_OPTIONAL, -1, 1 } |
| ,{ "Origin-AAA-Protocol", RULE_OPTIONAL, -1, 1 } |
| ,{ "Origin-State-Id", RULE_OPTIONAL, -1, 1 } |
| ,{ "Port-Limit", RULE_OPTIONAL, -1, 1 } |
| ,{ "User-Name", RULE_OPTIONAL, -1, 1 } |
| ,{ "User-Password", RULE_OPTIONAL, -1, 1 } |
| ,{ "Service-Type", RULE_OPTIONAL, -1, 1 } |
| ,{ "State", RULE_OPTIONAL, -1, 1 } |
| ,{ "Authorization-Lifetime", RULE_OPTIONAL, -1, 1 } |
| ,{ "Auth-Grace-Period", RULE_OPTIONAL, -1, 1 } |
| ,{ "Auth-Session-State", RULE_OPTIONAL, -1, 1 } |
| ,{ "Callback-Number", RULE_OPTIONAL, -1, 1 } |
| ,{ "Called-Station-Id", RULE_OPTIONAL, -1, 1 } |
| ,{ "Calling-Station-Id", RULE_OPTIONAL, -1, 1 } |
| ,{ "Originating-Line-Info", RULE_OPTIONAL, -1, 1 } |
| ,{ "Connect-Info", RULE_OPTIONAL, -1, 1 } |
| ,{ "CHAP-Auth", RULE_OPTIONAL, -1, 1 } |
| ,{ "CHAP-Challenge", RULE_OPTIONAL, -1, 1 } |
| ,{ "Framed-Compression", RULE_OPTIONAL, -1,-1 } |
| ,{ "Framed-Interface-Id", RULE_OPTIONAL, -1, 1 } |
| ,{ "Framed-IP-Address", RULE_OPTIONAL, -1, 1 } |
| ,{ "Framed-IPv6-Prefix", RULE_OPTIONAL, -1,-1 } |
| ,{ "Framed-IP-Netmask", RULE_OPTIONAL, -1, 1 } |
| ,{ "Framed-MTU", RULE_OPTIONAL, -1, 1 } |
| ,{ "Framed-Protocol", RULE_OPTIONAL, -1, 1 } |
| ,{ "ARAP-Password", RULE_OPTIONAL, -1, 1 } |
| ,{ "ARAP-Security", RULE_OPTIONAL, -1, 1 } |
| ,{ "ARAP-Security-Data", RULE_OPTIONAL, -1,-1 } |
| ,{ "Login-IP-Host", RULE_OPTIONAL, -1,-1 } |
| ,{ "Login-IPv6-Host", RULE_OPTIONAL, -1,-1 } |
| ,{ "Login-LAT-Group", RULE_OPTIONAL, -1, 1 } |
| ,{ "Login-LAT-Node", RULE_OPTIONAL, -1, 1 } |
| ,{ "Login-LAT-Port", RULE_OPTIONAL, -1, 1 } |
| ,{ "Login-LAT-Service", RULE_OPTIONAL, -1, 1 } |
| ,{ "Tunneling", RULE_OPTIONAL, -1,-1 } |
| ,{ "Proxy-Info", RULE_OPTIONAL, -1,-1 } |
| ,{ "Route-Record", RULE_OPTIONAL, -1,-1 } |
| }; |
| |
| CHECK_dict_new( DICT_COMMAND, &data , nasreq, &cmd); |
| PARSE_loc_rules( rules, cmd ); |
| } |
| |
| /* AA-Answer (AAA) Command */ |
| { |
| /* |
| The AA-Answer (AAA) message is indicated by setting the Command-Code |
| field to 265 and clearing the 'R' bit in the Command Flags field. It |
| is sent in response to the AA-Request (AAR) message. If |
| authorization was requested, a successful response will include the |
| authorization AVPs appropriate for the service being provided, as |
| defined in section 6. |
| |
| For authentication exchanges requiring more than a single round trip, |
| the server MUST set the Result-Code AVP to DIAMETER_MULTI_ROUND_AUTH. |
| An AAA message with this result code MAY include one Reply-Message or |
| more and MAY include zero or one State AVPs. |
| |
| If the Reply-Message AVP was present, the network access server |
| SHOULD send the text to the user's client to display to the user, |
| instructing the client to prompt the user for a response. For |
| example, this capability can be achieved in PPP via PAP. If the |
| access client is unable to prompt the user for a new response, it |
| MUST treat the AA-Answer (AAA) with the Reply-Message AVP as an error |
| and deny access. |
| |
| Message Format |
| |
| <AA-Answer> ::= < Diameter Header: 265, PXY > |
| < Session-Id > |
| { Auth-Application-Id } |
| { Auth-Request-Type } |
| { Result-Code } |
| { Origin-Host } |
| { Origin-Realm } |
| [ User-Name ] |
| [ Service-Type ] |
| * [ Class ] |
| * [ Configuration-Token ] |
| [ Acct-Interim-Interval ] |
| [ Error-Message ] |
| [ Error-Reporting-Host ] |
| * [ Failed-AVP ] |
| [ Idle-Timeout ] |
| [ Authorization-Lifetime ] |
| [ Auth-Grace-Period ] |
| [ Auth-Session-State ] |
| [ Re-Auth-Request-Type ] |
| [ Multi-Round-Time-Out ] |
| [ Session-Timeout ] |
| [ State ] |
| * [ Reply-Message ] |
| [ Origin-AAA-Protocol ] |
| [ Origin-State-Id ] |
| * [ Filter-Id ] |
| [ Password-Retry ] |
| [ Port-Limit ] |
| [ Prompt ] |
| [ ARAP-Challenge-Response ] |
| [ ARAP-Features ] |
| [ ARAP-Security ] |
| * [ ARAP-Security-Data ] |
| [ ARAP-Zone-Access ] |
| [ Callback-Id ] |
| [ Callback-Number ] |
| [ Framed-Appletalk-Link ] |
| * [ Framed-Appletalk-Network ] |
| [ Framed-Appletalk-Zone ] |
| * [ Framed-Compression ] |
| [ Framed-Interface-Id ] |
| [ Framed-IP-Address ] |
| * [ Framed-IPv6-Prefix ] |
| [ Framed-IPv6-Pool ] |
| * [ Framed-IPv6-Route ] |
| [ Framed-IP-Netmask ] |
| * [ Framed-Route ] |
| [ Framed-Pool ] |
| [ Framed-IPX-Network ] |
| [ Framed-MTU ] |
| [ Framed-Protocol ] |
| [ Framed-Routing ] |
| * [ Login-IP-Host ] |
| * [ Login-IPv6-Host ] |
| [ Login-LAT-Group ] |
| [ Login-LAT-Node ] |
| [ Login-LAT-Port ] |
| [ Login-LAT-Service ] |
| [ Login-Service ] |
| [ Login-TCP-Port ] |
| * [ NAS-Filter-Rule ] |
| * [ QoS-Filter-Rule ] |
| * [ Tunneling ] |
| * [ Redirect-Host ] |
| [ Redirect-Host-Usage ] |
| [ Redirect-Max-Cache-Time ] |
| * [ Proxy-Info ] |
| * [ AVP ] |
| */ |
| struct dict_object * cmd; |
| struct dict_cmd_data data = { |
| 265, /* Code */ |
| "AA-Answer", /* Name */ |
| CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE, /* Fixed flags */ |
| CMD_FLAG_PROXIABLE /* Fixed flag values */ |
| }; |
| struct local_rules_definition rules[] = |
| { { "Session-Id", RULE_FIXED_HEAD, -1, 1 } |
| ,{ "Auth-Application-Id", RULE_REQUIRED, -1, 1 } |
| ,{ "Auth-Request-Type", RULE_REQUIRED, -1, 1 } |
| ,{ "Result-Code", RULE_REQUIRED, -1, 1 } |
| ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } |
| ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } |
| ,{ "User-Name", RULE_OPTIONAL, -1, 1 } |
| ,{ "Service-Type", RULE_OPTIONAL, -1, 1 } |
| ,{ "Class", RULE_OPTIONAL, -1,-1 } |
| ,{ "Configuration-Token", RULE_OPTIONAL, -1,-1 } |
| ,{ "Acct-Interim-Interval", RULE_OPTIONAL, -1, 1 } |
| ,{ "Error-Message", RULE_OPTIONAL, -1, 1 } |
| ,{ "Error-Reporting-Host", RULE_OPTIONAL, -1, 1 } |
| ,{ "Failed-AVP", RULE_OPTIONAL, -1,-1 } |
| ,{ "Idle-Timeout", RULE_OPTIONAL, -1, 1 } |
| ,{ "Authorization-Lifetime", RULE_OPTIONAL, -1, 1 } |
| ,{ "Auth-Grace-Period", RULE_OPTIONAL, -1, 1 } |
| ,{ "Auth-Session-State", RULE_OPTIONAL, -1, 1 } |
| ,{ "Re-Auth-Request-Type", RULE_OPTIONAL, -1, 1 } |
| ,{ "Multi-Round-Time-Out", RULE_OPTIONAL, -1, 1 } |
| ,{ "Session-Timeout", RULE_OPTIONAL, -1, 1 } |
| ,{ "State", RULE_OPTIONAL, -1, 1 } |
| ,{ "Reply-Message", RULE_OPTIONAL, -1,-1 } |
| ,{ "Origin-AAA-Protocol", RULE_OPTIONAL, -1, 1 } |
| ,{ "Origin-State-Id", RULE_OPTIONAL, -1, 1 } |
| ,{ "Filter-Id", RULE_OPTIONAL, -1,-1 } |
| ,{ "Password-Retry", RULE_OPTIONAL, -1, 1 } |
| ,{ "Port-Limit", RULE_OPTIONAL, -1, 1 } |
| ,{ "Prompt", RULE_OPTIONAL, -1, 1 } |
| ,{ "ARAP-Challenge-Response", RULE_OPTIONAL, -1, 1 } |
| ,{ "ARAP-Features", RULE_OPTIONAL, -1, 1 } |
| ,{ "ARAP-Security", RULE_OPTIONAL, -1, 1 } |
| ,{ "ARAP-Security-Data", RULE_OPTIONAL, -1,-1 } |
| ,{ "ARAP-Zone-Access", RULE_OPTIONAL, -1, 1 } |
| ,{ "Callback-Id", RULE_OPTIONAL, -1, 1 } |
| ,{ "Callback-Number", RULE_OPTIONAL, -1, 1 } |
| ,{ "Framed-AppleTalk-Link", RULE_OPTIONAL, -1, 1 } |
| ,{ "Framed-AppleTalk-Network", RULE_OPTIONAL, -1,-1 } |
| ,{ "Framed-AppleTalk-Zone", RULE_OPTIONAL, -1, 1 } |
| ,{ "Framed-Compression", RULE_OPTIONAL, -1,-1 } |
| ,{ "Framed-Interface-Id", RULE_OPTIONAL, -1,-1 } |
| ,{ "Framed-IP-Address", RULE_OPTIONAL, -1, 1 } |
| ,{ "Framed-IPv6-Prefix", RULE_OPTIONAL, -1,-1 } |
| ,{ "Framed-IPv6-Pool", RULE_OPTIONAL, -1, 1 } |
| ,{ "Framed-IPv6-Route", RULE_OPTIONAL, -1,-1 } |
| ,{ "Framed-IP-Netmask", RULE_OPTIONAL, -1,-1 } |
| ,{ "Framed-Route", RULE_OPTIONAL, -1,-1 } |
| ,{ "Framed-Pool", RULE_OPTIONAL, -1, 1 } |
| ,{ "Framed-IPX-Network", RULE_OPTIONAL, -1, 1 } |
| ,{ "Framed-MTU", RULE_OPTIONAL, -1, 1 } |
| ,{ "Framed-Protocol", RULE_OPTIONAL, -1, 1 } |
| ,{ "Framed-Routing", RULE_OPTIONAL, -1, 1 } |
| ,{ "Login-IP-Host", RULE_OPTIONAL, -1,-1 } |
| ,{ "Login-IPv6-Host", RULE_OPTIONAL, -1,-1 } |
| ,{ "Login-LAT-Group", RULE_OPTIONAL, -1, 1 } |
| ,{ "Login-LAT-Node", RULE_OPTIONAL, -1, 1 } |
| ,{ "Login-LAT-Port", RULE_OPTIONAL, -1, 1 } |
| ,{ "Login-LAT-Service", RULE_OPTIONAL, -1, 1 } |
| ,{ "Login-Service", RULE_OPTIONAL, -1, 1 } |
| ,{ "Login-TCP-Port", RULE_OPTIONAL, -1, 1 } |
| ,{ "NAS-Filter-Rule", RULE_OPTIONAL, -1,-1 } |
| ,{ "QoS-Filter-Rule", RULE_OPTIONAL, -1,-1 } |
| ,{ "Tunneling", RULE_OPTIONAL, -1,-1 } |
| ,{ "Redirect-Host", RULE_OPTIONAL, -1,-1 } |
| ,{ "Redirect-Host-Usage", RULE_OPTIONAL, -1, 1 } |
| ,{ "Redirect-Max-Cache-Time", RULE_OPTIONAL, -1, 1 } |
| ,{ "Proxy-Info", RULE_OPTIONAL, -1,-1 } |
| }; |
| |
| CHECK_dict_new( DICT_COMMAND, &data , nasreq, &cmd); |
| PARSE_loc_rules( rules, cmd ); |
| } |
| |
| /* Re-Auth-Request */ |
| { |
| /* |
| Add additional rules of the ABNF (compared to Base definition): |
| |
| <RA-Request> ::= < Diameter Header: 258, REQ, PXY > |
| < Session-Id > |
| { Origin-Host } |
| { Origin-Realm } |
| { Destination-Realm } |
| { Destination-Host } |
| { Auth-Application-Id } |
| { Re-Auth-Request-Type } |
| [ User-Name ] |
| [ Origin-AAA-Protocol ] |
| [ Origin-State-Id ] |
| [ NAS-Identifier ] |
| [ NAS-IP-Address ] |
| [ NAS-IPv6-Address ] |
| [ NAS-Port ] |
| [ NAS-Port-Id ] |
| [ NAS-Port-Type ] |
| [ Service-Type ] |
| [ Framed-IP-Address ] |
| [ Framed-IPv6-Prefix ] |
| [ Framed-Interface-Id ] |
| [ Called-Station-Id ] |
| [ Calling-Station-Id ] |
| [ Originating-Line-Info ] |
| [ Acct-Session-Id ] |
| [ Acct-Multi-Session-Id ] |
| [ State ] |
| * [ Class ] |
| [ Reply-Message ] |
| * [ Proxy-Info ] |
| * [ Route-Record ] |
| * [ AVP ] |
| */ |
| struct dict_object * cmd; |
| struct local_rules_definition rules[] = |
| { { "Origin-AAA-Protocol", RULE_OPTIONAL, -1, 1 } |
| ,{ "NAS-Identifier", RULE_OPTIONAL, -1, 1 } |
| ,{ "NAS-IP-Address", RULE_OPTIONAL, -1, 1 } |
| ,{ "NAS-IPv6-Address", RULE_OPTIONAL, -1, 1 } |
| ,{ "NAS-Port", RULE_OPTIONAL, -1, 1 } |
| ,{ "NAS-Port-Id", RULE_OPTIONAL, -1, 1 } |
| ,{ "NAS-Port-Type", RULE_OPTIONAL, -1, 1 } |
| ,{ "Service-Type", RULE_OPTIONAL, -1, 1 } |
| ,{ "Framed-IP-Address", RULE_OPTIONAL, -1, 1 } |
| ,{ "Framed-IPv6-Prefix", RULE_OPTIONAL, -1, 1 } |
| ,{ "Framed-Interface-Id", RULE_OPTIONAL, -1, 1 } |
| ,{ "Called-Station-Id", RULE_OPTIONAL, -1, 1 } |
| ,{ "Calling-Station-Id", RULE_OPTIONAL, -1, 1 } |
| ,{ "Originating-Line-Info", RULE_OPTIONAL, -1, 1 } |
| ,{ "Acct-Session-Id", RULE_OPTIONAL, -1, 1 } |
| ,{ "Acct-Multi-Session-Id", RULE_OPTIONAL, -1, 1 } |
| ,{ "State", RULE_OPTIONAL, -1, 1 } |
| ,{ "Class", RULE_OPTIONAL, -1,-1 } |
| ,{ "Reply-Message", RULE_OPTIONAL, -1,-1 } |
| }; |
| |
| CHECK_dict_search( DICT_COMMAND, CMD_BY_NAME, "Re-Auth-Request", &cmd); |
| PARSE_loc_rules( rules, cmd ); |
| } |
| |
| /* Re-Auth-Answer */ |
| { |
| /* |
| Add additional rules of the ABNF (compared to Base definition): |
| |
| |
| <RA-Answer> ::= < Diameter Header: 258, PXY > |
| < Session-Id > |
| { Result-Code } |
| { Origin-Host } |
| { Origin-Realm } |
| [ User-Name ] |
| [ Origin-AAA-Protocol ] |
| [ Origin-State-Id ] |
| [ Error-Message ] |
| [ Error-Reporting-Host ] |
| * [ Failed-AVP ] |
| * [ Redirected-Host ] |
| [ Redirected-Host-Usage ] |
| [ Redirected-Host-Cache-Time ] |
| [ Service-Type ] |
| * [ Configuration-Token ] |
| [ Idle-Timeout ] |
| [ Authorization-Lifetime ] |
| [ Auth-Grace-Period ] |
| [ Re-Auth-Request-Type ] |
| [ State ] |
| * [ Class ] |
| * [ Reply-Message ] |
| [ Prompt ] |
| * [ Proxy-Info ] |
| * [ AVP ] |
| */ |
| struct dict_object * cmd; |
| struct local_rules_definition rules[] = |
| { { "Origin-AAA-Protocol", RULE_OPTIONAL, -1, 1 } |
| ,{ "Service-Type", RULE_OPTIONAL, -1, 1 } |
| ,{ "Configuration-Token", RULE_OPTIONAL, -1,-1 } |
| ,{ "Idle-Timeout", RULE_OPTIONAL, -1, 1 } |
| ,{ "Authorization-Lifetime", RULE_OPTIONAL, -1, 1 } |
| ,{ "Auth-Grace-Period", RULE_OPTIONAL, -1, 1 } |
| ,{ "Re-Auth-Request-Type", RULE_OPTIONAL, -1, 1 } |
| ,{ "State", RULE_OPTIONAL, -1, 1 } |
| ,{ "Class", RULE_OPTIONAL, -1,-1 } |
| ,{ "Reply-Message", RULE_OPTIONAL, -1,-1 } |
| ,{ "Prompt", RULE_OPTIONAL, -1, 1 } |
| }; |
| |
| CHECK_dict_search( DICT_COMMAND, CMD_BY_NAME, "Re-Auth-Answer", &cmd); |
| PARSE_loc_rules( rules, cmd ); |
| } |
| |
| /* Session-Termination-Request */ |
| { |
| /* |
| Add additional rules of the ABNF (compared to Base definition): |
| |
| |
| <ST-Request> ::= < Diameter Header: 275, REQ, PXY > |
| < Session-Id > |
| { Origin-Host } |
| { Origin-Realm } |
| { Destination-Realm } |
| { Auth-Application-Id } |
| { Termination-Cause } |
| [ User-Name ] |
| [ Destination-Host ] |
| * [ Class ] |
| [ Origin-AAA-Protocol ] |
| [ Origin-State-Id ] |
| * [ Proxy-Info ] |
| * [ Route-Record ] |
| * [ AVP ] |
| */ |
| struct dict_object * cmd; |
| struct local_rules_definition rules[] = |
| { { "Origin-AAA-Protocol", RULE_OPTIONAL, -1, 1 } |
| }; |
| |
| CHECK_dict_search( DICT_COMMAND, CMD_BY_NAME, "Session-Termination-Request", &cmd); |
| PARSE_loc_rules( rules, cmd ); |
| } |
| |
| /* Session-Termination-Answer */ |
| { |
| /* |
| Add additional rules of the ABNF (compared to Base definition): |
| |
| <ST-Answer> ::= < Diameter Header: 275, PXY > |
| < Session-Id > |
| { Result-Code } |
| { Origin-Host } |
| { Origin-Realm } |
| [ User-Name ] |
| * [ Class ] |
| [ Error-Message ] |
| [ Error-Reporting-Host ] |
| * [ Failed-AVP ] |
| [ Origin-AAA-Protocol ] |
| [ Origin-State-Id ] |
| * [ Redirect-Host ] |
| [ Redirect-Host-Usase ] |
| [ Redirect-Max-Cache-Time ] |
| * [ Proxy-Info ] |
| * [ AVP ] |
| */ |
| struct dict_object * cmd; |
| struct local_rules_definition rules[] = |
| { { "Origin-AAA-Protocol", RULE_OPTIONAL, -1, 1 } |
| }; |
| |
| CHECK_dict_search( DICT_COMMAND, CMD_BY_NAME, "Session-Termination-Answer", &cmd); |
| PARSE_loc_rules( rules, cmd ); |
| } |
| |
| /* Abort-Session-Request */ |
| { |
| /* |
| Add additional rules of the ABNF (compared to Base definition): |
| |
| <AS-Request> ::= < Diameter Header: 274, REQ, PXY > |
| < Session-Id > |
| { Origin-Host } |
| { Origin-Realm } |
| { Destination-Realm } |
| { Destination-Host } |
| { Auth-Application-Id } |
| [ User-Name ] |
| [ Origin-AAA-Protocol ] |
| [ Origin-State-Id ] |
| [ NAS-Identifier ] |
| [ NAS-IP-Address ] |
| [ NAS-IPv6-Address ] |
| [ NAS-Port ] |
| [ NAS-Port-Id ] |
| [ NAS-Port-Type ] |
| [ Service-Type ] |
| [ Framed-IP-Address ] |
| [ Framed-IPv6-Prefix ] |
| [ Framed-Interface-Id ] |
| [ Called-Station-Id ] |
| [ Calling-Station-Id ] |
| [ Originating-Line-Info ] |
| [ Acct-Session-Id ] |
| [ Acct-Multi-Session-Id ] |
| [ State ] |
| * [ Class ] |
| * [ Reply-Message ] |
| * [ Proxy-Info ] |
| * [ Route-Record ] |
| * [ AVP ] |
| |
| */ |
| struct dict_object * cmd; |
| struct local_rules_definition rules[] = |
| { { "Origin-AAA-Protocol", RULE_OPTIONAL, -1, 1 } |
| ,{ "NAS-Identifier", RULE_OPTIONAL, -1, 1 } |
| ,{ "NAS-IP-Address", RULE_OPTIONAL, -1, 1 } |
| ,{ "NAS-IPv6-Address", RULE_OPTIONAL, -1, 1 } |
| ,{ "NAS-Port", RULE_OPTIONAL, -1, 1 } |
| ,{ "NAS-Port-Id", RULE_OPTIONAL, -1, 1 } |
| ,{ "NAS-Port-Type", RULE_OPTIONAL, -1, 1 } |
| ,{ "Service-Type", RULE_OPTIONAL, -1, 1 } |
| ,{ "Framed-IP-Address", RULE_OPTIONAL, -1, 1 } |
| ,{ "Framed-IPv6-Prefix", RULE_OPTIONAL, -1, 1 } |
| ,{ "Framed-Interface-Id", RULE_OPTIONAL, -1, 1 } |
| ,{ "Called-Station-Id", RULE_OPTIONAL, -1, 1 } |
| ,{ "Calling-Station-Id", RULE_OPTIONAL, -1, 1 } |
| ,{ "Originating-Line-Info", RULE_OPTIONAL, -1, 1 } |
| ,{ "Acct-Session-Id", RULE_OPTIONAL, -1, 1 } |
| ,{ "Acct-Multi-Session-Id", RULE_OPTIONAL, -1, 1 } |
| ,{ "State", RULE_OPTIONAL, -1, 1 } |
| ,{ "Class", RULE_OPTIONAL, -1,-1 } |
| ,{ "Reply-Message", RULE_OPTIONAL, -1,-1 } |
| }; |
| |
| CHECK_dict_search( DICT_COMMAND, CMD_BY_NAME, "Abort-Session-Request", &cmd); |
| PARSE_loc_rules( rules, cmd ); |
| } |
| |
| /* Abort-Session-Answer */ |
| { |
| /* |
| Add additional rules of the ABNF (compared to Base definition): |
| |
| <AS-Answer> ::= < Diameter Header: 274, PXY > |
| < Session-Id > |
| { Result-Code } |
| { Origin-Host } |
| { Origin-Realm } |
| [ User-Name ] |
| [ Origin-AAA-Protocol ] |
| [ Origin-State-Id ] |
| [ State] |
| [ Error-Message ] |
| [ Error-Reporting-Host ] |
| * [ Failed-AVP ] |
| * [ Redirected-Host ] |
| [ Redirected-Host-Usage ] |
| [ Redirected-Max-Cache-Time ] |
| * [ Proxy-Info ] |
| * [ AVP ] |
| */ |
| struct dict_object * cmd; |
| struct local_rules_definition rules[] = |
| { { "Origin-AAA-Protocol", RULE_OPTIONAL, -1, 1 } |
| ,{ "State", RULE_OPTIONAL, -1, 1 } |
| }; |
| |
| CHECK_dict_search( DICT_COMMAND, CMD_BY_NAME, "Abort-Session-Answer", &cmd); |
| PARSE_loc_rules( rules, cmd ); |
| } |
| |
| /* Accounting-Request */ |
| { |
| /* |
| Add additional rules of the ABNF (compared to Base definition): |
| |
| <AC-Request> ::= < Diameter Header: 271, REQ, PXY > |
| < Session-Id > |
| { Origin-Host } |
| { Origin-Realm } |
| { Destination-Realm } |
| { Accounting-Record-Type } |
| { Accounting-Record-Number } |
| [ Acct-Application-Id ] |
| [ Vendor-Specific-Application-Id ] |
| [ User-Name ] |
| [ Accounting-Sub-Session-Id ] |
| [ Acct-Session-Id ] |
| [ Acct-Multi-Session-Id ] |
| [ Origin-AAA-Protocol ] |
| [ Origin-State-Id ] |
| [ Destination-Host ] |
| [ Event-Timestamp ] |
| [ Acct-Delay-Time ] |
| [ NAS-Identifier ] |
| [ NAS-IP-Address ] |
| [ NAS-IPv6-Address ] |
| [ NAS-Port ] |
| [ NAS-Port-Id ] |
| [ NAS-Port-Type ] |
| * [ Class ] |
| [ Service-Type ] |
| [ Termination-Cause ] |
| [ Accounting-Input-Octets ] |
| [ Accounting-Input-Packets ] |
| [ Accounting-Output-Octets ] |
| [ Accounting-Output-Packets ] |
| [ Acct-Authentic ] |
| [ Accounting-Auth-Method ] |
| [ Acct-Link-Count ] |
| [ Acct-Session-Time ] |
| [ Acct-Tunnel-Connection ] |
| [ Acct-Tunnel-Packets-Lost ] |
| [ Callback-Id ] |
| [ Callback-Number ] |
| [ Called-Station-Id ] |
| [ Calling-Station-Id ] |
| * [ Connection-Info ] |
| [ Originating-Line-Info ] |
| [ Authorization-Lifetime ] |
| [ Session-Timeout ] |
| [ Idle-Timeout ] |
| [ Port-Limit ] |
| [ Accounting-Realtime-Required ] |
| [ Acct-Interim-Interval ] |
| * [ Filter-Id ] |
| * [ NAS-Filter-Rule ] |
| * [ Qos-Filter-Rule ] |
| [ Framed-AppleTalk-Link ] |
| [ Framed-AppleTalk-Network ] |
| [ Framed-AppleTalk-Zone ] |
| [ Framed-Compression ] |
| [ Framed-Interface-Id ] |
| [ Framed-IP-Address ] |
| [ Framed-IP-Netmask ] |
| * [ Framed-IPv6-Prefix ] |
| [ Framed-IPv6-Pool ] |
| * [ Framed-IPv6-Route ] |
| [ Framed-IPX-Network ] |
| [ Framed-MTU ] |
| [ Framed-Pool ] |
| [ Framed-Protocol ] |
| * [ Framed-Route ] |
| [ Framed-Routing ] |
| * [ Login-IP-Host ] |
| * [ Login-IPv6-Host ] |
| [ Login-LAT-Group ] |
| [ Login-LAT-Node ] |
| [ Login-LAT-Port ] |
| [ Login-LAT-Service ] |
| [ Login-Service ] |
| [ Login-TCP-Port ] |
| * [ Tunneling ] |
| * [ Proxy-Info ] |
| * [ Route-Record ] |
| * [ AVP ] |
| */ |
| struct dict_object * cmd; |
| struct local_rules_definition rules[] = |
| { { "Origin-AAA-Protocol", RULE_OPTIONAL, -1, 1 } |
| ,{ "Acct-Delay-Time", RULE_OPTIONAL, -1, 1 } |
| ,{ "NAS-Identifier", RULE_OPTIONAL, -1, 1 } |
| ,{ "NAS-IP-Address", RULE_OPTIONAL, -1, 1 } |
| ,{ "NAS-IPv6-Address", RULE_OPTIONAL, -1, 1 } |
| ,{ "NAS-Port", RULE_OPTIONAL, -1, 1 } |
| ,{ "NAS-Port-Id", RULE_OPTIONAL, -1, 1 } |
| ,{ "NAS-Port-Type", RULE_OPTIONAL, -1, 1 } |
| ,{ "Class", RULE_OPTIONAL, -1,-1 } |
| ,{ "Service-Type", RULE_OPTIONAL, -1, 1 } |
| ,{ "Termination-Cause", RULE_OPTIONAL, -1, 1 } |
| ,{ "Accounting-Input-Octets", RULE_OPTIONAL, -1, 1 } |
| ,{ "Accounting-Input-Packets", RULE_OPTIONAL, -1, 1 } |
| ,{ "Accounting-Output-Octets", RULE_OPTIONAL, -1, 1 } |
| ,{ "Accounting-Output-Packets", RULE_OPTIONAL, -1, 1 } |
| ,{ "Acct-Authentic", RULE_OPTIONAL, -1, 1 } |
| ,{ "Accounting-Auth-Method", RULE_OPTIONAL, -1, 1 } |
| ,{ "Acct-Link-Count", RULE_OPTIONAL, -1, 1 } |
| ,{ "Acct-Session-Time", RULE_OPTIONAL, -1, 1 } |
| ,{ "Acct-Tunnel-Connection", RULE_OPTIONAL, -1, 1 } |
| ,{ "Acct-Tunnel-Packets-Lost", RULE_OPTIONAL, -1, 1 } |
| ,{ "Callback-Id", RULE_OPTIONAL, -1, 1 } |
| ,{ "Callback-Number", RULE_OPTIONAL, -1, 1 } |
| ,{ "Called-Station-Id", RULE_OPTIONAL, -1, 1 } |
| ,{ "Calling-Station-Id", RULE_OPTIONAL, -1, 1 } |
| ,{ "Connect-Info", RULE_OPTIONAL, -1,-1 } |
| ,{ "Originating-Line-Info", RULE_OPTIONAL, -1, 1 } |
| ,{ "Authorization-Lifetime", RULE_OPTIONAL, -1, 1 } |
| ,{ "Session-Timeout", RULE_OPTIONAL, -1, 1 } |
| ,{ "Idle-Timeout", RULE_OPTIONAL, -1, 1 } |
| ,{ "Port-Limit", RULE_OPTIONAL, -1, 1 } |
| ,{ "Filter-Id", RULE_OPTIONAL, -1,-1 } |
| ,{ "NAS-Filter-Rule", RULE_OPTIONAL, -1,-1 } |
| ,{ "QoS-Filter-Rule", RULE_OPTIONAL, -1,-1 } |
| ,{ "Framed-AppleTalk-Link", RULE_OPTIONAL, -1, 1 } |
| ,{ "Framed-AppleTalk-Network", RULE_OPTIONAL, -1, 1 } |
| ,{ "Framed-AppleTalk-Zone", RULE_OPTIONAL, -1, 1 } |
| ,{ "Framed-Compression", RULE_OPTIONAL, -1, 1 } |
| ,{ "Framed-Interface-Id", RULE_OPTIONAL, -1, 1 } |
| ,{ "Framed-IP-Address", RULE_OPTIONAL, -1, 1 } |
| ,{ "Framed-IPv6-Prefix", RULE_OPTIONAL, -1,-1 } |
| ,{ "Framed-IPv6-Pool", RULE_OPTIONAL, -1, 1 } |
| ,{ "Framed-IPv6-Route", RULE_OPTIONAL, -1,-1 } |
| ,{ "Framed-IP-Netmask", RULE_OPTIONAL, -1, 1 } |
| ,{ "Framed-Route", RULE_OPTIONAL, -1,-1 } |
| ,{ "Framed-Pool", RULE_OPTIONAL, -1, 1 } |
| ,{ "Framed-IPX-Network", RULE_OPTIONAL, -1, 1 } |
| ,{ "Framed-MTU", RULE_OPTIONAL, -1, 1 } |
| ,{ "Framed-Protocol", RULE_OPTIONAL, -1, 1 } |
| ,{ "Framed-Routing", RULE_OPTIONAL, -1, 1 } |
| ,{ "Login-IP-Host", RULE_OPTIONAL, -1,-1 } |
| ,{ "Login-IPv6-Host", RULE_OPTIONAL, -1,-1 } |
| ,{ "Login-LAT-Group", RULE_OPTIONAL, -1, 1 } |
| ,{ "Login-LAT-Node", RULE_OPTIONAL, -1, 1 } |
| ,{ "Login-LAT-Port", RULE_OPTIONAL, -1, 1 } |
| ,{ "Login-LAT-Service", RULE_OPTIONAL, -1, 1 } |
| ,{ "Login-Service", RULE_OPTIONAL, -1, 1 } |
| ,{ "Login-TCP-Port", RULE_OPTIONAL, -1, 1 } |
| ,{ "Tunneling", RULE_OPTIONAL, -1,-1 } |
| }; |
| |
| CHECK_dict_search( DICT_COMMAND, CMD_BY_NAME, "Accounting-Request", &cmd); |
| PARSE_loc_rules( rules, cmd ); |
| } |
| |
| /* Accounting-Answer */ |
| { |
| /* |
| Add additional rules of the ABNF (compared to Base definition): |
| |
| <AC-Answer> ::= < Diameter Header: 271, PXY > |
| < Session-Id > |
| { Result-Code } |
| { Origin-Host } |
| { Origin-Realm } |
| { Accounting-Record-Type } |
| { Accounting-Record-Number } |
| [ Acct-Application-Id ] |
| [ Vendor-Specific-Application-Id ] |
| [ User-Name ] |
| [ Accounting-Sub-Session-Id ] |
| [ Acct-Session-Id ] |
| [ Acct-Multi-Session-Id ] |
| [ Event-Timestamp ] |
| [ Error-Message ] |
| [ Error-Reporting-Host ] |
| * [ Failed-AVP ] |
| [ Origin-AAA-Protocol ] |
| [ Origin-State-Id ] |
| [ NAS-Identifier ] |
| [ NAS-IP-Address ] |
| [ NAS-IPv6-Address ] |
| [ NAS-Port ] |
| [ NAS-Port-Id ] |
| [ NAS-Port-Type ] |
| [ Service-Type ] |
| [ Termination-Cause ] |
| [ Accounting-Realtime-Required ] |
| [ Acct-Interim-Interval ] |
| * [ Class ] |
| * [ Proxy-Info ] |
| * [ Route-Record ] |
| * [ AVP ] |
| |
| */ |
| struct dict_object * cmd; |
| struct local_rules_definition rules[] = |
| { { "Origin-AAA-Protocol", RULE_OPTIONAL, -1, 1 } |
| ,{ "NAS-Identifier", RULE_OPTIONAL, -1, 1 } |
| ,{ "NAS-IP-Address", RULE_OPTIONAL, -1, 1 } |
| ,{ "NAS-IPv6-Address", RULE_OPTIONAL, -1, 1 } |
| ,{ "NAS-Port", RULE_OPTIONAL, -1, 1 } |
| ,{ "NAS-Port-Id", RULE_OPTIONAL, -1, 1 } |
| ,{ "NAS-Port-Type", RULE_OPTIONAL, -1, 1 } |
| ,{ "Service-Type", RULE_OPTIONAL, -1, 1 } |
| ,{ "Termination-Cause", RULE_OPTIONAL, -1, 1 } |
| }; |
| |
| CHECK_dict_search( DICT_COMMAND, CMD_BY_NAME, "Accounting-Answer", &cmd); |
| PARSE_loc_rules( rules, cmd ); |
| } |
| } |
| |
| LOG_D( "Extension 'Dictionary definitions for NASREQ' initialized"); |
| return 0; |
| } |
| |
| EXTENSION_ENTRY("dict_nasreq", dnr_entry); |