diff --git a/configure.ac b/configure.ac index d57cd05134..5502a904c9 100644 --- a/configure.ac +++ b/configure.ac @@ -65,8 +65,8 @@ AC_PROG_CC AC_PROG_CPP AC_PROG_INSTALL AC_PROG_AWK -AC_PROG_YACC -AC_PROG_LEX +#AC_PROG_YACC +#AC_PROG_LEX AM_PROG_AR dnl libtool @@ -294,8 +294,8 @@ AC_CHECK_LIB([gnutls], [gnutls_global_init], [LIBS="${LIBS} -lgnutls"]) PKG_CHECK_MODULES([MONGOC], libmongoc-1.0 >= 1.6.3) LIBS="$LIBS $MONGOC_LIBS" -PKG_CHECK_MODULES([LIBXML2], libxml-2.0 >= 2.9.1) -LIBS="$LIBS $LIBXML2_LIBS" +#PKG_CHECK_MODULES([LIBXML2], libxml-2.0 >= 2.9.1) +#LIBS="$LIBS $LIBXML2_LIBS" ##################### #### Conclusion. #### @@ -315,7 +315,9 @@ AC_CONFIG_FILES([lib/base/Makefile]) AC_CONFIG_FILES([lib/s1ap/asn1c/Makefile]) AC_CONFIG_FILES([lib/s1ap/Makefile]) AC_CONFIG_FILES([lib/nas/Makefile]) -AC_CONFIG_FILES([lib/fd/extensions/dict_legacy_xml/Makefile]) +AC_CONFIG_FILES([lib/fd/extensions/dict_nasreq/Makefile]) +AC_CONFIG_FILES([lib/fd/extensions/dict_dcca/Makefile]) +AC_CONFIG_FILES([lib/fd/extensions/dict_dcca_3gpp/Makefile]) AC_CONFIG_FILES([lib/fd/extensions/dict_s6a/Makefile]) AC_CONFIG_FILES([lib/fd/extensions/Makefile]) AC_CONFIG_FILES([lib/fd/gx/Makefile]) diff --git a/lib/fd/extensions/Makefile.am b/lib/fd/extensions/Makefile.am index f282e416cf..759fe06bb5 100644 --- a/lib/fd/extensions/Makefile.am +++ b/lib/fd/extensions/Makefile.am @@ -1,6 +1,6 @@ ## Process this file with automake to produce Makefile.in -SUBDIRS = dict_legacy_xml dict_s6a +SUBDIRS = dict_nasreq dict_dcca dict_dcca_3gpp dict_s6a MAINTAINERCLEANFILES = Makefile.in MOSTLYCLEANFILES = *.stackdump diff --git a/lib/fd/extensions/dict_dcca/Makefile.am b/lib/fd/extensions/dict_dcca/Makefile.am new file mode 100644 index 0000000000..0d5f82e800 --- /dev/null +++ b/lib/fd/extensions/dict_dcca/Makefile.am @@ -0,0 +1,17 @@ +## Process this file with automake to produce Makefile.in + +pkglib_LTLIBRARIES = dict_dcca.la + +dict_dcca_la_SOURCES = \ + dict_dcca.c + +AM_LDFLAGS = \ + -module -avoid-version -shared + +AM_CFLAGS = \ + -Wall -Werror + +MAINTAINERCLEANFILES = Makefile.in +MOSTLYCLEANFILES = *.stackdump + +EXTRA_DIST = .libs $(pkglib_LTLIBRARIES) diff --git a/lib/fd/extensions/dict_dcca/dict_dcca.c b/lib/fd/extensions/dict_dcca/dict_dcca.c new file mode 100644 index 0000000000..0b548ac9f0 --- /dev/null +++ b/lib/fd/extensions/dict_dcca/dict_dcca.c @@ -0,0 +1,1487 @@ +/**************** + Contributed by: Konstantin Chekushin and Thomas Klausner + License: same as freeDiameter +****************/ + + +/* + * Dictionary definitions of objects specified in DCCA (rfc4006). + */ +#include + + +/* 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 dict_dcca_entry(char * conffile) +{ + struct dict_object * dcca; + TRACE_ENTRY("%p", conffile); + + /* Applications section */ + { + /* DCCA */ + { + struct dict_application_data data = { 4, "Diameter Credit Control Application" }; + CHECK_dict_new( DICT_APPLICATION, &data, NULL, &dcca); + } + } + + /* Result codes */ + { + struct dict_object *ResultCodeType; + CHECK_dict_search(DICT_TYPE, TYPE_BY_NAME, "Enumerated*(Result-Code)", &ResultCodeType); + + { + struct dict_enumval_data error_code = {"END_USER_SERVICE_DENIED", + { .u32 = 4010}}; + CHECK_dict_new(DICT_ENUMVAL, &error_code, ResultCodeType, NULL); + } + { + struct dict_enumval_data error_code = {"CREDIT_CONTROL_NOT_APPLICABLE", + { .u32 = 4011}}; + CHECK_dict_new(DICT_ENUMVAL, &error_code, ResultCodeType, NULL); + } + { + struct dict_enumval_data error_code = {"CREDIT_LIMIT_REACHED", + { .u32 = 4012}}; + CHECK_dict_new(DICT_ENUMVAL, &error_code, ResultCodeType, NULL); + } + { + struct dict_enumval_data error_code = {"USER_UNKNOWN", + { .u32 = 5030}}; + CHECK_dict_new(DICT_ENUMVAL, &error_code, ResultCodeType, NULL); + } + { + struct dict_enumval_data error_code = {"RATING_FAILED", + { .u32 = 5031}}; + CHECK_dict_new(DICT_ENUMVAL, &error_code, ResultCodeType, NULL); + } + + } + + + + /* AVP section */ + { + struct dict_object * Address_type; + struct dict_object * UTF8String_type; + struct dict_object * DiameterIdentity_type; + struct dict_object * DiameterURI_type; + struct dict_object * Time_type; + struct dict_object * IPFilterRule_type; + + CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "Address", &Address_type); + CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "UTF8String", &UTF8String_type); + CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "DiameterIdentity", &DiameterIdentity_type); + CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "DiameterURI", &DiameterURI_type); + CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "Time", &Time_type); + CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "IPFilterRule", &IPFilterRule_type); + + + /* CC-Correlation-Id */ + { + /* + OctetString. + */ + struct dict_avp_data data = { + 411, /* Code */ + 0, /* Vendor */ + "CC-Correlation-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 , NULL, NULL); + } + + /* CC-Input-Octets */ + { + /* + Unsigned64. + */ + struct dict_avp_data data = { + 412, /* Code */ + 0, /* Vendor */ + "CC-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); + } + + /* CC-Output-Octets */ + { + /* + Unsigned64. + */ + struct dict_avp_data data = { + 414, /* Code */ + 0, /* Vendor */ + "CC-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); + } + + /* CC-Request-Number */ + { + /* + Unsigned32. + */ + struct dict_avp_data data = { + 415, /* Code */ + 0, /* Vendor */ + "CC-Request-Number", /* 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); + } + + /* CC-Request-Type */ + { + /* + Enumerated. + */ + + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(CC-Request-Type)", NULL, NULL, NULL }; + struct dict_enumval_data t_1 = { "INITIAL_REQUEST", { .i32 = 1 }}; + struct dict_enumval_data t_2 = { "UPDATE_REQUEST", { .i32 = 2 }}; + struct dict_enumval_data t_3 = { "TERMINATION_REQUEST", { .i32 = 3 }}; + struct dict_enumval_data t_4 = { "EVENT_REQUEST", { .i32 = 4 }}; + + + struct dict_avp_data data = { + 416, /* Code */ + 0, /* Vendor */ + "CC-Request-Type", /* Name */ + AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + /* Create the Enumerated type, and then the AVP */ + CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type); + CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL); + CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL); + CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL); + CHECK_dict_new( DICT_ENUMVAL, &t_4 , type, NULL); + CHECK_dict_new( DICT_AVP, &data , type, NULL); + } + + + /* CC-Service-Specific-Units */ + { + /* + Unsigned64. + */ + struct dict_avp_data data = { + 417, /* Code */ + 0, /* Vendor */ + "CC-Service-Specific-Units", /* 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); + } + + /* CC-Session-Failover */ + { + /* + Enumerated. + */ + + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(CC-Session-Failover)" , NULL, NULL, NULL }; + struct dict_enumval_data t_1 = { "FAILOVER_NOT_SUPPORTED", { .i32 = 0 }}; + struct dict_enumval_data t_2 = { "FAILOVER_SUPPORTED", { .i32 = 1 }}; + + + struct dict_avp_data data = { + 418, /* Code */ + 0, /* Vendor */ + "CC-Session-Failover", /* Name */ + AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + /* Create the Enumerated type, and then the AVP */ + CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type); + CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL); + CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL); + CHECK_dict_new( DICT_AVP, &data , type, NULL); + } + + /* CC-Sub-Session-Id */ + { + /* + Unsigned64. + */ + struct dict_avp_data data = { + 419, /* Code */ + 0, /* Vendor */ + "CC-Sub-Session-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); + } + + /* CC-Time */ + { + /* + Unsigned32. + */ + struct dict_avp_data data = { + 420, /* Code */ + 0, /* Vendor */ + "CC-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); + } + + /* CC-Total-Octets */ + { + /* + Unsigned64. + */ + struct dict_avp_data data = { + 421, /* Code */ + 0, /* Vendor */ + "CC-Total-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); + } + + /* CC-Unit-Type */ + { + /* + Enumerated. + */ + + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(CC-Unit-Type)" , NULL, NULL, NULL }; + struct dict_enumval_data t_1 = { "TIME", { .i32 = 0 }}; + struct dict_enumval_data t_2 = { "MONEY", { .i32 = 1 }}; + struct dict_enumval_data t_3 = { "TOTAL-OCTETS", { .i32 = 2 }}; + struct dict_enumval_data t_4 = { "INPUT-OCTETS", { .i32 = 3 }}; + struct dict_enumval_data t_5 = { "OUTPUT-OCTETS", { .i32 = 4 }}; + struct dict_enumval_data t_6 = { "SERVICE-SPECIFIC-UNITS", { .i32 = 5 }}; + + + struct dict_avp_data data = { + 454, /* Code */ + 0, /* Vendor */ + "CC-Unit-Type", /* Name */ + AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + /* Create the Enumerated type, and then the AVP */ + CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type); + CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL); + CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL); + CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL); + CHECK_dict_new( DICT_ENUMVAL, &t_4 , type, NULL); + CHECK_dict_new( DICT_ENUMVAL, &t_5 , type, NULL); + CHECK_dict_new( DICT_ENUMVAL, &t_6 , type, NULL); + CHECK_dict_new( DICT_AVP, &data , type, NULL); + } + + /* Check-Balance-Result */ + { + /* + Enumerated. + */ + + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Check-Balance-Result)" , NULL, NULL, NULL }; + struct dict_enumval_data t_1 = { "ENOUGH_CREDIT", { .i32 = 0 }}; + struct dict_enumval_data t_2 = { "NO_CREDIT", { .i32 = 1 }}; + + + struct dict_avp_data data = { + 422, /* Code */ + 0, /* Vendor */ + "Check-Balance-Result", /* Name */ + AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + /* Create the Enumerated type, and then the AVP */ + CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type); + CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL); + CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL); + CHECK_dict_new( DICT_AVP, &data , type, NULL); + } + + /* Cost-Unit */ + { + /* + UTF8String. + */ + struct dict_avp_data data = { + 424, /* Code */ + 0, /* Vendor */ + "Cost-Unit", /* 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); + } + + /* Credit-Control */ + { + /* + Enumerated. + */ + + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Credit-Control)" , NULL, NULL, NULL }; + struct dict_enumval_data t_1 = { "CREDIT_AUTHORIZATION", { .i32 = 0 }}; + struct dict_enumval_data t_2 = { "RE_AUTHORIZATION", { .i32 = 1 }}; + + struct dict_avp_data data = { + 426, /* Code */ + 0, /* Vendor */ + "Credit-Control", /* Name */ + AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + /* Create the Enumerated type, and then the AVP */ + CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type); + CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL); + CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL); + CHECK_dict_new( DICT_AVP, &data , type, NULL); + } + + /* Credit-Control-Failure-Handling */ + { + /* + Enumerated. + */ + + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Credit-Control-Failure-Handling)" , NULL, NULL, NULL }; + struct dict_enumval_data t_1 = { "TERMINATE", { .i32 = 0 }}; + struct dict_enumval_data t_2 = { "CONTINUE", { .i32 = 1 }}; + struct dict_enumval_data t_3 = { "RETRY_AND_TERMINATE", { .i32 = 2 }}; + + struct dict_avp_data data = { + 427, /* Code */ + 0, /* Vendor */ + "Credit-Control-Failure-Handling", /* Name */ + AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + /* Create the Enumerated type, and then the AVP */ + CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type); + CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL); + CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL); + CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL); + CHECK_dict_new( DICT_AVP, &data , type, NULL); + } + + /* Currency-Code */ + { + /* + Unsigned32. + */ + struct dict_avp_data data = { + 425, /* Code */ + 0, /* Vendor */ + "Currency-Code", /* 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); + } + + /* Direct-Debiting-Failure-Handling */ + { + /* + Enumerated. + */ + + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Direct-Debiting-Failure-Handling)" , NULL, NULL, NULL }; + struct dict_enumval_data t_1 = { "TERMINATE_OR_BUFFER", { .i32 = 0 }}; + struct dict_enumval_data t_2 = { "CONTINUE", { .i32 = 1 }}; + + struct dict_avp_data data = { + 428, /* Code */ + 0, /* Vendor */ + "Direct-Debiting-Failure-Handling", /* Name */ + AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + /* Create the Enumerated type, and then the AVP */ + CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type); + CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL); + CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL); + CHECK_dict_new( DICT_AVP, &data , type, NULL); + } + + /* Exponent */ + { + /* + Integer32. + */ + struct dict_avp_data data = { + 429, /* Code */ + 0, /* Vendor */ + "Exponent", /* Name */ + AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + CHECK_dict_new( DICT_AVP, &data , NULL, NULL); + } + + /* Final-Unit-Action */ + { + /* + Enumerated. + */ + + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Final-Unit-Action)" , NULL, NULL, NULL }; + struct dict_enumval_data t_1 = { "TERMINATE", { .i32 = 0 }}; + struct dict_enumval_data t_2 = { "REDIRECT", { .i32 = 1 }}; + struct dict_enumval_data t_3 = { "RESTRICT_ACCESS", { .i32 = 2 }}; + + struct dict_avp_data data = { + 449, /* Code */ + 0, /* Vendor */ + "Final-Unit-Action", /* Name */ + AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + /* Create the Enumerated type, and then the AVP */ + CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type); + CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL); + CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL); + CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL); + CHECK_dict_new( DICT_AVP, &data , type, NULL); + } + + /* G-S-U-Pool-Identifier */ + { + /* + Unsigned32. + */ + struct dict_avp_data data = { + 453, /* Code */ + 0, /* Vendor */ + "G-S-U-Pool-Identifier", /* 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); + } + + /* Multiple-Services-Indicator */ + { + /* + Enumerated. + */ + + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Multiple-Services-Indicator)" , NULL, NULL, NULL }; + struct dict_enumval_data t_1 = { "MULTIPLE_SERVICES_NOT_SUPPORTED", { .i32 = 0 }}; + struct dict_enumval_data t_2 = { "MULTIPLE_SERVICES_SUPPORTED", { .i32 = 1 }}; + + struct dict_avp_data data = { + 455, /* Code */ + 0, /* Vendor */ + "Multiple-Services-Indicator", /* Name */ + AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + /* Create the Enumerated type, and then the AVP */ + CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type); + CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL); + CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL); + CHECK_dict_new( DICT_AVP, &data , type, NULL); + } + + /* Rating-Group */ + { + /* + Unsigned32. + */ + struct dict_avp_data data = { + 432, /* Code */ + 0, /* Vendor */ + "Rating-Group", /* 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); + } + + /* Redirect-Address-Type */ + { + /* + Enumerated. + */ + + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Redirect-Address-Type)" , NULL, NULL, NULL }; + struct dict_enumval_data t_1 = { "IPV4_ADDRESS", { .i32 = 0 }}; + struct dict_enumval_data t_2 = { "IPV6_ADDRESS", { .i32 = 1 }}; + struct dict_enumval_data t_3 = { "URL", { .i32 = 2 }}; + struct dict_enumval_data t_4 = { "SIP_URI", { .i32 = 3 }}; + + struct dict_avp_data data = { + 433, /* Code */ + 0, /* Vendor */ + "Redirect-Address-Type", /* Name */ + AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + /* Create the Enumerated type, and then the AVP */ + CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type); + CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL); + CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL); + CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL); + CHECK_dict_new( DICT_ENUMVAL, &t_4 , type, NULL); + CHECK_dict_new( DICT_AVP, &data , type, NULL); + } + + /* Redirect-Server-Address */ + { + /* + UTF8String. + */ + struct dict_avp_data data = { + 435, /* Code */ + 0, /* Vendor */ + "Redirect-Server-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 , UTF8String_type, NULL); + } + + /* Requested-Action */ + { + /* + Enumerated. + */ + + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Requested-Action)" , NULL, NULL, NULL }; + struct dict_enumval_data t_1 = { "DIRECT_DEBITING", { .i32 = 0 }}; + struct dict_enumval_data t_2 = { "REFUND_ACCOUNT", { .i32 = 1 }}; + struct dict_enumval_data t_3 = { "CHECK_BALANCE", { .i32 = 2 }}; + struct dict_enumval_data t_4 = { "PRICE_ENQUIRY", { .i32 = 3 }}; + + struct dict_avp_data data = { + 436, /* Code */ + 0, /* Vendor */ + "Requested-Action", /* Name */ + AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + /* Create the Enumerated type, and then the AVP */ + CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type); + CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL); + CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL); + CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL); + CHECK_dict_new( DICT_ENUMVAL, &t_4 , type, NULL); + CHECK_dict_new( DICT_AVP, &data , type, NULL); + } + + /* Restriction-Filter-Rule */ + { + /* + IPFiltrRule. + */ + struct dict_avp_data data = { + 438, /* Code */ + 0, /* Vendor */ + "Restriction-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); + } + /*Service-Context-Id */ + { + /* + UTF8String. + */ + struct dict_avp_data data = { + 461, /* Code */ + 0, /* Vendor */ + "Service-Context-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); + } + + /* Service-Identifier */ + { + /* + Unsigned32. + */ + struct dict_avp_data data = { + 439, /* Code */ + 0, /* Vendor */ + "Service-Identifier", /* 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); + } + + /* Service-Parameter-Type */ + { + /* + Unsigned32. + */ + struct dict_avp_data data = { + 441, /* Code */ + 0, /* Vendor */ + "Service-Parameter-Type", /* 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); + } + + /* Service-Parameter-Value */ + { + /* + OctetString. + */ + struct dict_avp_data data = { + 442, /* Code */ + 0, /* Vendor */ + "Service-Parameter-Value", /* 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); + } + + /* Subscription-Id-Data */ + { + /* + UTF8String. + */ + struct dict_avp_data data = { + 444, /* Code */ + 0, /* Vendor */ + "Subscription-Id-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 , UTF8String_type, NULL); + } + + /* Subscription-Id-Type */ + { + /* + Enumerated. + */ + + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Subscription-Id-Type)" , NULL, NULL, NULL }; + struct dict_enumval_data t_1 = { "END_USER_E164", { .i32 = 0 }}; + struct dict_enumval_data t_2 = { "END_USER_IMSI", { .i32 = 1 }}; + struct dict_enumval_data t_3 = { "END_USER_SIP_URI", { .i32 = 2 }}; + struct dict_enumval_data t_4 = { "END_USER_NAI", { .i32 = 3 }}; + + struct dict_avp_data data = { + 450, /* Code */ + 0, /* Vendor */ + "Subscription-Id-Type", /* Name */ + AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + /* Create the Enumerated type, and then the AVP */ + CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type); + CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL); + CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL); + CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL); + CHECK_dict_new( DICT_ENUMVAL, &t_4 , type, NULL); + CHECK_dict_new( DICT_AVP, &data , type, NULL); + } + + /* Tariff-Change-Usage */ + { + /* + Enumerated. + */ + + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Tariff-Change-Usage)" , NULL, NULL, NULL }; + struct dict_enumval_data t_1 = { "UNIT_BEFORE_TARIFF_CHANGE", { .i32 = 0 }}; + struct dict_enumval_data t_2 = { "UNIT_AFTER_TARIFF_CHANGE", { .i32 = 1 }}; + struct dict_enumval_data t_3 = { "UNIT_INDETERMINATE", { .i32 = 2 }}; + + struct dict_avp_data data = { + 452, /* Code */ + 0, /* Vendor */ + "Tariff-Change-Usage", /* Name */ + AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + /* Create the Enumerated type, and then the AVP */ + CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type); + CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL); + CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL); + CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL); + CHECK_dict_new( DICT_AVP, &data , type, NULL); + } + + /* Tariff-Time-Change */ + { + /* + Time. + */ + struct dict_avp_data data = { + 451, /* Code */ + 0, /* Vendor */ + "Tariff-Time-Change", /* 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 , Time_type, NULL); + } + + /* User-Equipment-Info-Type */ + { + /* + Enumerated. + */ + + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(User-Equipment-Info-Type)" , NULL, NULL, NULL }; + struct dict_enumval_data t_1 = { "IMEISV", { .i32 = 0 }}; + struct dict_enumval_data t_2 = { "MAC", { .i32 = 1 }}; + struct dict_enumval_data t_3 = { "EUI64", { .i32 = 2 }}; + + struct dict_avp_data data = { + 459, /* Code */ + 0, /* Vendor */ + "User-Equipment-Info-Type", /* Name */ + AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + /* Create the Enumerated type, and then the AVP */ + CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type); + CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL); + CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL); + CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL); + CHECK_dict_new( DICT_AVP, &data , type, NULL); + } + + /* User-Equipment-Info-Value */ + { + /* + OctetString. + */ + struct dict_avp_data data = { + 460, /* Code */ + 0, /* Vendor */ + "User-Equipment-Info-Value", /* 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); + } + + /* Value-Digits */ + { + /* + Integer64. + */ + struct dict_avp_data data = { + 447, /* Code */ + 0, /* Vendor */ + "Value-Digits", /* Name */ + AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER64 /* base type of data */ + }; + CHECK_dict_new( DICT_AVP, &data , NULL, NULL); + } + + /* Validity-Time */ + { + /* + Unsigned32. + */ + struct dict_avp_data data = { + 448, /* Code */ + 0, /* Vendor */ + "Validity-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); + } + + + /* Grouped AVPs below since they have dependencies on types above */ + + /* Redirect-Server */ + { + /* + Grouped + */ + struct dict_object * avp; + struct dict_avp_data data = { + 434, /* Code */ + 0, /* Vendor */ + "Redirect-Server", /* 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[] = { + { "Redirect-Address-Type", RULE_REQUIRED, -1, 1 }, + { "Redirect-Server-Address", RULE_REQUIRED, -1, 1 } + }; + CHECK_dict_new( DICT_AVP, &data , NULL, &avp); + PARSE_loc_rules( rules, avp ); + } + + /* Service-Parameter-Info */ + { + /* + Grouped + */ + struct dict_object * avp; + struct dict_avp_data data = { + 440, /* Code */ + 0, /* Vendor */ + "Service-Parameter-Info", /* 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[] = { + { "Service-Parameter-Type", RULE_REQUIRED, -1, 1 }, + { "Service-Parameter-Value", RULE_REQUIRED, -1, 1 } + }; + CHECK_dict_new( DICT_AVP, &data , NULL, &avp); + PARSE_loc_rules( rules, avp ); + } + + /* Subscription-Id */ + { + /* + Grouped + */ + struct dict_object * avp; + struct dict_avp_data data = { + 443, /* Code */ + 0, /* Vendor */ + "Subscription-Id", /* 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[] = { + { "Subscription-Id-Type", RULE_REQUIRED, -1, 1 }, + { "Subscription-Id-Data", RULE_REQUIRED, -1, 1 } + }; + CHECK_dict_new( DICT_AVP, &data , NULL, &avp); + PARSE_loc_rules( rules, avp ); + } + + /* Unit-Value */ + { + /* + Grouped + */ + struct dict_object * avp; + struct dict_avp_data data = { + 445, /* Code */ + 0, /* Vendor */ + "Unit-Value", /* 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[] = { + { "Value-Digits", RULE_REQUIRED, -1, 1 }, + { "Exponent", RULE_OPTIONAL, -1, 1 } + }; + CHECK_dict_new( DICT_AVP, &data , NULL, &avp); + PARSE_loc_rules( rules, avp ); + } + + /* User-Equipment-Info */ + { + /* + Grouped + */ + struct dict_object * avp; + struct dict_avp_data data = { + 458, /* Code */ + 0, /* Vendor */ + "User-Equipment-Info", /* 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[] = { + { "User-Equipment-Info-Type", RULE_REQUIRED, -1, 1 }, + { "User-Equipment-Info-Value", RULE_REQUIRED, -1, 1 } + }; + CHECK_dict_new( DICT_AVP, &data , NULL, &avp); + PARSE_loc_rules( rules, avp ); + } + + /* grouped AVPs using grouped AVPs */ + + /* CC-Money */ + { + /* + Grouped + */ + struct dict_object * avp; + struct dict_avp_data data = { + 413, /* Code */ + 0, /* Vendor */ + "CC-Money", /* 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[] = { + { "Unit-Value", RULE_REQUIRED, -1, 1 }, + { "Currency-Code", RULE_OPTIONAL, -1, 1 } + }; + CHECK_dict_new( DICT_AVP, &data , NULL, &avp); + PARSE_loc_rules( rules, avp ); + } + + /* Cost-Information */ + { + /* + Grouped + */ + struct dict_object * avp; + struct dict_avp_data data = { + 423, /* Code */ + 0, /* Vendor */ + "Cost-Information", /* 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[] = { + { "Unit-Value", RULE_REQUIRED, -1, 1 }, + { "Currency-Code", RULE_REQUIRED, -1, 1 }, + { "Cost-Unit", RULE_OPTIONAL, -1, 1 } + }; + CHECK_dict_new( DICT_AVP, &data , NULL, &avp); + PARSE_loc_rules( rules, avp ); + } + + /* Final-Unit-Indication */ + { + /* + Grouped + */ + struct dict_object * avp; + struct dict_avp_data data = { + 430, /* Code */ + 0, /* Vendor */ + "Final-Unit-Indication", /* 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[] = { + { "Final-Unit-Action", RULE_REQUIRED, -1, 1 }, + { "Restriction-Filter-Rule", RULE_OPTIONAL, -1, -1 }, + { "Filter-Id", RULE_OPTIONAL, -1, -1 }, + { "Redirect-Server", RULE_OPTIONAL, -1, 1 }, + }; + CHECK_dict_new( DICT_AVP, &data , NULL, &avp); + PARSE_loc_rules( rules, avp ); + } + + /* Granted-Service-Unit */ + { + /* + Grouped + */ + struct dict_object * avp; + struct dict_avp_data data = { + 431, /* Code */ + 0, /* Vendor */ + "Granted-Service-Unit", /* 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[] = { + { "Tariff-Time-Change", RULE_OPTIONAL, -1, 1 }, + { "CC-Time", RULE_OPTIONAL, -1, 1 }, + { "CC-Money", RULE_OPTIONAL, -1, 1 }, + { "CC-Total-Octets", RULE_OPTIONAL, -1, 1 }, + { "CC-Input-Octets", RULE_OPTIONAL, -1, 1 }, + { "CC-Output-Octets", RULE_OPTIONAL, -1, 1 }, + { "CC-Service-Specific-Units", RULE_OPTIONAL, -1, 1 } + /* plus any additional AVPs { "AVP", RULE_OPTIONAL, -1, -1 } */ + }; + CHECK_dict_new( DICT_AVP, &data , NULL, &avp); + PARSE_loc_rules( rules, avp ); + } + + /* G-S-U-Pool-Reference */ + { + /* + Grouped + */ + struct dict_object * avp; + struct dict_avp_data data = { + 457, /* Code */ + 0, /* Vendor */ + "G-S-U-Pool-Reference", /* 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[] = { + { "G-S-U-Pool-Identifier", RULE_REQUIRED, -1, 1 }, + { "CC-Unit-Type", RULE_REQUIRED, -1, 1 }, + { "Unit-Value", RULE_REQUIRED, -1, 1 } + }; + CHECK_dict_new( DICT_AVP, &data , NULL, &avp); + PARSE_loc_rules( rules, avp ); + } + + /* Requested-Service-Unit */ + { + /* + Grouped + */ + struct dict_object * avp; + struct dict_avp_data data = { + 437, /* Code */ + 0, /* Vendor */ + "Requested-Service-Unit", /* 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[] = { + { "CC-Time", RULE_OPTIONAL, -1, 1 }, + { "CC-Money", RULE_OPTIONAL, -1, 1 }, + { "CC-Total-Octets", RULE_OPTIONAL, -1, 1 }, + { "CC-Input-Octets", RULE_OPTIONAL, -1, 1 }, + { "CC-Output-Octets", RULE_OPTIONAL, -1, 1 }, + { "CC-Service-Specific-Units", RULE_OPTIONAL, -1, 1 } + /* plus any additional AVPs { "AVP", RULE_OPTIONAL, -1, -1 } */ + }; + CHECK_dict_new( DICT_AVP, &data , NULL, &avp); + PARSE_loc_rules( rules, avp ); + } + + /* Used-Service-Unit */ + { + /* + Grouped + */ + struct dict_object * avp; + struct dict_avp_data data = { + 446, /* Code */ + 0, /* Vendor */ + "Used-Service-Unit", /* 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[] = { + { "Tariff-Change-Usage", RULE_OPTIONAL, -1, 1 }, + { "CC-Time", RULE_OPTIONAL, -1, 1 }, + { "CC-Money", RULE_OPTIONAL, -1, 1 }, + { "CC-Total-Octets", RULE_OPTIONAL, -1, 1 }, + { "CC-Input-Octets", RULE_OPTIONAL, -1, 1 }, + { "CC-Output-Octets", RULE_OPTIONAL, -1, 1 }, + { "CC-Service-Specific-Units", RULE_OPTIONAL, -1, 1 } + /* plus any additional AVPs { "AVP", RULE_OPTIONAL, -1, -1 } */ + }; + CHECK_dict_new( DICT_AVP, &data , NULL, &avp); + PARSE_loc_rules( rules, avp ); + } + + /* at least three levels of grouping */ + /* Multiple-Services-Credit-Control */ + { + /* + Grouped + */ + struct dict_object * avp; + struct dict_avp_data data = { + 456, /* Code */ + 0, /* Vendor */ + "Multiple-Services-Credit-Control", /* 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[] = { + { "Granted-Service-Unit", RULE_OPTIONAL, -1, 1 }, + { "Requested-Service-Unit", RULE_OPTIONAL, -1, 1 }, + { "Used-Service-Unit", RULE_OPTIONAL, -1, -1 }, + { "Tariff-Change-Usage", RULE_OPTIONAL, -1, 1 }, + { "Service-Identifier", RULE_OPTIONAL, -1, -1 }, + { "Rating-Group", RULE_OPTIONAL, -1, 1 }, + { "G-S-U-Pool-Reference", RULE_OPTIONAL, -1, -1 }, + { "Validity-Time", RULE_OPTIONAL, -1, 1 }, + { "Result-Code", RULE_OPTIONAL, -1, 1 }, + { "Final-Unit-Indication", RULE_OPTIONAL, -1, 1 } + /* plus any additional AVPs { "AVP", RULE_OPTIONAL, -1, -1 } */ + }; + CHECK_dict_new( DICT_AVP, &data , NULL, &avp); + PARSE_loc_rules( rules, avp ); + } + + + } + + + /* Commands section */ + { + /* Credit-Control-Request (CCR) Command */ + { + /* + From RFC 4006: + + 3.1. Credit-Control-Request (CCR) Command + + The Credit-Control-Request message (CCR) is indicated by the + command-code field being set to 272 and the 'R' bit being set in the + Command Flags field. It is used between the Diameter credit-control + client and the credit-control server to request credit authorization + for a given service. + + The Auth-Application-Id MUST be set to the value 4, indicating the + Diameter credit-control application. + + Message Format + + ::= < Diameter Header: 272, REQ, PXY > + < Session-Id > + { Origin-Host } + { Origin-Realm } + { Destination-Realm } + { Auth-Application-Id } + { Service-Context-Id } + { CC-Request-Type } + { CC-Request-Number } + [ Destination-Host ] + [ User-Name ] + [ CC-Sub-Session-Id ] + [ Acct-Multi-Session-Id ] + [ Origin-State-Id ] + [ Event-Timestamp ] + *[ Subscription-Id ] + [ Service-Identifier ] + [ Termination-Cause ] + [ Requested-Service-Unit ] + [ Requested-Action ] + *[ Used-Service-Unit ] + [ Multiple-Services-Indicator ] + *[ Multiple-Services-Credit-Control ] + *[ Service-Parameter-Info ] + [ CC-Correlation-Id ] + [ User-Equipment-Info ] + *[ Proxy-Info ] + *[ Route-Record ] + *[ AVP ] + + 10.1. Credit-Control AVP Table + + The table in this section is used to represent which credit-control + applications specific AVPs defined in this document are to be present + in the credit-control messages. + + +-----------+ + | Command | + | Code | + |-----+-----+ + Attribute Name | CCR | CCA | + ------------------------------|-----+-----+ + Acct-Multi-Session-Id | 0-1 | 0-1 | + Auth-Application-Id | 1 | 1 | + CC-Correlation-Id | 0-1 | 0 | + CC-Session-Failover | 0 | 0-1 | + CC-Request-Number | 1 | 1 | + CC-Request-Type | 1 | 1 | + CC-Sub-Session-Id | 0-1 | 0-1 | + Check-Balance-Result | 0 | 0-1 | + Cost-Information | 0 | 0-1 | + Credit-Control-Failure- | 0 | 0-1 | + Handling | | | + Destination-Host | 0-1 | 0 | + Destination-Realm | 1 | 0 | + Direct-Debiting-Failure- | 0 | 0-1 | + Handling | | | + Event-Timestamp | 0-1 | 0-1 | + Failed-AVP | 0 | 0+ | + Final-Unit-Indication | 0 | 0-1 | + Granted-Service-Unit | 0 | 0-1 | + Multiple-Services-Credit- | 0+ | 0+ | + Control | | | + Multiple-Services-Indicator | 0-1 | 0 | + Origin-Host | 1 | 1 | + Origin-Realm | 1 | 1 | + Origin-State-Id | 0-1 | 0-1 | + Proxy-Info | 0+ | 0+ | + Redirect-Host | 0 | 0+ | + Redirect-Host-Usage | 0 | 0-1 | + Redirect-Max-Cache-Time | 0 | 0-1 | + Requested-Action | 0-1 | 0 | + Requested-Service-Unit | 0-1 | 0 | + Route-Record | 0+ | 0+ | + Result-Code | 0 | 1 | + Service-Context-Id | 1 | 0 | + Service-Identifier | 0-1 | 0 | + Service-Parameter-Info | 0+ | 0 | + Session-Id | 1 | 1 | + Subscription-Id | 0+ | 0 | + Termination-Cause | 0-1 | 0 | + User-Equipment-Info | 0-1 | 0 | + Used-Service-Unit | 0+ | 0 | + User-Name | 0-1 | 0-1 | + Validity-Time | 0 | 0-1 | + ------------------------------|-----+-----+ + + + */ + struct dict_object * cmd; + struct dict_cmd_data data = { + 272, /* Code */ + "Credit-Control-Request", /* Name */ + CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE, /* Fixed flags */ + CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE /* Fixed flag values */ + }; + struct local_rules_definition rules[] = + { + { "Session-Id", RULE_FIXED_HEAD, -1, 1 }, + { "Origin-Host", RULE_REQUIRED, -1, 1 }, + { "Origin-Realm", RULE_REQUIRED, -1, 1 }, + { "Destination-Realm", RULE_REQUIRED, -1, 1 }, + { "Auth-Application-Id", RULE_REQUIRED, -1, 1 }, + { "Service-Context-Id", RULE_OPTIONAL, -1, 1 }, + { "CC-Request-Type", RULE_REQUIRED, -1, 1 }, + { "CC-Request-Number", RULE_REQUIRED, -1, 1 }, + { "Destination-Host", RULE_OPTIONAL, -1, 1 }, + { "User-Name", RULE_OPTIONAL, -1, 1 }, + { "CC-Sub-Session-Id", RULE_OPTIONAL, -1, 1 }, + { "Acct-Multi-Session-Id", RULE_OPTIONAL, -1, 1 }, + { "Origin-State-Id", RULE_OPTIONAL, -1, 1 }, + { "Event-Timestamp", RULE_OPTIONAL, -1, 1 }, + { "Subscription-Id", RULE_OPTIONAL, -1, -1 }, + { "Service-Identifier", RULE_OPTIONAL, -1, 1 }, + { "Termination-Cause", RULE_OPTIONAL, -1, 1 }, + { "Requested-Service-Unit", RULE_OPTIONAL, -1, 1 }, + { "Requested-Action", RULE_OPTIONAL, -1, 1 }, + { "Used-Service-Unit", RULE_OPTIONAL, -1, -1 }, + { "Multiple-Services-Indicator", RULE_OPTIONAL, -1, 1 }, + { "Multiple-Services-Credit-Control", RULE_OPTIONAL, -1, -1 }, + { "Service-Parameter-Info", RULE_OPTIONAL, -1, -1 }, + { "CC-Correlation-Id", RULE_OPTIONAL, -1, 1 }, + { "User-Equipment-Info", RULE_OPTIONAL, -1, 1 }, + { "Proxy-Info", RULE_OPTIONAL, -1, -1 }, + { "Route-Record", RULE_OPTIONAL, -1, -1 } + /* plus any additional AVPs { "AVP", RULE_OPTIONAL, -1, -1 } */ + }; + + CHECK_dict_new( DICT_COMMAND, &data, dcca, &cmd); + PARSE_loc_rules( rules, cmd ); + } + + /* Credit-Control-Answer (CCA) Command */ + { + /* + From RFC 4006: + 3.2. Credit-Control-Answer (CCA) Command + + The Credit-Control-Answer message (CCA) is indicated by the command- + code field being set to 272 and the 'R' bit being cleared in the + Command Flags field. It is used between the credit-control server + and the Diameter credit-control client to acknowledge a Credit- + Control-Request command. + + Message Format + + ::= < Diameter Header: 272, PXY > + < Session-Id > + { Result-Code } + { Origin-Host } + { Origin-Realm } + { Auth-Application-Id } + { CC-Request-Type } + { CC-Request-Number } + [ User-Name ] + [ CC-Session-Failover ] + [ CC-Sub-Session-Id ] + [ Acct-Multi-Session-Id ] + [ Origin-State-Id ] + [ Event-Timestamp ] + [ Granted-Service-Unit ] + *[ Multiple-Services-Credit-Control ] + [ Cost-Information] + [ Final-Unit-Indication ] + [ Check-Balance-Result ] + [ Credit-Control-Failure-Handling ] + [ Direct-Debiting-Failure-Handling ] + [ Validity-Time] + *[ Redirect-Host] + [ Redirect-Host-Usage ] + [ Redirect-Max-Cache-Time ] + *[ Proxy-Info ] + *[ Route-Record ] + *[ Failed-AVP ] + *[ AVP ] + + */ + struct dict_object * cmd; + struct dict_cmd_data data = { + 272, /* Code */ + "Credit-Control-Answer", /* Name */ + CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ + CMD_FLAG_PROXIABLE /* Fixed flag values */ + }; + struct local_rules_definition rules[] = + { + { "Session-Id", RULE_FIXED_HEAD, -1, 1 }, + { "Result-Code", RULE_OPTIONAL, -1, 1 }, + { "Origin-Host", RULE_REQUIRED, -1, 1 }, + { "Origin-Realm", RULE_REQUIRED, -1, 1 }, + { "Auth-Application-Id", RULE_REQUIRED, -1, 1 }, + { "CC-Request-Type", RULE_REQUIRED, -1, 1 }, + { "CC-Request-Number", RULE_REQUIRED, -1, 1 }, + { "User-Name", RULE_OPTIONAL, -1, 1 }, + { "CC-Session-Failover", RULE_OPTIONAL, -1, 1 }, + { "CC-Sub-Session-Id", RULE_OPTIONAL, -1, 1 }, + { "Acct-Multi-Session-Id", RULE_OPTIONAL, -1, 1 }, + { "Origin-State-Id", RULE_OPTIONAL, -1, 1 }, + { "Event-Timestamp", RULE_OPTIONAL, -1, 1 }, + { "Granted-Service-Unit", RULE_OPTIONAL, -1, 1 }, + { "Multiple-Services-Credit-Control", RULE_OPTIONAL, -1, -1 }, + { "Cost-Information", RULE_OPTIONAL, -1, 1 }, + { "Final-Unit-Indication", RULE_OPTIONAL, -1, 1 }, + { "Check-Balance-Result", RULE_OPTIONAL, -1, 1 }, + { "Credit-Control-Failure-Handling", RULE_OPTIONAL, -1, 1 }, + { "Direct-Debiting-Failure-Handling", RULE_OPTIONAL, -1, 1 }, + { "Validity-Time", 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 }, + { "Route-Record", RULE_OPTIONAL, -1, -1 }, + { "Failed-AVP", RULE_OPTIONAL, -1, -1 } + /* plus any additional AVPs { "AVP", RULE_OPTIONAL, -1, -1 } */ + }; + + CHECK_dict_new( DICT_COMMAND, &data, dcca, &cmd); + PARSE_loc_rules( rules, cmd ); + } + } + LOG_D( "Extension 'Dictionary definitions for DCCA (rfc4006)' initialized"); + return 0; +} + +/* needs dict_nasreq for Filter-Id */ +EXTENSION_ENTRY("dict_dcca", dict_dcca_entry, "dict_nasreq"); diff --git a/lib/fd/extensions/dict_dcca_3gpp/Makefile.am b/lib/fd/extensions/dict_dcca_3gpp/Makefile.am new file mode 100644 index 0000000000..b64dbd4f41 --- /dev/null +++ b/lib/fd/extensions/dict_dcca_3gpp/Makefile.am @@ -0,0 +1,17 @@ +## Process this file with automake to produce Makefile.in + +pkglib_LTLIBRARIES = dict_dcca_3gpp.la + +dict_dcca_3gpp_la_SOURCES = \ + dict_dcca_3gpp.c + +AM_LDFLAGS = \ + -module -avoid-version -shared + +AM_CFLAGS = \ + -Wall -Werror + +MAINTAINERCLEANFILES = Makefile.in +MOSTLYCLEANFILES = *.stackdump + +EXTRA_DIST = .libs $(pkglib_LTLIBRARIES) diff --git a/lib/fd/extensions/dict_dcca_3gpp/dict_dcca_3gpp.c b/lib/fd/extensions/dict_dcca_3gpp/dict_dcca_3gpp.c new file mode 100644 index 0000000000..844a582cd0 --- /dev/null +++ b/lib/fd/extensions/dict_dcca_3gpp/dict_dcca_3gpp.c @@ -0,0 +1,11580 @@ +/********************************************************************************************************* + * Software License Agreement (BSD License) * + * Author: Thomas Klausner * + * * + * Copyright (c) 2013, Thomas Klausner * + * All rights reserved. * + * * + * Written under contract by nfotex IT GmbH, http://nfotex.com/ * + * * + * 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. * + * * + * 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 for objects specified for DCCA by 3GPP. + * + * This extensions contains a lot of AVPs from various 3GPP standards + * documents, and some rules for the grouped AVPs described therein. + * + * This extension does not contain ALL AVPs described by 3GPP, but + * quite a big number of them. + * + * When extending the AVPs, please edit dict_dcca_3gpp.org instead and + * create pastable code with contrib/tools/org_to_fd.pl. + * + * Some points of consideration: + * 1. This dictionary could be split up per document. + * + * + pro: you can only load the AVPs/Rules you're interested in -> + * smaller memory size + * + * - con: the documents use AVPs from each other A LOT, so setting the + * dependencies correctly will be annoying + * + * - con: you need to load all of them as extensions + * + * 2. This dictionary contains ONE AVP in the "3GPP2" vendor space, + * since I found it wasteful to write a separate dictionary just for + * one AVP. Also, it is defined in a 3GPP document. + * + * 3. While there are quite a number of rules here already, many more + * are missing. I've only added rules for those grouped AVPs or + * commands in which I was concretely interested so far; many more + * will need to be added to make this complete. + * + * That being said, I hope this will be useful for you. + * + */ + + +/* + * Some comments on the 3GPP Standards documents themselves: + * + * 1. It would be good if 29.061 was reviewed to check for each AVP if + * it is Mandatory or not. The data currently in the document does not + * match what was in the previous version of the freeDiameter + * extension (the one that existedbefore I rewrote it) or what I saw + * so far. IIRC, even the table and the document contradict each + * other. The AVP table is also missing an entry for + * "External-Identifier", 28. + * + * 2. 29.140 has conflicting AVP names with other documents: + * - Sequence-Number is also in 32.329 + * - Recipient-Address is also in 32.299 + * - Status is also in 32.299 + * + * 3. 29.229 has name conflict with 29.329 about User-Data (different + * AVP code 702, instead of 606) -- the weird thing is, the latter + * uses some AVPs from the former, but not this one. +*/ +#include + + +/* 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 { + struct dict_avp_request avp_vendor_plus_name; + enum rule_position position; + int min; + int max; +}; + +#define RULE_ORDER( _position ) ((((_position) == RULE_FIXED_HEAD) || ((_position) == RULE_FIXED_TAIL)) ? 1 : 0 ) + +/* Attention! This version of the macro uses AVP_BY_NAME_AND_VENDOR, in contrast to most other copies! */ +#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_AND_VENDOR, \ + &(_rulearray)[__ar].avp_vendor_plus_name, \ + &__data.rule_avp, 0 ) ); \ + if ( !__data.rule_avp ) { \ + TRACE_DEBUG(INFO, "AVP Not found: '%s'", (_rulearray)[__ar].avp_vendor_plus_name.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_vendor_plus_name.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 dict_dcca_3gpp_entry(char * conffile) +{ + /* Applications section */ + { + /* Create the vendors */ + { + struct dict_vendor_data vendor_data = { 10415, "3GPP" }; + CHECK_FCT(fd_dict_new(fd_g_config->cnf_dict, DICT_VENDOR, &vendor_data, NULL, NULL)); + } + { + struct dict_vendor_data vendor_data = { 5535, "3GPP2" }; + CHECK_FCT(fd_dict_new(fd_g_config->cnf_dict, DICT_VENDOR, &vendor_data, NULL, NULL)); + } + { + struct dict_vendor_data vendor_data = { 13019, "ETSI" }; + CHECK_FCT(fd_dict_new(fd_g_config->cnf_dict, DICT_VENDOR, &vendor_data, NULL, NULL)); + } + + { + struct dict_object * vendor; + CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_VENDOR, VENDOR_BY_NAME, "3GPP", &vendor, ENOENT)); + struct dict_application_data app_data = { 16777216, "Cx" }; + CHECK_FCT(fd_dict_new(fd_g_config->cnf_dict, DICT_APPLICATION, &app_data, vendor, NULL)); + } + + { + struct dict_object * vendor; + CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_VENDOR, VENDOR_BY_NAME, "3GPP", &vendor, ENOENT)); + struct dict_application_data app_data = { 16777236, "Rx" }; + CHECK_FCT(fd_dict_new(fd_g_config->cnf_dict, DICT_APPLICATION, &app_data, vendor, NULL)); + } + + { + struct dict_object * vendor; + CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_VENDOR, VENDOR_BY_NAME, "3GPP", &vendor, ENOENT)); + struct dict_application_data app_data = { 16777238, "Gx" }; + CHECK_FCT(fd_dict_new(fd_g_config->cnf_dict, DICT_APPLICATION, &app_data, vendor, NULL)); + } + } + + + struct dict_object * Address_type; + struct dict_object * DiameterIdentity_type; + struct dict_object * DiameterURI_type; + struct dict_object * IPFilterRule_type; + struct dict_object * Time_type; + struct dict_object * UTF8String_type; + + CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "Address", &Address_type); + CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "DiameterIdentity", &DiameterIdentity_type); + CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "DiameterURI", &DiameterURI_type); + CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "IPFilterRule", &IPFilterRule_type); + CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "Time", &Time_type); + CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "UTF8String", &UTF8String_type); + + + /* The following is created automatically. Do not modify. */ + /* Changes will be lost during the next update. Modify the source org file instead. */ + + /* 3GPP 29.061-c00 (12.0.0 2012.12.20) */ + /* 3GPP 29.061 is not very clear and self-inconsistent about M */ + /* for this reason, other sources are assumed more trustworthy */ + /* M inconsistently specified */ + /* 3GPP-IMSI */ + { + struct dict_avp_data data = { + 1, /* Code */ + 10415, /* Vendor */ + "3GPP-IMSI", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* 29.061 says OctetString; dumps say UInt32; manually changed */ + /* 29.061 says MUST NOT M; dumps say MUST */ + /* 3GPP-Charging-Id */ + { + struct dict_avp_data data = { + 2, /* Code */ + 10415, /* Vendor */ + "3GPP-Charging-Id", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* 29.061 says MUST NOT M; dumps say MUST */ + /* 3GPP-PDP-Type */ + { + struct dict_avp_data data = { + 3, /* Code */ + 10415, /* Vendor */ + "3GPP-PDP-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(3GPP-PDP-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* 3GPP-CG-Address */ + { + struct dict_avp_data data = { + 4, /* Code */ + 10415, /* Vendor */ + "3GPP-CG-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* 29.061 says MUST NOT M; old contrib/3gpp says MUST */ + /* 3GPP-GPRS-Negotiated-QoS-Profile */ + { + struct dict_avp_data data = { + 5, /* Code */ + 10415, /* Vendor */ + "3GPP-GPRS-Negotiated-QoS-Profile", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* M inconsistently specified; old contrib/3gg says MUST NOT */ + /* 3GPP-SGSN-Address */ + { + struct dict_avp_data data = { + 6, /* Code */ + 10415, /* Vendor */ + "3GPP-SGSN-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* 3GPP-GGSN-Address */ + { + struct dict_avp_data data = { + 7, /* Code */ + 10415, /* Vendor */ + "3GPP-GGSN-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* 29.061 says MUST NOT M; dumps say MUST */ + /* 3GPP-IMSI-MCC-MNC */ + { + struct dict_avp_data data = { + 8, /* Code */ + 10415, /* Vendor */ + "3GPP-IMSI-MCC-MNC", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* 29.061 says MUST NOT M; old contrib/3gpp says MUST */ + /* 3GPP-GGSN-MCC-MNC */ + { + struct dict_avp_data data = { + 9, /* Code */ + 10415, /* Vendor */ + "3GPP-GGSN-MCC-MNC", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* 29.061 says MUST NOT M; old contrib/3gpp says MUST */ + /* 3GPP-NSAPI */ + { + struct dict_avp_data data = { + 10, /* Code */ + 10415, /* Vendor */ + "3GPP-NSAPI", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* added manually, missing in AVP table */ + /* 3GPP-Session-Stop-Indicator */ + { + struct dict_avp_data data = { + 11, /* Code */ + 10415, /* Vendor */ + "3GPP-Session-Stop-Indicator", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* 29.061 says MUST NOT M; old contrib/3gpp says MUST */ + /* 3GPP-Selection-Mode */ + { + struct dict_avp_data data = { + 12, /* Code */ + 10415, /* Vendor */ + "3GPP-Selection-Mode", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* 29.061 says MUST NOT M; old contrib/3gpp says MUST */ + /* 3GPP-Charging-Characteristics */ + { + struct dict_avp_data data = { + 13, /* Code */ + 10415, /* Vendor */ + "3GPP-Charging-Characteristics", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* 29.061 says MUST NOT M; old contrib/3gpp says MUST */ + /* 3GPP-CG-IPv6-Address */ + { + struct dict_avp_data data = { + 14, /* Code */ + 10415, /* Vendor */ + "3GPP-CG-IPv6-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* M inconsistently specified */ + /* 29.061 says MUST NOT M; old contrib/3gpp says MUST */ + /* 3GPP-SGSN-Ipv6-Address */ + { + struct dict_avp_data data = { + 15, /* Code */ + 10415, /* Vendor */ + "3GPP-SGSN-Ipv6-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* 29.061 says MUST NOT M; old contrib/3gpp says MUST */ + /* 3GPP-GGSN-IPv6-Address */ + { + struct dict_avp_data data = { + 16, /* Code */ + 10415, /* Vendor */ + "3GPP-GGSN-IPv6-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* 29.061 says MUST NOT M; old contrib/3gpp says MUST */ + /* 3GPP-IPv6-DNS-Servers */ + { + struct dict_avp_data data = { + 17, /* Code */ + 10415, /* Vendor */ + "3GPP-IPv6-DNS-Servers", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* 29.061 says MUST NOT M; old contrib/3gpp says MUST */ + /* 3GPP-SGSN-MCC-MNC */ + { + struct dict_avp_data data = { + 18, /* Code */ + 10415, /* Vendor */ + "3GPP-SGSN-MCC-MNC", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* M inconsistently specified */ + /* 3GPP-IMEISV */ + { + struct dict_avp_data data = { + 20, /* Code */ + 10415, /* Vendor */ + "3GPP-IMEISV", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* M inconsistently specified */ + /* 3GPP-RAT-Type */ + { + struct dict_avp_data data = { + 21, /* Code */ + 10415, /* Vendor */ + "3GPP-RAT-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* M inconsistently specified */ + /* 3GPP-User-Location-Info */ + { + struct dict_avp_data data = { + 22, /* Code */ + 10415, /* Vendor */ + "3GPP-User-Location-Info", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* M inconsistently specified */ + /* 3GPP-MS-TimeZone */ + { + struct dict_avp_data data = { + 23, /* Code */ + 10415, /* Vendor */ + "3GPP-MS-TimeZone", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* 3GPP-CAMEL-Charging-Info */ + { + struct dict_avp_data data = { + 24, /* Code */ + 10415, /* Vendor */ + "3GPP-CAMEL-Charging-Info", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* 3GPP-Packet-Filter */ + { + struct dict_avp_data data = { + 25, /* Code */ + 10415, /* Vendor */ + "3GPP-Packet-Filter", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* 3GPP-Negotiated-DSCP */ + { + struct dict_avp_data data = { + 26, /* Code */ + 10415, /* Vendor */ + "3GPP-Negotiated-DSCP", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* 3GPP-Allocate-IP-Type */ + { + struct dict_avp_data data = { + 27, /* Code */ + 10415, /* Vendor */ + "3GPP-Allocate-IP-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* added manually, missing in AVP table */ + /* External-Identifier */ + { + struct dict_avp_data data = { + 28, /* Code */ + 10415, /* Vendor */ + "External-Identifier", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* TMGI */ + { + struct dict_avp_data data = { + 900, /* Code */ + 10415, /* Vendor */ + "TMGI", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Required-MBMS-Bearer-Capabilities */ + { + struct dict_avp_data data = { + 901, /* Code */ + 10415, /* Vendor */ + "Required-MBMS-Bearer-Capabilities", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* MBMS-StartStop-Indication */ + { + struct dict_avp_data data = { + 902, /* Code */ + 10415, /* Vendor */ + "MBMS-StartStop-Indication", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(MBMS-StartStop-Indication)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* MBMS-Service-Area */ + { + struct dict_avp_data data = { + 903, /* Code */ + 10415, /* Vendor */ + "MBMS-Service-Area", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* MBMS-Session-Duration */ + { + struct dict_avp_data data = { + 904, /* Code */ + 10415, /* Vendor */ + "MBMS-Session-Duration", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Alternative-APN */ + { + struct dict_avp_data data = { + 905, /* Code */ + 10415, /* Vendor */ + "Alternative-APN", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* MBMS-Service-Type */ + { + struct dict_avp_data data = { + 906, /* Code */ + 10415, /* Vendor */ + "MBMS-Service-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(MBMS-Service-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* MBMS-2G-3G-Indicator */ + { + struct dict_avp_data data = { + 907, /* Code */ + 10415, /* Vendor */ + "MBMS-2G-3G-Indicator", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(MBMS-2G-3G-Indicator)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* MBMS-Session-Identity */ + { + struct dict_avp_data data = { + 908, /* Code */ + 10415, /* Vendor */ + "MBMS-Session-Identity", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* RAI */ + { + struct dict_avp_data data = { + 909, /* Code */ + 10415, /* Vendor */ + "RAI", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Additional-MBMS-Trace-Info */ + { + struct dict_avp_data data = { + 910, /* Code */ + 10415, /* Vendor */ + "Additional-MBMS-Trace-Info", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* MBMS-Time-To-Data-Transfer */ + { + struct dict_avp_data data = { + 911, /* Code */ + 10415, /* Vendor */ + "MBMS-Time-To-Data-Transfer", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* MBMS-Session-Repetition-Number */ + { + struct dict_avp_data data = { + 912, /* Code */ + 10415, /* Vendor */ + "MBMS-Session-Repetition-Number", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* MBMS-Required-QoS */ + { + struct dict_avp_data data = { + 913, /* Code */ + 10415, /* Vendor */ + "MBMS-Required-QoS", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* MBMS-Counting-Information */ + { + struct dict_avp_data data = { + 914, /* Code */ + 10415, /* Vendor */ + "MBMS-Counting-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(MBMS-Counting-Information)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* MBMS-User-Data-Mode-Indication */ + { + struct dict_avp_data data = { + 915, /* Code */ + 10415, /* Vendor */ + "MBMS-User-Data-Mode-Indication", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(MBMS-User-Data-Mode-Indication)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* MBMS-GGSN-Address */ + { + struct dict_avp_data data = { + 916, /* Code */ + 10415, /* Vendor */ + "MBMS-GGSN-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* MBMS-GGSN-IPv6-Address */ + { + struct dict_avp_data data = { + 917, /* Code */ + 10415, /* Vendor */ + "MBMS-GGSN-IPv6-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* MBMS-BMSC-SSM-IP-Address */ + { + struct dict_avp_data data = { + 918, /* Code */ + 10415, /* Vendor */ + "MBMS-BMSC-SSM-IP-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* MBMS-BMSC-SSM-IPv6-Address */ + { + struct dict_avp_data data = { + 919, /* Code */ + 10415, /* Vendor */ + "MBMS-BMSC-SSM-IPv6-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* MBMS-Flow-Identifier */ + { + struct dict_avp_data data = { + 920, /* Code */ + 10415, /* Vendor */ + "MBMS-Flow-Identifier", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* CN-IP-Multicast-Distribution */ + { + struct dict_avp_data data = { + 921, /* Code */ + 10415, /* Vendor */ + "CN-IP-Multicast-Distribution", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(CN-IP-Multicast-Distribution)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* MBMS-HC-Indicator */ + { + struct dict_avp_data data = { + 922, /* Code */ + 10415, /* Vendor */ + "MBMS-HC-Indicator", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(MBMS-HC-Indicator)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* 3GPP 29.140-700 (7.0.0 2007.07.05) */ + /* Served-User-Identity */ + { + struct dict_avp_data data = { + 1100, /* Code */ + 10415, /* Vendor */ + "Served-User-Identity", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* reuses: MSISDN */ + /* VASP-ID */ + { + struct dict_avp_data data = { + 1101, /* Code */ + 10415, /* Vendor */ + "VASP-ID", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* VAS-ID */ + { + struct dict_avp_data data = { + 1102, /* Code */ + 10415, /* Vendor */ + "VAS-ID", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Trigger-Event */ + { + struct dict_avp_data data = { + 1103, /* Code */ + 10415, /* Vendor */ + "Trigger-Event", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Trigger-Event)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* reuses: 3GPP-IMSI */ + /* Sender-Address */ + { + struct dict_avp_data data = { + 1104, /* Code */ + 10415, /* Vendor */ + "Sender-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Initial-Recipient-Address */ + { + struct dict_avp_data data = { + 1105, /* Code */ + 10415, /* Vendor */ + "Initial-Recipient-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Result-Recipient-Address */ + { + struct dict_avp_data data = { + 1106, /* Code */ + 10415, /* Vendor */ + "Result-Recipient-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* conflicts with one in (more common) 32.329 */ + /* Sequence-Number-29.140 */ + { + struct dict_avp_data data = { + 1107, /* Code */ + 10415, /* Vendor */ + "Sequence-Number-29.140", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* conflicts with one in (more common) 32.299 */ + /* Recipient-Address-29.140 */ + { + struct dict_avp_data data = { + 1108, /* Code */ + 10415, /* Vendor */ + "Recipient-Address-29.140", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Routeing-Address */ + { + struct dict_avp_data data = { + 1109, /* Code */ + 10415, /* Vendor */ + "Routeing-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Originating-Interface */ + { + struct dict_avp_data data = { + 1110, /* Code */ + 10415, /* Vendor */ + "Originating-Interface", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Originating-Interface)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Delivery-Report */ + { + struct dict_avp_data data = { + 1111, /* Code */ + 10415, /* Vendor */ + "Delivery-Report", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Delivery-Report)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Read-Reply */ + { + struct dict_avp_data data = { + 1112, /* Code */ + 10415, /* Vendor */ + "Read-Reply", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Read-Reply)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Sender-Visibility */ + { + struct dict_avp_data data = { + 1113, /* Code */ + 10415, /* Vendor */ + "Sender-Visibility", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Sender-Visibility)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Service-Key */ + { + struct dict_avp_data data = { + 1114, /* Code */ + 10415, /* Vendor */ + "Service-Key", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Billing-Information */ + { + struct dict_avp_data data = { + 1115, /* Code */ + 10415, /* Vendor */ + "Billing-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* conflicts with one in (more common) 32.299 */ + /* Status-29.140 */ + { + struct dict_avp_data data = { + 1116, /* Code */ + 10415, /* Vendor */ + "Status-29.140", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Status-Code */ + { + struct dict_avp_data data = { + 1117, /* Code */ + 10415, /* Vendor */ + "Status-Code", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Status-Text */ + { + struct dict_avp_data data = { + 1118, /* Code */ + 10415, /* Vendor */ + "Status-Text", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Routeing-Address-Resolution */ + { + struct dict_avp_data data = { + 1119, /* Code */ + 10415, /* Vendor */ + "Routeing-Address-Resolution", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Routeing-Address-Resolution)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* 3GPP 29.173-c00 (12.0.0 2013.03.13) */ + /* LMSI */ + { + struct dict_avp_data data = { + 2400, /* Code */ + 10415, /* Vendor */ + "LMSI", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Serving-Node */ + { + struct dict_avp_data data = { + 2401, /* Code */ + 10415, /* Vendor */ + "Serving-Node", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* MME-Name */ + { + struct dict_avp_data data = { + 2402, /* Code */ + 10415, /* Vendor */ + "MME-Name", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, DiameterIdentity_type, NULL); + }; + + /* MSC-Number */ + { + struct dict_avp_data data = { + 2403, /* Code */ + 10415, /* Vendor */ + "MSC-Number", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* LCS-Capabilities-Sets */ + { + struct dict_avp_data data = { + 2404, /* Code */ + 10415, /* Vendor */ + "LCS-Capabilities-Sets", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* GMLC-Address */ + { + struct dict_avp_data data = { + 2405, /* Code */ + 10415, /* Vendor */ + "GMLC-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Address_type, NULL); + }; + + /* Additional-Serving-Node */ + { + struct dict_avp_data data = { + 2406, /* Code */ + 10415, /* Vendor */ + "Additional-Serving-Node", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* PPR-Address */ + { + struct dict_avp_data data = { + 2407, /* Code */ + 10415, /* Vendor */ + "PPR-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Address_type, NULL); + }; + + /* MME-Realm */ + { + struct dict_avp_data data = { + 2408, /* Code */ + 10415, /* Vendor */ + "MME-Realm", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, DiameterIdentity_type, NULL); + }; + + /* SGSN-Name */ + { + struct dict_avp_data data = { + 2409, /* Code */ + 10415, /* Vendor */ + "SGSN-Name", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, DiameterIdentity_type, NULL); + }; + + /* SGSN-Realm */ + { + struct dict_avp_data data = { + 2410, /* Code */ + 10415, /* Vendor */ + "SGSN-Realm", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, DiameterIdentity_type, NULL); + }; + + /* 3GPP 29.210-670 (6.7.0 2006-12-18) */ + /* PDP-Session-Operation */ + { + struct dict_avp_data data = { + 1015, /* Code */ + 10415, /* Vendor */ + "PDP-Session-Operation", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(PDP-Session-Operation)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* 3GPP 29.212-c00 (12.0.0 2013.03.15) */ + /* Gx-specific */ + /* ADC-Revalidation-Time */ + { + struct dict_avp_data data = { + 2801, /* Code */ + 10415, /* Vendor */ + "ADC-Revalidation-Time", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Time_type, NULL); + }; + + /* ADC-Rule-Install */ + { + struct dict_avp_data data = { + 1092, /* Code */ + 10415, /* Vendor */ + "ADC-Rule-Install", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* ADC-Rule-Remove */ + { + struct dict_avp_data data = { + 1093, /* Code */ + 10415, /* Vendor */ + "ADC-Rule-Remove", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* ADC-Rule-Definition */ + { + struct dict_avp_data data = { + 1094, /* Code */ + 10415, /* Vendor */ + "ADC-Rule-Definition", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* ADC-Rule-Base-Name */ + { + struct dict_avp_data data = { + 1095, /* Code */ + 10415, /* Vendor */ + "ADC-Rule-Base-Name", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* ADC-Rule-Name */ + { + struct dict_avp_data data = { + 1096, /* Code */ + 10415, /* Vendor */ + "ADC-Rule-Name", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* ADC-Rule-Report */ + { + struct dict_avp_data data = { + 1097, /* Code */ + 10415, /* Vendor */ + "ADC-Rule-Report", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Application-Detection-Information */ + { + struct dict_avp_data data = { + 1098, /* Code */ + 10415, /* Vendor */ + "Application-Detection-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Access-Network-Charging-Identifier-Gx */ + { + struct dict_avp_data data = { + 1022, /* Code */ + 10415, /* Vendor */ + "Access-Network-Charging-Identifier-Gx", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Allocation-Retention-Priority */ + { + struct dict_avp_data data = { + 1034, /* Code */ + 10415, /* Vendor */ + "Allocation-Retention-Priority", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* AN-GW-Address */ + { + struct dict_avp_data data = { + 1050, /* Code */ + 10415, /* Vendor */ + "AN-GW-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Address_type, NULL); + }; + + /* APN-Aggregate-Max-Bitrate-DL */ + { + struct dict_avp_data data = { + 1040, /* Code */ + 10415, /* Vendor */ + "APN-Aggregate-Max-Bitrate-DL", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* APN-Aggregate-Max-Bitrate-UL */ + { + struct dict_avp_data data = { + 1041, /* Code */ + 10415, /* Vendor */ + "APN-Aggregate-Max-Bitrate-UL", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Bearer-Control-Mode */ + { + struct dict_avp_data data = { + 1023, /* Code */ + 10415, /* Vendor */ + "Bearer-Control-Mode", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Bearer-Control-Mode)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Bearer-Identifier */ + { + struct dict_avp_data data = { + 1020, /* Code */ + 10415, /* Vendor */ + "Bearer-Identifier", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Bearer-Operation */ + { + struct dict_avp_data data = { + 1021, /* Code */ + 10415, /* Vendor */ + "Bearer-Operation", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Bearer-Operation)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Bearer-Usage */ + { + struct dict_avp_data data = { + 1000, /* Code */ + 10415, /* Vendor */ + "Bearer-Usage", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Bearer-Usage)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Charging-Rule-Install */ + { + struct dict_avp_data data = { + 1001, /* Code */ + 10415, /* Vendor */ + "Charging-Rule-Install", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Charging-Rule-Remove */ + { + struct dict_avp_data data = { + 1002, /* Code */ + 10415, /* Vendor */ + "Charging-Rule-Remove", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Charging-Rule-Definition */ + { + struct dict_avp_data data = { + 1003, /* Code */ + 10415, /* Vendor */ + "Charging-Rule-Definition", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Charging-Rule-Base-Name */ + { + struct dict_avp_data data = { + 1004, /* Code */ + 10415, /* Vendor */ + "Charging-Rule-Base-Name", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Charging-Rule-Name */ + { + struct dict_avp_data data = { + 1005, /* Code */ + 10415, /* Vendor */ + "Charging-Rule-Name", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Charging-Rule-Report */ + { + struct dict_avp_data data = { + 1018, /* Code */ + 10415, /* Vendor */ + "Charging-Rule-Report", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Charging-Correlation-Indicator */ + { + struct dict_avp_data data = { + 1073, /* Code */ + 10415, /* Vendor */ + "Charging-Correlation-Indicator", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Charging-Correlation-Indicator)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* CoA-IP-Address */ + { + struct dict_avp_data data = { + 1035, /* Code */ + 10415, /* Vendor */ + "CoA-IP-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Address_type, NULL); + }; + + /* CoA-Information */ + { + struct dict_avp_data data = { + 1039, /* Code */ + 10415, /* Vendor */ + "CoA-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* CSG-Information-Reporting */ + { + struct dict_avp_data data = { + 1071, /* Code */ + 10415, /* Vendor */ + "CSG-Information-Reporting", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(CSG-Information-Reporting)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Default-EPS-Bearer-QoS */ + { + struct dict_avp_data data = { + 1049, /* Code */ + 10415, /* Vendor */ + "Default-EPS-Bearer-QoS", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Event-Report-Indication */ + { + struct dict_avp_data data = { + 1033, /* Code */ + 10415, /* Vendor */ + "Event-Report-Indication", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Event-Trigger */ + { + struct dict_avp_data data = { + 1006, /* Code */ + 10415, /* Vendor */ + "Event-Trigger", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Event-Trigger)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Flow-Direction */ + { + struct dict_avp_data data = { + 1080, /* Code */ + 10415, /* Vendor */ + "Flow-Direction", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Flow-Direction)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Flow-Information */ + { + struct dict_avp_data data = { + 1058, /* Code */ + 10415, /* Vendor */ + "Flow-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Flow-Label */ + { + struct dict_avp_data data = { + 1057, /* Code */ + 10415, /* Vendor */ + "Flow-Label", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* IP-CAN-Type */ + { + struct dict_avp_data data = { + 1027, /* Code */ + 10415, /* Vendor */ + "IP-CAN-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(IP-CAN-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Guaranteed-Bitrate-DL */ + { + struct dict_avp_data data = { + 1025, /* Code */ + 10415, /* Vendor */ + "Guaranteed-Bitrate-DL", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Guaranteed-Bitrate-UL */ + { + struct dict_avp_data data = { + 1026, /* Code */ + 10415, /* Vendor */ + "Guaranteed-Bitrate-UL", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* HeNB-Local-IP-Address */ + { + struct dict_avp_data data = { + 2804, /* Code */ + 10415, /* Vendor */ + "HeNB-Local-IP-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Address_type, NULL); + }; + + /* Metering-Method */ + { + struct dict_avp_data data = { + 1007, /* Code */ + 10415, /* Vendor */ + "Metering-Method", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Metering-Method)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Monitoring-Key */ + { + struct dict_avp_data data = { + 1066, /* Code */ + 10415, /* Vendor */ + "Monitoring-Key", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Mute-Notification */ + { + struct dict_avp_data data = { + 2809, /* Code */ + 10415, /* Vendor */ + "Mute-Notification", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Mute-Notification)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Monitoring-Time */ + { + struct dict_avp_data data = { + 2810, /* Code */ + 10415, /* Vendor */ + "Monitoring-Time", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Time_type, NULL); + }; + + /* Network-Request-Support */ + { + struct dict_avp_data data = { + 1024, /* Code */ + 10415, /* Vendor */ + "Network-Request-Support", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Network-Request-Support)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Offline */ + { + struct dict_avp_data data = { + 1008, /* Code */ + 10415, /* Vendor */ + "Offline", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Offline)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Online */ + { + struct dict_avp_data data = { + 1009, /* Code */ + 10415, /* Vendor */ + "Online", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Online)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Packet-Filter-Content */ + { + struct dict_avp_data data = { + 1059, /* Code */ + 10415, /* Vendor */ + "Packet-Filter-Content", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, IPFilterRule_type, NULL); + }; + + /* Packet-Filter-Identifier */ + { + struct dict_avp_data data = { + 1060, /* Code */ + 10415, /* Vendor */ + "Packet-Filter-Identifier", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Packet-Filter-Information */ + { + struct dict_avp_data data = { + 1061, /* Code */ + 10415, /* Vendor */ + "Packet-Filter-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Packet-Filter-Operation */ + { + struct dict_avp_data data = { + 1062, /* Code */ + 10415, /* Vendor */ + "Packet-Filter-Operation", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Packet-Filter-Operation)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Packet-Filter-Usage */ + { + struct dict_avp_data data = { + 1072, /* Code */ + 10415, /* Vendor */ + "Packet-Filter-Usage", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Packet-Filter-Usage)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* PDN-Connection-ID */ + { + struct dict_avp_data data = { + 1065, /* Code */ + 10415, /* Vendor */ + "PDN-Connection-ID", /* Name */ + AVP_FLAG_VENDOR, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Precedence */ + { + struct dict_avp_data data = { + 1010, /* Code */ + 10415, /* Vendor */ + "Precedence", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Pre-emption-Capability */ + { + struct dict_avp_data data = { + 1047, /* Code */ + 10415, /* Vendor */ + "Pre-emption-Capability", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Pre-emption-Capability)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Pre-emption-Vulnerability */ + { + struct dict_avp_data data = { + 1048, /* Code */ + 10415, /* Vendor */ + "Pre-emption-Vulnerability", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Pre-emption-Vulnerability)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Priority-Level */ + { + struct dict_avp_data data = { + 1046, /* Code */ + 10415, /* Vendor */ + "Priority-Level", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Redirect-Information */ + { + struct dict_avp_data data = { + 1085, /* Code */ + 10415, /* Vendor */ + "Redirect-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Redirect-Support */ + { + struct dict_avp_data data = { + 1086, /* Code */ + 10415, /* Vendor */ + "Redirect-Support", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Redirect-Support)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Reporting-Level */ + { + struct dict_avp_data data = { + 1011, /* Code */ + 10415, /* Vendor */ + "Reporting-Level", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Reporting-Level)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Routing-Filter */ + { + struct dict_avp_data data = { + 1078, /* Code */ + 10415, /* Vendor */ + "Routing-Filter", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Routing-IP-Address */ + { + struct dict_avp_data data = { + 1079, /* Code */ + 10415, /* Vendor */ + "Routing-IP-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Address_type, NULL); + }; + + /* Routing-Rule-Definition */ + { + struct dict_avp_data data = { + 1076, /* Code */ + 10415, /* Vendor */ + "Routing-Rule-Definition", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Routing-Rule-Identifier */ + { + struct dict_avp_data data = { + 1077, /* Code */ + 10415, /* Vendor */ + "Routing-Rule-Identifier", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Routing-Rule-Install */ + { + struct dict_avp_data data = { + 1081, /* Code */ + 10415, /* Vendor */ + "Routing-Rule-Install", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Routing-Rule-Remove */ + { + struct dict_avp_data data = { + 1075, /* Code */ + 10415, /* Vendor */ + "Routing-Rule-Remove", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* PCC-Rule-Status */ + { + struct dict_avp_data data = { + 1019, /* Code */ + 10415, /* Vendor */ + "PCC-Rule-Status", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(PCC-Rule-Status)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Session-Release-Cause */ + { + struct dict_avp_data data = { + 1045, /* Code */ + 10415, /* Vendor */ + "Session-Release-Cause", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Session-Release-Cause)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* TDF-Information */ + { + struct dict_avp_data data = { + 1087, /* Code */ + 10415, /* Vendor */ + "TDF-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* TDF-Application-Identifier */ + { + struct dict_avp_data data = { + 1088, /* Code */ + 10415, /* Vendor */ + "TDF-Application-Identifier", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* TDF-Application-Instance-Identifier */ + { + struct dict_avp_data data = { + 2802, /* Code */ + 10415, /* Vendor */ + "TDF-Application-Instance-Identifier", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* TDF-Destination-Host */ + { + struct dict_avp_data data = { + 1089, /* Code */ + 10415, /* Vendor */ + "TDF-Destination-Host", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, DiameterIdentity_type, NULL); + }; + + /* TDF-Destination-Realm */ + { + struct dict_avp_data data = { + 1090, /* Code */ + 10415, /* Vendor */ + "TDF-Destination-Realm", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, DiameterIdentity_type, NULL); + }; + + /* TDF-IP-Address */ + { + struct dict_avp_data data = { + 1091, /* Code */ + 10415, /* Vendor */ + "TDF-IP-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Address_type, NULL); + }; + + /* QoS-Class-Identifier */ + { + struct dict_avp_data data = { + 1028, /* Code */ + 10415, /* Vendor */ + "QoS-Class-Identifier", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(QoS-Class-Identifier)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* QoS-Information */ + { + struct dict_avp_data data = { + 1016, /* Code */ + 10415, /* Vendor */ + "QoS-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* QoS-Negotiation */ + { + struct dict_avp_data data = { + 1029, /* Code */ + 10415, /* Vendor */ + "QoS-Negotiation", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(QoS-Negotiation)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* QoS-Upgrade */ + { + struct dict_avp_data data = { + 1030, /* Code */ + 10415, /* Vendor */ + "QoS-Upgrade", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(QoS-Upgrade)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* PS-to-CS-Session-Continuity */ + { + struct dict_avp_data data = { + 1099, /* Code */ + 10415, /* Vendor */ + "PS-to-CS-Session-Continuity", /* Name */ + AVP_FLAG_VENDOR, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(PS-to-CS-Session-Continuity)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Resource-Allocation-Notification */ + { + struct dict_avp_data data = { + 1063, /* Code */ + 10415, /* Vendor */ + "Resource-Allocation-Notification", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Resource-Allocation-Notification)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Rule-Failure-Code */ + { + struct dict_avp_data data = { + 1031, /* Code */ + 10415, /* Vendor */ + "Rule-Failure-Code", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Rule-Failure-Code)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Security-Parameter-Index */ + { + struct dict_avp_data data = { + 1056, /* Code */ + 10415, /* Vendor */ + "Security-Parameter-Index", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* TFT-Filter */ + { + struct dict_avp_data data = { + 1012, /* Code */ + 10415, /* Vendor */ + "TFT-Filter", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, IPFilterRule_type, NULL); + }; + + /* TFT-Packet-Filter-Information */ + { + struct dict_avp_data data = { + 1013, /* Code */ + 10415, /* Vendor */ + "TFT-Packet-Filter-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* ToS-Traffic-Class */ + { + struct dict_avp_data data = { + 1014, /* Code */ + 10415, /* Vendor */ + "ToS-Traffic-Class", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Tunnel-Header-Filter */ + { + struct dict_avp_data data = { + 1036, /* Code */ + 10415, /* Vendor */ + "Tunnel-Header-Filter", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, IPFilterRule_type, NULL); + }; + + /* Tunnel-Header-Length */ + { + struct dict_avp_data data = { + 1037, /* Code */ + 10415, /* Vendor */ + "Tunnel-Header-Length", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Tunnel-Information */ + { + struct dict_avp_data data = { + 1038, /* Code */ + 10415, /* Vendor */ + "Tunnel-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* RAT-Type */ + { + struct dict_avp_data data = { + 1032, /* Code */ + 10415, /* Vendor */ + "RAT-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(RAT-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Revalidation-Time */ + { + struct dict_avp_data data = { + 1042, /* Code */ + 10415, /* Vendor */ + "Revalidation-Time", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Time_type, NULL); + }; + + /* Rule-Activation-Time */ + { + struct dict_avp_data data = { + 1043, /* Code */ + 10415, /* Vendor */ + "Rule-Activation-Time", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Time_type, NULL); + }; + + /* UDP-Source-Port */ + { + struct dict_avp_data data = { + 2806, /* Code */ + 10415, /* Vendor */ + "UDP-Source-Port", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* UE-Local-IP-Address */ + { + struct dict_avp_data data = { + 2805, /* Code */ + 10415, /* Vendor */ + "UE-Local-IP-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Address_type, NULL); + }; + + /* Usage-Monitoring-Information */ + { + struct dict_avp_data data = { + 1067, /* Code */ + 10415, /* Vendor */ + "Usage-Monitoring-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Rule-Deactivation-Time */ + { + struct dict_avp_data data = { + 1044, /* Code */ + 10415, /* Vendor */ + "Rule-Deactivation-Time", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Time_type, NULL); + }; + + /* Usage-Monitoring-Level */ + { + struct dict_avp_data data = { + 1068, /* Code */ + 10415, /* Vendor */ + "Usage-Monitoring-Level", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Usage-Monitoring-Level)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Usage-Monitoring-Report */ + { + struct dict_avp_data data = { + 1069, /* Code */ + 10415, /* Vendor */ + "Usage-Monitoring-Report", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Usage-Monitoring-Report)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Usage-Monitoring-Support */ + { + struct dict_avp_data data = { + 1070, /* Code */ + 10415, /* Vendor */ + "Usage-Monitoring-Support", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Usage-Monitoring-Support)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Gxx-specific */ + /* QoS-Rule-Install */ + { + struct dict_avp_data data = { + 1051, /* Code */ + 10415, /* Vendor */ + "QoS-Rule-Install", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* QoS-Rule-Remove */ + { + struct dict_avp_data data = { + 1052, /* Code */ + 10415, /* Vendor */ + "QoS-Rule-Remove", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* QoS-Rule-Definition */ + { + struct dict_avp_data data = { + 1053, /* Code */ + 10415, /* Vendor */ + "QoS-Rule-Definition", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* QoS-Rule-Name */ + { + struct dict_avp_data data = { + 1054, /* Code */ + 10415, /* Vendor */ + "QoS-Rule-Name", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* QoS-Rule-Base-Name */ + { + struct dict_avp_data data = { + 1074, /* Code */ + 10415, /* Vendor */ + "QoS-Rule-Base-Name", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* QoS-Rule-Report */ + { + struct dict_avp_data data = { + 1055, /* Code */ + 10415, /* Vendor */ + "QoS-Rule-Report", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Session-Linking-Indicator */ + { + struct dict_avp_data data = { + 1064, /* Code */ + 10415, /* Vendor */ + "Session-Linking-Indicator", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Session-Linking-Indicator)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* S15-specific */ + /* CS-Service-Qos-Request-Identifier */ + { + struct dict_avp_data data = { + 2807, /* Code */ + 10415, /* Vendor */ + "CS-Service-Qos-Request-Identifier", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* CS-Service-QoS-Request-Operation */ + { + struct dict_avp_data data = { + 2808, /* Code */ + 10415, /* Vendor */ + "CS-Service-QoS-Request-Operation", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(CS-Service-QoS-Request-Operation)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* 3GPP 29.214-b80 (11.8.0 2013.03.15) */ + /* Abort-Cause */ + { + struct dict_avp_data data = { + 500, /* Code */ + 10415, /* Vendor */ + "Abort-Cause", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Abort-Cause)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Access-Network-Charging-Address */ + { + struct dict_avp_data data = { + 501, /* Code */ + 10415, /* Vendor */ + "Access-Network-Charging-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Address_type, NULL); + }; + + /* Access-Network-Charging-Identifier */ + { + struct dict_avp_data data = { + 502, /* Code */ + 10415, /* Vendor */ + "Access-Network-Charging-Identifier", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Access-Network-Charging-Identifier-Value */ + { + struct dict_avp_data data = { + 503, /* Code */ + 10415, /* Vendor */ + "Access-Network-Charging-Identifier-Value", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Acceptable-Service-Info */ + { + struct dict_avp_data data = { + 526, /* Code */ + 10415, /* Vendor */ + "Acceptable-Service-Info", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* AF-Application-Identifier */ + { + struct dict_avp_data data = { + 504, /* Code */ + 10415, /* Vendor */ + "AF-Application-Identifier", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* AF-Charging-Identifier */ + { + struct dict_avp_data data = { + 505, /* Code */ + 10415, /* Vendor */ + "AF-Charging-Identifier", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Application-Service-Provider-Identity */ + { + struct dict_avp_data data = { + 532, /* Code */ + 10415, /* Vendor */ + "Application-Service-Provider-Identity", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Codec-Data */ + { + struct dict_avp_data data = { + 524, /* Code */ + 10415, /* Vendor */ + "Codec-Data", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Flow-Description */ + { + struct dict_avp_data data = { + 507, /* Code */ + 10415, /* Vendor */ + "Flow-Description", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, IPFilterRule_type, NULL); + }; + + /* Flow-Number */ + { + struct dict_avp_data data = { + 509, /* Code */ + 10415, /* Vendor */ + "Flow-Number", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Flows */ + { + struct dict_avp_data data = { + 510, /* Code */ + 10415, /* Vendor */ + "Flows", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Flow-Status */ + { + struct dict_avp_data data = { + 511, /* Code */ + 10415, /* Vendor */ + "Flow-Status", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Flow-Status)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Flow-Usage */ + { + struct dict_avp_data data = { + 512, /* Code */ + 10415, /* Vendor */ + "Flow-Usage", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Flow-Usage)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Service-URN */ + { + struct dict_avp_data data = { + 525, /* Code */ + 10415, /* Vendor */ + "Service-URN", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Specific-Action */ + { + struct dict_avp_data data = { + 513, /* Code */ + 10415, /* Vendor */ + "Specific-Action", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Specific-Action)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Max-Requested-Bandwidth-DL */ + { + struct dict_avp_data data = { + 515, /* Code */ + 10415, /* Vendor */ + "Max-Requested-Bandwidth-DL", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Max-Requested-Bandwidth-UL */ + { + struct dict_avp_data data = { + 516, /* Code */ + 10415, /* Vendor */ + "Max-Requested-Bandwidth-UL", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Media-Component-Description */ + { + struct dict_avp_data data = { + 517, /* Code */ + 10415, /* Vendor */ + "Media-Component-Description", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Media-Component-Number */ + { + struct dict_avp_data data = { + 518, /* Code */ + 10415, /* Vendor */ + "Media-Component-Number", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Media-Sub-Component */ + { + struct dict_avp_data data = { + 519, /* Code */ + 10415, /* Vendor */ + "Media-Sub-Component", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Media-Type */ + { + struct dict_avp_data data = { + 520, /* Code */ + 10415, /* Vendor */ + "Media-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Media-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* MPS-Identifier */ + { + struct dict_avp_data data = { + 528, /* Code */ + 10415, /* Vendor */ + "MPS-Identifier", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Min-Requested-Bandwidth-DL */ + { + struct dict_avp_data data = { + 534, /* Code */ + 10415, /* Vendor */ + "Min-Requested-Bandwidth-DL", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Min-Requested-Bandwidth-UL */ + { + struct dict_avp_data data = { + 535, /* Code */ + 10415, /* Vendor */ + "Min-Requested-Bandwidth-UL", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* RR-Bandwidth */ + { + struct dict_avp_data data = { + 521, /* Code */ + 10415, /* Vendor */ + "RR-Bandwidth", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* RS-Bandwidth */ + { + struct dict_avp_data data = { + 522, /* Code */ + 10415, /* Vendor */ + "RS-Bandwidth", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Service-Info-Status */ + { + struct dict_avp_data data = { + 527, /* Code */ + 10415, /* Vendor */ + "Service-Info-Status", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Service-Info-Status)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* SIP-Forking-Indication */ + { + struct dict_avp_data data = { + 523, /* Code */ + 10415, /* Vendor */ + "SIP-Forking-Indication", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(SIP-Forking-Indication)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Sponsor-Identity */ + { + struct dict_avp_data data = { + 531, /* Code */ + 10415, /* Vendor */ + "Sponsor-Identity", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Sponsored-Connectivity-Data */ + { + struct dict_avp_data data = { + 530, /* Code */ + 10415, /* Vendor */ + "Sponsored-Connectivity-Data", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* AF-Signalling-Protocol */ + { + struct dict_avp_data data = { + 529, /* Code */ + 10415, /* Vendor */ + "AF-Signalling-Protocol", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(AF-Signalling-Protocol)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Required-Access-Info */ + { + struct dict_avp_data data = { + 536, /* Code */ + 10415, /* Vendor */ + "Required-Access-Info", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Required-Access-Info)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Rx-Request-Type */ + { + struct dict_avp_data data = { + 533, /* Code */ + 10415, /* Vendor */ + "Rx-Request-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Rx-Request-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* IP-Domain-Id */ + { + struct dict_avp_data data = { + 537, /* Code */ + 10415, /* Vendor */ + "IP-Domain-Id", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* 3GPP 29.229-b20 (11.2.0 2012.12.21) */ + /* Associated-Identities */ + { + struct dict_avp_data data = { + 632, /* Code */ + 10415, /* Vendor */ + "Associated-Identities", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Associated-Registered-Identities */ + { + struct dict_avp_data data = { + 647, /* Code */ + 10415, /* Vendor */ + "Associated-Registered-Identities", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Call-ID-SIP-Header */ + { + struct dict_avp_data data = { + 643, /* Code */ + 10415, /* Vendor */ + "Call-ID-SIP-Header", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Charging-Information */ + { + struct dict_avp_data data = { + 618, /* Code */ + 10415, /* Vendor */ + "Charging-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Confidentiality-Key */ + { + struct dict_avp_data data = { + 625, /* Code */ + 10415, /* Vendor */ + "Confidentiality-Key", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Contact */ + { + struct dict_avp_data data = { + 641, /* Code */ + 10415, /* Vendor */ + "Contact", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Deregistration-Reason */ + { + struct dict_avp_data data = { + 615, /* Code */ + 10415, /* Vendor */ + "Deregistration-Reason", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Digest-Algorithm */ + { + struct dict_avp_data data = { + 111, /* Code */ + 10415, /* Vendor */ + "Digest-Algorithm", /* 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); + }; + + /* Digest-HA1 */ + { + struct dict_avp_data data = { + 121, /* Code */ + 10415, /* Vendor */ + "Digest-HA1", /* 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); + }; + + /* Digest-QoP */ + { + struct dict_avp_data data = { + 110, /* Code */ + 10415, /* Vendor */ + "Digest-QoP", /* 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); + }; + + /* Digest-Realm */ + { + struct dict_avp_data data = { + 104, /* Code */ + 10415, /* Vendor */ + "Digest-Realm", /* 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); + }; + + /* Feature-List */ + { + struct dict_avp_data data = { + 630, /* Code */ + 10415, /* Vendor */ + "Feature-List", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Feature-List-ID */ + { + struct dict_avp_data data = { + 629, /* Code */ + 10415, /* Vendor */ + "Feature-List-ID", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* From-SIP-Header */ + { + struct dict_avp_data data = { + 644, /* Code */ + 10415, /* Vendor */ + "From-SIP-Header", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Identity-with-Emergency-Registration */ + { + struct dict_avp_data data = { + 651, /* Code */ + 10415, /* Vendor */ + "Identity-with-Emergency-Registration", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Integrity-Key */ + { + struct dict_avp_data data = { + 626, /* Code */ + 10415, /* Vendor */ + "Integrity-Key", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* LIA-Flags */ + { + struct dict_avp_data data = { + 653, /* Code */ + 10415, /* Vendor */ + "LIA-Flags", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Loose-Route-Indication */ + { + struct dict_avp_data data = { + 638, /* Code */ + 10415, /* Vendor */ + "Loose-Route-Indication", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Loose-Route-Indication)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Mandatory-Capability */ + { + struct dict_avp_data data = { + 604, /* Code */ + 10415, /* Vendor */ + "Mandatory-Capability", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Multiple-Registration-Indication */ + { + struct dict_avp_data data = { + 648, /* Code */ + 10415, /* Vendor */ + "Multiple-Registration-Indication", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Multiple-Registration-Indication)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Optional-Capability */ + { + struct dict_avp_data data = { + 605, /* Code */ + 10415, /* Vendor */ + "Optional-Capability", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Originating-Request */ + { + struct dict_avp_data data = { + 633, /* Code */ + 10415, /* Vendor */ + "Originating-Request", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Originating-Request)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Path */ + { + struct dict_avp_data data = { + 640, /* Code */ + 10415, /* Vendor */ + "Path", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Primary-Charging-Collection-Function-Name */ + { + struct dict_avp_data data = { + 621, /* Code */ + 10415, /* Vendor */ + "Primary-Charging-Collection-Function-Name", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, DiameterURI_type, NULL); + }; + + /* Primary-Event-Charging-Function-Name */ + { + struct dict_avp_data data = { + 619, /* Code */ + 10415, /* Vendor */ + "Primary-Event-Charging-Function-Name", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, DiameterURI_type, NULL); + }; + + /* Priviledged-Sender-Indication */ + { + struct dict_avp_data data = { + 652, /* Code */ + 10415, /* Vendor */ + "Priviledged-Sender-Indication", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Priviledged-Sender-Indication)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Public-Identity */ + { + struct dict_avp_data data = { + 601, /* Code */ + 10415, /* Vendor */ + "Public-Identity", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Reason-Code */ + { + struct dict_avp_data data = { + 616, /* Code */ + 10415, /* Vendor */ + "Reason-Code", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Reason-Code)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Reason-Info */ + { + struct dict_avp_data data = { + 617, /* Code */ + 10415, /* Vendor */ + "Reason-Info", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Record-Route */ + { + struct dict_avp_data data = { + 646, /* Code */ + 10415, /* Vendor */ + "Record-Route", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Restoration-Info */ + { + struct dict_avp_data data = { + 649, /* Code */ + 10415, /* Vendor */ + "Restoration-Info", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* SCSCF-Restoration-Info */ + { + struct dict_avp_data data = { + 639, /* Code */ + 10415, /* Vendor */ + "SCSCF-Restoration-Info", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* SIP-Auth-Data-Item */ + { + struct dict_avp_data data = { + 612, /* Code */ + 10415, /* Vendor */ + "SIP-Auth-Data-Item", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* SIP-Authenticate */ + { + struct dict_avp_data data = { + 609, /* Code */ + 10415, /* Vendor */ + "SIP-Authenticate", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* SIP-Authentication-Context */ + { + struct dict_avp_data data = { + 611, /* Code */ + 10415, /* Vendor */ + "SIP-Authentication-Context", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* SIP-Authentication-Scheme */ + { + struct dict_avp_data data = { + 608, /* Code */ + 10415, /* Vendor */ + "SIP-Authentication-Scheme", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* SIP-Authorization */ + { + struct dict_avp_data data = { + 610, /* Code */ + 10415, /* Vendor */ + "SIP-Authorization", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* SIP-Digest-Authenticate */ + { + struct dict_avp_data data = { + 635, /* Code */ + 10415, /* Vendor */ + "SIP-Digest-Authenticate", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* SIP-Item-Number */ + { + struct dict_avp_data data = { + 613, /* Code */ + 10415, /* Vendor */ + "SIP-Item-Number", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* SIP-Number-Auth-Items */ + { + struct dict_avp_data data = { + 607, /* Code */ + 10415, /* Vendor */ + "SIP-Number-Auth-Items", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Secondary-Charging-Collection-Function-Name */ + { + struct dict_avp_data data = { + 622, /* Code */ + 10415, /* Vendor */ + "Secondary-Charging-Collection-Function-Name", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, DiameterURI_type, NULL); + }; + + /* Secondary-Event-Charging-Function-Name */ + { + struct dict_avp_data data = { + 620, /* Code */ + 10415, /* Vendor */ + "Secondary-Event-Charging-Function-Name", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, DiameterURI_type, NULL); + }; + + /* Server-Assignment-Type */ + { + struct dict_avp_data data = { + 614, /* Code */ + 10415, /* Vendor */ + "Server-Assignment-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Server-Assignment-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Server-Capabilities */ + { + struct dict_avp_data data = { + 603, /* Code */ + 10415, /* Vendor */ + "Server-Capabilities", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Server-Name */ + { + struct dict_avp_data data = { + 602, /* Code */ + 10415, /* Vendor */ + "Server-Name", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Session-Priority */ + { + struct dict_avp_data data = { + 650, /* Code */ + 10415, /* Vendor */ + "Session-Priority", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Session-Priority)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Subscription-Info */ + { + struct dict_avp_data data = { + 642, /* Code */ + 10415, /* Vendor */ + "Subscription-Info", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Supported-Applications */ + { + struct dict_avp_data data = { + 631, /* Code */ + 10415, /* Vendor */ + "Supported-Applications", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Supported-Features */ + { + struct dict_avp_data data = { + 628, /* Code */ + 10415, /* Vendor */ + "Supported-Features", /* Name */ + AVP_FLAG_VENDOR, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* To-SIP-Header */ + { + struct dict_avp_data data = { + 645, /* Code */ + 10415, /* Vendor */ + "To-SIP-Header", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* UAR-Flags */ + { + struct dict_avp_data data = { + 637, /* Code */ + 10415, /* Vendor */ + "UAR-Flags", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* User-Authorization-Type */ + { + struct dict_avp_data data = { + 623, /* Code */ + 10415, /* Vendor */ + "User-Authorization-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(User-Authorization-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* User-Data */ + { + struct dict_avp_data data = { + 606, /* Code */ + 10415, /* Vendor */ + "User-Data", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* User-Data-Already-Available */ + { + struct dict_avp_data data = { + 624, /* Code */ + 10415, /* Vendor */ + "User-Data-Already-Available", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(User-Data-Already-Available)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Visited-Network-Identifier */ + { + struct dict_avp_data data = { + 600, /* Code */ + 10415, /* Vendor */ + "Visited-Network-Identifier", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Wildcarded-Public-Identity */ + { + struct dict_avp_data data = { + 634, /* Code */ + 10415, /* Vendor */ + "Wildcarded-Public-Identity", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* 3GPP 32.299-b60 (11.6.0 2012.12.21) */ + /* AF-Correlation-Information */ + { + struct dict_avp_data data = { + 1276, /* Code */ + 10415, /* Vendor */ + "AF-Correlation-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Access-Network-Information */ + { + struct dict_avp_data data = { + 1263, /* Code */ + 10415, /* Vendor */ + "Access-Network-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Access-Transfer-Information */ + { + struct dict_avp_data data = { + 2709, /* Code */ + 10415, /* Vendor */ + "Access-Transfer-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Access-Transfer-Type */ + { + struct dict_avp_data data = { + 2710, /* Code */ + 10415, /* Vendor */ + "Access-Transfer-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Access-Transfer-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Account-Expiration */ + { + struct dict_avp_data data = { + 2309, /* Code */ + 10415, /* Vendor */ + "Account-Expiration", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Time_type, NULL); + }; + + /* Accumulated-Cost */ + { + struct dict_avp_data data = { + 2052, /* Code */ + 10415, /* Vendor */ + "Accumulated-Cost", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Adaptations */ + { + struct dict_avp_data data = { + 1217, /* Code */ + 10415, /* Vendor */ + "Adaptations", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Adaptations)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Additional-Content-Information */ + { + struct dict_avp_data data = { + 1207, /* Code */ + 10415, /* Vendor */ + "Additional-Content-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Additional-Type-Information */ + { + struct dict_avp_data data = { + 1205, /* Code */ + 10415, /* Vendor */ + "Additional-Type-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Address-Data */ + { + struct dict_avp_data data = { + 897, /* Code */ + 10415, /* Vendor */ + "Address-Data", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Address-Domain */ + { + struct dict_avp_data data = { + 898, /* Code */ + 10415, /* Vendor */ + "Address-Domain", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Address-Type */ + { + struct dict_avp_data data = { + 899, /* Code */ + 10415, /* Vendor */ + "Address-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Address-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Addressee-Type */ + { + struct dict_avp_data data = { + 1208, /* Code */ + 10415, /* Vendor */ + "Addressee-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Addressee-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Alternate-Charged-Party-Address */ + { + struct dict_avp_data data = { + 1280, /* Code */ + 10415, /* Vendor */ + "Alternate-Charged-Party-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* AoC-Cost-Information */ + { + struct dict_avp_data data = { + 2053, /* Code */ + 10415, /* Vendor */ + "AoC-Cost-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* AoC-Format */ + { + struct dict_avp_data data = { + 2310, /* Code */ + 10415, /* Vendor */ + "AoC-Format", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(AoC-Format)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* AoC-Information */ + { + struct dict_avp_data data = { + 2054, /* Code */ + 10415, /* Vendor */ + "AoC-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* AoC-Request-Type */ + { + struct dict_avp_data data = { + 2055, /* Code */ + 10415, /* Vendor */ + "AoC-Request-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(AoC-Request-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* AoC-Service */ + { + struct dict_avp_data data = { + 2311, /* Code */ + 10415, /* Vendor */ + "AoC-Service", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* AoC-Service-Obligatory-Type */ + { + struct dict_avp_data data = { + 2312, /* Code */ + 10415, /* Vendor */ + "AoC-Service-Obligatory-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(AoC-Service-Obligatory-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* AoC-Service-Type */ + { + struct dict_avp_data data = { + 2313, /* Code */ + 10415, /* Vendor */ + "AoC-Service-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(AoC-Service-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* AoC-Subscription-Information */ + { + struct dict_avp_data data = { + 2314, /* Code */ + 10415, /* Vendor */ + "AoC-Subscription-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Applic-ID */ + { + struct dict_avp_data data = { + 1218, /* Code */ + 10415, /* Vendor */ + "Applic-ID", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Application-Server */ + { + struct dict_avp_data data = { + 836, /* Code */ + 10415, /* Vendor */ + "Application-Server", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Application-Server-Information */ + { + struct dict_avp_data data = { + 850, /* Code */ + 10415, /* Vendor */ + "Application-Server-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Application-provided-Called-Party-Address */ + { + struct dict_avp_data data = { + 837, /* Code */ + 10415, /* Vendor */ + "Application-provided-Called-Party-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Associated-Party-Address */ + { + struct dict_avp_data data = { + 2035, /* Code */ + 10415, /* Vendor */ + "Associated-Party-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Associated-URI */ + { + struct dict_avp_data data = { + 856, /* Code */ + 10415, /* Vendor */ + "Associated-URI", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Aux-Applic-Info */ + { + struct dict_avp_data data = { + 1219, /* Code */ + 10415, /* Vendor */ + "Aux-Applic-Info", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Base-Time-Interval */ + { + struct dict_avp_data data = { + 1265, /* Code */ + 10415, /* Vendor */ + "Base-Time-Interval", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Bearer-Service */ + { + struct dict_avp_data data = { + 854, /* Code */ + 10415, /* Vendor */ + "Bearer-Service", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* CG-Address */ + { + struct dict_avp_data data = { + 846, /* Code */ + 10415, /* Vendor */ + "CG-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Address_type, NULL); + }; + + /* CSG-Access-Mode */ + { + struct dict_avp_data data = { + 2317, /* Code */ + 10415, /* Vendor */ + "CSG-Access-Mode", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(CSG-Access-Mode)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* CSG-Membership-Indication */ + { + struct dict_avp_data data = { + 2318, /* Code */ + 10415, /* Vendor */ + "CSG-Membership-Indication", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(CSG-Membership-Indication)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* CUG-Information */ + { + struct dict_avp_data data = { + 2304, /* Code */ + 10415, /* Vendor */ + "CUG-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Called-Asserted-Identity */ + { + struct dict_avp_data data = { + 1250, /* Code */ + 10415, /* Vendor */ + "Called-Asserted-Identity", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Called-Party-Address */ + { + struct dict_avp_data data = { + 832, /* Code */ + 10415, /* Vendor */ + "Called-Party-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Calling-Party-Address */ + { + struct dict_avp_data data = { + 831, /* Code */ + 10415, /* Vendor */ + "Calling-Party-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Carrier-Select-Routing-Information */ + { + struct dict_avp_data data = { + 2023, /* Code */ + 10415, /* Vendor */ + "Carrier-Select-Routing-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Cause-Code */ + { + struct dict_avp_data data = { + 861, /* Code */ + 10415, /* Vendor */ + "Cause-Code", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Change-Condition */ + { + struct dict_avp_data data = { + 2037, /* Code */ + 10415, /* Vendor */ + "Change-Condition", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Change-Time */ + { + struct dict_avp_data data = { + 2038, /* Code */ + 10415, /* Vendor */ + "Change-Time", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Time_type, NULL); + }; + + /* Charge-Reason-Code */ + { + struct dict_avp_data data = { + 2118, /* Code */ + 10415, /* Vendor */ + "Charge-Reason-Code", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Charge-Reason-Code)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Charged-Party */ + { + struct dict_avp_data data = { + 857, /* Code */ + 10415, /* Vendor */ + "Charged-Party", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Charging-Characteristics-Selection-Mode */ + { + struct dict_avp_data data = { + 2066, /* Code */ + 10415, /* Vendor */ + "Charging-Characteristics-Selection-Mode", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Charging-Characteristics-Selection-Mode)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Class-Identifier */ + { + struct dict_avp_data data = { + 1214, /* Code */ + 10415, /* Vendor */ + "Class-Identifier", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Class-Identifier)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Client-Address */ + { + struct dict_avp_data data = { + 2018, /* Code */ + 10415, /* Vendor */ + "Client-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Address_type, NULL); + }; + + /* Content-Class */ + { + struct dict_avp_data data = { + 1220, /* Code */ + 10415, /* Vendor */ + "Content-Class", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Content-Class)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Content-Disposition */ + { + struct dict_avp_data data = { + 828, /* Code */ + 10415, /* Vendor */ + "Content-Disposition", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Content-Length */ + { + struct dict_avp_data data = { + 827, /* Code */ + 10415, /* Vendor */ + "Content-Length", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Content-Size */ + { + struct dict_avp_data data = { + 1206, /* Code */ + 10415, /* Vendor */ + "Content-Size", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Content-Type */ + { + struct dict_avp_data data = { + 826, /* Code */ + 10415, /* Vendor */ + "Content-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Current-Tariff */ + { + struct dict_avp_data data = { + 2056, /* Code */ + 10415, /* Vendor */ + "Current-Tariff", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* DRM-Content */ + { + struct dict_avp_data data = { + 1221, /* Code */ + 10415, /* Vendor */ + "DRM-Content", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(DRM-Content)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Data-Coding-Scheme */ + { + struct dict_avp_data data = { + 2001, /* Code */ + 10415, /* Vendor */ + "Data-Coding-Scheme", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Deferred-Location-Event-Type */ + { + struct dict_avp_data data = { + 1230, /* Code */ + 10415, /* Vendor */ + "Deferred-Location-Event-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Delivery-Report-Requested */ + { + struct dict_avp_data data = { + 1216, /* Code */ + 10415, /* Vendor */ + "Delivery-Report-Requested", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Delivery-Report-Requested)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Destination-Interface */ + { + struct dict_avp_data data = { + 2002, /* Code */ + 10415, /* Vendor */ + "Destination-Interface", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Diagnostics */ + { + struct dict_avp_data data = { + 2039, /* Code */ + 10415, /* Vendor */ + "Diagnostics", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Domain-Name */ + { + struct dict_avp_data data = { + 1200, /* Code */ + 10415, /* Vendor */ + "Domain-Name", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Dynamic-Address-Flag */ + { + struct dict_avp_data data = { + 2051, /* Code */ + 10415, /* Vendor */ + "Dynamic-Address-Flag", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Dynamic-Address-Flag)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Dynamic-Address-Flag-Extension */ + { + struct dict_avp_data data = { + 2068, /* Code */ + 10415, /* Vendor */ + "Dynamic-Address-Flag-Extension", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Dynamic-Address-Flag-Extension)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Early-Media-Description */ + { + struct dict_avp_data data = { + 1272, /* Code */ + 10415, /* Vendor */ + "Early-Media-Description", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Envelope */ + { + struct dict_avp_data data = { + 1266, /* Code */ + 10415, /* Vendor */ + "Envelope", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Envelope-End-Time */ + { + struct dict_avp_data data = { + 1267, /* Code */ + 10415, /* Vendor */ + "Envelope-End-Time", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Time_type, NULL); + }; + + /* Envelope-Reporting */ + { + struct dict_avp_data data = { + 1268, /* Code */ + 10415, /* Vendor */ + "Envelope-Reporting", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Envelope-Reporting)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Envelope-Start-Time */ + { + struct dict_avp_data data = { + 1269, /* Code */ + 10415, /* Vendor */ + "Envelope-Start-Time", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Time_type, NULL); + }; + + /* Event */ + { + struct dict_avp_data data = { + 825, /* Code */ + 10415, /* Vendor */ + "Event", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Event-Charging-TimeStamp */ + { + struct dict_avp_data data = { + 1258, /* Code */ + 10415, /* Vendor */ + "Event-Charging-TimeStamp", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Time_type, NULL); + }; + + /* Event-Type */ + { + struct dict_avp_data data = { + 823, /* Code */ + 10415, /* Vendor */ + "Event-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Expires */ + { + struct dict_avp_data data = { + 888, /* Code */ + 10415, /* Vendor */ + "Expires", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* File-Repair-Supported */ + { + struct dict_avp_data data = { + 1224, /* Code */ + 10415, /* Vendor */ + "File-Repair-Supported", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(File-Repair-Supported)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* From-Address */ + { + struct dict_avp_data data = { + 2708, /* Code */ + 10415, /* Vendor */ + "From-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* GGSN-Address */ + { + struct dict_avp_data data = { + 847, /* Code */ + 10415, /* Vendor */ + "GGSN-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Address_type, NULL); + }; + + /* IMS-Application-Reference-Identifier */ + { + struct dict_avp_data data = { + 2601, /* Code */ + 10415, /* Vendor */ + "IMS-Application-Reference-Identifier", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* IMS-Charging-Identifier */ + { + struct dict_avp_data data = { + 841, /* Code */ + 10415, /* Vendor */ + "IMS-Charging-Identifier", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* IMS-Communication-Service-Identifier */ + { + struct dict_avp_data data = { + 1281, /* Code */ + 10415, /* Vendor */ + "IMS-Communication-Service-Identifier", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* IMS-Emergency-Indicator */ + { + struct dict_avp_data data = { + 2322, /* Code */ + 10415, /* Vendor */ + "IMS-Emergency-Indicator", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(IMS-Emergency-Indicator)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* IMS-Information */ + { + struct dict_avp_data data = { + 876, /* Code */ + 10415, /* Vendor */ + "IMS-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* IMSI-Unauthenticated-Flag */ + { + struct dict_avp_data data = { + 2308, /* Code */ + 10415, /* Vendor */ + "IMSI-Unauthenticated-Flag", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(IMSI-Unauthenticated-Flag)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* IP-Realm-Default-Indication */ + { + struct dict_avp_data data = { + 2603, /* Code */ + 10415, /* Vendor */ + "IP-Realm-Default-Indication", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(IP-Realm-Default-Indication)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Incoming-Trunk-Group-Id */ + { + struct dict_avp_data data = { + 852, /* Code */ + 10415, /* Vendor */ + "Incoming-Trunk-Group-Id", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Incremental-Cost */ + { + struct dict_avp_data data = { + 2062, /* Code */ + 10415, /* Vendor */ + "Incremental-Cost", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Initial-IMS-Charging-Identifier */ + { + struct dict_avp_data data = { + 2321, /* Code */ + 10415, /* Vendor */ + "Initial-IMS-Charging-Identifier", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Inter-Operator-Identifier */ + { + struct dict_avp_data data = { + 838, /* Code */ + 10415, /* Vendor */ + "Inter-Operator-Identifier", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Interface-Id */ + { + struct dict_avp_data data = { + 2003, /* Code */ + 10415, /* Vendor */ + "Interface-Id", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Interface-Port */ + { + struct dict_avp_data data = { + 2004, /* Code */ + 10415, /* Vendor */ + "Interface-Port", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Interface-Text */ + { + struct dict_avp_data data = { + 2005, /* Code */ + 10415, /* Vendor */ + "Interface-Text", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Interface-Type */ + { + struct dict_avp_data data = { + 2006, /* Code */ + 10415, /* Vendor */ + "Interface-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Interface-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* LCS-APN */ + { + struct dict_avp_data data = { + 1231, /* Code */ + 10415, /* Vendor */ + "LCS-APN", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* LCS-Client-Dialed-By-MS */ + { + struct dict_avp_data data = { + 1233, /* Code */ + 10415, /* Vendor */ + "LCS-Client-Dialed-By-MS", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* LCS-Client-External-ID */ + { + struct dict_avp_data data = { + 1234, /* Code */ + 10415, /* Vendor */ + "LCS-Client-External-ID", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* LCS-Client-Id */ + { + struct dict_avp_data data = { + 1232, /* Code */ + 10415, /* Vendor */ + "LCS-Client-Id", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* LCS-Client-Name */ + { + struct dict_avp_data data = { + 1235, /* Code */ + 10415, /* Vendor */ + "LCS-Client-Name", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* LCS-Client-Type */ + { + struct dict_avp_data data = { + 1241, /* Code */ + 10415, /* Vendor */ + "LCS-Client-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(LCS-Client-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* LCS-Data-Coding-Scheme */ + { + struct dict_avp_data data = { + 1236, /* Code */ + 10415, /* Vendor */ + "LCS-Data-Coding-Scheme", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* LCS-Format-Indicator */ + { + struct dict_avp_data data = { + 1237, /* Code */ + 10415, /* Vendor */ + "LCS-Format-Indicator", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(LCS-Format-Indicator)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* LCS-Information */ + { + struct dict_avp_data data = { + 878, /* Code */ + 10415, /* Vendor */ + "LCS-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* LCS-Name-String */ + { + struct dict_avp_data data = { + 1238, /* Code */ + 10415, /* Vendor */ + "LCS-Name-String", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* LCS-Requestor-Id */ + { + struct dict_avp_data data = { + 1239, /* Code */ + 10415, /* Vendor */ + "LCS-Requestor-Id", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* LCS-Requestor-Id-String */ + { + struct dict_avp_data data = { + 1240, /* Code */ + 10415, /* Vendor */ + "LCS-Requestor-Id-String", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Local-GW-Inserted-Indication */ + { + struct dict_avp_data data = { + 2604, /* Code */ + 10415, /* Vendor */ + "Local-GW-Inserted-Indication", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Local-GW-Inserted-Indication)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Local-Sequence-Number */ + { + struct dict_avp_data data = { + 2063, /* Code */ + 10415, /* Vendor */ + "Local-Sequence-Number", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Location-Estimate */ + { + struct dict_avp_data data = { + 1242, /* Code */ + 10415, /* Vendor */ + "Location-Estimate", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Location-Estimate-Type */ + { + struct dict_avp_data data = { + 1243, /* Code */ + 10415, /* Vendor */ + "Location-Estimate-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Location-Estimate-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Location-Type */ + { + struct dict_avp_data data = { + 1244, /* Code */ + 10415, /* Vendor */ + "Location-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Low-Balance-Indication */ + { + struct dict_avp_data data = { + 2020, /* Code */ + 10415, /* Vendor */ + "Low-Balance-Indication", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Low-Balance-Indication)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Low-Priority-Indicator */ + { + struct dict_avp_data data = { + 2602, /* Code */ + 10415, /* Vendor */ + "Low-Priority-Indicator", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Low-Priority-Indicator)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* MBMSGW-Address */ + { + struct dict_avp_data data = { + 2307, /* Code */ + 10415, /* Vendor */ + "MBMSGW-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Address_type, NULL); + }; + + /* MBMS-Information */ + { + struct dict_avp_data data = { + 880, /* Code */ + 10415, /* Vendor */ + "MBMS-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* MBMS-User-Service-Type */ + { + struct dict_avp_data data = { + 1225, /* Code */ + 10415, /* Vendor */ + "MBMS-User-Service-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(MBMS-User-Service-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* MM-Content-Type */ + { + struct dict_avp_data data = { + 1203, /* Code */ + 10415, /* Vendor */ + "MM-Content-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* MMBox-Storage-Requested */ + { + struct dict_avp_data data = { + 1248, /* Code */ + 10415, /* Vendor */ + "MMBox-Storage-Requested", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(MMBox-Storage-Requested)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* MMS-Information */ + { + struct dict_avp_data data = { + 877, /* Code */ + 10415, /* Vendor */ + "MMS-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* MMTel-Information */ + { + struct dict_avp_data data = { + 2030, /* Code */ + 10415, /* Vendor */ + "MMTel-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* MMTel-SService-Type */ + { + struct dict_avp_data data = { + 2031, /* Code */ + 10415, /* Vendor */ + "MMTel-SService-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Media-Initiator-Flag */ + { + struct dict_avp_data data = { + 882, /* Code */ + 10415, /* Vendor */ + "Media-Initiator-Flag", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Media-Initiator-Flag)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Media-Initiator-Party */ + { + struct dict_avp_data data = { + 1288, /* Code */ + 10415, /* Vendor */ + "Media-Initiator-Party", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Message-Body */ + { + struct dict_avp_data data = { + 889, /* Code */ + 10415, /* Vendor */ + "Message-Body", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Message-Class */ + { + struct dict_avp_data data = { + 1213, /* Code */ + 10415, /* Vendor */ + "Message-Class", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Message-ID */ + { + struct dict_avp_data data = { + 1210, /* Code */ + 10415, /* Vendor */ + "Message-ID", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Message-Size */ + { + struct dict_avp_data data = { + 1212, /* Code */ + 10415, /* Vendor */ + "Message-Size", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Message-Type */ + { + struct dict_avp_data data = { + 1211, /* Code */ + 10415, /* Vendor */ + "Message-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Message-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* NNI-Information */ + { + struct dict_avp_data data = { + 2703, /* Code */ + 10415, /* Vendor */ + "NNI-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* NNI-Type */ + { + struct dict_avp_data data = { + 2704, /* Code */ + 10415, /* Vendor */ + "NNI-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(NNI-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Neighbour-Node-Address */ + { + struct dict_avp_data data = { + 2705, /* Code */ + 10415, /* Vendor */ + "Neighbour-Node-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Address_type, NULL); + }; + + /* Next-Tariff */ + { + struct dict_avp_data data = { + 2057, /* Code */ + 10415, /* Vendor */ + "Next-Tariff", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Node-Functionality */ + { + struct dict_avp_data data = { + 862, /* Code */ + 10415, /* Vendor */ + "Node-Functionality", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Node-Functionality)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Node-Id */ + { + struct dict_avp_data data = { + 2064, /* Code */ + 10415, /* Vendor */ + "Node-Id", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Number-Of-Diversions */ + { + struct dict_avp_data data = { + 2034, /* Code */ + 10415, /* Vendor */ + "Number-Of-Diversions", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Number-Of-Messages-Sent */ + { + struct dict_avp_data data = { + 2019, /* Code */ + 10415, /* Vendor */ + "Number-Of-Messages-Sent", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Number-Of-Participants */ + { + struct dict_avp_data data = { + 885, /* Code */ + 10415, /* Vendor */ + "Number-Of-Participants", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Number-Of-Received-Talk-Bursts */ + { + struct dict_avp_data data = { + 1282, /* Code */ + 10415, /* Vendor */ + "Number-Of-Received-Talk-Bursts", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Number-Of-Talk-Bursts */ + { + struct dict_avp_data data = { + 1283, /* Code */ + 10415, /* Vendor */ + "Number-Of-Talk-Bursts", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Number-Portability-Routing-Information */ + { + struct dict_avp_data data = { + 2024, /* Code */ + 10415, /* Vendor */ + "Number-Portability-Routing-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Offline-Charging */ + { + struct dict_avp_data data = { + 1278, /* Code */ + 10415, /* Vendor */ + "Offline-Charging", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Online-Charging-Flag */ + { + struct dict_avp_data data = { + 2303, /* Code */ + 10415, /* Vendor */ + "Online-Charging-Flag", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Online-Charging-Flag)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Originating-IOI */ + { + struct dict_avp_data data = { + 839, /* Code */ + 10415, /* Vendor */ + "Originating-IOI", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Originator */ + { + struct dict_avp_data data = { + 864, /* Code */ + 10415, /* Vendor */ + "Originator", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Originator)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Originator-Address */ + { + struct dict_avp_data data = { + 886, /* Code */ + 10415, /* Vendor */ + "Originator-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Originator-Interface */ + { + struct dict_avp_data data = { + 2009, /* Code */ + 10415, /* Vendor */ + "Originator-Interface", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Originator-Received-Address */ + { + struct dict_avp_data data = { + 2027, /* Code */ + 10415, /* Vendor */ + "Originator-Received-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Originator-SCCP-Address */ + { + struct dict_avp_data data = { + 2008, /* Code */ + 10415, /* Vendor */ + "Originator-SCCP-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Address_type, NULL); + }; + + /* Outgoing-Session-Id */ + { + struct dict_avp_data data = { + 2320, /* Code */ + 10415, /* Vendor */ + "Outgoing-Session-Id", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Outgoing-Trunk-Group-Id */ + { + struct dict_avp_data data = { + 853, /* Code */ + 10415, /* Vendor */ + "Outgoing-Trunk-Group-Id", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* PDG-Address */ + { + struct dict_avp_data data = { + 895, /* Code */ + 10415, /* Vendor */ + "PDG-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Address_type, NULL); + }; + + /* PDG-Charging-Id */ + { + struct dict_avp_data data = { + 896, /* Code */ + 10415, /* Vendor */ + "PDG-Charging-Id", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* PDN-Connection-Charging-ID */ + { + struct dict_avp_data data = { + 2050, /* Code */ + 10415, /* Vendor */ + "PDN-Connection-Charging-ID", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* PDP-Address */ + { + struct dict_avp_data data = { + 1227, /* Code */ + 10415, /* Vendor */ + "PDP-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Address_type, NULL); + }; + + /* PDP-Address-Prefix-Length */ + { + struct dict_avp_data data = { + 2606, /* Code */ + 10415, /* Vendor */ + "PDP-Address-Prefix-Length", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* PDP-Context-Type */ + { + struct dict_avp_data data = { + 1247, /* Code */ + 10415, /* Vendor */ + "PDP-Context-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(PDP-Context-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* PS-Append-Free-Format-Data */ + { + struct dict_avp_data data = { + 867, /* Code */ + 10415, /* Vendor */ + "PS-Append-Free-Format-Data", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(PS-Append-Free-Format-Data)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* PS-Free-Format-Data */ + { + struct dict_avp_data data = { + 866, /* Code */ + 10415, /* Vendor */ + "PS-Free-Format-Data", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* PS-Furnish-Charging-Information */ + { + struct dict_avp_data data = { + 865, /* Code */ + 10415, /* Vendor */ + "PS-Furnish-Charging-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* PS-Information */ + { + struct dict_avp_data data = { + 874, /* Code */ + 10415, /* Vendor */ + "PS-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Participant-Access-Priority */ + { + struct dict_avp_data data = { + 1259, /* Code */ + 10415, /* Vendor */ + "Participant-Access-Priority", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Participant-Access-Priority)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Participant-Action-Type */ + { + struct dict_avp_data data = { + 2049, /* Code */ + 10415, /* Vendor */ + "Participant-Action-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Participant-Action-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Participant-Group */ + { + struct dict_avp_data data = { + 1260, /* Code */ + 10415, /* Vendor */ + "Participant-Group", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Participants-Involved */ + { + struct dict_avp_data data = { + 887, /* Code */ + 10415, /* Vendor */ + "Participants-Involved", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* PoC-Change-Condition */ + { + struct dict_avp_data data = { + 1261, /* Code */ + 10415, /* Vendor */ + "PoC-Change-Condition", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(PoC-Change-Condition)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* PoC-Change-Time */ + { + struct dict_avp_data data = { + 1262, /* Code */ + 10415, /* Vendor */ + "PoC-Change-Time", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Time_type, NULL); + }; + + /* PoC-Controlling-Address */ + { + struct dict_avp_data data = { + 858, /* Code */ + 10415, /* Vendor */ + "PoC-Controlling-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* PoC-Event-Type */ + { + struct dict_avp_data data = { + 2025, /* Code */ + 10415, /* Vendor */ + "PoC-Event-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(PoC-Event-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* PoC-Group-Name */ + { + struct dict_avp_data data = { + 859, /* Code */ + 10415, /* Vendor */ + "PoC-Group-Name", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* PoC-Information */ + { + struct dict_avp_data data = { + 879, /* Code */ + 10415, /* Vendor */ + "PoC-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* PoC-Server-Role */ + { + struct dict_avp_data data = { + 883, /* Code */ + 10415, /* Vendor */ + "PoC-Server-Role", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(PoC-Server-Role)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* PoC-Session-Id */ + { + struct dict_avp_data data = { + 1229, /* Code */ + 10415, /* Vendor */ + "PoC-Session-Id", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* PoC-Session-Initiation-type */ + { + struct dict_avp_data data = { + 1277, /* Code */ + 10415, /* Vendor */ + "PoC-Session-Initiation-type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(PoC-Session-Initiation-type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* PoC-Session-Type */ + { + struct dict_avp_data data = { + 884, /* Code */ + 10415, /* Vendor */ + "PoC-Session-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(PoC-Session-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* PoC-User-Role */ + { + struct dict_avp_data data = { + 1252, /* Code */ + 10415, /* Vendor */ + "PoC-User-Role", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* PoC-User-Role-IDs */ + { + struct dict_avp_data data = { + 1253, /* Code */ + 10415, /* Vendor */ + "PoC-User-Role-IDs", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* PoC-User-Role-info-Units */ + { + struct dict_avp_data data = { + 1254, /* Code */ + 10415, /* Vendor */ + "PoC-User-Role-info-Units", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(PoC-User-Role-info-Units)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Positioning-Data */ + { + struct dict_avp_data data = { + 1245, /* Code */ + 10415, /* Vendor */ + "Positioning-Data", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Preferred-AoC-Currency */ + { + struct dict_avp_data data = { + 2315, /* Code */ + 10415, /* Vendor */ + "Preferred-AoC-Currency", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Priority */ + { + struct dict_avp_data data = { + 1209, /* Code */ + 10415, /* Vendor */ + "Priority", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Priority)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Quota-Consumption-Time */ + { + struct dict_avp_data data = { + 881, /* Code */ + 10415, /* Vendor */ + "Quota-Consumption-Time", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Quota-Holding-Time */ + { + struct dict_avp_data data = { + 871, /* Code */ + 10415, /* Vendor */ + "Quota-Holding-Time", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Rate-Element */ + { + struct dict_avp_data data = { + 2058, /* Code */ + 10415, /* Vendor */ + "Rate-Element", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Read-Reply-Report-Requested */ + { + struct dict_avp_data data = { + 1222, /* Code */ + 10415, /* Vendor */ + "Read-Reply-Report-Requested", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Read-Reply-Report-Requested)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Real-Time-Tariff-Information */ + { + struct dict_avp_data data = { + 2305, /* Code */ + 10415, /* Vendor */ + "Real-Time-Tariff-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Received-Talk-Burst-Time */ + { + struct dict_avp_data data = { + 1284, /* Code */ + 10415, /* Vendor */ + "Received-Talk-Burst-Time", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Received-Talk-Burst-Volume */ + { + struct dict_avp_data data = { + 1285, /* Code */ + 10415, /* Vendor */ + "Received-Talk-Burst-Volume", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Recipient-Address */ + { + struct dict_avp_data data = { + 1201, /* Code */ + 10415, /* Vendor */ + "Recipient-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Recipient-Info */ + { + struct dict_avp_data data = { + 2026, /* Code */ + 10415, /* Vendor */ + "Recipient-Info", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Recipient-Received-Address */ + { + struct dict_avp_data data = { + 2028, /* Code */ + 10415, /* Vendor */ + "Recipient-Received-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Recipient-SCCP-Address */ + { + struct dict_avp_data data = { + 2010, /* Code */ + 10415, /* Vendor */ + "Recipient-SCCP-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Address_type, NULL); + }; + + /* Refund-Information */ + { + struct dict_avp_data data = { + 2022, /* Code */ + 10415, /* Vendor */ + "Refund-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Relationship-Mode */ + { + struct dict_avp_data data = { + 2706, /* Code */ + 10415, /* Vendor */ + "Relationship-Mode", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Relationship-Mode)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Remaining-Balance */ + { + struct dict_avp_data data = { + 2021, /* Code */ + 10415, /* Vendor */ + "Remaining-Balance", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Reply-Applic-ID */ + { + struct dict_avp_data data = { + 1223, /* Code */ + 10415, /* Vendor */ + "Reply-Applic-ID", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Reply-Path-Requested */ + { + struct dict_avp_data data = { + 2011, /* Code */ + 10415, /* Vendor */ + "Reply-Path-Requested", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Reply-Path-Requested)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Reporting-Reason */ + { + struct dict_avp_data data = { + 872, /* Code */ + 10415, /* Vendor */ + "Reporting-Reason", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Reporting-Reason)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Requested-Party-Address */ + { + struct dict_avp_data data = { + 1251, /* Code */ + 10415, /* Vendor */ + "Requested-Party-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Role-Of-Node */ + { + struct dict_avp_data data = { + 829, /* Code */ + 10415, /* Vendor */ + "Role-Of-Node", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Role-Of-Node)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Route-Header-Received */ + { + struct dict_avp_data data = { + 3403, /* Code */ + 10415, /* Vendor */ + "Route-Header-Received", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Route-Header-Transmitted */ + { + struct dict_avp_data data = { + 3404, /* Code */ + 10415, /* Vendor */ + "Route-Header-Transmitted", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* IMS-Visited-Network-Identifier */ + { + struct dict_avp_data data = { + 2713, /* Code */ + 10415, /* Vendor */ + "IMS-Visited-Network-Identifier", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Instance-Id */ + { + struct dict_avp_data data = { + 3402, /* Code */ + 10415, /* Vendor */ + "Instance-Id", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* SDP-Answer-Timestamp */ + { + struct dict_avp_data data = { + 1275, /* Code */ + 10415, /* Vendor */ + "SDP-Answer-Timestamp", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Time_type, NULL); + }; + + /* SDP-Media-Component */ + { + struct dict_avp_data data = { + 843, /* Code */ + 10415, /* Vendor */ + "SDP-Media-Component", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* SDP-Media-Description */ + { + struct dict_avp_data data = { + 845, /* Code */ + 10415, /* Vendor */ + "SDP-Media-Description", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* SDP-Media-Name */ + { + struct dict_avp_data data = { + 844, /* Code */ + 10415, /* Vendor */ + "SDP-Media-Name", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* SDP-Offer-Timestamp */ + { + struct dict_avp_data data = { + 1274, /* Code */ + 10415, /* Vendor */ + "SDP-Offer-Timestamp", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Time_type, NULL); + }; + + /* SDP-Session-Description */ + { + struct dict_avp_data data = { + 842, /* Code */ + 10415, /* Vendor */ + "SDP-Session-Description", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* SDP-TimeStamps */ + { + struct dict_avp_data data = { + 1273, /* Code */ + 10415, /* Vendor */ + "SDP-TimeStamps", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* SDP-Type */ + { + struct dict_avp_data data = { + 2036, /* Code */ + 10415, /* Vendor */ + "SDP-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(SDP-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* SGSN-Address */ + { + struct dict_avp_data data = { + 1228, /* Code */ + 10415, /* Vendor */ + "SGSN-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Address_type, NULL); + }; + + /* SGW-Address */ + { + struct dict_avp_data data = { + 2067, /* Code */ + 10415, /* Vendor */ + "SGW-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Address_type, NULL); + }; + + /* SGW-Change */ + { + struct dict_avp_data data = { + 2065, /* Code */ + 10415, /* Vendor */ + "SGW-Change", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(SGW-Change)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* SIP-Method */ + { + struct dict_avp_data data = { + 824, /* Code */ + 10415, /* Vendor */ + "SIP-Method", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* SIP-Request-Timestamp */ + { + struct dict_avp_data data = { + 834, /* Code */ + 10415, /* Vendor */ + "SIP-Request-Timestamp", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Time_type, NULL); + }; + + /* SIP-Request-Timestamp-Fraction */ + { + struct dict_avp_data data = { + 2301, /* Code */ + 10415, /* Vendor */ + "SIP-Request-Timestamp-Fraction", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* SIP-Response-Timestamp */ + { + struct dict_avp_data data = { + 835, /* Code */ + 10415, /* Vendor */ + "SIP-Response-Timestamp", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Time_type, NULL); + }; + + /* SIP-Response-Timestamp-Fraction */ + { + struct dict_avp_data data = { + 2302, /* Code */ + 10415, /* Vendor */ + "SIP-Response-Timestamp-Fraction", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* SM-Discharge-Time */ + { + struct dict_avp_data data = { + 2012, /* Code */ + 10415, /* Vendor */ + "SM-Discharge-Time", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Time_type, NULL); + }; + + /* SM-Message-Type */ + { + struct dict_avp_data data = { + 2007, /* Code */ + 10415, /* Vendor */ + "SM-Message-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(SM-Message-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* SM-Protocol-ID */ + { + struct dict_avp_data data = { + 2013, /* Code */ + 10415, /* Vendor */ + "SM-Protocol-ID", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* SM-Service-Type */ + { + struct dict_avp_data data = { + 2029, /* Code */ + 10415, /* Vendor */ + "SM-Service-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(SM-Service-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* SM-Status */ + { + struct dict_avp_data data = { + 2014, /* Code */ + 10415, /* Vendor */ + "SM-Status", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* SM-User-Data-Header */ + { + struct dict_avp_data data = { + 2015, /* Code */ + 10415, /* Vendor */ + "SM-User-Data-Header", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* SMS-Information */ + { + struct dict_avp_data data = { + 2000, /* Code */ + 10415, /* Vendor */ + "SMS-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* SMS-Node */ + { + struct dict_avp_data data = { + 2016, /* Code */ + 10415, /* Vendor */ + "SMS-Node", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(SMS-Node)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* SMSC-Address */ + { + struct dict_avp_data data = { + 2017, /* Code */ + 10415, /* Vendor */ + "SMSC-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Address_type, NULL); + }; + + /* Scale-Factor */ + { + struct dict_avp_data data = { + 2059, /* Code */ + 10415, /* Vendor */ + "Scale-Factor", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Served-Party-IP-Address */ + { + struct dict_avp_data data = { + 848, /* Code */ + 10415, /* Vendor */ + "Served-Party-IP-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Address_type, NULL); + }; + + /* Service-Data-Container */ + { + struct dict_avp_data data = { + 2040, /* Code */ + 10415, /* Vendor */ + "Service-Data-Container", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Service-Id */ + { + struct dict_avp_data data = { + 855, /* Code */ + 10415, /* Vendor */ + "Service-Id", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Service-Information */ + { + struct dict_avp_data data = { + 873, /* Code */ + 10415, /* Vendor */ + "Service-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Service-Mode */ + { + struct dict_avp_data data = { + 2032, /* Code */ + 10415, /* Vendor */ + "Service-Mode", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Service-Specific-Data */ + { + struct dict_avp_data data = { + 863, /* Code */ + 10415, /* Vendor */ + "Service-Specific-Data", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Service-Specific-Info */ + { + struct dict_avp_data data = { + 1249, /* Code */ + 10415, /* Vendor */ + "Service-Specific-Info", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Service-Specific-Type */ + { + struct dict_avp_data data = { + 1257, /* Code */ + 10415, /* Vendor */ + "Service-Specific-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Serving-Node-Type */ + { + struct dict_avp_data data = { + 2047, /* Code */ + 10415, /* Vendor */ + "Serving-Node-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Serving-Node-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Session-Direction */ + { + struct dict_avp_data data = { + 2707, /* Code */ + 10415, /* Vendor */ + "Session-Direction", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Session-Direction)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Start-Time */ + { + struct dict_avp_data data = { + 2041, /* Code */ + 10415, /* Vendor */ + "Start-Time", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Time_type, NULL); + }; + + /* Status */ + { + struct dict_avp_data data = { + 2702, /* Code */ + 10415, /* Vendor */ + "Status", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Status)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Stop-Time */ + { + struct dict_avp_data data = { + 2042, /* Code */ + 10415, /* Vendor */ + "Stop-Time", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Time_type, NULL); + }; + + /* Submission-Time */ + { + struct dict_avp_data data = { + 1202, /* Code */ + 10415, /* Vendor */ + "Submission-Time", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Time_type, NULL); + }; + + /* Subscriber-Role */ + { + struct dict_avp_data data = { + 2033, /* Code */ + 10415, /* Vendor */ + "Subscriber-Role", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Subscriber-Role)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Supplementary-Service */ + { + struct dict_avp_data data = { + 2048, /* Code */ + 10415, /* Vendor */ + "Supplementary-Service", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Talk-Burst-Exchange */ + { + struct dict_avp_data data = { + 1255, /* Code */ + 10415, /* Vendor */ + "Talk-Burst-Exchange", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Talk-Burst-Time */ + { + struct dict_avp_data data = { + 1286, /* Code */ + 10415, /* Vendor */ + "Talk-Burst-Time", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Talk-Burst-Volume */ + { + struct dict_avp_data data = { + 1287, /* Code */ + 10415, /* Vendor */ + "Talk-Burst-Volume", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Tariff-Information */ + { + struct dict_avp_data data = { + 2060, /* Code */ + 10415, /* Vendor */ + "Tariff-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Tariff-XML */ + { + struct dict_avp_data data = { + 2306, /* Code */ + 10415, /* Vendor */ + "Tariff-XML", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Terminating-IOI */ + { + struct dict_avp_data data = { + 840, /* Code */ + 10415, /* Vendor */ + "Terminating-IOI", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Time-First-Usage */ + { + struct dict_avp_data data = { + 2043, /* Code */ + 10415, /* Vendor */ + "Time-First-Usage", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Time_type, NULL); + }; + + /* Time-Last-Usage */ + { + struct dict_avp_data data = { + 2044, /* Code */ + 10415, /* Vendor */ + "Time-Last-Usage", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Time_type, NULL); + }; + + /* Time-Quota-Mechanism */ + { + struct dict_avp_data data = { + 1270, /* Code */ + 10415, /* Vendor */ + "Time-Quota-Mechanism", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Time-Quota-Threshold */ + { + struct dict_avp_data data = { + 868, /* Code */ + 10415, /* Vendor */ + "Time-Quota-Threshold", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Time-Quota-Type */ + { + struct dict_avp_data data = { + 1271, /* Code */ + 10415, /* Vendor */ + "Time-Quota-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Time-Quota-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Time-Stamps */ + { + struct dict_avp_data data = { + 833, /* Code */ + 10415, /* Vendor */ + "Time-Stamps", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Time-Usage */ + { + struct dict_avp_data data = { + 2045, /* Code */ + 10415, /* Vendor */ + "Time-Usage", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Token-Text */ + { + struct dict_avp_data data = { + 1215, /* Code */ + 10415, /* Vendor */ + "Token-Text", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Traffic-Data-Volumes */ + { + struct dict_avp_data data = { + 2046, /* Code */ + 10415, /* Vendor */ + "Traffic-Data-Volumes", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Transcoder-Inserted-Indication */ + { + struct dict_avp_data data = { + 2605, /* Code */ + 10415, /* Vendor */ + "Transcoder-Inserted-Indication", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Transcoder-Inserted-Indication)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Transit-IOI-List */ + { + struct dict_avp_data data = { + 2701, /* Code */ + 10415, /* Vendor */ + "Transit-IOI-List", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Trigger */ + { + struct dict_avp_data data = { + 1264, /* Code */ + 10415, /* Vendor */ + "Trigger", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Trigger-Type */ + { + struct dict_avp_data data = { + 870, /* Code */ + 10415, /* Vendor */ + "Trigger-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Trigger-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Trunk-Group-Id */ + { + struct dict_avp_data data = { + 851, /* Code */ + 10415, /* Vendor */ + "Trunk-Group-Id", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Type-Number */ + { + struct dict_avp_data data = { + 1204, /* Code */ + 10415, /* Vendor */ + "Type-Number", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Type-Number)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Unit-Cost */ + { + struct dict_avp_data data = { + 2061, /* Code */ + 10415, /* Vendor */ + "Unit-Cost", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Unit-Quota-Threshold */ + { + struct dict_avp_data data = { + 1226, /* Code */ + 10415, /* Vendor */ + "Unit-Quota-Threshold", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* User-CSG-Information */ + { + struct dict_avp_data data = { + 2319, /* Code */ + 10415, /* Vendor */ + "User-CSG-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* User-Participating-Type */ + { + struct dict_avp_data data = { + 1279, /* Code */ + 10415, /* Vendor */ + "User-Participating-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(User-Participating-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* User-Session-Id */ + { + struct dict_avp_data data = { + 830, /* Code */ + 10415, /* Vendor */ + "User-Session-Id", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Volume-Quota-Threshold */ + { + struct dict_avp_data data = { + 869, /* Code */ + 10415, /* Vendor */ + "Volume-Quota-Threshold", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* WAG-Address */ + { + struct dict_avp_data data = { + 890, /* Code */ + 10415, /* Vendor */ + "WAG-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Address_type, NULL); + }; + + /* WAG-PLMN-Id */ + { + struct dict_avp_data data = { + 891, /* Code */ + 10415, /* Vendor */ + "WAG-PLMN-Id", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* WLAN-Information */ + { + struct dict_avp_data data = { + 875, /* Code */ + 10415, /* Vendor */ + "WLAN-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* WLAN-Radio-Container */ + { + struct dict_avp_data data = { + 892, /* Code */ + 10415, /* Vendor */ + "WLAN-Radio-Container", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* WLAN-Session-Id */ + { + struct dict_avp_data data = { + 1246, /* Code */ + 10415, /* Vendor */ + "WLAN-Session-Id", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* WLAN-Technology */ + { + struct dict_avp_data data = { + 893, /* Code */ + 10415, /* Vendor */ + "WLAN-Technology", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* WLAN-UE-Local-IPAddress */ + { + struct dict_avp_data data = { + 894, /* Code */ + 10415, /* Vendor */ + "WLAN-UE-Local-IPAddress", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Address_type, NULL); + }; + + /* 3GPP 29.272-c00 (12.0.0 2013.03.13) */ + /* Subscription-Data */ + { + struct dict_avp_data data = { + 1400, /* Code */ + 10415, /* Vendor */ + "Subscription-Data", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Terminal-Information */ + { + struct dict_avp_data data = { + 1401, /* Code */ + 10415, /* Vendor */ + "Terminal-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* IMEI */ + { + struct dict_avp_data data = { + 1402, /* Code */ + 10415, /* Vendor */ + "IMEI", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Software-Version */ + { + struct dict_avp_data data = { + 1403, /* Code */ + 10415, /* Vendor */ + "Software-Version", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* QoS-Subscribed */ + { + struct dict_avp_data data = { + 1404, /* Code */ + 10415, /* Vendor */ + "QoS-Subscribed", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* ULR-Flags */ + { + struct dict_avp_data data = { + 1405, /* Code */ + 10415, /* Vendor */ + "ULR-Flags", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* ULA-Flags */ + { + struct dict_avp_data data = { + 1406, /* Code */ + 10415, /* Vendor */ + "ULA-Flags", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Visited-PLMN-Id */ + { + struct dict_avp_data data = { + 1407, /* Code */ + 10415, /* Vendor */ + "Visited-PLMN-Id", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Requested-EUTRAN-Authentication-Info */ + { + struct dict_avp_data data = { + 1408, /* Code */ + 10415, /* Vendor */ + "Requested-EUTRAN-Authentication-Info", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Requested-UTRAN-GERAN-Authentication-Info */ + { + struct dict_avp_data data = { + 1409, /* Code */ + 10415, /* Vendor */ + "Requested-UTRAN-GERAN-Authentication-Info", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Number-Of-Requested-Vectors */ + { + struct dict_avp_data data = { + 1410, /* Code */ + 10415, /* Vendor */ + "Number-Of-Requested-Vectors", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Re-Synchronization-Info */ + { + struct dict_avp_data data = { + 1411, /* Code */ + 10415, /* Vendor */ + "Re-Synchronization-Info", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Immediate-Response-Preferred */ + { + struct dict_avp_data data = { + 1412, /* Code */ + 10415, /* Vendor */ + "Immediate-Response-Preferred", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Authentication-Info */ + { + struct dict_avp_data data = { + 1413, /* Code */ + 10415, /* Vendor */ + "Authentication-Info", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* E-UTRAN-Vector */ + { + struct dict_avp_data data = { + 1414, /* Code */ + 10415, /* Vendor */ + "E-UTRAN-Vector", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* UTRAN-Vector */ + { + struct dict_avp_data data = { + 1415, /* Code */ + 10415, /* Vendor */ + "UTRAN-Vector", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* GERAN-Vector */ + { + struct dict_avp_data data = { + 1416, /* Code */ + 10415, /* Vendor */ + "GERAN-Vector", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Network-Access-Mode */ + { + struct dict_avp_data data = { + 1417, /* Code */ + 10415, /* Vendor */ + "Network-Access-Mode", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Network-Access-Mode)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* HPLMN-ODB */ + { + struct dict_avp_data data = { + 1418, /* Code */ + 10415, /* Vendor */ + "HPLMN-ODB", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Item-Number */ + { + struct dict_avp_data data = { + 1419, /* Code */ + 10415, /* Vendor */ + "Item-Number", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Cancellation-Type */ + { + struct dict_avp_data data = { + 1420, /* Code */ + 10415, /* Vendor */ + "Cancellation-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Cancellation-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* DSR-Flags */ + { + struct dict_avp_data data = { + 1421, /* Code */ + 10415, /* Vendor */ + "DSR-Flags", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* DSA-Flags */ + { + struct dict_avp_data data = { + 1422, /* Code */ + 10415, /* Vendor */ + "DSA-Flags", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Context-Identifier */ + { + struct dict_avp_data data = { + 1423, /* Code */ + 10415, /* Vendor */ + "Context-Identifier", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Subscriber-Status */ + { + struct dict_avp_data data = { + 1424, /* Code */ + 10415, /* Vendor */ + "Subscriber-Status", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Subscriber-Status)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Operator-Determined-Barring */ + { + struct dict_avp_data data = { + 1425, /* Code */ + 10415, /* Vendor */ + "Operator-Determined-Barring", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Access-Restriction-Data */ + { + struct dict_avp_data data = { + 1426, /* Code */ + 10415, /* Vendor */ + "Access-Restriction-Data", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* APN-OI-Replacement */ + { + struct dict_avp_data data = { + 1427, /* Code */ + 10415, /* Vendor */ + "APN-OI-Replacement", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* All-APN-Configurations-Included-Indicator */ + { + struct dict_avp_data data = { + 1428, /* Code */ + 10415, /* Vendor */ + "All-APN-Configurations-Included-Indicator", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(All-APN-Configurations-Included-Indicator)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* APN-Configuration-Profile */ + { + struct dict_avp_data data = { + 1429, /* Code */ + 10415, /* Vendor */ + "APN-Configuration-Profile", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* APN-Configuration */ + { + struct dict_avp_data data = { + 1430, /* Code */ + 10415, /* Vendor */ + "APN-Configuration", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* EPS-Subscribed-QoS-Profile */ + { + struct dict_avp_data data = { + 1431, /* Code */ + 10415, /* Vendor */ + "EPS-Subscribed-QoS-Profile", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* VPLMN-Dynamic-Address-Allowed */ + { + struct dict_avp_data data = { + 1432, /* Code */ + 10415, /* Vendor */ + "VPLMN-Dynamic-Address-Allowed", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(VPLMN-Dynamic-Address-Allowed)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* STN-SR */ + { + struct dict_avp_data data = { + 1433, /* Code */ + 10415, /* Vendor */ + "STN-SR", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Alert-Reason */ + { + struct dict_avp_data data = { + 1434, /* Code */ + 10415, /* Vendor */ + "Alert-Reason", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Alert-Reason)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* AMBR */ + { + struct dict_avp_data data = { + 1435, /* Code */ + 10415, /* Vendor */ + "AMBR", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* CSG-Subscription-Data */ + { + struct dict_avp_data data = { + 1436, /* Code */ + 10415, /* Vendor */ + "CSG-Subscription-Data", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* CSG-Id */ + { + struct dict_avp_data data = { + 1437, /* Code */ + 10415, /* Vendor */ + "CSG-Id", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* PDN-GW-Allocation-Type */ + { + struct dict_avp_data data = { + 1438, /* Code */ + 10415, /* Vendor */ + "PDN-GW-Allocation-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(PDN-GW-Allocation-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Expiration-Date */ + { + struct dict_avp_data data = { + 1439, /* Code */ + 10415, /* Vendor */ + "Expiration-Date", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Time_type, NULL); + }; + + /* RAT-Frequency-Selection-Priority-ID */ + { + struct dict_avp_data data = { + 1440, /* Code */ + 10415, /* Vendor */ + "RAT-Frequency-Selection-Priority-ID", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* IDA-Flags */ + { + struct dict_avp_data data = { + 1441, /* Code */ + 10415, /* Vendor */ + "IDA-Flags", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* PUA-Flags */ + { + struct dict_avp_data data = { + 1442, /* Code */ + 10415, /* Vendor */ + "PUA-Flags", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* NOR-Flags */ + { + struct dict_avp_data data = { + 1443, /* Code */ + 10415, /* Vendor */ + "NOR-Flags", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* User-Id */ + { + struct dict_avp_data data = { + 1444, /* Code */ + 10415, /* Vendor */ + "User-Id", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Equipment-Status */ + { + struct dict_avp_data data = { + 1445, /* Code */ + 10415, /* Vendor */ + "Equipment-Status", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Equipment-Status)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Regional-Subscription-Zone-Code */ + { + struct dict_avp_data data = { + 1446, /* Code */ + 10415, /* Vendor */ + "Regional-Subscription-Zone-Code", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* RAND */ + { + struct dict_avp_data data = { + 1447, /* Code */ + 10415, /* Vendor */ + "RAND", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* XRES */ + { + struct dict_avp_data data = { + 1448, /* Code */ + 10415, /* Vendor */ + "XRES", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* AUTN */ + { + struct dict_avp_data data = { + 1449, /* Code */ + 10415, /* Vendor */ + "AUTN", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* KASME */ + { + struct dict_avp_data data = { + 1450, /* Code */ + 10415, /* Vendor */ + "KASME", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Trace-Collection-Entity */ + { + struct dict_avp_data data = { + 1452, /* Code */ + 10415, /* Vendor */ + "Trace-Collection-Entity", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Address_type, NULL); + }; + + /* Kc */ + { + struct dict_avp_data data = { + 1453, /* Code */ + 10415, /* Vendor */ + "Kc", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* SRES */ + { + struct dict_avp_data data = { + 1454, /* Code */ + 10415, /* Vendor */ + "SRES", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* PDN-Type */ + { + struct dict_avp_data data = { + 1456, /* Code */ + 10415, /* Vendor */ + "PDN-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(PDN-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Roaming-Restricted-Due-To-Unsupported-Feature */ + { + struct dict_avp_data data = { + 1457, /* Code */ + 10415, /* Vendor */ + "Roaming-Restricted-Due-To-Unsupported-Feature", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Roaming-Restricted-Due-To-Unsupported-Feature)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Trace-Data */ + { + struct dict_avp_data data = { + 1458, /* Code */ + 10415, /* Vendor */ + "Trace-Data", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Trace-Reference */ + { + struct dict_avp_data data = { + 1459, /* Code */ + 10415, /* Vendor */ + "Trace-Reference", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Trace-Depth */ + { + struct dict_avp_data data = { + 1462, /* Code */ + 10415, /* Vendor */ + "Trace-Depth", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Trace-Depth)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Trace-NE-Type-List */ + { + struct dict_avp_data data = { + 1463, /* Code */ + 10415, /* Vendor */ + "Trace-NE-Type-List", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Trace-Interface-List */ + { + struct dict_avp_data data = { + 1464, /* Code */ + 10415, /* Vendor */ + "Trace-Interface-List", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Trace-Event-List */ + { + struct dict_avp_data data = { + 1465, /* Code */ + 10415, /* Vendor */ + "Trace-Event-List", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* OMC-Id */ + { + struct dict_avp_data data = { + 1466, /* Code */ + 10415, /* Vendor */ + "OMC-Id", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* GPRS-Subscription-Data */ + { + struct dict_avp_data data = { + 1467, /* Code */ + 10415, /* Vendor */ + "GPRS-Subscription-Data", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Complete-Data-List-Included-Indicator */ + { + struct dict_avp_data data = { + 1468, /* Code */ + 10415, /* Vendor */ + "Complete-Data-List-Included-Indicator", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Complete-Data-List-Included-Indicator)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* PDP-Context */ + { + struct dict_avp_data data = { + 1469, /* Code */ + 10415, /* Vendor */ + "PDP-Context", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* PDP-Type */ + { + struct dict_avp_data data = { + 1470, /* Code */ + 10415, /* Vendor */ + "PDP-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* 3GPP2-MEID */ + { + struct dict_avp_data data = { + 1471, /* Code */ + 10415, /* Vendor */ + "3GPP2-MEID", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Specific-APN-Info */ + { + struct dict_avp_data data = { + 1472, /* Code */ + 10415, /* Vendor */ + "Specific-APN-Info", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* LCS-Info */ + { + struct dict_avp_data data = { + 1473, /* Code */ + 10415, /* Vendor */ + "LCS-Info", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* GMLC-Number */ + { + struct dict_avp_data data = { + 1474, /* Code */ + 10415, /* Vendor */ + "GMLC-Number", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* LCS-PrivacyException */ + { + struct dict_avp_data data = { + 1475, /* Code */ + 10415, /* Vendor */ + "LCS-PrivacyException", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* SS-Code */ + { + struct dict_avp_data data = { + 1476, /* Code */ + 10415, /* Vendor */ + "SS-Code", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* SS-Status */ + { + struct dict_avp_data data = { + 1477, /* Code */ + 10415, /* Vendor */ + "SS-Status", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Notification-To-UE-User */ + { + struct dict_avp_data data = { + 1478, /* Code */ + 10415, /* Vendor */ + "Notification-To-UE-User", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Notification-To-UE-User)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* External-Client */ + { + struct dict_avp_data data = { + 1479, /* Code */ + 10415, /* Vendor */ + "External-Client", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Client-Identity */ + { + struct dict_avp_data data = { + 1480, /* Code */ + 10415, /* Vendor */ + "Client-Identity", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* GMLC-Restriction */ + { + struct dict_avp_data data = { + 1481, /* Code */ + 10415, /* Vendor */ + "GMLC-Restriction", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(GMLC-Restriction)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* PLMN-Client */ + { + struct dict_avp_data data = { + 1482, /* Code */ + 10415, /* Vendor */ + "PLMN-Client", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(PLMN-Client)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Service-Type */ + { + struct dict_avp_data data = { + 1483, /* Code */ + 10415, /* Vendor */ + "Service-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* ServiceTypeIdentity */ + { + struct dict_avp_data data = { + 1484, /* Code */ + 10415, /* Vendor */ + "ServiceTypeIdentity", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* MO-LR */ + { + struct dict_avp_data data = { + 1485, /* Code */ + 10415, /* Vendor */ + "MO-LR", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Teleservice-List */ + { + struct dict_avp_data data = { + 1486, /* Code */ + 10415, /* Vendor */ + "Teleservice-List", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* TS-Code */ + { + struct dict_avp_data data = { + 1487, /* Code */ + 10415, /* Vendor */ + "TS-Code", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Call-Barring-Infor-List */ + { + struct dict_avp_data data = { + 1488, /* Code */ + 10415, /* Vendor */ + "Call-Barring-Infor-List", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* SGSN-Number */ + { + struct dict_avp_data data = { + 1489, /* Code */ + 10415, /* Vendor */ + "SGSN-Number", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* IDR-Flags */ + { + struct dict_avp_data data = { + 1490, /* Code */ + 10415, /* Vendor */ + "IDR-Flags", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* ICS-Indicator */ + { + struct dict_avp_data data = { + 1491, /* Code */ + 10415, /* Vendor */ + "ICS-Indicator", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(ICS-Indicator)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* IMS-Voice-Over-PS-Sessions-Supported */ + { + struct dict_avp_data data = { + 1492, /* Code */ + 10415, /* Vendor */ + "IMS-Voice-Over-PS-Sessions-Supported", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(IMS-Voice-Over-PS-Sessions-Supported)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Homogeneous-Support-of-IMS-Voice-Over-PS-Sessions */ + { + struct dict_avp_data data = { + 1493, /* Code */ + 10415, /* Vendor */ + "Homogeneous-Support-of-IMS-Voice-Over-PS-Sessions", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Homogeneous-Support-of-IMS-Voice-Over-PS-Sessions)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Last-UE-Activity-Time */ + { + struct dict_avp_data data = { + 1494, /* Code */ + 10415, /* Vendor */ + "Last-UE-Activity-Time", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Time_type, NULL); + }; + + /* EPS-User-State */ + { + struct dict_avp_data data = { + 1495, /* Code */ + 10415, /* Vendor */ + "EPS-User-State", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* EPS-Location-Information */ + { + struct dict_avp_data data = { + 1496, /* Code */ + 10415, /* Vendor */ + "EPS-Location-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* MME-User-State */ + { + struct dict_avp_data data = { + 1497, /* Code */ + 10415, /* Vendor */ + "MME-User-State", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* SGSN-User-State */ + { + struct dict_avp_data data = { + 1498, /* Code */ + 10415, /* Vendor */ + "SGSN-User-State", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* User-State */ + { + struct dict_avp_data data = { + 1499, /* Code */ + 10415, /* Vendor */ + "User-State", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(User-State)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* MME-LocationInformation */ + { + struct dict_avp_data data = { + 1600, /* Code */ + 10415, /* Vendor */ + "MME-LocationInformation", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* SGSN-Location-Information */ + { + struct dict_avp_data data = { + 1601, /* Code */ + 10415, /* Vendor */ + "SGSN-Location-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* E-UTRAN-Cell-Global-Identity */ + { + struct dict_avp_data data = { + 1602, /* Code */ + 10415, /* Vendor */ + "E-UTRAN-Cell-Global-Identity", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Tracking-Area-Identity */ + { + struct dict_avp_data data = { + 1603, /* Code */ + 10415, /* Vendor */ + "Tracking-Area-Identity", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Cell-Global-Identity */ + { + struct dict_avp_data data = { + 1604, /* Code */ + 10415, /* Vendor */ + "Cell-Global-Identity", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Routing-Area-Identity */ + { + struct dict_avp_data data = { + 1605, /* Code */ + 10415, /* Vendor */ + "Routing-Area-Identity", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Location-Area-Identity */ + { + struct dict_avp_data data = { + 1606, /* Code */ + 10415, /* Vendor */ + "Location-Area-Identity", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Service-Area-Identity */ + { + struct dict_avp_data data = { + 1607, /* Code */ + 10415, /* Vendor */ + "Service-Area-Identity", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Geographical-Information */ + { + struct dict_avp_data data = { + 1608, /* Code */ + 10415, /* Vendor */ + "Geographical-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Geodetic-Information */ + { + struct dict_avp_data data = { + 1609, /* Code */ + 10415, /* Vendor */ + "Geodetic-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Current-Location-Retrieved */ + { + struct dict_avp_data data = { + 1610, /* Code */ + 10415, /* Vendor */ + "Current-Location-Retrieved", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Current-Location-Retrieved)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Age-Of-Location-Information */ + { + struct dict_avp_data data = { + 1611, /* Code */ + 10415, /* Vendor */ + "Age-Of-Location-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Active-APN */ + { + struct dict_avp_data data = { + 1612, /* Code */ + 10415, /* Vendor */ + "Active-APN", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Error-Diagnostic */ + { + struct dict_avp_data data = { + 1614, /* Code */ + 10415, /* Vendor */ + "Error-Diagnostic", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Error-Diagnostic)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Ext-PDP-Address */ + { + struct dict_avp_data data = { + 1621, /* Code */ + 10415, /* Vendor */ + "Ext-PDP-Address", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Address_type, NULL); + }; + + /* UE-SRVCC-Capability */ + { + struct dict_avp_data data = { + 1615, /* Code */ + 10415, /* Vendor */ + "UE-SRVCC-Capability", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(UE-SRVCC-Capability)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* MPS-Priority */ + { + struct dict_avp_data data = { + 1616, /* Code */ + 10415, /* Vendor */ + "MPS-Priority", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* VPLMN-LIPA-Allowed */ + { + struct dict_avp_data data = { + 1617, /* Code */ + 10415, /* Vendor */ + "VPLMN-LIPA-Allowed", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(VPLMN-LIPA-Allowed)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* LIPA-Permission */ + { + struct dict_avp_data data = { + 1618, /* Code */ + 10415, /* Vendor */ + "LIPA-Permission", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(LIPA-Permission)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Subscribed-Periodic-RAU-TAU-Timer */ + { + struct dict_avp_data data = { + 1619, /* Code */ + 10415, /* Vendor */ + "Subscribed-Periodic-RAU-TAU-Timer", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Ext-PDP-Type */ + { + struct dict_avp_data data = { + 1620, /* Code */ + 10415, /* Vendor */ + "Ext-PDP-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* SIPTO-Permission */ + { + struct dict_avp_data data = { + 1613, /* Code */ + 10415, /* Vendor */ + "SIPTO-Permission", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(SIPTO-Permission)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* MDT-Configuration */ + { + struct dict_avp_data data = { + 1622, /* Code */ + 10415, /* Vendor */ + "MDT-Configuration", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Job-Type */ + { + struct dict_avp_data data = { + 1623, /* Code */ + 10415, /* Vendor */ + "Job-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Job-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Area-Scope */ + { + struct dict_avp_data data = { + 1624, /* Code */ + 10415, /* Vendor */ + "Area-Scope", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* List-Of-Measurements */ + { + struct dict_avp_data data = { + 1625, /* Code */ + 10415, /* Vendor */ + "List-Of-Measurements", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Reporting-Trigger */ + { + struct dict_avp_data data = { + 1626, /* Code */ + 10415, /* Vendor */ + "Reporting-Trigger", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Report-Interval */ + { + struct dict_avp_data data = { + 1627, /* Code */ + 10415, /* Vendor */ + "Report-Interval", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Report-Interval)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Report-Amount */ + { + struct dict_avp_data data = { + 1628, /* Code */ + 10415, /* Vendor */ + "Report-Amount", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Report-Amount)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Event-Threshold-RSRP */ + { + struct dict_avp_data data = { + 1629, /* Code */ + 10415, /* Vendor */ + "Event-Threshold-RSRP", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Event-Threshold-RSRQ */ + { + struct dict_avp_data data = { + 1630, /* Code */ + 10415, /* Vendor */ + "Event-Threshold-RSRQ", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Logging-Interval */ + { + struct dict_avp_data data = { + 1631, /* Code */ + 10415, /* Vendor */ + "Logging-Interval", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Logging-Interval)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Logging-Duration */ + { + struct dict_avp_data data = { + 1632, /* Code */ + 10415, /* Vendor */ + "Logging-Duration", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Logging-Duration)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Relay-Node-Indicator */ + { + struct dict_avp_data data = { + 1633, /* Code */ + 10415, /* Vendor */ + "Relay-Node-Indicator", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Relay-Node-Indicator)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* MDT-User-Consent */ + { + struct dict_avp_data data = { + 1634, /* Code */ + 10415, /* Vendor */ + "MDT-User-Consent", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(MDT-User-Consent)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* PUR-Flags */ + { + struct dict_avp_data data = { + 1635, /* Code */ + 10415, /* Vendor */ + "PUR-Flags", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Subscribed-VSRVCC */ + { + struct dict_avp_data data = { + 1636, /* Code */ + 10415, /* Vendor */ + "Subscribed-VSRVCC", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Subscribed-VSRVCC)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Equivalent-PLMN-List */ + { + struct dict_avp_data data = { + 1637, /* Code */ + 10415, /* Vendor */ + "Equivalent-PLMN-List", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* CLR-Flags */ + { + struct dict_avp_data data = { + 1638, /* Code */ + 10415, /* Vendor */ + "CLR-Flags", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* UVR-Flags */ + { + struct dict_avp_data data = { + 1639, /* Code */ + 10415, /* Vendor */ + "UVR-Flags", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* UVA-Flags */ + { + struct dict_avp_data data = { + 1640, /* Code */ + 10415, /* Vendor */ + "UVA-Flags", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* VPLMN-CSG-Subscription-Data */ + { + struct dict_avp_data data = { + 1641, /* Code */ + 10415, /* Vendor */ + "VPLMN-CSG-Subscription-Data", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Time-Zone */ + { + struct dict_avp_data data = { + 1642, /* Code */ + 10415, /* Vendor */ + "Time-Zone", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* A-MSISDN */ + { + struct dict_avp_data data = { + 1643, /* Code */ + 10415, /* Vendor */ + "A-MSISDN", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* MME-Number-for-MT-SMS */ + { + struct dict_avp_data data = { + 1645, /* Code */ + 10415, /* Vendor */ + "MME-Number-for-MT-SMS", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* SMS-Register-Request */ + { + struct dict_avp_data data = { + 1648, /* Code */ + 10415, /* Vendor */ + "SMS-Register-Request", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(SMS-Register-Request)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Local-Time-Zone */ + { + struct dict_avp_data data = { + 1649, /* Code */ + 10415, /* Vendor */ + "Local-Time-Zone", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Daylight-Saving-Time */ + { + struct dict_avp_data data = { + 1650, /* Code */ + 10415, /* Vendor */ + "Daylight-Saving-Time", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Daylight-Saving-Time)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Subscription-Data-Flags */ + { + struct dict_avp_data data = { + 1654, /* Code */ + 10415, /* Vendor */ + "Subscription-Data-Flags", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Measurement-Period-UMTS */ + { + struct dict_avp_data data = { + 1655, /* Code */ + 10415, /* Vendor */ + "Measurement-Period-UMTS", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Measurement-Period-UMTS)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Measurement-Period-LTE */ + { + struct dict_avp_data data = { + 1656, /* Code */ + 10415, /* Vendor */ + "Measurement-Period-LTE", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Measurement-Period-LTE)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Collection-Period-RRM-LTE */ + { + struct dict_avp_data data = { + 1657, /* Code */ + 10415, /* Vendor */ + "Collection-Period-RRM-LTE", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Collection-Period-RRM-LTE)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Collection-Period-RRM-UMTS */ + { + struct dict_avp_data data = { + 1658, /* Code */ + 10415, /* Vendor */ + "Collection-Period-RRM-UMTS", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Collection-Period-RRM-UMTS)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Positioning-Method */ + { + struct dict_avp_data data = { + 1659, /* Code */ + 10415, /* Vendor */ + "Positioning-Method", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Measurement-Quantity */ + { + struct dict_avp_data data = { + 1660, /* Code */ + 10415, /* Vendor */ + "Measurement-Quantity", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Event-Threshold-Event-1F */ + { + struct dict_avp_data data = { + 1661, /* Code */ + 10415, /* Vendor */ + "Event-Threshold-Event-1F", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Event-Threshold-Event-1I */ + { + struct dict_avp_data data = { + 1662, /* Code */ + 10415, /* Vendor */ + "Event-Threshold-Event-1I", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* 3GPP 29.329-b50 (11.5.0 2012.12.21) */ + /* User-Identity */ + { + struct dict_avp_data data = { + 700, /* Code */ + 10415, /* Vendor */ + "User-Identity", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* MSISDN */ + { + struct dict_avp_data data = { + 701, /* Code */ + 10415, /* Vendor */ + "MSISDN", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Name conflict with 29.229 User-Data (606), renamed */ + /* User-Data-29.329 */ + { + struct dict_avp_data data = { + 702, /* Code */ + 10415, /* Vendor */ + "User-Data-29.329", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Data-Reference */ + { + struct dict_avp_data data = { + 703, /* Code */ + 10415, /* Vendor */ + "Data-Reference", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Data-Reference)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Service-Indication */ + { + struct dict_avp_data data = { + 704, /* Code */ + 10415, /* Vendor */ + "Service-Indication", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Subs-Req-Type */ + { + struct dict_avp_data data = { + 705, /* Code */ + 10415, /* Vendor */ + "Subs-Req-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Subs-Req-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Requested-Domain */ + { + struct dict_avp_data data = { + 706, /* Code */ + 10415, /* Vendor */ + "Requested-Domain", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Requested-Domain)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Current-Location */ + { + struct dict_avp_data data = { + 707, /* Code */ + 10415, /* Vendor */ + "Current-Location", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Current-Location)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Identity-Set */ + { + struct dict_avp_data data = { + 708, /* Code */ + 10415, /* Vendor */ + "Identity-Set", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Identity-Set)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Expiry-Time */ + { + struct dict_avp_data data = { + 709, /* Code */ + 10415, /* Vendor */ + "Expiry-Time", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, Time_type, NULL); + }; + + /* Send-Data-Indication */ + { + struct dict_avp_data data = { + 710, /* Code */ + 10415, /* Vendor */ + "Send-Data-Indication", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Send-Data-Indication)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* in 29.229 */ + /* Server-Name */ + /* Supported-Features */ + /* Feature-List-ID */ + /* Feature-List */ + /* Supported-Applications */ + /* Public-Identity */ + /* DSAI-Tag */ + { + struct dict_avp_data data = { + 711, /* Code */ + 10415, /* Vendor */ + "DSAI-Tag", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* in 29.229 */ + /* Wildcarded-Public-Identity */ + /* Wildcarded-IMPU */ + { + struct dict_avp_data data = { + 636, /* Code */ + 10415, /* Vendor */ + "Wildcarded-IMPU", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* in 29.229 */ + /* Session-Priority */ + /* One-Time-Notification */ + { + struct dict_avp_data data = { + 712, /* Code */ + 10415, /* Vendor */ + "One-Time-Notification", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(One-Time-Notification)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Requested-Nodes */ + { + struct dict_avp_data data = { + 713, /* Code */ + 10415, /* Vendor */ + "Requested-Nodes", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Serving-Node-Indication */ + { + struct dict_avp_data data = { + 714, /* Code */ + 10415, /* Vendor */ + "Serving-Node-Indication", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Serving-Node-Indication)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Repository-Data-ID */ + { + struct dict_avp_data data = { + 715, /* Code */ + 10415, /* Vendor */ + "Repository-Data-ID", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Sequence-Number */ + { + struct dict_avp_data data = { + 716, /* Code */ + 10415, /* Vendor */ + "Sequence-Number", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* UDR-Flags */ + { + struct dict_avp_data data = { + 719, /* Code */ + 10415, /* Vendor */ + "UDR-Flags", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* OMA DDS Charging_Data V1.0 20110201-A */ + /* Application-Server-Id */ + { + struct dict_avp_data data = { + 2101, /* Code */ + 10415, /* Vendor */ + "Application-Server-Id", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Application-Service-Type */ + { + struct dict_avp_data data = { + 2102, /* Code */ + 10415, /* Vendor */ + "Application-Service-Type", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Application-Session-Id */ + { + struct dict_avp_data data = { + 2103, /* Code */ + 10415, /* Vendor */ + "Application-Session-Id", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Content-ID */ + { + struct dict_avp_data data = { + 2116, /* Code */ + 10415, /* Vendor */ + "Content-ID", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Content-provider-ID */ + { + struct dict_avp_data data = { + 2117, /* Code */ + 10415, /* Vendor */ + "Content-provider-ID", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* DCD-Information */ + { + struct dict_avp_data data = { + 2115, /* Code */ + 10415, /* Vendor */ + "DCD-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Delivery-Status */ + { + struct dict_avp_data data = { + 2104, /* Code */ + 10415, /* Vendor */ + "Delivery-Status", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* IM-Information */ + { + struct dict_avp_data data = { + 2110, /* Code */ + 10415, /* Vendor */ + "IM-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Number-Of-Messages-Successfully-Exploded */ + { + struct dict_avp_data data = { + 2111, /* Code */ + 10415, /* Vendor */ + "Number-Of-Messages-Successfully-Exploded", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Number-Of-Messages-Successfully-Sent */ + { + struct dict_avp_data data = { + 2112, /* Code */ + 10415, /* Vendor */ + "Number-Of-Messages-Successfully-Sent", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Service-Generic-Information */ + { + struct dict_avp_data data = { + 1256, /* Code */ + 10415, /* Vendor */ + "Service-Generic-Information", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_GROUPED /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Total-Number-Of-Messages-Exploded */ + { + struct dict_avp_data data = { + 2113, /* Code */ + 10415, /* Vendor */ + "Total-Number-Of-Messages-Exploded", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Total-Number-Of-Messages-Sent */ + { + struct dict_avp_data data = { + 2114, /* Code */ + 10415, /* Vendor */ + "Total-Number-Of-Messages-Sent", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + + + + /*****************************************************/ + /* end of generated data, rules below added manually */ + /*****************************************************/ + + + + /* 3GPP2-BSID */ + { + struct dict_avp_data data = { + 9010, /* Code */ + 5535, /* Vendor */ + "3GPP2-BSID", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ /* XXX: guessed */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* 29.212 */ + + { + struct dict_object *rule_avp; + struct dict_avp_request vpa; + vpa.avp_vendor = 10415; + vpa.avp_name = "Allocation-Retention-Priority"; + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); + struct local_rules_definition rules[] = + { + { { .avp_vendor = 10415, .avp_name = "Priority-Level" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Pre-emption-Capability" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Pre-emption-Vulnerability" }, RULE_OPTIONAL, -1, 1 }, + }; + PARSE_loc_rules(rules, rule_avp); + } + + { + struct dict_object *rule_avp; + struct dict_avp_request vpa; + vpa.avp_vendor = 10415; + vpa.avp_name = "QoS-Information"; + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); + struct local_rules_definition rules[] = + { + { { .avp_vendor = 10415, .avp_name = "QoS-Class-Identifier" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Max-Requested-Bandwidth-UL" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Max-Requested-Bandwidth-DL" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Guaranteed-Bitrate-UL" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Guaranteed-Bitrate-DL" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Bearer-Identifier" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Allocation-Retention-Priority" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "APN-Aggregate-Max-Bitrate-UL" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "APN-Aggregate-Max-Bitrate-DL" }, RULE_OPTIONAL, -1, 1 }, + }; + PARSE_loc_rules(rules, rule_avp); + } + + /* 32.299 */ + + { + /* additional allowed AVPs */ + struct dict_object *ccr; + CHECK_dict_search(DICT_COMMAND, CMD_BY_NAME, "Credit-Control-Request", &ccr); + struct local_rules_definition rules[] = + { + { { .avp_vendor = 10415, .avp_name = "AoC-Request-Type"}, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Service-Information"}, RULE_OPTIONAL, -1, 1 }, + }; + PARSE_loc_rules(rules, ccr); + } + + { + /* additional allowed AVPs */ + struct dict_object *ccr; + CHECK_dict_search(DICT_COMMAND, CMD_BY_NAME, "Credit-Control-Answer", &ccr); + struct local_rules_definition rules[] = + { + { { .avp_vendor = 10415, .avp_name = "Low-Balance-Indication"}, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Remaining-Balance"}, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Service-Information"}, RULE_OPTIONAL, -1, 1 }, + }; + PARSE_loc_rules(rules, ccr); + } + + { + struct dict_object *rule_avp; + struct dict_avp_request vpa; + vpa.avp_vendor = 10415; + vpa.avp_name = "Application-Server-Information"; + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); + struct local_rules_definition rules[] = + { + { { .avp_vendor = 10415, .avp_name = "Application-Server" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Application-provided-Called-Party-Address" }, RULE_OPTIONAL, -1, -1 }, + }; + PARSE_loc_rules(rules, rule_avp); + } + + { + struct dict_object *rule_avp; + struct dict_avp_request vpa; + vpa.avp_vendor = 10415; + vpa.avp_name = "Envelope"; + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); + struct local_rules_definition rules[] = + { + { { .avp_vendor = 10415, .avp_name = "Envelope-Start-Time" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Envelope-End-Time" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 0, .avp_name = "CC-Total-Octets" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 0, .avp_name = "CC-Input-Octets" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 0, .avp_name = "CC-Output-Octets" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 0, .avp_name = "CC-Service-Specific-Units" }, RULE_OPTIONAL, -1, 1 }, + }; + PARSE_loc_rules(rules, rule_avp); + } + + { + struct dict_object *rule_avp; + struct dict_avp_request vpa; + vpa.avp_vendor = 10415; + vpa.avp_name = "Event-Type"; + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); + struct local_rules_definition rules[] = + { + { { .avp_vendor = 10415, .avp_name = "SIP-Method" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Event" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Expires" }, RULE_OPTIONAL, -1, 1 }, + }; + PARSE_loc_rules(rules, rule_avp); + } + + { + struct dict_object *rule_avp; + struct dict_avp_request vpa; + vpa.avp_vendor = 10415; + vpa.avp_name = "IMS-Information"; + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); + struct local_rules_definition rules[] = + { + { { .avp_vendor = 10415, .avp_name = "Event-Type" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Role-Of-Node" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Node-Functionality" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "User-Session-Id" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Outgoing-Session-Id" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Session-Priority" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Calling-Party-Address" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Called-Party-Address" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Called-Asserted-Identity" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Number-Portability-Routing-Information" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Carrier-Select-Routing-Information" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Alternate-Charged-Party-Address" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Requested-Party-Address" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Associated-URI" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Time-Stamps" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Application-Server-Information" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Inter-Operator-Identifier" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Transit-IOI-List" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "IMS-Charging-Identifier" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "SDP-Session-Description" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "SDP-Media-Component" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Served-Party-IP-Address" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Server-Capabilities" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Trunk-Group-Id" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Bearer-Service" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Service-Id" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Service-Specific-Info" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Message-Body" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Cause-Code" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Access-Network-Information" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Early-Media-Description" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "IMS-Communication-Service-Identifier" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "IMS-Application-Reference-Identifier" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Online-Charging-Flag" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Real-Time-Tariff-Information" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Account-Expiration" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Initial-IMS-Charging-Identifier" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "NNI-Information" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "From-Address" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "IMS-Emergency-Indicator" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Access-Transfer-Information" }, RULE_OPTIONAL, -1, -1 }, + }; + PARSE_loc_rules(rules, rule_avp); + } + + { + struct dict_object *rule_avp; + struct dict_avp_request vpa; + vpa.avp_vendor = 10415; + vpa.avp_name = "MMS-Information"; + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); + struct local_rules_definition rules[] = + { + { { .avp_vendor = 10415, .avp_name = "Originator-Address" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Recipient-Address" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Submission-Time" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "MM-Content-Type" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Priority" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Message-ID" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Message-Type" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Message-Size" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Message-Class" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Delivery-Report-Requested" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Read-Reply-Report-Requested" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "MMBox-Storage-Requested" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Applic-ID" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Reply-Applic-ID" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Aux-Applic-Info" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Content-Class" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "DRM-Content" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Adaptations" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "VASP-ID" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "VAS-ID" }, RULE_OPTIONAL, -1, 1 }, + }; + PARSE_loc_rules(rules, rule_avp); + } + + { + /* Multiple-Services-Credit-Control */ + /* additional allowed AVPs */ + struct dict_object *rule_avp; + struct dict_avp_request vpa; + vpa.avp_vendor = 0; + vpa.avp_name = "Multiple-Services-Credit-Control"; + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); + struct local_rules_definition rules[] = + { + { { .avp_vendor = 10415, .avp_name = "Time-Quota-Threshold" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Volume-Quota-Threshold" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Unit-Quota-Threshold" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Quota-Holding-Time" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Quota-Consumption-Time" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Reporting-Reason" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Trigger" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "PS-Furnish-Charging-Information" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Refund-Information" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "AF-Correlation-Information" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Envelope" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Envelope-Reporting" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Time-Quota-Mechanism" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Service-Specific-Info" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "QoS-Information" }, RULE_OPTIONAL, -1, 1 }, + }; + PARSE_loc_rules(rules, rule_avp); + } + + { + /* Used-Service-Unit */ + /* additional allowed AVPs */ + struct dict_object *rule_avp; + struct dict_avp_request vpa; + vpa.avp_vendor = 0; + vpa.avp_name = "Used-Service-Unit"; + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); + struct local_rules_definition rules[] = + { + { { .avp_vendor = 10415, .avp_name = "Reporting-Reason" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Event-Charging-TimeStamp" }, RULE_OPTIONAL, -1, -1 }, + }; + PARSE_loc_rules(rules, rule_avp); + } + + { + struct dict_object *rule_avp; + struct dict_avp_request vpa; + vpa.avp_vendor = 10415; + vpa.avp_name = "Offline-Charging"; + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); + struct local_rules_definition rules[] = + { + { { .avp_vendor = 10415, .avp_name = "Quota-Consumption-Time" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Time-Quota-Mechanism" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Envelope-Reporting" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 0, .avp_name = "Multiple-Services-Credit-Control" }, RULE_OPTIONAL, -1, -1 }, + }; + PARSE_loc_rules(rules, rule_avp); + } + + { + struct dict_object *rule_avp; + struct dict_avp_request vpa; + vpa.avp_vendor = 10415; + vpa.avp_name = "Originator-Address"; + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); + struct local_rules_definition rules[] = + { + { { .avp_vendor = 10415, .avp_name = "Address-Type" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Address-Data" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Address-Domain" }, RULE_OPTIONAL, -1, 1 }, + }; + PARSE_loc_rules(rules, rule_avp); + } + + { + struct dict_object *rule_avp; + struct dict_avp_request vpa; + vpa.avp_vendor = 10415; + vpa.avp_name = "PS-Furnish-Charging-Information"; + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); + struct local_rules_definition rules[] = + { + { { .avp_vendor = 10415, .avp_name = "3GPP-Charging-Id" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "PS-Free-Format-Data" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "PS-Append-Free-Format-Data" }, RULE_OPTIONAL, -1, 1 }, + }; + PARSE_loc_rules(rules, rule_avp); + } + + { + struct dict_object *rule_avp; + struct dict_avp_request vpa; + vpa.avp_vendor = 10415; + vpa.avp_name = "PS-Information"; + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); + struct local_rules_definition rules[] = + { + { { .avp_vendor = 10415, .avp_name = "3GPP-Charging-Id" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "PDN-Connection-Charging-ID" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Node-Id" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "3GPP-PDP-Type" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "PDP-Address" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "PDP-Address-Prefix-Length" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Dynamic-Address-Flag" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Dynamic-Address-Flag-Extension" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "QoS-Information" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "SGSN-Address" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "GGSN-Address" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "SGW-Address" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "CG-Address" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Serving-Node-Type" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "SGW-Change" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "3GPP-IMSI-MCC-MNC" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "IMSI-Unauthenticated-Flag" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "3GPP-GGSN-MCC-MNC" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "3GPP-NSAPI" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 0, .avp_name = "Called-Station-Id" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "3GPP-Session-Stop-Indicator" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "3GPP-Selection-Mode" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "3GPP-Charging-Characteristics" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Charging-Characteristics-Selection-Mode" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "3GPP-SGSN-MCC-MNC" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "3GPP-MS-TimeZone" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Charging-Rule-Base-Name" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "3GPP-User-Location-Info" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "User-CSG-Information" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 5535, .avp_name = "3GPP2-BSID" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "3GPP-RAT-Type" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "PS-Furnish-Charging-Information" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "PDP-Context-Type" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Offline-Charging" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Traffic-Data-Volumes" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Service-Data-Container" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 0, .avp_name = "User-Equipment-Info" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Terminal-Information" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Start-Time" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Stop-Time" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Change-Condition" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Diagnostics" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Low-Priority-Indicator" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "MME-Number-for-MT-SMS" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "MME-Name" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "MME-Realm" }, RULE_OPTIONAL, -1, 1 }, + }; + PARSE_loc_rules(rules, rule_avp); + } + + { + struct dict_object *rule_avp; + struct dict_avp_request vpa; + vpa.avp_vendor = 10415; + vpa.avp_name = "Recipient-Address"; + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); + struct local_rules_definition rules[] = + { + { { .avp_vendor = 10415, .avp_name = "Address-Type" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Address-Data" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Address-Domain" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Addressee-Type" }, RULE_OPTIONAL, -1, 1 }, + }; + PARSE_loc_rules(rules, rule_avp); + } + + { + struct dict_object *rule_avp; + struct dict_avp_request vpa; + vpa.avp_vendor = 10415; + vpa.avp_name = "SDP-Media-Component"; + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); + struct local_rules_definition rules[] = + { + { { .avp_vendor = 10415, .avp_name = "SDP-Media-Name" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "SDP-Media-Description" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Local-GW-Inserted-Indication" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "IP-Realm-Default-Indication" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Transcoder-Inserted-Indication" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Media-Initiator-Flag" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Media-Initiator-Party" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "3GPP-Charging-Id" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Access-Network-Charging-Identifier-Value" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "SDP-Type" }, RULE_OPTIONAL, -1, 1 }, + }; + PARSE_loc_rules(rules, rule_avp); + } + + { + struct dict_object *rule_avp; + struct dict_avp_request vpa; + vpa.avp_vendor = 10415; + vpa.avp_name = "Service-Information"; + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); + struct local_rules_definition rules[] = + { + { { .avp_vendor = 0, .avp_name = "Subscription-Id" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "AoC-Information" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "PS-Information" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "WLAN-Information" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "IMS-Information" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "MMS-Information" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "LCS-Information" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "PoC-Information" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "MBMS-Information" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "SMS-Information" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "MMTel-Information" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Service-Generic-Information" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "IM-Information" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "DCD-Information" }, RULE_OPTIONAL, -1, 1 }, + }; + PARSE_loc_rules(rules, rule_avp); + } + + { + struct dict_object *rule_avp; + struct dict_avp_request vpa; + vpa.avp_vendor = 10415; + vpa.avp_name = "SMS-Information"; + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); + struct local_rules_definition rules[] = + { + { { .avp_vendor = 10415, .avp_name = "SMS-Node" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Client-Address" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Originator-SCCP-Address" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "SMSC-Address" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Data-Coding-Scheme" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "SM-Discharge-Time" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "SM-Message-Type" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Originator-Interface" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "SM-Protocol-ID" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Reply-Path-Requested" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "SM-Status" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "SM-User-Data-Header" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Number-Of-Messages-Sent" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Recipient-Info" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Originator-Received-Address" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "SM-Service-Type" }, RULE_OPTIONAL, -1, 1 }, + }; + PARSE_loc_rules(rules, rule_avp); + } + + { + struct dict_object *rule_avp; + struct dict_avp_request vpa; + vpa.avp_vendor = 10415; + vpa.avp_name = "Time-Quota-Mechanism"; + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); + struct local_rules_definition rules[] = + { + { { .avp_vendor = 10415, .avp_name = "Time-Quota-Type" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Base-Time-Interval" }, RULE_REQUIRED, -1, 1 }, + }; + PARSE_loc_rules(rules, rule_avp); + } + + { + struct dict_object *rule_avp; + struct dict_avp_request vpa; + vpa.avp_vendor = 10415; + vpa.avp_name = "Time-Stamps"; + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); + struct local_rules_definition rules[] = + { + { { .avp_vendor = 10415, .avp_name = "SIP-Request-Timestamp" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "SIP-Response-Timestamp" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "SIP-Request-Timestamp-Fraction" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "SIP-Response-Timestamp-Fraction" }, RULE_OPTIONAL, -1, 1 }, + }; + PARSE_loc_rules(rules, rule_avp); + } + + /* OMA */ + { + struct dict_object *rule_avp; + struct dict_avp_request vpa; + vpa.avp_vendor = 10415; + vpa.avp_name = "DCD-Information"; + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); + struct local_rules_definition rules[] = + { + { { .avp_vendor = 10415, .avp_name = "Content-ID" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Content-provider-ID" }, RULE_OPTIONAL, -1, 1 }, + }; + PARSE_loc_rules(rules, rule_avp); + } + { + struct dict_object *rule_avp; + struct dict_avp_request vpa; + vpa.avp_vendor = 10415; + vpa.avp_name = "IM-Information"; + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); + struct local_rules_definition rules[] = + { + { { .avp_vendor = 10415, .avp_name = "Total-Number-Of-Messages-Sent" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Total-Number-Of-Messages-Exploded" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Number-Of-Messages-Successfully-Sent" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Number-Of-Messages-Successfully-Exploded" }, RULE_OPTIONAL, -1, 1 }, + }; + PARSE_loc_rules(rules, rule_avp); + } + { + struct dict_object *rule_avp; + struct dict_avp_request vpa; + vpa.avp_vendor = 10415; + vpa.avp_name = "Service-Generic-Information"; + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); + struct local_rules_definition rules[] = + { + { { .avp_vendor = 10415, .avp_name = "Application-Server-Id" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Application-Service-Type" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Application-Session-Id" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Delivery-Status" }, RULE_OPTIONAL, -1, 1 }, + }; + PARSE_loc_rules(rules, rule_avp); + } + + /* Reservation-Priority */ + { + struct dict_avp_data data = { + 458, /* Code */ + 13019, /* Vendor */ + "Reservation-Priority", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Logical-Access-ID */ + { + struct dict_avp_data data = { + 302, /* Code */ + 13019, /* Vendor */ + "Logical-Access-ID", /* Name */ + AVP_FLAG_VENDOR, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Physical-Access-ID */ + { + struct dict_avp_data data = { + 313, /* Code */ + 13019, /* Vendor */ + "Physical-Access-ID", /* Name */ + AVP_FLAG_VENDOR, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Command section */ + { + struct dict_object* app; + CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_APPLICATION, APPLICATION_BY_NAME, "Cx", &app, ENOENT)); + + /* User-Authorization-Request (UAR) Command */ + { + struct dict_object* cmd_uar; + struct dict_cmd_data data = { + 300, /* Code */ + "3GPP/User-Authorization-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[] = + { + { { .avp_name = "Session-Id" }, RULE_FIXED_HEAD, -1, 1 }, + { { .avp_name = "Vendor-Specific-Application-Id" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Auth-Session-State" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Host" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Realm" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Destination-Host" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Destination-Realm" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "User-Name" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Supported-Features" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Public-Identity" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Visited-Network-Identifier" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "User-Authorization-Type" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "UAR-Flags" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Proxy-Info" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_name = "Route-Record" }, RULE_OPTIONAL, -1, -1 } + }; + + CHECK_dict_new(DICT_COMMAND, &data, app, &cmd_uar); + PARSE_loc_rules(rules, cmd_uar); + } + + /* User-Authorization-Answer (UAA) Command */ + { + struct dict_object* cmd_uaa; + struct dict_cmd_data data = { + 300, /* Code */ + "3GPP/User-Authorization-Answer", /* Name */ + CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ + CMD_FLAG_PROXIABLE /* Fixed flag values */ + }; + + struct local_rules_definition rules[] = + { + { { .avp_name = "Session-Id" }, RULE_FIXED_HEAD, -1, 1 }, + { { .avp_name = "Vendor-Specific-Application-Id" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Result-Code" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Experimental-Result" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Auth-Session-State" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Host" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Realm" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Supported-Features" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Server-Name" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Server-Capabilities" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Failed-AVP" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_name = "Proxy-Info" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_name = "Route-Record" }, RULE_OPTIONAL, -1, -1 } + }; + + CHECK_dict_new(DICT_COMMAND, &data, app, &cmd_uaa); + PARSE_loc_rules(rules, cmd_uaa); + } + + /* Location-Info-Request (LIR) Command */ + { + struct dict_object* cmd_lir; + struct dict_cmd_data data = { + 302, /* Code */ + "3GPP/Location-Info-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[] = + { + { { .avp_name = "Session-Id" }, RULE_FIXED_HEAD, -1, 1 }, + { { .avp_name = "Vendor-Specific-Application-Id" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Auth-Session-State" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Host" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Realm" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Destination-Host" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Destination-Realm" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Originating-Request" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Supported-Features" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Public-Identity" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "User-Authorization-Type" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Session-Priority" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Proxy-Info" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_name = "Route-Record" }, RULE_OPTIONAL, -1, -1 } + }; + + CHECK_dict_new(DICT_COMMAND, &data, app, &cmd_lir); + PARSE_loc_rules(rules, cmd_lir); + } + + /* Location-Info-Answer (LIA) Command */ + { + struct dict_object* cmd_lia; + struct dict_cmd_data data = { + 302, /* Code */ + "3GPP/Location-Info-Answer", /* Name */ + CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ + CMD_FLAG_PROXIABLE /* Fixed flag values */ + }; + + struct local_rules_definition rules[] = + { + { { .avp_name = "Session-Id" }, RULE_FIXED_HEAD, -1, 1 }, + { { .avp_name = "Vendor-Specific-Application-Id" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Result-Code" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Experimental-Result" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Auth-Session-State" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Host" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Realm" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Supported-Features" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Server-Name" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Server-Capabilities" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Wildcarded-Public-Identity" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "LIA-Flags" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Failed-AVP" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_name = "Proxy-Info" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_name = "Route-Record" }, RULE_OPTIONAL, -1, -1 } + }; + + CHECK_dict_new(DICT_COMMAND, &data, app, &cmd_lia); + PARSE_loc_rules(rules, cmd_lia); + } + + /* Multimedia-Auth-Request (MAR) Command */ + { + struct dict_object* cmd_mar; + struct dict_cmd_data data = { + 303, /* Code */ + "3GPP/Multimedia-Auth-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[] = + { + { { .avp_name = "Session-Id" }, RULE_FIXED_HEAD, -1, 1 }, + { { .avp_name = "Vendor-Specific-Application-Id" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Auth-Session-State" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Host" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Realm" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Destination-Realm" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Destination-Host" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "User-Name" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Supported-Features" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Public-Identity" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "SIP-Auth-Data-Item" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "SIP-Number-Auth-Items" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Server-Name" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Proxy-Info" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_name = "Route-Record" }, RULE_OPTIONAL, -1, -1 }, + }; + + CHECK_dict_new(DICT_COMMAND, &data, app, &cmd_mar); + PARSE_loc_rules(rules, cmd_mar); + } + + /* Multimedia-Auth-Answer (MAA) Command */ + { + struct dict_object* cmd_maa; + struct dict_cmd_data data = { + 303, /* Code */ + "3GPP/Multimedia-Auth-Answer", /* Name */ + CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ + CMD_FLAG_PROXIABLE /* Fixed flag values */ + }; + + struct local_rules_definition rules[] = + { + { { .avp_name = "Session-Id" }, RULE_FIXED_HEAD, -1, 1 }, + { { .avp_name = "Vendor-Specific-Application-Id" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Result-Code" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Experimental-Result" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Auth-Session-State" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Host" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Realm" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "User-Name" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Supported-Features" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Public-Identity" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "SIP-Number-Auth-Items" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "SIP-Auth-Data-Item" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Failed-AVP" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_name = "Proxy-Info" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_name = "Route-Record" }, RULE_OPTIONAL, -1, -1 } + }; + + CHECK_dict_new(DICT_COMMAND, &data, app, &cmd_maa); + PARSE_loc_rules(rules, cmd_maa); + } + + /* Server-Assignment-Request (SAR) Command */ + { + struct dict_object* cmd_sar; + struct dict_cmd_data data = { + 301, /* Code */ + "3GPP/Server-Assignment-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[] = + { + { { .avp_name = "Session-Id" }, RULE_FIXED_HEAD, -1, 1 }, + { { .avp_name = "Vendor-Specific-Application-Id" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Auth-Session-State" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Host" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Realm" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Destination-Host" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Destination-Realm" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "User-Name" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Supported-Features" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Public-Identity" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Wildcarded-Public-Identity" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Server-Name" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Server-Assignment-Type" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "User-Data-Already-Available" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "SCSCF-Restoration-Info" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Multiple-Registration-Indication" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Session-Priority" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Proxy-Info" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_name = "Route-Record" }, RULE_OPTIONAL, -1, -1 } + }; + + CHECK_dict_new(DICT_COMMAND, &data, app, &cmd_sar); + PARSE_loc_rules(rules, cmd_sar); + } + + /* Server-Assignment-Answer (SAA) Command */ + { + struct dict_object* cmd_saa; + struct dict_cmd_data data = { + 301, /* Code */ + "3GPP/Server-Assignment-Answer", /* Name */ + CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ + CMD_FLAG_PROXIABLE /* Fixed flag values */ + }; + + struct local_rules_definition rules[] = + { + { { .avp_name = "Session-Id" }, RULE_FIXED_HEAD, -1, 1 }, + { { .avp_name = "Vendor-Specific-Application-Id" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Result-Code" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Experimental-Result" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Auth-Session-State" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Host" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Realm" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "User-Name" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Supported-Features" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "User-Data" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Charging-Information" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Associated-Identities" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Loose-Route-Indication" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "SCSCF-Restoration-Info" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Associated-Registered-Identities" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Server-Name" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Wildcarded-Public-Identity" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Priviledged-Sender-Indication" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Failed-AVP" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_name = "Proxy-Info" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_name = "Route-Record" }, RULE_OPTIONAL, -1, -1 } + }; + + CHECK_dict_new(DICT_COMMAND, &data, app, &cmd_saa); + PARSE_loc_rules(rules, cmd_saa); + } + + /* Registration-Termination-Request (RTR) Command */ + { + struct dict_object* cmd_rtr; + struct dict_cmd_data data = { + 304, /* Code */ + "3GPP/Registration-Termination-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[] = + { + { { .avp_name = "Session-Id" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Vendor-Specific-Application-Id" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Auth-Session-State" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Host" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Realm" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Destination-Host" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Destination-Realm" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "User-Name" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Associated-Identities" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Supported-Features" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Public-Identity" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Deregistration-Reason" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Proxy-Info" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_name = "Route-Record" }, RULE_OPTIONAL, -1, -1 } + }; + + CHECK_dict_new(DICT_COMMAND, &data, app, &cmd_rtr); + PARSE_loc_rules(rules, cmd_rtr); + } + + /* Registration-Termination-Answer (RTA) Command */ + { + struct dict_object* cmd_rta; + struct dict_cmd_data data = { + 304, /* Code */ + "3GPP/Registration-Termination-Answer", /* Name */ + CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ + CMD_FLAG_PROXIABLE /* Fixed flag values */ + }; + + struct local_rules_definition rules[] = + { + { { .avp_name = "Session-Id" }, RULE_FIXED_HEAD, -1, 1 }, + { { .avp_name = "Vendor-Specific-Application-Id" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Result-Code" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Experimental-Result" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Auth-Session-State" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Host" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Realm" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Associated-Identities" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Supported-Features" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Identity-with-Emergency-Registration" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_name = "Failed-AVP" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_name = "Proxy-Info" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_name = "Route-Record" }, RULE_OPTIONAL, -1, -1 } + }; + + CHECK_dict_new(DICT_COMMAND, &data, app, &cmd_rta); + PARSE_loc_rules(rules, cmd_rta); + } + + /* Push-Profile-Request (PPR) Command */ + { + struct dict_object* cmd_ppr; + struct dict_cmd_data data = { + 305, /* Code */ + "3GPP/Push-Profile-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[] = + { + { { .avp_name = "Session-Id" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Vendor-Specific-Application-Id" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Auth-Session-State" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Host" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Realm" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Destination-Host" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Destination-Realm" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "User-Name" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Supported-Features" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "User-Data" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Charging-Information" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "SIP-Auth-Data-Item" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Proxy-Info" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_name = "Route-Record" }, RULE_OPTIONAL, -1, -1 } + }; + + CHECK_dict_new(DICT_COMMAND, &data, app, &cmd_ppr); + PARSE_loc_rules(rules, cmd_ppr); + } + + /* Push-Profile-Answer (PPA) Command */ + { + struct dict_object* cmd_ppa; + struct dict_cmd_data data = { + 305, /* Code */ + "3GPP/Push-Profile-Answer", /* Name */ + CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ + CMD_FLAG_PROXIABLE /* Fixed flag values */ + }; + + struct local_rules_definition rules[] = + { + { { .avp_name = "Session-Id" }, RULE_FIXED_HEAD, -1, 1 }, + { { .avp_name = "Vendor-Specific-Application-Id" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Result-Code" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Experimental-Result" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Auth-Session-State" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Host" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Realm" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Supported-Features" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_name = "Failed-AVP" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_name = "Proxy-Info" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_name = "Route-Record" }, RULE_OPTIONAL, -1, -1 } + }; + + CHECK_dict_new(DICT_COMMAND, &data, app, &cmd_ppa); + PARSE_loc_rules(rules, cmd_ppa); + } + } + + struct dict_object* rx; + CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_APPLICATION, APPLICATION_BY_NAME, "Rx", &rx, ENOENT)); + + /* AA-Request (AAR) Command */ + { + struct dict_object * cmd; + struct local_rules_definition rules[] = + { + { { .avp_vendor = 10415, .avp_name = "AF-Application-Identifier" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Media-Component-Description" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Service-Info-Status" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "AF-Charging-Identifier" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "SIP-Forking-Indication" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Specific-Action" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_name = "Subscription-Id" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Supported-Features" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 13019, .avp_name = "Reservation-Priority" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Called-Station-Id" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Service-URN" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Sponsored-Connectivity-Data" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "MPS-Identifier" }, RULE_OPTIONAL, -1, 1 } + }; + + CHECK_dict_search( DICT_COMMAND, CMD_BY_NAME, "AA-Request", &cmd); + PARSE_loc_rules( rules, cmd ); + } + + /* AA-Answer (AAA) Command */ + { + struct dict_object * cmd; + struct local_rules_definition rules[] = + { + { { .avp_name = "Experimental-Result" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Access-Network-Charging-Identifier" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Access-Network-Charging-Address" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Acceptable-Service-Info" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "IP-CAN-Type" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "RAT-Type" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Flows" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Supported-Features" }, RULE_OPTIONAL, -1, -1 } + }; + + CHECK_dict_search( DICT_COMMAND, CMD_BY_NAME, "AA-Answer", &cmd); + PARSE_loc_rules( rules, cmd ); + } + + /* Re-Auth-Request (RAR) Command - Extension for Rx */ + { + struct dict_object * cmd; + struct local_rules_definition rules[] = + { + { { .avp_vendor = 10415, .avp_name = "Specific-Action" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Access-Network-Charging-Identifier" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Access-Network-Charging-Address" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Flows" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_name = "Subscription-Id" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Abort-Cause" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "IP-CAN-Type" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "RAT-Type" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Sponsored-Connectivity-Data" }, RULE_OPTIONAL, -1, 1 } + }; + + CHECK_dict_search( DICT_COMMAND, CMD_BY_NAME, "Re-Auth-Request", &cmd); + PARSE_loc_rules( rules, cmd ); + } + + /* Re-Auth-Answer (RAA) Command - Extension for Rx */ + { + struct dict_object * cmd; + struct local_rules_definition rules[] = + { + { { .avp_name = "Experimental-Result" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Media-Component-Description" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Service-URN" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Redirect-Max-Cache-Time" }, RULE_OPTIONAL, -1, 1 } + }; + + CHECK_dict_search( DICT_COMMAND, CMD_BY_NAME, "Re-Auth-Answer", &cmd); + PARSE_loc_rules( rules, cmd ); + } + + + /* Session-Termination-Answer (STA) Command - Extension for Rx */ + { + struct dict_object * cmd; + struct local_rules_definition rules[] = + { + { { .avp_vendor = 10415, .avp_name = "Sponsored-Connectivity-Data" }, RULE_OPTIONAL, -1, 1 } + }; + + CHECK_dict_search( DICT_COMMAND, CMD_BY_NAME, "Session-Termination-Answer", &cmd); + PARSE_loc_rules( rules, cmd ); + } + + /* Abort-Session-Request (ASR) Command - Extension for Rx */ + { + struct dict_object * cmd; + struct local_rules_definition rules[] = + { + { { .avp_vendor = 10415, .avp_name = "Abort-Cause" }, RULE_REQUIRED, -1, 1 } + }; + + CHECK_dict_search( DICT_COMMAND, CMD_BY_NAME, "Abort-Session-Request", &cmd); + PARSE_loc_rules( rules, cmd ); + } + + /* Re-Auth-Request (RAR) Command - Extension for Gx */ + { + struct dict_object * cmd; + struct local_rules_definition rules[] = + { + { { .avp_vendor = 10415, .avp_name = "Session-Release-Cause" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Event-Trigger" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Event-Report-Indication" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Charging-Rule-Remove" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Charging-Rule-Install" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Default-EPS-Bearer-QoS" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "QoS-Information" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Revalidation-Time" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Usage-Monitoring-Information" }, RULE_OPTIONAL, -1, -1 } + }; + + CHECK_dict_search( DICT_COMMAND, CMD_BY_NAME, "Re-Auth-Request", &cmd); + PARSE_loc_rules( rules, cmd ); + } + + /* Re-Auth-Answer (RAA) Command - Extension for Gx */ + { + struct dict_object * cmd; + struct local_rules_definition rules[] = + { + { { .avp_name = "Experimental-Result" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "IP-CAN-Type" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "RAT-Type" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "AN-GW-Address" }, RULE_OPTIONAL, -1, 2 }, + { { .avp_vendor = 10415, .avp_name = "3GPP-SGSN-MCC-MNC" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "3GPP-SGSN-Address" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "3GPP-SGSN-Ipv6-Address" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "RAI" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "3GPP-User-Location-Info" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "3GPP-MS-TimeZone" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Charging-Rule-Report" }, RULE_OPTIONAL, -1, -1 } + }; + + CHECK_dict_search( DICT_COMMAND, CMD_BY_NAME, "Re-Auth-Answer", &cmd); + PARSE_loc_rules( rules, cmd ); + } + + /* Credit-Control-Request (CCR) Command - Extension for Gx */ + { + struct dict_object * cmd; + struct local_rules_definition rules[] = + { + { { .avp_vendor = 10415, .avp_name = "Supported-Features" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Network-Request-Support" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Packet-Filter-Information" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Packet-Filter-Operation" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Bearer-Identifier" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Bearer-Operation" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Framed-IP-Address" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Framed-IPv6-Prefix" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "IP-CAN-Type" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "3GPP-RAT-Type" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "RAT-Type" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "QoS-Information" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "QoS-Negotiation" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "QoS-Upgrade" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Default-EPS-Bearer-QoS" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "AN-GW-Address" }, RULE_OPTIONAL, -1, 2 }, + { { .avp_vendor = 10415, .avp_name = "3GPP-SGSN-MCC-MNC" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "3GPP-SGSN-Address" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "3GPP-SGSN-Ipv6-Address" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "RAI" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "3GPP-User-Location-Info" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "3GPP-MS-TimeZone" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Called-Station-Id" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "PDN-Connection-ID" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Bearer-Usage" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Online" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Offline" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "TFT-Packet-Filter-Information" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Charging-Rule-Report" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Event-Trigger" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Event-Report-Indication" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Access-Network-Charging-Address" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Access-Network-Charging-Identifier-Gx" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "CoA-Information" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Usage-Monitoring-Information" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Routing-Rule-Install" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Routing-Rule-Remove" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 13019, .avp_name = "Logical-Access-ID" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 13019, .avp_name = "Physical-Access-ID" }, RULE_OPTIONAL, -1, 1 } + }; + + CHECK_dict_search( DICT_COMMAND, CMD_BY_NAME, "Credit-Control-Request", &cmd); + PARSE_loc_rules( rules, cmd ); + } + + /* Credit-Control-Answer (CCA) Command - Extension for Gx */ + { + struct dict_object * cmd; + struct local_rules_definition rules[] = + { + { { .avp_name = "Experimental-Result" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Supported-Features" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Bearer-Control-Mode" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Event-Trigger" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Event-Report-Indication" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Charging-Rule-Remove" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Charging-Rule-Install" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Charging-Information" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Online" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Offline" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "QoS-Information" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Revalidation-Time" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Default-EPS-Bearer-QoS" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Bearer-Usage" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Usage-Monitoring-Information" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "CSG-Information-Reporting" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "User-CSG-Information" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Error-Message" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Error-Reporting-Host" }, RULE_OPTIONAL, -1, 1 } + }; + + CHECK_dict_search( DICT_COMMAND, CMD_BY_NAME, "Credit-Control-Answer", &cmd); + PARSE_loc_rules( rules, cmd ); + } + + LOG_D( "Extension 'Dictionary definitions for DCCA 3GPP' initialized"); + return 0; +} + +EXTENSION_ENTRY("dict_dcca_3gpp", dict_dcca_3gpp_entry, "dict_dcca"); diff --git a/lib/fd/extensions/dict_dcca_3gpp/dict_dcca_3gpp.org b/lib/fd/extensions/dict_dcca_3gpp/dict_dcca_3gpp.org new file mode 100644 index 0000000000..e7eb34f482 --- /dev/null +++ b/lib/fd/extensions/dict_dcca_3gpp/dict_dcca_3gpp.org @@ -0,0 +1,789 @@ +| Attribute Name | Code | Section defined | Value Type | MUST | MAY | SHLD NOT | MUST NOT | Encr | +| # 3GPP 29.061-c00 (12.0.0 2012.12.20) | | | | | | | | | +| # 3GPP 29.061 is not very clear and self-inconsistent about M | | | | | | | | | +| # for this reason, other sources are assumed more trustworthy | | | | | | | | | +| # M inconsistently specified | | | | | | | | | +| 3GPP-IMSI | 1 | 16.4.7 | UTF8String | M,V | P | | | | +| # 29.061 says OctetString; dumps say UInt32; manually changed | | | | | | | | | +| # 29.061 says MUST NOT M; dumps say MUST | | | | | | | | | +| 3GPP-Charging-Id | 2 | 16.4.7 | Unsigned32 | M,V | P | | | | +| # 29.061 says MUST NOT M; dumps say MUST | | | | | | | | | +| 3GPP-PDP-Type | 3 | 16.4.7 | Enumerated | M,V | P | | | | +| 3GPP-CG-Address | 4 | 16.4.7 | OctetString | V | P | | M | | +| # 29.061 says MUST NOT M; old contrib/3gpp says MUST | | | | | | | | | +| 3GPP-GPRS-Negotiated-QoS-Profile | 5 | 16.4.7 | UTF8String | M,V | P | | | | +| # M inconsistently specified; old contrib/3gg says MUST NOT | | | | | | | | | +| 3GPP-SGSN-Address | 6 | 16.4.7 | OctetString | V | P | | M | | +| 3GPP-GGSN-Address | 7 | 16.4.7 | OctetString | V | P | | M | | +| # 29.061 says MUST NOT M; dumps say MUST | | | | | | | | | +| 3GPP-IMSI-MCC-MNC | 8 | 16.4.7 | UTF8String | M,V | P | | | | +| # 29.061 says MUST NOT M; old contrib/3gpp says MUST | | | | | | | | | +| 3GPP-GGSN-MCC-MNC | 9 | 16.4.7 | UTF8String | M,V | P | | | | +| # 29.061 says MUST NOT M; old contrib/3gpp says MUST | | | | | | | | | +| 3GPP-NSAPI | 10 | 16.4.7 | OctetString | M,V | P | | | | +| # added manually, missing in AVP table | | | | | | | | | +| 3GPP-Session-Stop-Indicator | 11 | 16.4.7 | OctetString | V | P | | M | | +| # 29.061 says MUST NOT M; old contrib/3gpp says MUST | | | | | | | | | +| 3GPP-Selection-Mode | 12 | 16.4.7 | UTF8String | M,V | P | | | | +| # 29.061 says MUST NOT M; old contrib/3gpp says MUST | | | | | | | | | +| 3GPP-Charging-Characteristics | 13 | 16.4.7 | UTF8String | M,V | P | | | | +| # 29.061 says MUST NOT M; old contrib/3gpp says MUST | | | | | | | | | +| 3GPP-CG-IPv6-Address | 14 | 16.4.7 | OctetString | M,V | P | | | | +| # M inconsistently specified | | | | | | | | | +| # 29.061 says MUST NOT M; old contrib/3gpp says MUST | | | | | | | | | +| 3GPP-SGSN-IPv6-Address | 15 | 16.4.7 | OctetString | M,V | P | | | | +| # 29.061 says MUST NOT M; old contrib/3gpp says MUST | | | | | | | | | +| 3GPP-GGSN-IPv6-Address | 16 | 16.4.7 | OctetString | M,V | P | | | | +| # 29.061 says MUST NOT M; old contrib/3gpp says MUST | | | | | | | | | +| 3GPP-IPv6-DNS-Servers | 17 | 16.4.7 | OctetString | M,V | P | | | | +| # 29.061 says MUST NOT M; old contrib/3gpp says MUST | | | | | | | | | +| 3GPP-SGSN-MCC-MNC | 18 | 16.4.7 | UTF8String | M,V | P | | | | +| # M inconsistently specified | | | | | | | | | +| 3GPP-IMEISV | 20 | 16.4.7 | OctetString | M,V | P | | | | +| # M inconsistently specified | | | | | | | | | +| 3GPP-RAT-Type | 21 | 16.4.7 | OctetString | M,V | P | | | | +| # M inconsistently specified | | | | | | | | | +| 3GPP-User-Location-Info | 22 | 16.4.7 | OctetString | M,V | P | | | | +| # M inconsistently specified | | | | | | | | | +| 3GPP-MS-TimeZone | 23 | 16.4.7 | OctetString | M,V | P | | | | +| 3GPP-CAMEL-Charging-Info | 24 | 16.4.7 | OctetString | V | P | | M | | +| 3GPP-Packet-Filter | 25 | 16.4.7 | OctetString | V | P | | M | | +| 3GPP-Negotiated-DSCP | 26 | 16.4.7 | OctetString | V | P | | M | | +| 3GPP-Allocate-IP-Type | 27 | 16.4.7 | OctetString | V | P | | M | | +| # added manually, missing in AVP table | | | | | | | | | +| External-Identifier | 28 | 16.4.7 | OctetString | V | P | | M | | +| TMGI | 900 | 17.07.02 | OctetString | M,V | P | | | | +| Required-MBMS-Bearer-Capabilities | 901 | 17.07.03 | UTF8String | M,V | P | | | | +| MBMS-StartStop-Indication | 902 | 17.07.05 | Enumerated | M,V | P | | | | +| MBMS-Service-Area | 903 | 17.07.06 | OctetString | M,V | P | | | | +| MBMS-Session-Duration | 904 | 17.07.07 | OctetString | M,V | P | | | | +| Alternative-APN | 905 | 17.07.08 | UTF8String | M,V | P | | | | +| MBMS-Service-Type | 906 | 17.07.09 | Enumerated | M,V | P | | | | +| MBMS-2G-3G-Indicator | 907 | 17.07.10 | Enumerated | M,V | P | | | | +| MBMS-Session-Identity | 908 | 17.07.11 | OctetString | M.V | P | | | | +| RAI | 909 | 17.07.12 | UTF8String | M,V | P | | | | +| Additional-MBMS-Trace-Info | 910 | 17.07.13 | OctetString | M,V | P | | | | +| MBMS-Time-To-Data-Transfer | 911 | 17.07.14 | OctetString | M,V | P | | | | +| MBMS-Session-Repetition-Number | 912 | 17.07.15 | OctetString | M.V | P | | | | +| MBMS-Required-QoS | 913 | 17.07.16 | UTF8String | M.V | P | | | | +| MBMS-Counting-Information | 914 | 17.07.17 | Enumerated | M.V | P | | | | +| MBMS-User-Data-Mode-Indication | 915 | 17.07.18 | Enumerated | M.V | P | | | | +| MBMS-GGSN-Address | 916 | 17.07.19 | OctetString | M.V | P | | | | +| MBMS-GGSN-IPv6-Address | 917 | 17.07.20 | OctetString | M.V | P | | | | +| MBMS-BMSC-SSM-IP-Address | 918 | 17.07.21 | OctetString | M.V | P | | | | +| MBMS-BMSC-SSM-IPv6-Address | 919 | 17.07.22 | OctetString | M.V | P | | | | +| MBMS-Flow-Identifier | 920 | 17.7.23 | OctetString | M,V | P | | | | +| CN-IP-Multicast-Distribution | 921 | 17.7.24 | Enumerated | M,V | P | | | | +| MBMS-HC-Indicator | 922 | 17.7.25 | Enumerated | M,V | P | | | | +| # 3GPP 29.140-700 (7.0.0 2007.07.05) | | | | | | | | | +| Served-User-Identity | 1100 | 6.3.1 | Grouped | M,V | | | | N | +| # reuses: MSISDN | 701 | 6.3.2 | OctetString | M,V | | | | N | +| VASP-ID | 1101 | 6.3.3 | UTF8String | M,V | | | | N | +| VAS-ID | 1102 | 6.3.4 | UTF8String | M,V | | | | N | +| Trigger-Event | 1103 | 6.3.5 | Enumerated | M,V | | | | N | +| # reuses: 3GPP-IMSI | 1 | 6.3.6 | UTF8String | M,V | | | | N | +| Sender-Address | 1104 | 6.3.7 | UTF8String | M,V | | | | N | +| Initial-Recipient-Address | 1105 | 6.3.8 | Grouped | M,V | | | | N | +| Result-Recipient-Address | 1106 | 6.3.9 | Grouped | M,V | | | | N | +| # conflicts with one in (more common) 32.329 | | | | | | | | | +| Sequence-Number-29.140 | 1107 | 6.3.10 | Unsigned32 | M,V | | | | N | +| # conflicts with one in (more common) 32.299 | | | | | | | | | +| Recipient-Address-29.140 | 1108 | 6.3.11 | UTF8String | M,V | | | | N | +| Routeing-Address | 1109 | 6.3.12 | UTF8String | M,V | | | | N | +| Originating-Interface | 1110 | 6.3.13 | Enumerated | M,V | | | | N | +| Delivery-Report | 1111 | 6.3.14 | Enumerated | M,V | | | | N | +| Read-Reply | 1112 | 6.3.15 | Enumerated | M,V | | | | N | +| Sender-Visibility | 1113 | 6.3.16 | Enumerated | M,V | | | | N | +| Service-Key | 1114 | 6.3.17 | UTF8String | M,V | | | | N | +| Billing-Information | 1115 | 6.3.18 | UTF8String | M,V | | | | N | +| # conflicts with one in (more common) 32.299 | | | | | | | | | +| Status-29.140 | 1116 | 6.3.19 | Grouped | M,V | | | | N | +| Status-Code | 1117 | 6.3.20 | UTF8String | M,V | | | | N | +| Status-Text | 1118 | 6.3.21 | UTF8String | M,V | | | | N | +| Routeing-Address-Resolution | 1119 | 6.3.22 | Enumerated | M,V | | | | N | +| # 3GPP 29.173-c00 (12.0.0 2013.03.13) | | | | | | | | | +| LMSI | 2400 | 6.4.2 | OctetString | M,V | | | | N | +| Serving-Node | 2401 | 6.4.3 | Grouped | M,V | | | | N | +| MME-Name | 2402 | 6.4.4 | DiameterIdentity | M,V | | | | N | +| MSC-Number | 2403 | 6.4.5 | OctetString | M,V | | | | N | +| LCS-Capabilities-Sets | 2404 | 6.4.6 | Unsigned32 | M,V | | | | N | +| GMLC-Address | 2405 | 6.4.7 | Address | M,V | | | | N | +| Additional-Serving-Node | 2406 | 6.4.8 | Grouped | M,V | | | | N | +| PPR-Address | 2407 | 6.4.9 | Address | M,V | | | | N | +| MME-Realm | 2408 | 6.4.12 | DiameterIdentity | V | | | M | N | +| SGSN-Name | 2409 | 6.4.13 | DiameterIdentity | V | | | M | N | +| SGSN-Realm | 2410 | 6.4.14 | DiameterIdentity | V | | | M | N | +| # 3GPP 29.210-670 (6.7.0 2006-12-18) | | | | | | | | | +| PDP-Session-Operation | 1015 | 5.2.21 | Enumerated | M,V | P | | | Y | +| # 3GPP 29.212-c00 (12.0.0 2013.03.15) | | | | | | | | | +| # Gx-specific | | | | | | | | | +| ADC-Revalidation-Time | 2801 | 5.3.93 | Time | V | P | | M | Y | +| ADC-Rule-Install | 1092 | 5.3.85 | Grouped | V | P | | M | Y | +| ADC-Rule-Remove | 1093 | 5.3.86 | Grouped | V | P | | M | Y | +| ADC-Rule-Definition | 1094 | 5.3.87 | Grouped | V | P | | M | Y | +| ADC-Rule-Base-Name | 1095 | 5.3.88 | UTF8String | V | P | | M | Y | +| ADC-Rule-Name | 1096 | 5.3.89 | OctetString | V | P | | M | Y | +| ADC-Rule-Report | 1097 | 5.3.90 | Grouped | V | P | | M | Y | +| Application-Detection-Information | 1098 | 5.3.91 | Grouped | V | P | | M | Y | +| Access-Network-Charging-Identifier-Gx | 1022 | 5.3.22 | Grouped | M,V | P | | | Y | +| Allocation-Retention-Priority | 1034 | 5.3.32 | Grouped | V | P | | M | Y | +| AN-GW-Address | 1050 | 5.3.49 | Address | V | P | | M | Y | +| APN-Aggregate-Max-Bitrate-DL | 1040 | 5.3.39 | Unsigned32 | V | P | | M | Y | +| APN-Aggregate-Max-Bitrate-UL | 1041 | 5.3.40 | Unsigned32 | V | P | | M | Y | +| Bearer-Control-Mode | 1023 | 5.3.23 | Enumerated | M,V | P | | | Y | +| Bearer-Identifier | 1020 | 5.3.20 | OctetString | M,V | P | | | Y | +| Bearer-Operation | 1021 | 5.3.21 | Enumerated | M,V | P | | | Y | +| Bearer-Usage | 1000 | 5.3.1 | Enumerated | M,V | P | | | Y | +| Charging-Rule-Install | 1001 | 5.3.2 | Grouped | M,V | P | | | Y | +| Charging-Rule-Remove | 1002 | 5.3.3 | Grouped | M,V | P | | | Y | +| Charging-Rule-Definition | 1003 | 5.3.4 | Grouped | M,V | P | | | Y | +| Charging-Rule-Base-Name | 1004 | 5.3.5 | UTF8String | M,V | P | | | Y | +| Charging-Rule-Name | 1005 | 5.3.6 | OctetString | M,V | P | | | Y | +| Charging-Rule-Report | 1018 | 5.3.18 | Grouped | M,V | P | | | Y | +| Charging-Correlation-Indicator | 1073 | 5.3.67 | Enumerated | V | P | | M | Y | +| CoA-IP-Address | 1035 | 5.3.33 | Address | V | P | | M | Y | +| CoA-Information | 1039 | 5.3.37 | Grouped | V | P | | M | Y | +| CSG-Information-Reporting | 1071 | 5.3.64 | Enumerated | V | P | | M | Y | +| Default-EPS-Bearer-QoS | 1049 | 5.3.48 | Grouped | V | P | | M | Y | +| Event-Report-Indication | 1033 | 5.3.30 | Grouped | V | P | | M | Y | +| Event-Trigger | 1006 | 5.3.7 | Enumerated | M,V | P | | | Y | +| Flow-Direction | 1080 | 5.3.65 | Enumerated | V | P | | M | Y | +| Flow-Information | 1058 | 5.3.53 | Grouped | V | P | | M | Y | +| Flow-Label | 1057 | 5.3.52 | OctetString | V | P | | M | Y | +| IP-CAN-Type | 1027 | 5.3.27 | Enumerated | M,V | P | | | Y | +| Guaranteed-Bitrate-DL | 1025 | 5.3.25 | Unsigned32 | M,V | P | | | Y | +| Guaranteed-Bitrate-UL | 1026 | 5.3.26 | Unsigned32 | M,V | P | | | Y | +| HeNB-Local-IP-Address | 2804 | 5.3.95 | Address | V | P | | M | Y | +| Metering-Method | 1007 | 5.3.8 | Enumerated | M,V | P | | | Y | +| Monitoring-Key | 1066 | 5.3.59 | OctetString | V | P | | M | Y | +| Mute-Notification | 2809 | 5.3.98 | Enumerated | V | P | | M | Y | +| Monitoring-Time | 2810 | 5.3.99 | Time | V | P | | M | Y | +| Network-Request-Support | 1024 | 5.3.24 | Enumerated | M,V | P | | | Y | +| Offline | 1008 | 5.3.9 | Enumerated | M,V | P | | | Y | +| Online | 1009 | 5.3.10 | Enumerated | M,V | P | | | Y | +| Packet-Filter-Content | 1059 | 5.3.54 | IPFilterRule | V | P | | M | Y | +| Packet-Filter-Identifier | 1060 | 5.3.55 | OctetString | V | P | | M | Y | +| Packet-Filter-Information | 1061 | 5.3.56 | Grouped | V | P | | M | Y | +| Packet-Filter-Operation | 1062 | 5.3.57 | Enumerated | V | P | | M | Y | +| Packet-Filter-Usage | 1072 | 5.3.66 | Enumerated | V | P | | M | Y | +| PDN-Connection-ID | 1065 | 5.3.58 | OctetString | V | P | | | Y | +| Precedence | 1010 | 5.3.11 | Unsigned32 | M,V | P | | | Y | +| Pre-emption-Capability | 1047 | 5.3.46 | Enumerated | V | P | | M | Y | +| Pre-emption-Vulnerability | 1048 | 5.3.47 | Enumerated | V | P | | M | Y | +| Priority-Level | 1046 | 5.3.45 | Unsigned32 | V | P | | M | Y | +| Redirect-Information | 1085 | 5.3.82 | Grouped | V | P | | M | Y | +| Redirect-Support | 1086 | 5.3.83 | Enumerated | V | P | | M | Y | +| Reporting-Level | 1011 | 5.3.12 | Enumerated | M,V | P | | | Y | +| Routing-Filter | 1078 | 5.3.72 | Grouped | V | P | | M | Y | +| Routing-IP-Address | 1079 | 5.3.73 | Address | V | P | | M | Y | +| Routing-Rule-Definition | 1076 | 5.3.70 | Grouped | V | P | | M | Y | +| Routing-Rule-Identifier | 1077 | 5.3.71 | OctetString | V | P | | M | Y | +| Routing-Rule-Install | 1081 | 5.3.68 | Grouped | V | P | | M | Y | +| Routing-Rule-Remove | 1075 | 5.3.69 | Grouped | V | P | | M | Y | +| PCC-Rule-Status | 1019 | 5.3.19 | Enumerated | M,V | P | | | Y | +| Session-Release-Cause | 1045 | 5.3.44 | Enumerated | M,V | P | | | Y | +| TDF-Information | 1087 | 5.3.78 | Grouped | V | P | | M | Y | +| TDF-Application-Identifier | 1088 | 5.3.77 | OctetString | V | P | | M | Y | +| TDF-Application-Instance-Identifier | 2802 | 5.3.92 | OctetString | V | P | | M | Y | +| TDF-Destination-Host | 1089 | 5.3.80 | DiameterIdentity | V | P | | M | Y | +| TDF-Destination-Realm | 1090 | 5.3.79 | DiameterIdentity | V | P | | M | Y | +| TDF-IP-Address | 1091 | 5.3.81 | Address | V | P | | M | Y | +| QoS-Class-Identifier | 1028 | 5.3.17 | Enumerated | M,V | P | | | Y | +| QoS-Information | 1016 | 5.3.16 | Grouped | M.V | P | | | Y | +| QoS-Negotiation | 1029 | 5.3.28 | Enumerated | M,V | P | | | Y | +| QoS-Upgrade | 1030 | 5.3.29 | Enumerated | M.V | P | | | Y | +| PS-to-CS-Session-Continuity | 1099 | 5.3.84 | Enumerated | V | P | | | Y | +| Resource-Allocation-Notification | 1063 | 5.3.50 | Enumerated | V | P | | M | Y | +| Rule-Failure-Code | 1031 | 5.3.38 | Enumerated | M.V | P | | | Y | +| Security-Parameter-Index | 1056 | 5.3.51 | OctetString | V | P | | M | Y | +| TFT-Filter | 1012 | 5.3.13 | IPFilterRule | M,V | P | | | Y | +| TFT-Packet-Filter-Information | 1013 | 5.3.14 | Grouped | M,V | P | | | Y | +| ToS-Traffic-Class | 1014 | 5.3.15 | OctetString | M,V | P | | | Y | +| Tunnel-Header-Filter | 1036 | 5.3.34 | IPFilterRule | V | P | | M | Y | +| Tunnel-Header-Length | 1037 | 5.3.35 | Unsigned32 | V | P | | M | Y | +| Tunnel-Information | 1038 | 5.3.36 | Grouped | V | P | | M | Y | +| RAT-Type | 1032 | 5.3.31 | Enumerated | V | P | | M | Y | +| Revalidation-Time | 1042 | 5.3.41 | Time | M,V | P | | | Y | +| Rule-Activation-Time | 1043 | 5.3.42 | Time | M,V | P | | | Y | +| UDP-Source-Port | 2806 | 5.3.97 | Unsigned32 | V | P | | M | Y | +| UE-Local-IP-Address | 2805 | 5.3.96 | Address | V | P | | M | Y | +| Usage-Monitoring-Information | 1067 | 5.3.60 | Grouped | V | P | | M | Y | +| Rule-Deactivation-Time | 1044 | 5.3.43 | Time | M,V | P | | | Y | +| Usage-Monitoring-Level | 1068 | 5.3.61 | Enumerated | V | P | | M | Y | +| Usage-Monitoring-Report | 1069 | 5.3.62 | Enumerated | V | P | | M | Y | +| Usage-Monitoring-Support | 1070 | 5.3.63 | Enumerated | V | P | | M | Y | +| # Gxx-specific | | | | | | | | | +| QoS-Rule-Install | 1051 | 5a.3.1 | Grouped | M,V | P | | | Y | +| QoS-Rule-Remove | 1052 | 5a.3.2 | Grouped | M,V | P | | | Y | +| QoS-Rule-Definition | 1053 | 5a.3.3 | Grouped | M,V | P | | | Y | +| QoS-Rule-Name | 1054 | 5a.3.4 | OctetString | M,V | P | | | Y | +| QoS-Rule-Base-Name | 1074 | 5a.3.7 | UTF8String | V | P | | M | Y | +| QoS-Rule-Report | 1055 | 5a.3.5 | Grouped | M,V | P | | | Y | +| Session-Linking-Indicator | 1064 | 5a.3.6 | Enumerated | M,V | P | | | Y | +| # S15-specific | | | | | | | | | +| CS-Service-Qos-Request-Identifier | 2807 | E.6.3.2 | OctetString | M,V | P | | | Y | +| CS-Service-QoS-Request-Operation | 2808 | E.6.3.3 | Enumerated | M.V | P | | | Y | +| # 3GPP 29.214-b80 (11.8.0 2013.03.15) | | | | | | | | | +| Abort-Cause | 500 | 5.3.1 | Enumerated | M,V | P | | | Y | +| Access-Network-Charging-Address | 501 | 5.3.2 | Address | M,V | P | | | Y | +| Access-Network-Charging-Identifier | 502 | 5.3.3 | Grouped | M,V | P | | | Y | +| Access-Network-Charging-Identifier-Value | 503 | 5.3.4 | OctetString | M,V | P | | | Y | +| Acceptable-Service-Info | 526 | 5.3.24 | Grouped | M,V | P | | | Y | +| AF-Application-Identifier | 504 | 5.3.5 | OctetString | M,V | P | | | Y | +| AF-Charging-Identifier | 505 | 5.3.6 | OctetString | M,V | P | | | Y | +| Application-Service-Provider-Identity | 532 | 5.3.29 | UTF8String | V | P | | M | Y | +| Codec-Data | 524 | 5.3.7 | OctetString | M,V | P | | | Y | +| Flow-Description | 507 | 5.3.8 | IPFilterRule | M,V | P | | | Y | +| Flow-Number | 509 | 5.3.9 | Unsigned32 | M,V | P | | | Y | +| Flows | 510 | 5.3.10 | Grouped | M,V | P | | | Y | +| Flow-Status | 511 | 5.3.11 | Enumerated | M,V | P | | | Y | +| Flow-Usage | 512 | 5.3.12 | Enumerated | M,V | P | | | Y | +| Service-URN | 525 | 5.3.23 | OctetString | M,V | P | | | Y | +| Specific-Action | 513 | 5.3.13 | Enumerated | M,V | P | | | Y | +| Max-Requested-Bandwidth-DL | 515 | 5.3.14 | Unsigned32 | M,V | P | | | Y | +| Max-Requested-Bandwidth-UL | 516 | 5.3.15 | Unsigned32 | M,V | P | | | Y | +| Media-Component-Description | 517 | 5.3.16 | Grouped | M,V | P | | | Y | +| Media-Component-Number | 518 | 5.3.17 | Unsigned32 | M,V | P | | | Y | +| Media-Sub-Component | 519 | 5.3.18 | Grouped | M,V | P | | | Y | +| Media-Type | 520 | 5.3.19 | Enumerated | M,V | P | | | Y | +| MPS-Identifier | 528 | 5.3.30 | OctetString | V | P | | M | Y | +| Min-Requested-Bandwidth-DL | 534 | 5.3.32 | Unsigned32 | V | P | | M | Y | +| Min-Requested-Bandwidth-UL | 535 | 5.3.33 | Unsigned32 | V | P | | M | Y | +| RR-Bandwidth | 521 | 5.3.20 | Unsigned32 | M,V | P | | | Y | +| RS-Bandwidth | 522 | 5.3.21 | Unsigned32 | M,V | P | | | Y | +| Service-Info-Status | 527 | 5.3.25 | Enumerated | M,V | P | | | Y | +| SIP-Forking-Indication | 523 | 5.3.22 | Enumerated | M,V | P | | | Y | +| Sponsor-Identity | 531 | 5.3.28 | UTF8String | V | P | | M | Y | +| Sponsored-Connectivity-Data | 530 | 5.3.27 | Grouped | V | P | | M | Y | +| AF-Signalling-Protocol | 529 | 5.3.26 | Enumerated | V | P | | M | Y | +| Required-Access-Info | 536 | 5.3.34 | Enumerated | V | P | | M | Y | +| Rx-Request-Type | 533 | 5.3.31 | Enumerated | V | P | | M | Y | +| IP-Domain-Id | 537 | 5.3.35 | OctetString | V | P | | M | Y | +| # 3GPP 29.229-b20 (11.2.0 2012.12.21) | | | | | | | | | +| Associated-Identities | 632 | 6.3.33 | Grouped | V | | | M | N | +| Associated-Registered-Identities | 647 | 6.3.50 | Grouped | V | | | M | N | +| Call-ID-SIP-Header | 643 | 6.3.49.1 | OctetString | V | | | M | N | +| Charging-Information | 618 | 6.3.19 | Grouped | M,V | | | | N | +| Confidentiality-Key | 625 | 6.3.27 | OctetString | M,V | | | | N | +| Contact | 641 | 6.3.48 | OctetString | V | | | M | N | +| Deregistration-Reason | 615 | 6.3.16 | Grouped | M,V | | | | N | +| Digest-Algorithm | 111 | 6.3.39 | UTF8String | M | | | V | N | +| Digest-HA1 | 121 | 6.3.41 | UTF8String | M | | | V | N | +| Digest-QoP | 110 | 6.3.40 | UTF8String | M | | | V | N | +| Digest-Realm | 104 | 6.3.37 | UTF8String | M | | | V | N | +| Feature-List | 630 | 6.3.31 | Unsigned32 | V | | | M | N | +| Feature-List-ID | 629 | 6.3.30 | Unsigned32 | V | | | M | N | +| From-SIP-Header | 644 | 6.3.49.2 | OctetString | V | | | M | N | +| Identity-with-Emergency-Registration | 651 | 6.3.57 | Grouped | V | | | M | N | +| Integrity-Key | 626 | 6.3.28 | OctetString | M,V | | | | N | +| LIA-Flags | 653 | 6.3.59 | Unsigned32 | V | | | M | N | +| Loose-Route-Indication | 638 | 6.3.45 | Enumerated | V | | | M | N | +| Mandatory-Capability | 604 | 6.3.5 | Unsigned32 | M,V | | | | N | +| Multiple-Registration-Indication | 648 | 6.3.51 | Enumerated | V | | | M | N | +| Optional-Capability | 605 | 6.3.6 | Unsigned32 | M,V | | | | N | +| Originating-Request | 633 | 6.3.34 | Enumerated | M,V | | | | N | +| Path | 640 | 6.3.47 | OctetString | V | | | M | N | +| Primary-Charging-Collection-Function-Name | 621 | 6.3.22 | DiameterURI | M,V | | | | N | +| Primary-Event-Charging-Function-Name | 619 | 6.3.20 | DiameterURI | M,V | | | | N | +| Priviledged-Sender-Indication | 652 | 6.3.58 | Enumerated | V | | | M | N | +| Public-Identity | 601 | 6.3.2 | UTF8String | M,V | | | | N | +| Reason-Code | 616 | 6.3.17 | Enumerated | M,V | | | | N | +| Reason-Info | 617 | 6.3.18 | UTF8String | M,V | | | | N | +| Record-Route | 646 | 6.3.49.4 | OctetString | V | | | M | N | +| Restoration-Info | 649 | 6.3.52 | Grouped | V | | | M | N | +| SCSCF-Restoration-Info | 639 | 6.3.46 | Grouped | V | | | M | N | +| SIP-Auth-Data-Item | 612 | 6.3.13 | Grouped | M,V | | | | N | +| SIP-Authenticate | 609 | 6.3.10 | OctetString | M,V | | | | N | +| SIP-Authentication-Context | 611 | 6.3.12 | OctetString | M,V | | | | N | +| SIP-Authentication-Scheme | 608 | 6.3.9 | UTF8String | M,V | | | | N | +| SIP-Authorization | 610 | 6.3.11 | OctetString | M,V | | | | N | +| SIP-Digest-Authenticate | 635 | 6.3.36 | Grouped | V | | | M | N | +| SIP-Item-Number | 613 | 6.3.14 | Unsigned32 | M,V | | | | N | +| SIP-Number-Auth-Items | 607 | 6.3.8 | Unsigned32 | M,V | | | | N | +| Secondary-Charging-Collection-Function-Name | 622 | 6.3.23 | DiameterURI | M,V | | | | N | +| Secondary-Event-Charging-Function-Name | 620 | 6.3.21 | DiameterURI | M,V | | | | N | +| Server-Assignment-Type | 614 | 6.3.15 | Enumerated | M,V | | | | N | +| Server-Capabilities | 603 | 6.3.4 | Grouped | M,V | | | | N | +| Server-Name | 602 | 6.3.3 | UTF8String | M,V | | | | N | +| Session-Priority | 650 | 6.3.56 | Enumerated | V | | | M | N | +| Subscription-Info | 642 | 6.3.49 | Grouped | V | | | M | N | +| Supported-Applications | 631 | 6.3.32 | Grouped | V | | | M | N | +| Supported-Features | 628 | 6.3.29 | Grouped | V | M | | | N | +| To-SIP-Header | 645 | 6.3.49.3 | OctetString | V | | | M | N | +| UAR-Flags | 637 | 6.3.44 | Unsigned32 | V | | | M | N | +| User-Authorization-Type | 623 | 6.3.24 | Enumerated | M,V | | | | N | +| User-Data | 606 | 6.3.7 | OctetString | M,V | | | | N | +| User-Data-Already-Available | 624 | 6.3.26 | Enumerated | M,V | | | | N | +| Visited-Network-Identifier | 600 | 6.3.1 | OctetString | M,V | | | | N | +| Wildcarded-Public-Identity | 634 | 6.3.35 | UTF8String | V | | | M | N | +| # 3GPP 32.299-b60 (11.6.0 2012.12.21) | | | | | | | | | +| AF-Correlation-Information | 1276 | | Grouped | M,V | P | | | N | +| Access-Network-Information | 1263 | | OctetString | M,V | P | | | N | +| Access-Transfer-Information | 2709 | | Grouped | M,V | P | | | N | +| Access-Transfer-Type | 2710 | | Enumerated | M,V | P | | | N | +| Account-Expiration | 2309 | | Time | M,V | P | | | N | +| Accumulated-Cost | 2052 | | Grouped | M,V | P | | | N | +| Adaptations | 1217 | | Enumerated | M,V | P | | | N | +| Additional-Content-Information | 1207 | | Grouped | M,V | P | | | N | +| Additional-Type-Information | 1205 | | UTF8String | M,V | P | | | N | +| Address-Data | 897 | | UTF8String | M,V | P | | | N | +| Address-Domain | 898 | | Grouped | M,V | P | | | N | +| Address-Type | 899 | | Enumerated | M,V | P | | | N | +| Addressee-Type | 1208 | | Enumerated | M,V | P | | | N | +| Alternate-Charged-Party-Address | 1280 | | UTF8String | V.M | P | | | N | +| AoC-Cost-Information | 2053 | | Grouped | M,V | P | | | N | +| AoC-Format | 2310 | | Enumerated | M,V | P | | | N | +| AoC-Information | 2054 | | Grouped | V.M | P | | | N | +| AoC-Request-Type | 2055 | | Enumerated | V.M | P | | | N | +| AoC-Service | 2311 | | Grouped | M,V | P | | | N | +| AoC-Service-Obligatory-Type | 2312 | | Enumerated | M,V | P | | | N | +| AoC-Service-Type | 2313 | | Enumerated | M,V | P | | | N | +| AoC-Subscription-Information | 2314 | | Grouped | M,V | P | | | N | +| Applic-ID | 1218 | | UTF8String | M,V | P | | | N | +| Application-Server | 836 | | UTF8String | M,V | P | | | N | +| Application-Server-Information | 850 | | Grouped | M,V | P | | | N | +| Application-Provided-Called-Party-Address | 837 | | UTF8String | M,V | P | | | N | +| Associated-Party-Address | 2035 | | UTF8String | M,V | P | | | N | +| Associated-URI | 856 | | UTF8String | M,V | P | | | N | +| Aux-Applic-Info | 1219 | | UTF8String | M,V | P | | | N | +| Base-Time-Interval | 1265 | | Unsigned32 | M,V | P | | | N | +| Bearer-Service | 854 | | OctetString | M,V | P | | | N | +| CG-Address | 846 | | Address | M,V | P | | | Y | +| CSG-Access-Mode | 2317 | | Enumerated | M,V | P | | | N | +| CSG-Membership-Indication | 2318 | | Enumerated | M,V | P | | | N | +| CUG-Information | 2304 | | OctetString | M,V | P | | | N | +| Called-Asserted-Identity | 1250 | | UTF8String | M,V | P | | | N | +| Called-Party-Address | 832 | | UTF8String | M,V | P | | | N | +| Calling-Party-Address | 831 | | UTF8String | M,V | P | | | N | +| Carrier-Select-Routing-Information | 2023 | | UTF8String | M,V | P | | | N | +| Cause-Code | 861 | | Integer32 | M,V | P | | | N | +| Change-Condition | 2037 | | Integer32 | M,V | P | | | N | +| Change-Time | 2038 | | Time | M,V | P | | | N | +| Charge-Reason-Code | 2118 | | Enumerated | M,V | P | | | N | +| Charged-Party | 857 | | UTF8String | M,V | P | | | N | +| Charging-Characteristics-Selection-Mode | 2066 | | Enumerated | M,V | P | | | N | +| Class-Identifier | 1214 | | Enumerated | M,V | P | | | N | +| Client-Address | 2018 | | Address | M,V | P | | | N | +| Content-Class | 1220 | | Enumerated | M,V | P | | | N | +| Content-Disposition | 828 | | UTF8String | M,V | P | | | N | +| Content-Length | 827 | | Unsigned32 | M,V | P | | | N | +| Content-Size | 1206 | | Unsigned32 | M,V | P | | | N | +| Content-Type | 826 | | UTF8String | M,V | P | | | N | +| Current-Tariff | 2056 | | Grouped | M,V | P | | | N | +| DRM-Content | 1221 | | Enumerated | M,V | P | | | N | +| Data-Coding-Scheme | 2001 | | Integer32 | M,V | P | | | N | +| Deferred-Location-Event-Type | 1230 | | UTF8String | M,V | P | | | N | +| Delivery-Report-Requested | 1216 | | Enumerated | M,V | P | | | N | +| Destination-Interface | 2002 | | Grouped | M,V | P | | | N | +| Diagnostics | 2039 | | Integer32 | M,V | P | | | N | +| Domain-Name | 1200 | | UTF8String | M,V | P | | | N | +| Dynamic-Address-Flag | 2051 | | Enumerated | M,V | P | | | N | +| Dynamic-Address-Flag-Extension | 2068 | | Enumerated | M,V | P | | | N | +| Early-Media-Description | 1272 | | Grouped | M,V | P | | | N | +| Envelope | 1266 | | Grouped | M,V | P | | | N | +| Envelope-End-Time | 1267 | | Time | M,V | P | | | N | +| Envelope-Reporting | 1268 | | Enumerated | M,V | P | | | N | +| Envelope-Start-Time | 1269 | | Time | M,V | P | | | N | +| Event | 825 | | UTF8String | M,V | P | | | N | +| Event-Charging-TimeStamp | 1258 | | Time | M,V | P | | | N | +| Event-Type | 823 | | Grouped | M,V | P | | | N | +| Expires | 888 | | Unsigned32 | M,V | P | | | N | +| File-Repair-Supported | 1224 | | Enumerated | M,V | P | | | Y | +| From-Address | 2708 | | UTF8String | M,V | P | | | N | +| GGSN-Address | 847 | | Address | M,V | P | | | N | +| IMS-Application-Reference-Identifier | 2601 | | UTF8String | M,V | P | | | N | +| IMS-Charging-Identifier | 841 | | UTF8String | M,V | P | | | N | +| IMS-Communication-Service-Identifier | 1281 | | UTF8String | M,V | P | | | N | +| IMS-Emergency-Indicator | 2322 | | Enumerated | M,V | P | | | N | +| IMS-Information | 876 | | Grouped | M,V | P | | | N | +| IMSI-Unauthenticated-Flag | 2308 | | Enumerated | M,V | P | | | N | +| IP-Realm-Default-Indication | 2603 | | Enumerated | M,V | P | | | N | +| Incoming-Trunk-Group-Id | 852 | | UTF8String | M,V | P | | | N | +| Incremental-Cost | 2062 | | Grouped | M,V | P | | | N | +| Initial-IMS-Charging-Identifier | 2321 | | UTF8String | M,V | P | | | N | +| Inter-Operator-Identifier | 838 | | Grouped | M,V | P | | | N | +| Interface-Id | 2003 | | UTF8String | M,V | P | | | N | +| Interface-Port | 2004 | | UTF8String | M,V | P | | | N | +| Interface-Text | 2005 | | UTF8String | M,V | P | | | N | +| Interface-Type | 2006 | | Enumerated | M,V | P | | | N | +| LCS-APN | 1231 | | UTF8String | M,V | P | | | N | +| LCS-Client-Dialed-By-MS | 1233 | | UTF8String | M,V | P | | | N | +| LCS-Client-External-ID | 1234 | | UTF8String | M,V | P | | | N | +| LCS-Client-Id | 1232 | | Grouped | M,V | P | | | N | +| LCS-Client-Name | 1235 | | Grouped | M,V | P | | | N | +| LCS-Client-Type | 1241 | | Enumerated | M,V | P | | | N | +| LCS-Data-Coding-Scheme | 1236 | | UTF8String | M,V | P | | | N | +| LCS-Format-Indicator | 1237 | | Enumerated | M,V | P | | | N | +| LCS-Information | 878 | | Grouped | M,V | P | | | N | +| LCS-Name-String | 1238 | | UTF8String | M,V | P | | | N | +| LCS-Requestor-Id | 1239 | | Grouped | M,V | P | | | N | +| LCS-Requestor-Id-String | 1240 | | UTF8String | M,V | P | | | N | +| Local-GW-Inserted-Indication | 2604 | | Enumerated | M,V | P | | | N | +| Local-Sequence-Number | 2063 | | Unsigned32 | M,V | P | | | N | +| Location-Estimate | 1242 | | OctetString | M,V | P | | | N | +| Location-Estimate-Type | 1243 | | Enumerated | M,V | P | | | N | +| Location-Type | 1244 | | Grouped | M,V | P | | | N | +| Low-Balance-Indication | 2020 | | Enumerated | M,V | P | | | N | +| Low-Priority-Indicator | 2602 | | Enumerated | M,V | P | | | N | +| MBMS GW-Address | 2307 | | Address | M,V | P | | | N | +| MBMS-Information | 880 | | Grouped | M,V | P | | | N | +| MBMS-User-Service-Type | 1225 | | Enumerated | M,V | P | | | Y | +| MM-Content-Type | 1203 | | Grouped | M,V | P | | | N | +| MMBox-Storage-Requested | 1248 | | Enumerated | M,V | P | | | N | +| MMS-Information | 877 | | Grouped | M,V | P | | | N | +| MMTel-Information | 2030 | | Grouped | M,V | P | | | N | +| MMTel-SService-Type | 2031 | | Unsigned32 | M,V | P | | | N | +| Media-Initiator-Flag | 882 | | Enumerated | M,V | P | | | N | +| Media-Initiator-Party | 1288 | | UTF8String | M,V | P | | | N | +| Message-Body | 889 | | Grouped | M,V | P | | | N | +| Message-Class | 1213 | | Grouped | M,V | P | | | N | +| Message-ID | 1210 | | UTF8String | M,V | P | | | N | +| Message-Size | 1212 | | Unsigned32 | M,V | P | | | N | +| Message-Type | 1211 | | Enumerated | M,V | P | | | N | +| NNI-Information | 2703 | | Grouped | M,V | P | | | N | +| NNI-Type | 2704 | | Enumerated | M,V | P | | | N | +| Neighbour-Node-Address | 2705 | | Address | M,V | P | | | N | +| Next-Tariff | 2057 | | Grouped | V/M | P | | | N | +| Node-Functionality | 862 | | Enumerated | M,V | P | | | N | +| Node-Id | 2064 | | UTF8String | M,V | P | | | N | +| Number-Of-Diversions | 2034 | | Unsigned32 | M,V | P | | | N | +| Number-Of-Messages-Sent | 2019 | | Unsigned32 | M,V | P | | | N | +| Number-Of-Participants | 885 | | Unsigned32 | M,V | P | | | N | +| Number-Of-Received-Talk-Bursts | 1282 | | Unsigned32 | M,V | P | | | N | +| Number-Of-Talk-Bursts | 1283 | | Unsigned32 | M,V | P | | | N | +| Number-Portability-Routing-Information | 2024 | | UTF8String | M,V | P | | | N | +| Offline-Charging | 1278 | | Grouped | M,V | P | | | N | +| Online-Charging-Flag | 2303 | | Enumerated | M,V | P | | | N | +| Originating-IOI | 839 | | UTF8String | M,V | P | | | N | +| Originator | 864 | | Enumerated | M,V | P | | | N | +| Originator-Address | 886 | | Grouped | M,V | P | | | N | +| Originator-Interface | 2009 | | Grouped | M,V | P | | | N | +| Originator-Received-Address | 2027 | | Grouped | M,V | P | | | N | +| Originator-SCCP-Address | 2008 | | Address | M,V | P | | | N | +| Outgoing-Session-Id | 2320 | | UTF8String | M,V | P | | | N | +| Outgoing-Trunk-Group-Id | 853 | | UTF8String | M,V | P | | | N | +| PDG-Address | 895 | | Address | M,V | P | | | N | +| PDG-Charging-Id | 896 | | Unsigned32 | M,V | P | | | N | +| PDN-Connection-Charging-ID | 2050 | | Unsigned32 | M,V | P | | | N | +| PDP-Address | 1227 | | Address | M,V | P | | | Y | +| PDP-Address-Prefix-Length | 2606 | | Unsigned32 | M,V | P | | | Y | +| PDP-Context-Type | 1247 | | Enumerated | M,V | P | | | N | +| PS-Append-Free-Format-Data | 867 | | Enumerated | M,V | P | | | N | +| PS-Free-Format-Data | 866 | | OctetString | M,V | P | | | N | +| PS-Furnish-Charging-Information | 865 | | Grouped | M,V | P | | | N | +| PS-Information | 874 | | Grouped | M,V | P | | | N | +| Participant-Access-Priority | 1259 | | Enumerated | M,V | P | | | N | +| Participant-Action-Type | 2049 | | Enumerated | M,V | P | | | N | +| Participant-Group | 1260 | | Grouped | M,V | P | | | N | +| Participants-Involved | 887 | | UTF8String | M,V | P | | | N | +| PoC-Change-Condition | 1261 | | Enumerated | M,V | P | | | N | +| PoC-Change-Time | 1262 | | Time | M,V | P | | | N | +| PoC-Controlling-Address | 858 | | UTF8String | M,V | P | | | N | +| PoC-Event-Type | 2025 | | Enumerated | M,V | P | | | N | +| PoC-Group-Name | 859 | | UTF8String | M,V | P | | | N | +| PoC-Information | 879 | | Grouped | M,V | P | | | N | +| PoC-Server-Role | 883 | | Enumerated | M,V | P | | | N | +| PoC-Session-Id | 1229 | | UTF8String | M,V | P | | | N | +| PoC-Session-Initiation-type | 1277 | | Enumerated | M,V | P | | | N | +| PoC-Session-Type | 884 | | Enumerated | M,V | P | | | N | +| PoC-User-Role | 1252 | | Grouped | M,V | P | | | N | +| PoC-User-Role-IDs | 1253 | | UTF8String | M,V | P | | | N | +| PoC-User-Role-info-Units | 1254 | | Enumerated | M,V | P | | | N | +| Positioning-Data | 1245 | | UTF8String | M,V | P | | | N | +| Preferred-AoC-Currency | 2315 | | Unsigned32 | M,V | P | | | N | +| Priority | 1209 | | Enumerated | M,V | P | | | N | +| Quota-Consumption-Time | 881 | | Unsigned32 | M,V | P | | | N | +| Quota-Holding-Time | 871 | | Unsigned32 | M,V | P | | | N | +| Rate-Element | 2058 | | Grouped | M,V | P | | | N | +| Read-Reply-Report-Requested | 1222 | | Enumerated | M,V | P | | | N | +| Real-Time-Tariff-Information | 2305 | | Grouped | M,V | P | | | N | +| Received-Talk-Burst-Time | 1284 | | Unsigned32 | M,V | P | | | N | +| Received-Talk-Burst-Volume | 1285 | | Unsigned32 | M,V | P | | | N | +| Recipient-Address | 1201 | | Grouped | M,V | P | | | N | +| Recipient-Info | 2026 | | Grouped | M,V | P | | | N | +| Recipient-Received-Address | 2028 | | Grouped | M,V | P | | | N | +| Recipient-SCCP-Address | 2010 | | Address | M,V | P | | | N | +| Refund-Information | 2022 | | OctetString | M,V | P | | | N | +| Relationship-Mode | 2706 | | Enumerated | M,V | P | | | N | +| Remaining-Balance | 2021 | | Grouped | M,V | P | | | N | +| Reply-Applic-ID | 1223 | | UTF8String | M,V | P | | | N | +| Reply-Path-Requested | 2011 | | Enumerated | M,V | P | | | N | +| Reporting-Reason | 872 | | Enumerated | M,V | P | | | N | +| Requested-Party-Address | 1251 | | UTF8String | M,V | P | | | N | +| Role-Of-Node | 829 | | Enumerated | M,V | P | | | N | +| SDP-Answer-Timestamp | 1275 | | Time | M,V | P | | | N | +| SDP-Media-Component | 843 | | Grouped | M,V | P | | | N | +| SDP-Media-Description | 845 | | UTF8String | M,V | P | | | N | +| SDP-Media-Name | 844 | | UTF8String | M,V | P | | | N | +| SDP-Offer-Timestamp | 1274 | | Time | M,V | P | | | N | +| SDP-Session-Description | 842 | | UTF8String | M,V | P | | | N | +| SDP-TimeStamps | 1273 | | Grouped | M,V | P | | | N | +| SDP-Type | 2036 | | Enumerated | M,V | P | | | N | +| SGSN-Address | 1228 | | Address | M,V | P | | | N | +| SGW-Address | 2067 | | Address | M,V | P | | | N | +| SGW-Change | 2065 | | Enumerated | M,V | P | | | N | +| SIP-Method | 824 | | UTF8String | M,V | P | | | N | +| SIP-Request-Timestamp | 834 | | Time | M,V | P | | | N | +| SIP-Request-Timestamp-Fraction | 2301 | | Unsigned32 | M,V | P | | | N | +| SIP-Response-Timestamp | 835 | | Time | M,V | P | | | N | +| SIP-Response-Timestamp-Fraction | 2302 | | Unsigned32 | M,V | P | | | N | +| SM-Discharge-Time | 2012 | | Time | M,V | P | | | N | +| SM-Message-Type | 2007 | | Enumerated | M,V | P | | | N | +| SM-Protocol-ID | 2013 | | OctetString | M,V | P | | | N | +| SM-Service-Type | 2029 | | Enumerated | M,V | P | | | N | +| SM-Status | 2014 | | OctetString | M,V | P | | | N | +| SM-User-Data-Header | 2015 | | OctetString | M,V | P | | | N | +| SMS-Information | 2000 | | Grouped | M,V | P | | | N | +| SMS-Node | 2016 | | Enumerated | M,V | P | | | N | +| SMSC-Address | 2017 | | Address | M,V | P | | | N | +| Scale-Factor | 2059 | | Grouped | M,V | P | | | N | +| Served-Party-IP-Address | 848 | | Address | M,V | P | | | N | +| Service-Data-Container | 2040 | | Grouped | M,V | P | | | N | +| Service-Id | 855 | | UTF8String | M,V | P | | | N | +| Service-Information | 873 | | Grouped | M,V | P | | | N | +| Service-Mode | 2032 | | Unsigned32 | M,V | P | | | N | +| Service-Specific-Data | 863 | | UTF8String | M,V | P | | | N | +| Service-Specific-Info | 1249 | | Grouped | M,V | P | | | N | +| Service-Specific-Type | 1257 | | Unsigned32 | M,V | P | | | N | +| Serving-Node-Type | 2047 | | Enumerated | M,V | P | | | N | +| Session-Direction | 2707 | | Enumerated | M,V | P | | | N | +| Start-Time | 2041 | | Time | M,V | P | | | N | +| Status | 2702 | | Enumerated | M,V | P | | | N | +| Stop-Time | 2042 | | Time | M,V | P | | | N | +| Submission-Time | 1202 | | Time | M,V | P | | | N | +| Subscriber-Role | 2033 | | Enumerated | M,V | P | | | N | +| Supplementary-Service | 2048 | | Grouped | M,V | P | | | N | +| Talk-Burst-Exchange | 1255 | | Grouped | M,V | P | | | N | +| Talk-Burst-Time | 1286 | | Unsigned32 | M,V | P | | | N | +| Talk-Burst-Volume | 1287 | | Unsigned32 | M,V | P | | | N | +| Tariff-Information | 2060 | | Grouped | M,V | P | | | N | +| Tariff-XML | 2306 | | UTF8String | M,V | P | | | N | +| Terminating-IOI | 840 | | UTF8String | M,V | P | | | N | +| Time-First-Usage | 2043 | | Time | M,V | P | | | N | +| Time-Last-Usage | 2044 | | Time | M,V | P | | | N | +| Time-Quota-Mechanism | 1270 | | Grouped | M,V | P | | | N | +| Time-Quota-Threshold | 868 | | Unsigned32 | M,V | P | | | N | +| Time-Quota-Type | 1271 | | Enumerated | M,V | P | | | N | +| Time-Stamps | 833 | | Grouped | M,V | P | | | N | +| Time-Usage | 2045 | | Unsigned32 | M,V | P | | | N | +| Token-Text | 1215 | | UTF8String | M,V | P | | | N | +| Traffic-Data-Volumes | 2046 | | Grouped | M,V | P | | | N | +| Transcoder-Inserted-Indication | 2605 | | Enumerated | M,V | P | | | N | +| Transit-IOI-List | 2701 | | UTF8String | M,V | P | | | N | +| Trigger | 1264 | | Grouped | M,V | P | | | N | +| Trigger-Type | 870 | | Enumerated | M,V | P | | | N | +| Trunk-Group-Id | 851 | | Grouped | M,V | P | | | N | +| Type-Number | 1204 | | Enumerated | M,V | P | | | N | +| Unit-Cost | 2061 | | Grouped | M,V | P | | | N | +| Unit-Quota-Threshold | 1226 | | Unsigned32 | M,V | P | | | N | +| User-CSG-Information | 2319 | | Grouped | M,V | P | | | N | +| User-Participating-Type | 1279 | | Enumerated | M,V | P | | | N | +| User-Session-Id | 830 | | UTF8String | M,V | P | | | N | +| Volume-Quota-Threshold | 869 | | Unsigned32 | M,V | P | | | N | +| WAG-Address | 890 | | Address | M,V | P | | | N | +| WAG-PLMN-Id | 891 | | OctetString | M,V | P | | | N | +| WLAN-Information | 875 | | Grouped | M,V | P | | | N | +| WLAN-Radio-Container | 892 | | Grouped | M,V | P | | | N | +| WLAN-Session-Id | 1246 | | UTF8String | M,V | P | | | N | +| WLAN-Technology | 893 | | Unsigned32 | M,V | P | | | N | +| WLAN-UE-Local-IPAddress | 894 | | Address | M,V | P | | | N | +| # 3GPP 29.272-c00 (12.0.0 2013.03.13) | | | | | | | | | +| Subscription-Data | 1400 | 7.3.2 | Grouped | M,V | | | | N | +| Terminal-Information | 1401 | 7.3.3 | Grouped | M,V | | | | N | +| IMEI | 1402 | 7.3.4 | UTF8String | M,V | | | | N | +| Software-Version | 1403 | 7.3.5 | UTF8String | M,V | | | | N | +| QoS-Subscribed | 1404 | 7.3.77 | OctetString | M,V | | | | N | +| ULR-Flags | 1405 | 7.3.7 | Unsigned32 | M,V | | | | N | +| ULA-Flags | 1406 | 7.3.8 | Unsigned32 | M,V | | | | N | +| Visited-PLMN-Id | 1407 | 7.3.9 | OctetString | M,V | | | | N | +| Requested-EUTRAN-Authentication-Info | 1408 | 7.3.11 | Grouped | M,V | | | | N | +| Requested-UTRAN- GERAN-Authentication-Info | 1409 | 7.3.12 | Grouped | M,V | | | | N | +| Number-Of-Requested-Vectors | 1410 | 7.3.14 | Unsigned32 | M,V | | | | N | +| Re-Synchronization-Info | 1411 | 7.3.15 | OctetString | M,V | | | | N | +| Immediate-Response-Preferred | 1412 | 7.3.16 | Unsigned32 | M,V | | | | N | +| Authentication-Info | 1413 | 7.3.17 | Grouped | M,V | | | | N | +| E-UTRAN-Vector | 1414 | 7.3.18 | Grouped | M,V | | | | N | +| UTRAN-Vector | 1415 | 7.3.19 | Grouped | M,V | | | | N | +| GERAN-Vector | 1416 | 7.3.20 | Grouped | M,V | | | | N | +| Network-Access-Mode | 1417 | 7.3.21 | Enumerated | M,V | | | | N | +| HPLMN-ODB | 1418 | 7.3.22 | Unsigned32 | M,V | | | | N | +| Item-Number | 1419 | 7.3.23 | Unsigned32 | M,V | | | | N | +| Cancellation-Type | 1420 | 7.3.24 | Enumerated | M,V | | | | N | +| DSR-Flags | 1421 | 7.3.25 | Unsigned32 | M,V | | | | N | +| DSA-Flags | 1422 | 7.3.26 | Unsigned32 | M,V | | | | N | +| Context-Identifier | 1423 | 7.3.27 | Unsigned32 | M,V | | | | N | +| Subscriber-Status | 1424 | 7.3.29 | Enumerated | M,V | | | | N | +| Operator-Determined-Barring | 1425 | 7.3.30 | Unsigned32 | M,V | | | | N | +| Access-Restriction-Data | 1426 | 7.3.31 | Unsigned32 | M,V | | | | N | +| APN-OI-Replacement | 1427 | 7.3.32 | UTF8String | M,V | | | | N | +| All-APN-Configurations-Included-Indicator | 1428 | 7.3.33 | Enumerated | M,V | | | | N | +| APN-Configuration-Profile | 1429 | 7.3.34 | Grouped | M,V | | | | N | +| APN-Configuration | 1430 | 7.3.35 | Grouped | M,V | | | | N | +| EPS-Subscribed-QoS-Profile | 1431 | 7.3.37 | Grouped | M,V | | | | N | +| VPLMN-Dynamic-Address-Allowed | 1432 | 7.3.38 | Enumerated | M,V | | | | N | +| STN-SR | 1433 | 7.3.39 | OctetString | M,V | | | | N | +| Alert-Reason | 1434 | 7.3.83 | Enumerated | M,V | | | | N | +| AMBR | 1435 | 7.3.41 | Grouped | M,V | | | | N | +| CSG-Subscription-Data | 1436 | 7.3.78 | Grouped | M. V | | | | N | +| CSG-Id | 1437 | 7.3.79 | Unsigned32 | M,V | | | | N | +| PDN-GW-Allocation-Type | 1438 | 7.3.44 | Enumerated | M,V | | | | N | +| Expiration-Date | 1439 | 7.3.80 | Time | M,V | | | | N | +| RAT-Frequency-Selection-Priority-ID | 1440 | 7.3.46 | Unsigned32 | M,V | | | | N | +| IDA-Flags | 1441 | 7.3.47 | Unsigned32 | M,V | | | | N | +| PUA-Flags | 1442 | 7.3.48 | Unsigned32 | M,V | | | | N | +| NOR-Flags | 1443 | 7.3.49 | Unsigned32 | M,V | | | | N | +| User-Id | 1444 | 7.3.50 | UTF8String | V | | | M | N | +| Equipment-Status | 1445 | 7.3.51 | Enumerated | M,V | | | | N | +| Regional-Subscription-Zone-Code | 1446 | 7.3.52 | OctetString | M,V | | | | N | +| RAND | 1447 | 7.3.53 | OctetString | M,V | | | | N | +| XRES | 1448 | 7.3.54 | OctetString | M,V | | | | N | +| AUTN | 1449 | 7.3.55 | OctetString | M,V | | | | N | +| KASME | 1450 | 7.3.56 | OctetString | M,V | | | | N | +| Trace-Collection-Entity | 1452 | 7.3.98 | Address | M,V | | | | N | +| Kc | 1453 | 7.3.59 | OctetString | M,V | | | | N | +| SRES | 1454 | 7.3.60 | OctetString | M,V | | | | N | +| PDN-Type | 1456 | 7.3.62 | Enumerated | M,V | | | | N | +| Roaming-Restricted-Due-To-Unsupported-Feature | 1457 | 7.3.81 | Enumerated | M,V | | | | N | +| Trace-Data | 1458 | 7.3.63 | Grouped | M,V | | | | N | +| Trace-Reference | 1459 | 7.3.64 | OctetString | M,V | | | | N | +| Trace-Depth | 1462 | 7.3.67 | Enumerated | M,V | | | | N | +| Trace-NE-Type-List | 1463 | 7.3.68 | OctetString | M,V | | | | N | +| Trace-Interface-List | 1464 | 7.3.69 | OctetString | M,V | | | | N | +| Trace-Event-List | 1465 | 7.3.70 | OctetString | M,V | | | | N | +| OMC-Id | 1466 | 7.3.71 | OctetString | M,V | | | | N | +| GPRS-Subscription-Data | 1467 | 7.3.72 | Grouped | M,V | | | | N | +| Complete-Data-List-Included-Indicator | 1468 | 7.3.73 | Enumerated | M,V | | | | N | +| PDP-Context | 1469 | 7.3.74 | Grouped | M,V | | | | N | +| PDP-Type | 1470 | 7.3.75 | OctetString | M,V | | | | N | +| 3GPP2-MEID | 1471 | 7.3.6 | OctetString | M,V | | | | N | +| Specific-APN-Info | 1472 | 7.3.82 | Grouped | M,V | | | | N | +| LCS-Info | 1473 | 7.3.84 | Grouped | M,V | | | | N | +| GMLC-Number | 1474 | 7.3.85 | OctetString | M,V | | | | N | +| LCS-PrivacyException | 1475 | 7.3.86 | Grouped | M,V | | | | N | +| SS-Code | 1476 | 7.3.87 | OctetString | M,V | | | | N | +| SS-Status | 1477 | 7.3.88 | Grouped | M,V | | | | N | +| Notification-To-UE-User | 1478 | 7.3.89 | Enumerated | M,V | | | | N | +| External-Client | 1479 | 7.3.90 | Grouped | M,V | | | | N | +| Client-Identity | 1480 | 7.3.91 | OctetString | M,V | | | | N | +| GMLC-Restriction | 1481 | 7.3.92 | Enumerated | M,V | | | | N | +| PLMN-Client | 1482 | 7.3.93 | Enumerated | M,V | | | | N | +| Service-Type | 1483 | 7.3.94 | Grouped | M,V | | | | N | +| ServiceTypeIdentity | 1484 | 7.3.95 | Unsigned32 | M,V | | | | N | +| MO-LR | 1485 | 7.3.96 | Grouped | M,V | | | | N | +| Teleservice-List | 1486 | 7.3.99 | Grouped | M,V | | | | N | +| TS-Code | 1487 | 7.3.100 | OctetString | M,V | | | | N | +| Call-Barring-Infor-List | 1488 | 7.3.101 | Grouped | M,V | | | | N | +| SGSN-Number | 1489 | 7.3.102 | OctetString | M,V | | | | N | +| IDR-Flags | 1490 | 7.3.103 | Unsigned32 | M,V | | | | N | +| ICS-Indicator | 1491 | 7.3.104 | Enumerated | V | | | M | N | +| IMS-Voice-Over-PS-Sessions-Supported | 1492 | 7.3.106 | Enumerated | V | | | M | N | +| Homogeneous-Support-of-IMS-Voice-Over-PS-Sessions | 1493 | 7.3.107 | Enumerated | V | | | M | N | +| Last-UE-Activity-Time | 1494 | 7.3.108 | Time | V | | | M | N | +| EPS-User-State | 1495 | 7.3.110 | Grouped | V | | | M | N | +| EPS-Location-Information | 1496 | 7.3.111 | Grouped | V | | | M | N | +| MME-User-State | 1497 | 7.3.112 | Grouped | V | | | M | N | +| SGSN-User-State | 1498 | 7.3.113 | Grouped | V | | | M | N | +| User-State | 1499 | 7.3.114 | Enumerated | V | | | M | N | +| MME-Location Information | 1600 | 7.3.115 | Grouped | V | | | M | N | +| SGSN-Location-Information | 1601 | 7.3.116 | Grouped | V | | | M | N | +| E-UTRAN-Cell-Global-Identity | 1602 | 7.3.117 | OctetString | V | | | M | N | +| Tracking-Area-Identity | 1603 | 7.3.118 | OctetString | V | | | M | N | +| Cell-Global-Identity | 1604 | 7.3.119 | OctetString | V | | | M | N | +| Routing-Area-Identity | 1605 | 7.3.120 | OctetString | V | | | M | N | +| Location-Area-Identity | 1606 | 7.3.121 | OctetString | V | | | M | N | +| Service-Area-Identity | 1607 | 7.3.122 | OctetString | V | | | M | N | +| Geographical-Information | 1608 | 7.3.123 | OctetString | V | | | M | N | +| Geodetic-Information | 1609 | 7.3.124 | OctetString | V | | | M | N | +| Current-Location-Retrieved | 1610 | 7.3.125 | Enumerated | V | | | M | N | +| Age-Of-Location-Information | 1611 | 7.3.126 | Unsigned32 | V | | | M | N | +| Active-APN | 1612 | 7.3.127 | Grouped | V | | | M | N | +| Error-Diagnostic | 1614 | 7.3.128 | Enumerated | V | | | M | N | +| Ext-PDP-Address | 1621 | 7.3.129 | Address | V | | | M | N | +| UE-SRVCC-Capability | 1615 | 7.3.130 | Enumerated | V | | | M | N | +| MPS-Priority | 1616 | 7.3.131 | Unsigned32 | V | | | M | N | +| VPLMN-LIPA-Allowed | 1617 | 7.3.132 | Enumerated | V | | | M | N | +| LIPA-Permission | 1618 | 7.3.133 | Enumerated | V | | | M | N | +| Subscribed-Periodic-RAU-TAU-Timer | 1619 | 7.3.134 | Unsigned32 | V | | | M | N | +| Ext-PDP-Type | 1620 | 7.3.75A | OctetString | V | | | M | N | +| SIPTO-Permission | 1613 | 7.3.135 | Enumerated | V | | | M | N | +| MDT-Configuration | 1622 | 7.3.136 | Grouped | V | | | M | N | +| Job-Type | 1623 | 7.3.137 | Enumerated | V | | | M | N | +| Area-Scope | 1624 | 7.3.138 | Grouped | V | | | M | N | +| List-Of-Measurements | 1625 | 7.3.139 | Unsigned32 | V | | | M | N | +| Reporting-Trigger | 1626 | 7.3.140 | Unsigned32 | V | | | M | N | +| Report-Interval | 1627 | 7.3.141 | Enumerated | V | | | M | N | +| Report-Amount | 1628 | 7.3.142 | Enumerated | V | | | M | N | +| Event-Threshold-RSRP | 1629 | 7.3.143 | Unsigned32 | V | | | M | N | +| Event-Threshold-RSRQ | 1630 | 7.3.144 | Unsigned32 | V | | | M | N | +| Logging-Interval | 1631 | 7.3.145 | Enumerated | V | | | M | N | +| Logging-Duration | 1632 | 7.3.146 | Enumerated | V | | | M | N | +| Relay-Node-Indicator | 1633 | 7.3.147 | Enumerated | V | | | M | N | +| MDT-User-Consent | 1634 | 7.3.148 | Enumerated | V | | | M | N | +| PUR-Flags | 1635 | 7.3.149 | Unsigned32 | V | | | M | N | +| Subscribed-VSRVCC | 1636 | 7.3.150 | Enumerated | V | | | M | N | +| Equivalent-PLMN-List | 1637 | 7.3.151 | Grouped | V | | | M | N | +| CLR-Flags | 1638 | 7.3.152 | Unsigned32 | V | | | M | N | +| UVR-Flags | 1639 | 7.3.153 | Unsigned32 | M,V | | | | N | +| UVA-Flags | 1640 | 7.3.154 | Unsigned32 | M,V | | | | N | +| VPLMN-CSG-Subscription-Data | 1641 | 7.3.155 | Grouped | M,V | | | | N | +| Time-Zone | 1642 | 7.3.163 | UTF8String | V | | | M | N | +| A-MSISDN | 1643 | 7.3.157 | OctetString | V | | | M | N | +| MME-Number-for-MT-SMS | 1645 | 7.3.159 | OctetString | V | | | M | N | +| SMS-Register-Request | 1648 | 7.3.162 | Enumerated | V | | | M | N | +| Local-Time-Zone | 1649 | 7.3.156 | Grouped | V | | | M | N | +| Daylight-Saving-Time | 1650 | 7.3.164 | Enumerated | V | | | M | N | +| Subscription-Data-Flags | 1654 | 7.3.165 | Unsigned32 | V | | | M | N | +| Measurement-Period-UMTS | 1655 | 7.3.166 | Enumerated | V | | | M | N | +| Measurement-Period-LTE | 1656 | 7.3.167 | Enumerated | V | | | M | N | +| Collection-Period-RRM-LTE | 1657 | 7.3.168 | Enumerated | V | | | M | N | +| Collection-Period-RRM-UMTS | 1658 | 7.3.169 | Enumerated | V | | | M | N | +| Positioning-Method | 1659 | 7.3.170 | OctetString | V | | | M | N | +| Measurement-Quantity | 1660 | 7.3.171 | OctetString | V | | | M | N | +| Event-Threshold-Event-1F | 1661 | 7.3.172 | Integer32 | V | | | M | N | +| Event-Threshold-Event-1I | 1662 | 7.3.173 | Integer32 | V | | | M | N | +| # 3GPP 29.329-b50 (11.5.0 2012.12.21) | | | | | | | | | +| User-Identity | 700 | 6.3.1 | Grouped | M,V | | | | N | +| MSISDN | 701 | 6.3.2 | OctetString | M,V | | | | N | +| # Name conflict with 29.229 User-Data (606), renamed | | | | | | | | | +| User-Data-29.329 | 702 | 6.3.3 | OctetString | M,V | | | | N | +| Data-Reference | 703 | 6.3.4 | Enumerated | M,V | | | | N | +| Service-Indication | 704 | 6.3.5 | OctetString | M,V | | | | N | +| Subs-Req-Type | 705 | 6.3.6 | Enumerated | M,V | | | | N | +| Requested-Domain | 706 | 6.3.7 | Enumerated | M,V | | | | N | +| Current-Location | 707 | 6.3.8 | Enumerated | M,V | | | | N | +| Identity-Set | 708 | 6.3.10 | Enumerated | V | | | M | N | +| Expiry-Time | 709 | 6.3.16 | Time | V | | | M | N | +| Send-Data-Indication | 710 | 6.3.17 | Enumerated | V | | | M | N | +| # in 29.229 | | | | | | | | | +| # Server-Name | 602 | 6.3.9 | UTF8String | M,V | | | | N | +| # Supported-Features | 628 | 6.3.11 | Grouped | V | M | | | N | +| # Feature-List-ID | 629 | 6.3.12 | Unsigned32 | V | | | M | N | +| # Feature-List | 630 | 6.3.13 | Unsigned32 | V | | | M | N | +| # Supported-Applications | 631 | 6.3.14 | Grouped | V | | | M | N | +| # Public-Identity | 601 | 6.3.15 | UTF8String | M,V | | | | N | +| DSAI-Tag | 711 | 6.3.18 | OctetString | M,V | | | | N | +| # in 29.229 | | | | | | | | | +| # Wildcarded-Public-Identity | 634 | 6.3.19 | UTF8String | V | | | M | N | +| Wildcarded-IMPU | 636 | 6.3.20 | UTF8String | V | | | M | N | +| # in 29.229 | | | | | | | | | +| # Session-Priority | 650 | 6.3.21 | Enumerated | V | | | M | N | +| One-Time-Notification | 712 | 6.3.22 | Enumerated | V | | | M | N | +| Requested-Nodes | 713 | 6.3.7A | Unsigned32 | V | | | M | N | +| Serving-Node-Indication | 714 | 6.3.23 | Enumerated | V | | | M | N | +| Repository-Data-ID | 715 | 6.3.24 | Grouped | V | | | M | N | +| Sequence-Number | 716 | 6.3.25 | Unsigned32 | V | | | M | N | +| UDR-Flags | 719 | 6.3.28 | Unsigned32 | V | | | M | N | +| # OMA DDS Charging_Data V1.0 20110201-A | | | | | | | | | +| Application-Server-Id | 2101 | 8.4 | UTF8String | M,V | | | | Y | +| Application-Service-Type | 2102 | 8.4 | UTF8String | M,V | | | | Y | +| Application-Session-Id | 2103 | 8.4 | UTF8String | M,V | | | | Y | +| Content-ID | 2116 | 8.4 | UTF8String | M,V | | | | Y | +| Content-provider-ID | 2117 | 8.4 | UTF8String | M,V | | | | Y | +| DCD-Information | 2115 | 8.5.5 | Grouped | M,V | | | | Y | +| Delivery-Status | 2104 | 8.4 | UTF8String | M,V | | | | Y | +| IM-Information | 2110 | 8.5.6 | Grouped | M,V | | | | Y | +| Number-Of-Messages-Successfully-Exploded | 2111 | 8.4 | Unsigned32 | M,V | | | | Y | +| Number-Of-Messages-Successfully-Sent | 2112 | 8.4 | Unsigned32 | M,V | | | | Y | +| Service-Generic-Information | 1256 | 8.5.10 | Grouped | M,V | | | | Y | +| Total-Number-Of-Messages-Exploded | 2113 | 8.4 | Unsigned32 | M,V | | | | Y | +| Total-Number-Of-Messages-Sent | 2114 | 8.4 | Unsigned32 | M,V | | | | Y | diff --git a/lib/fd/extensions/dict_nasreq/Makefile.am b/lib/fd/extensions/dict_nasreq/Makefile.am new file mode 100644 index 0000000000..2e251459cf --- /dev/null +++ b/lib/fd/extensions/dict_nasreq/Makefile.am @@ -0,0 +1,17 @@ +## Process this file with automake to produce Makefile.in + +pkglib_LTLIBRARIES = dict_nasreq.la + +dict_nasreq_la_SOURCES = \ + dict_nasreq.c + +AM_LDFLAGS = \ + -module -avoid-version -shared + +AM_CFLAGS = \ + -Wall -Werror + +MAINTAINERCLEANFILES = Makefile.in +MOSTLYCLEANFILES = *.stackdump + +EXTRA_DIST = .libs $(pkglib_LTLIBRARIES) diff --git a/lib/fd/extensions/dict_nasreq/dict_nasreq.c b/lib/fd/extensions/dict_nasreq/dict_nasreq.c new file mode 100644 index 0000000000..426441449f --- /dev/null +++ b/lib/fd/extensions/dict_nasreq/dict_nasreq.c @@ -0,0 +1,3735 @@ +/********************************************************************************************************* +* Software License Agreement (BSD License) * +* Author: Sebastien Decugis * +* * +* 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 + +/* 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 values as defined in [DIFFSERV]. Exact + matching of DSCP values is required (no masks or + ranges). + + metering + 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 + ::= < 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_OPTIONAL, -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 + + ::= < 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_OPTIONAL, -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): + + ::= < 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): + + + ::= < 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): + + + ::= < 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): + + ::= < 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): + + ::= < 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): + + ::= < 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): + + ::= < 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): + + ::= < 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); diff --git a/lib/fd/extensions/dict_s6a/dict_s6a.c b/lib/fd/extensions/dict_s6a/dict_s6a.c index 5152e5f582..d3fdef8fae 100644 --- a/lib/fd/extensions/dict_s6a/dict_s6a.c +++ b/lib/fd/extensions/dict_s6a/dict_s6a.c @@ -1,37 +1,33 @@ /********************************************************************************************************* -* Software License Agreement (BSD License) * -* Author: Sebastien ROUX * -* * -* Copyright (c) 2013, Eurecom * -* 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 Teraoka Laboratory nor the * -* names of its contributors may be used to endorse or * -* promote products derived from this software without * -* specific prior written permission of Teraoka Laboratory * -* * -* * -* 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. * -*********************************************************************************************************/ + * Software License Agreement (BSD License) * + * Author: Sukchan Lee > * + * * + * Copyright (c) 2017, NextEPC Group + * All rights reserved. * + * * + * Written under contract by nfotex IT GmbH, http://nfotex.com/ * + * * + * 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. * + * * + * 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. * + *********************************************************************************************************/ #include @@ -44,7 +40,7 @@ CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, (_type), (_criteria), (_what), (_result), ENOENT) ); struct local_rules_definition { - char *avp_name; + struct dict_avp_request avp_vendor_plus_name; enum rule_position position; int min; int max; @@ -52,6 +48,7 @@ struct local_rules_definition { #define RULE_ORDER( _position ) ((((_position) == RULE_FIXED_HEAD) || ((_position) == RULE_FIXED_TAIL)) ? 1 : 0 ) +/* Attention! This version of the macro uses AVP_BY_NAME_AND_VENDOR, in contrast to most other copies! */ #define PARSE_loc_rules( _rulearray, _parent) { \ int __ar; \ for (__ar=0; __ar < sizeof(_rulearray) / sizeof((_rulearray)[0]); __ar++) { \ @@ -64,20 +61,20 @@ struct local_rules_definition { CHECK_FCT( fd_dict_search( \ fd_g_config->cnf_dict, \ DICT_AVP, \ - AVP_BY_NAME_ALL_VENDORS, \ - (_rulearray)[__ar].avp_name, \ + AVP_BY_NAME_AND_VENDOR, \ + &(_rulearray)[__ar].avp_vendor_plus_name, \ &__data.rule_avp, 0 ) ); \ if ( !__data.rule_avp ) { \ - TRACE_DEBUG(INFO, "AVP Not found: '%s'", (_rulearray)[__ar].avp_name ); \ + TRACE_DEBUG(INFO, "AVP Not found: '%s'", (_rulearray)[__ar].avp_vendor_plus_name.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; \ - } ); \ - } \ + { \ + TRACE_DEBUG(INFO, "Error on rule with AVP '%s'", \ + (_rulearray)[__ar].avp_vendor_plus_name.avp_name); \ + return EINVAL; \ + } ); \ + } \ } #define enumval_def_u32( _val_, _str_ ) \ @@ -86,4121 +83,448 @@ struct local_rules_definition { #define enumval_def_os( _len_, _val_, _str_ ) \ { _str_, { .os = { .data = (unsigned char *)_val_, .len = _len_ }}} -/* Defines if there are any */ - -/* Dictionary */ - int dict_s6a_init(char * conffile) { -#define VENDOR_3GPP_Id 10415 - + struct dict_object *s6a; TRACE_ENTRY("%p", conffile); - struct dict_object * s6a_dict; - { - struct dict_application_data data = { 16777251, "Diameter S6a 3GPP" }; - CHECK_dict_new( DICT_APPLICATION, &data , NULL, &s6a_dict); - } + /* Applications section */ + { + struct dict_object * vendor; + CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_VENDOR, VENDOR_BY_NAME, "3GPP", &vendor, ENOENT)); + struct dict_application_data app_data = { 16777251, "S6A" }; + CHECK_FCT(fd_dict_new(fd_g_config->cnf_dict, DICT_APPLICATION, &app_data, vendor, &s6a)); + } /* AVP section */ { - /* Loading the derived data formats */ - - struct dict_object * Time_type; - struct dict_object * Address_type; - struct dict_object * UTF8String_type; - - CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "Time", &Time_type); - CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "Address", &Address_type); - CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "UTF8String", &UTF8String_type); - - /* 3GPP-Charging-Characteristics */ - { - struct dict_avp_data data = { - 13, /* Code */ - 0, /* Vendor */ - "3GPP-Charging-Characteristics", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL); - } - - /* Service-Selection - RFC 5778 */ - { - struct dict_avp_data data = { - 493, /* Code */ - 0, /* Vendor , EURECOM: with FD 1.2.0 does not work if vendor ID is 0 for this AVP*/ - "Service-Selection", /* Name */ - 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); - } - - /* Max-Requested-Bandwidth-DL AVP - 3GPP TS 29.214 #5.3.14 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 515, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Max-Requested-Bandwidth-DL", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_UNSIGNED32 /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* Max-Requested-Bandwidth-UL AVP - 3GPP TS 29.214 #5.3.15 */ - { - struct dict_avp_data data = { - 516, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Max-Requested-Bandwidth-UL", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_UNSIGNED32 /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data, NULL, NULL); - } - - /* Visited-Network-Identifier AVP - 3GPP TS 29.229 #6.3.1 */ - { - struct dict_avp_data data = { - 600, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Visited-Network-Identifier", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, NULL); - } - - /* Confidentiality-Key AVP - 3GPP TS 29.229 #6.3.27 */ - { - struct dict_avp_data data = { - 625, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Confidentiality-Key", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, NULL); - } - - /* Integrity-Key AVP - 3GPP TS 29.229 #6.3.28 */ - { - struct dict_avp_data data = { - 626, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Integrity-Key", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, NULL); - } - - /* Feature-List-ID AVP - 3GPP TS 29.229 #6.3.29 */ - { - struct dict_avp_data data = { - 629, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Feature-List-ID", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_UNSIGNED32 /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, NULL); - } - - /* Feature-List AVP - 3GPP TS 29.229 #6.3.30 */ - { - struct dict_avp_data data = { - 630, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Feature-List", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_UNSIGNED32 /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, NULL); - } - - /* MSISDN AVP - 3GPP TS 29.329 #6.3.2 */ - { - struct dict_avp_data data = { - 701, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "MSISDN", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, NULL); - } - - /* Served-Party-IP-Address AVP - 3GPP TS 32.299 #7.2.187 - * The Served-Party-IP-Address AVP (AVP code 848) is of type Address - * and holds the IP address of either the calling or called party, - * depending on whether the P-CSCF is in touch with the calling or the - * called party. This AVP is only provided by the P-CSCF. - */ - { - struct dict_avp_data data = { - 848, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Served-Party-IP-Address", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , Address_type, NULL); - } - - /* QoS-Class-Identifier AVP - 3GPP TS 29.212 #5.3.17 */ - { - struct dict_object * avp; - struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(QoS-Class-Identifier)" , NULL, NULL, NULL }; - struct dict_enumval_data t_1 = { "QCI_1", { .i32 = 1 }}; - struct dict_enumval_data t_2 = { "QCI_2", { .i32 = 2 }}; - struct dict_enumval_data t_3 = { "QCI_3", { .i32 = 3 }}; - struct dict_enumval_data t_4 = { "QCI_4", { .i32 = 4 }}; - struct dict_enumval_data t_5 = { "QCI_5", { .i32 = 5 }}; - struct dict_enumval_data t_6 = { "QCI_6", { .i32 = 6 }}; - struct dict_enumval_data t_7 = { "QCI_7", { .i32 = 7 }}; - struct dict_enumval_data t_8 = { "QCI_8", { .i32 = 8 }}; - struct dict_enumval_data t_9 = { "QCI_9", { .i32 = 9 }}; - - struct dict_avp_data data = { - 1028, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "QoS-Class-Identifier", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_INTEGER32 /* base type of data */ - }; - - /* Create the Enumerated type, and then the AVP */ - CHECK_dict_new( DICT_TYPE, &tdata, NULL, &avp); - CHECK_dict_new( DICT_ENUMVAL, &t_1, avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_2, avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_3, avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_4, avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_5, avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_6, avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_7, avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_8, avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_9, avp, NULL); - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* RAT-Type AVP - 3GPP TS 29.212 #5.3.31 */ - { - struct dict_object * avp; - struct dict_type_data tdata = { AVP_TYPE_UNSIGNED32, "Enumerated(RAT-Type)" , NULL, NULL, NULL }; - struct dict_enumval_data t_0 = { "WLAN", { .u32 = 0 }}; - struct dict_enumval_data t_1 = { "VIRTUAL", { .u32 = 1 }}; - struct dict_enumval_data t_1000 = { "UTRAN", { .u32 = 1000 }}; - struct dict_enumval_data t_1001 = { "GERAN", { .u32 = 1001 }}; - struct dict_enumval_data t_1002 = { "GAN", { .u32 = 1002 }}; - struct dict_enumval_data t_1003 = { "HSPA_EVOLUTION", { .u32 = 1003 }}; - struct dict_enumval_data t_1004 = { "EUTRAN", { .u32 = 1004 }}; - struct dict_enumval_data t_2000 = { "CDMA2000_1X", { .u32 = 2000 }}; - struct dict_enumval_data t_2001 = { "HRPD", { .u32 = 2001 }}; - struct dict_enumval_data t_2002 = { "UMB", { .u32 = 2002 }}; - struct dict_enumval_data t_2003 = { "EHRPD", { .u32 = 2003 }}; - - struct dict_avp_data data = { - 1032, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "RAT-Type", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_UNSIGNED32 /* base type of data */ - }; - - /* Create the Enumerated type, and then the AVP */ - CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); - CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1000 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1001 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1002 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1003 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1004 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_2000 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_2001 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_2002 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_2003 , avp, NULL); - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* Priority-Level AVP - 3GPP TS 29.272 #5.3.45 */ - { - struct dict_avp_data data = { - 1046, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Priority-Level", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_UNSIGNED32 /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, NULL); - } - - /* Pre-emption-Capability AVP - 3GPP TS 29.212 #5.3.46 */ - { - struct dict_object * avp; - struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Pre-emption-Capability)" , NULL, NULL, NULL }; - struct dict_enumval_data t_0 = { "PRE-EMPTION_CAPABILITY_ENABLED", { .i32 = 0 }}; - struct dict_enumval_data t_1 = { "PRE-EMPTION_CAPABILITY_DISABLED", { .i32 = 1 }}; - - struct dict_avp_data data = { - 1047, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Pre-emption-Capability", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_INTEGER32 /* base type of data */ - }; - - /* Create the Enumerated type, and then the AVP */ - CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); - CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* Pre-emption-Vulnerability AVP - 3GPP TS 29.212 #5.3.47 */ - { - struct dict_object * avp; - struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Pre-emption-Vulnerability)" , NULL, NULL, NULL }; - struct dict_enumval_data t_0 = { "PRE-EMPTION_VULNERABILITY_ENABLED", { .i32 = 0 }}; - struct dict_enumval_data t_1 = { "PRE-EMPTION_VULNERABILITY_DISABLED", { .i32 = 1 }}; - - struct dict_avp_data data = { - 1048, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Pre-emption-Vulnerability", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_INTEGER32 /* base type of data */ - }; - - /* Create the Enumerated type, and then the AVP */ - CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); - CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* Allocation-Retention-Priority AVP - 3GPP TS 29.272 #5.3.32 */ - { - /* - - Allocation-Retention-Priority ::= < AVP Header: 1034 > - { Priority-Level } - [ Pre-emption-Capability ] - [ Pre-emption-Vulnerability ] - - The Allocation-Retention-Priority AVP (AVP code 1034) is of type - Grouped, and it is used to indicate the priority of allocation and - retention, the pre-emption capability and pre-emption vulnerability - for the SDF if provided within the QoS-Information-AVP or for the - EPS default bearer if provided within the Default-EPS-Bearer-QoS AVP. - */ - struct dict_object * avp; - struct dict_avp_data data = { - 1034, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Allocation-Retention-Priority", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - - struct local_rules_definition rules[] = - { - { "Priority-Level", RULE_REQUIRED, -1, 1 } - ,{ "Pre-emption-Capability", RULE_OPTIONAL, -1, 1 } - ,{ "Pre-emption-Vulnerability", RULE_OPTIONAL, -1, 1 } - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - PARSE_loc_rules( rules, avp ); - } - - /* PDP-Address AVP - 3GPP TS 32.299 #6.3.2 */ - { - /* - * The PDP-Address-Prefix-Length AVP needs not be available for IPv6 - * typed IP-address prefix length of 64 bits. - */ - struct dict_avp_data data = { - 1227, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "PDP-Address", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , Address_type, NULL); - } - - /* Subscriber-Status - 3GPP TS 29.272 #7.3.29 */ - { - struct dict_object * type; - struct dict_type_data tdata = { AVP_TYPE_UNSIGNED32, "Enumerated(Subscriber-Status)" , NULL, NULL, NULL }; - struct dict_enumval_data t_0 = { "SERVICE_GRANTED", { .i32 = 0 }}; - struct dict_enumval_data t_1 = { "OPERATOR_DETERMINED_BARRING", { .i32 = 1 }}; - - struct dict_avp_data data = { - 1424, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Subscriber-Status", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_INTEGER32 /* base type of data */ - }; - - CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type); - CHECK_dict_new( DICT_ENUMVAL, &t_0, type, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL); - CHECK_dict_new( DICT_AVP, &data, NULL, &type); - } - - /* STN-SR AVP - 3GPP TS 29.272 #7.3.33 */ - { - struct dict_avp_data data = { - 1433, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "STN-SR", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL); - } - - /* ICS-Indicator AVP - 3GPP TS 29.272 #7.3.104 */ - { - struct dict_object * avp; - struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(ICS-Indicator)" , NULL, NULL, NULL }; - struct dict_enumval_data t_0 = { "FALSE", { .i32 = 0 }}; - struct dict_enumval_data t_1 = { "TRUE", { .i32 = 1 }}; - - struct dict_avp_data data = { - 1491, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "ICS-Indicator", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_INTEGER32 /* base type of data */ - }; - - /* Create the Enumerated type, and then the AVP */ - CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); - CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); - CHECK_dict_new( DICT_AVP, &data , avp, NULL); - } - - /* IMEI AVP - 3GPP TS 29.272 #7.3.4 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 1402, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "IMEI", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , UTF8String_type, &avp); - } - - /* 3GPP2-MEID AVP - 3GPP TS 29.272 #7.3.6 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 1471, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "3GPP2-MEID", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data, NULL, &avp); - } - - /* Software Version - 3GPP TS 29.272 #7.3.5 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 1403, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Software-Version", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , UTF8String_type, &avp); - } + { + /* AIR-Flags AVP - 3GPP TS 29.272 #7.3.201 */ + struct dict_avp_data data = { + 1679, /* Code */ + 10415, /* Vendor */ + "AIR-Flags", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + } /* Terminal Information AVP - 3GPP TS 29.272 #7.3.3 */ { struct dict_object * avp; - struct dict_avp_data data = { - 1401, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Terminal-Information", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - struct local_rules_definition rules[] = { - { "IMEI", RULE_REQUIRED, 1, 1 } - ,{ "3GPP2-MEID", RULE_REQUIRED, 1, 1 } - ,{ "Software-Version", RULE_REQUIRED, 1, 1 } + { { .avp_vendor = 10415, .avp_name = "IMEI" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "3GPP2-MEID" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Software-Version" }, RULE_REQUIRED, -1, 1 }, }; - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Terminal-Information", &avp); PARSE_loc_rules( rules, avp ); } - /* ULA-Flags - 3GPP TS 29.272 #7.3.8 */ - { - struct dict_avp_data data = { - 1406, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "ULA-Flags", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_UNSIGNED32 /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, NULL); - } - - /* Visited-PLMN-Id AVP - 3GPP TS 29.272 #7.3.9 */ - { - struct dict_avp_data data = { - 1407, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Visited-PLMN-Id", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, NULL); - } - - /* Number-Of-Requested-Vectors - 3GPP TS 29.272 #7.3.14 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 1410, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Number-Of-Requested-Vectors", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_UNSIGNED32 /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* Re-Synchronization-Info - 3GPP TS 29.272 #7.3.15 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 1411, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Re-Synchronization-Info", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* Immediate-Response-Preferred - 3GPP TS 29.272 #7.3.16 */ - { - struct dict_avp_data data = { - 1412, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Immediate-Response-Preferred", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_UNSIGNED32 /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, NULL); - } - /* Requested-EUTRAN-Authentication-Info AVP - 3GPP TS 29.272 #7.3.11 */ { struct dict_object * avp; - struct dict_avp_data data = { - 1408, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Requested-EUTRAN-Authentication-Info", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - struct local_rules_definition rules[] = { - { "Number-Of-Requested-Vectors", RULE_OPTIONAL, -1, 1 } - ,{ "Immediate-Response-Preferred", RULE_OPTIONAL, -1, 1 } - ,{ "Re-Synchronization-Info", RULE_OPTIONAL, -1, 1 } + { { .avp_vendor = 10415, .avp_name = "Number-Of-Requested-Vectors" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Immediate-Response-Preferred" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Re-Synchronization-Info" }, RULE_OPTIONAL, -1, 1 }, }; - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Requested-EUTRAN-Authentication-Info", &avp); PARSE_loc_rules( rules, avp ); } /* Requested-UTRAN-GERAN-Authentication-Info AVP - 3GPP TS 29.272 #7.3.12 */ { struct dict_object * avp; - struct dict_avp_data data = { - 1409, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Requested-UTRAN-GERAN-Authentication-Info", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - struct local_rules_definition rules[] = { - { "Number-Of-Requested-Vectors", RULE_OPTIONAL, -1, 1 } - ,{ "Immediate-Response-Preferred", RULE_OPTIONAL, -1, 1 } - ,{ "Re-Synchronization-Info", RULE_OPTIONAL, -1, 1 } + { { .avp_vendor = 10415, .avp_name = "Number-Of-Requested-Vectors" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Immediate-Response-Preferred" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Re-Synchronization-Info" }, RULE_OPTIONAL, -1, 1 }, }; - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Requested-UTRAN-GERAN-Authentication-Info", &avp); PARSE_loc_rules( rules, avp ); } - /* Item-Number AVP - 3GPP TS 29.272 #7.3.23 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 1419, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Item-Number", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_UNSIGNED32 /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* RAND AVP - 3GPP TS 29.272 #7.3.53 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 1447, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "RAND", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* XRES AVP - 3GPP TS 29.272 #7.3.54 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 1448, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "XRES", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* AUTN AVP - 3GPP TS 29.272 #7.3.55 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 1449, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "AUTN", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* SRES AVP - 3GPP TS 29.272 #7.3.60 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 1454, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "SRES", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data, NULL, &avp); - } - - /* KASME AVP - 3GPP TS 29.272 #7.3.56 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 1450, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "KASME", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* Kc AVP - 3GPP TS 29.272 #7.3.59 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 1453, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Kc", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data, NULL, &avp); - } - - /* Trace-Collection-Entity AVP - 3GPP TS 29.272 #7.3.96 */ - { - struct dict_avp_data data = { - 1452, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Trace-Collection-Entity", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data, Address_type, NULL); - } - /* E-UTRAN-Vector - 3GPP TS 29.272 #7.3.18 */ { struct dict_object * avp; - struct dict_avp_data data = { - 1414, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "E-UTRAN-Vector", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - struct local_rules_definition rules[] = { - { "Item-Number", RULE_OPTIONAL, -1, 1 } - ,{ "RAND", RULE_REQUIRED, -1, 1 } - ,{ "XRES", RULE_REQUIRED, -1, 1 } - ,{ "AUTN", RULE_REQUIRED, -1, 1 } - ,{ "KASME", RULE_REQUIRED, -1, 1 } + { { .avp_vendor = 10415, .avp_name = "Item-Number" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "RAND" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "XRES" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "AUTN" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "KASME" }, RULE_REQUIRED, -1, 1 }, }; - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "E-UTRAN-Vector", &avp); PARSE_loc_rules( rules, avp ); } /* UTRAN-Vector - 3GPP TS 29.272 #7.3.19 */ { struct dict_object * avp; - struct dict_avp_data data = { - 1415, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "UTRAN-Vector", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - struct local_rules_definition rules[] = { - { "Item-Number", RULE_OPTIONAL, -1, 1 } - ,{ "RAND", RULE_REQUIRED, -1, 1 } - ,{ "XRES", RULE_REQUIRED, -1, 1 } - ,{ "AUTN", RULE_REQUIRED, -1, 1 } - ,{ "Confidentiality-Key", RULE_REQUIRED, -1, 1 } - ,{ "Integrity-Key", RULE_REQUIRED, -1, 1 } + { { .avp_vendor = 10415, .avp_name = "Item-Number" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "RAND" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "XRES" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "AUTN" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Confidentiality-Key" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Integrity-Key" }, RULE_REQUIRED, -1, 1 }, }; - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "UTRAN-Vector", &avp); PARSE_loc_rules( rules, avp ); } /* GERAN-Vector - 3GPP TS 29.272 #7.3.20 */ { struct dict_object * avp; - struct dict_avp_data data = { - 1416, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "GERAN-Vector", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - struct local_rules_definition rules[] = { - { "Item-Number", RULE_OPTIONAL, -1, 1 } - ,{ "RAND", RULE_REQUIRED, -1, 1 } - ,{ "SRES", RULE_REQUIRED, -1, 1 } - ,{ "Kc", RULE_REQUIRED, -1, 1 } + { { .avp_vendor = 10415, .avp_name = "Item-Number" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "RAND" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "SRES" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Kc" }, RULE_REQUIRED, -1, 1 }, }; - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "GERAN-Vector", &avp); PARSE_loc_rules( rules, avp ); } /* Authentication-Info - 3GPP TS 29.272 #7.3.17 */ { struct dict_object * avp; - struct dict_avp_data data = { - 1413, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Authentication-Info", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - struct local_rules_definition rules[] = { - { "E-UTRAN-Vector", RULE_OPTIONAL, -1, -1 } - ,{ "UTRAN-Vector", RULE_OPTIONAL, -1, -1 } - ,{ "GERAN-Vector", RULE_OPTIONAL, -1, -1 } + { { .avp_vendor = 10415, .avp_name = "E-UTRAN-Vector" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "UTRAN-Vector" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "GERAN-Vector" }, RULE_OPTIONAL, -1, 1 }, }; - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Authentication-Info", &avp); PARSE_loc_rules( rules, avp ); } - /* Network-Access-Mode - 3GPP TS 29.272 #7.3.21 */ - { - struct dict_object * type; - struct dict_type_data tdata = { AVP_TYPE_UNSIGNED32, "Enumerated(Network-Access-Mode)" , NULL, NULL, NULL }; - struct dict_enumval_data t_0 = { "PACKET_AND_CIRCUIT", { .u32 = 0 }}; - struct dict_enumval_data t_1 = { "ONLY_PACKET", { .u32 = 1 }}; - - struct dict_avp_data data = { - 1417, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Network-Access-Mode", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_UNSIGNED32 /* base type of data */ - }; - - CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type); - CHECK_dict_new( DICT_ENUMVAL, &t_0 , type, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL); - CHECK_dict_new( DICT_AVP, &data , type, NULL); - } - - /* HPLMN-ODB AVP - 3GPP TS 29.272 #7.3.22 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 1418, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "HPLMN-ODB", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_UNSIGNED32 /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* Cancellation-Type - 3GPP TS 29.272 #7.3.24 */ - { - struct dict_object * type; - struct dict_type_data tdata = { AVP_TYPE_UNSIGNED32, "Enumerated(Cancellation-Type)" , NULL, NULL, NULL }; - struct dict_enumval_data t_0 = { "MME_UPDATE_PROCEDURE", { .i32 = 0 }}; - struct dict_enumval_data t_1 = { "SGSN_UPDATE_PROCEDURE", { .i32 = 1 }}; - struct dict_enumval_data t_2 = { "SUBSCRIPTION_WITHDRAWAL", { .i32 = 2 }}; - struct dict_enumval_data t_3 = { "UPDATE_PROCEDURE_IWF", { .i32 = 3 }}; - struct dict_enumval_data t_4 = { "INITIAL_ATTACH_PROCEDURE", { .i32 = 4 }}; - - struct dict_avp_data data = { - 1420, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Cancellation-Type", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_INTEGER32 /* base type of data */ - }; - - CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type); - CHECK_dict_new( DICT_ENUMVAL, &t_0, type, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_3, type, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_4, type, NULL); - CHECK_dict_new( DICT_AVP, &data, NULL, &type); - } - - /* DSR-Flags AVP - 3GPP TS 29.272 #7.3.25 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 1421, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "DSR-Flags", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_UNSIGNED32 /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* DSA-Flags AVP - 3GPP TS 29.272 #7.3.26 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 1422, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "DSA-Flags", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_UNSIGNED32 /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* Context-Identifier AVP - 3GPP TS 29.272 #7.3.27 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 1423, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Context-Identifier", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_UNSIGNED32 /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* Operator-Determined-Barring AVP - 3GPP TS 29.272 #7.3.30 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 1425, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Operator-Determined-Barring", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_UNSIGNED32 /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* Access-Restriction-Data AVP - 3GPP TS 29.272 #7.3.31 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 1426, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Access-Restriction-Data", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_UNSIGNED32 /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* APN-OI-Replacement AVP - 3GPP TS 29.272 #7.3.32 */ - { - struct dict_avp_data data = { - 1427, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "APN-OI-Replacement", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL); - } - - /* All-APN-Configurations-Included-Indicator AVP - 3GPP TS 29.272 #7.3.33 */ - { - struct dict_object * avp; - struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(All-APN-Configurations-Included-Indicator)" , NULL, NULL, NULL }; - struct dict_enumval_data t_0 = { "All_APN_CONFIGURATIONS_INCLUDED", { .i32 = 0 }}; - struct dict_enumval_data t_1 = { "MODIFIED/ADDED_APN_CONFIGURATIONS_INCLUDED", { .i32 = 1 }}; - - struct dict_avp_data data = { - 1428, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "All-APN-Configurations-Included-Indicator", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_INTEGER32 /* base type of data */ - }; - - /* Create the Enumerated type, and then the AVP */ - CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); - CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); - CHECK_dict_new( DICT_AVP, &data , avp, NULL); - } - - /* PDN-Type AVP - 3GPP TS 29.272 #7.3.62 */ - { - struct dict_object * avp; - struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(PDN-Type)" , NULL, NULL, NULL }; - struct dict_enumval_data t_0 = { "IPv4", { .i32 = 0 }}; - struct dict_enumval_data t_1 = { "IPv6", { .i32 = 1 }}; - struct dict_enumval_data t_2 = { "IPv4v6", { .i32 = 2 }}; - struct dict_enumval_data t_3 = { "IPv4_OR_IPv6", { .i32 = 3 }}; - - struct dict_avp_data data = { - 1456, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "PDN-Type", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_INTEGER32 /* base type of data */ - }; - - /* Create the Enumerated type, and then the AVP */ - CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); - CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_3 , avp, NULL); - CHECK_dict_new( DICT_AVP, &data , avp, NULL); - } - /* EPS-Subscribed-QoS-Profile AVP - 3GPP TS 29.272 #7.3.37 */ { struct dict_object * avp; - - struct dict_avp_data data = { - 1431, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "EPS-Subscribed-QoS-Profile", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - struct local_rules_definition rules[] = { - { "QoS-Class-Identifier", RULE_REQUIRED, -1, 1 } - ,{ "Allocation-Retention-Priority", RULE_REQUIRED, -1, 1 } + { { .avp_vendor = 10415, .avp_name = "QoS-Class-Identifier" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Allocation-Retention-Priority" }, RULE_REQUIRED, -1, 1 }, }; - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "EPS-Subscribed-QoS-Profile", &avp); PARSE_loc_rules( rules, avp ); } - /* VPLMN-Dynamic-Address-Allowed AVP - 3GPP TS 29.272 #7.3.38 */ - { - struct dict_object * avp; - struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(VPLMN-Dynamic-Address-Allowed)" , NULL, NULL, NULL }; - struct dict_enumval_data t_0 = { "NOTALLOWED", { .i32 = 0 }}; - struct dict_enumval_data t_1 = { "ALLOWED", { .i32 = 1 }}; - - struct dict_avp_data data = { - 1432, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "VPLMN-Dynamic-Address-Allowed", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_INTEGER32 /* base type of data */ - }; - - /* Create the Enumerated type, and then the AVP */ - CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); - CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); - CHECK_dict_new( DICT_AVP, &data , avp, NULL); - } - - /* Alert-Reason AVP - 3GPP TS 29.272 #7.3.83 */ - { - struct dict_object * avp; - struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Alert-Reason)" , NULL, NULL, NULL }; - struct dict_enumval_data t_0 = { "UE_PRESENT", { .i32 = 0 }}; - struct dict_enumval_data t_1 = { "UE_MEMORY_AVAILABLE", { .i32 = 1 }}; - - struct dict_avp_data data = { - 1434, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Alert-Reason", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_INTEGER32 /* base type of data */ - }; - - /* Create the Enumerated type, and then the AVP */ - CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); - CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); - CHECK_dict_new( DICT_AVP, &data , avp, NULL); - } - - /* PDN-GW-Allocation-Type AVP - 3GPP TS 29.272 #7.3.44 */ - { - struct dict_object * avp; - struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(PDN-GW-Allocation-Type)" , NULL, NULL, NULL }; - struct dict_enumval_data t_0 = { "STATIC", { .i32 = 0 }}; - struct dict_enumval_data t_1 = { "DYNAMIC", { .i32 = 1 }}; - - struct dict_avp_data data = { - 1438, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "PDN-GW-Allocation-Type", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_INTEGER32 /* base type of data */ - }; - - /* Create the Enumerated type, and then the AVP */ - CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); - CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); - CHECK_dict_new( DICT_AVP, &data , avp, NULL); - } - - /* Expiration-Date AVP - 3GPP TS 29.272 #7.3.80 */ - { - struct dict_avp_data data = { - 1439, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Expiration-Date", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , Time_type, NULL); - } - - /* CSG-Id AVP - 3GPP TS 29.272 #7.3.79 */ - { - struct dict_object * avp; - - struct dict_avp_data data = { - 1437, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "CSG-Id", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_UNSIGNED32 /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - /* AMBR AVP - 3GPP TS 29.272 #7.3.41 */ { struct dict_object * avp; - - struct dict_avp_data data = { - 1435, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "AMBR", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - struct local_rules_definition rules[] = { - { "Max-Requested-Bandwidth-UL", RULE_REQUIRED, -1, 1 } - ,{ "Max-Requested-Bandwidth-DL", RULE_REQUIRED, -1, 1 } + { { .avp_vendor = 10415, .avp_name = "Max-Requested-Bandwidth-UL" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Max-Requested-Bandwidth-DL" }, RULE_REQUIRED, -1, 1 }, }; - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "AMBR", &avp); PARSE_loc_rules( rules, avp ); } /* Specific-APN-Info AVP - 3GPP TS 29.272 #7.3.82 */ { struct dict_object * avp; - - struct dict_avp_data data = { - 1472, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Specific-APN-Info", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - struct local_rules_definition rules[] = { - { "Service-Selection", RULE_REQUIRED, -1, 1 } - ,{ "MIP6-Agent-Info", RULE_REQUIRED, -1, 1 } - ,{ "Visited-Network-Identifier", RULE_OPTIONAL, -1, 1 } + { { .avp_name = "Service-Selection" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "MIP6-Agent-Info" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Visited-Network-Identifier" }, RULE_OPTIONAL, -1, 1 }, }; - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Specific-APN-Info", &avp); PARSE_loc_rules( rules, avp ); } - /* SIPTO-Permission AVP - 3GPP TS 29.272 #7.3.135 */ - { - struct dict_object * avp; - struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(SIPTO-Permission)" , NULL, NULL, NULL }; - struct dict_enumval_data t_0 = { "SIPTO_ALLOWED", { .i32 = 0 }}; - struct dict_enumval_data t_1 = { "SIPTO_NOTALLOWED", { .i32 = 1 }}; - - struct dict_avp_data data = { - 1613, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "SIPTO-Permission", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_INTEGER32 /* base type of data */ - }; - - /* Create the Enumerated type, and then the AVP */ - CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); - CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); - CHECK_dict_new( DICT_AVP, &data , avp, NULL); - } - - /* LIPA-Permission AVP - 3GPP TS 29.272 #7.3.133 */ - { - struct dict_object * avp; - struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(LIPA-Permission)" , NULL, NULL, NULL }; - struct dict_enumval_data t_0 = { "LIPA-PROHIBITED", { .i32 = 0 }}; - struct dict_enumval_data t_1 = { "LIPA-ONLY", { .i32 = 1 }}; - struct dict_enumval_data t_2 = { "LIPA-CONDITIONAL", { .i32 = 2 }}; - - struct dict_avp_data data = { - 1618, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "LIPA-Permission", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_INTEGER32 /* base type of data */ - }; - - /* Create the Enumerated type, and then the AVP */ - CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); - CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); - - CHECK_dict_new( DICT_AVP, &data , avp, NULL); - } - - /* List-Of-Measurements AVP - 3GPP TS 29.272 #7.3.139 */ - { - struct dict_avp_data data = { - 1625, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "List-Of-Measurements", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_UNSIGNED32 /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, NULL); - } - - /* Reporting-Trigger AVP - 3GPP TS 29.272 #7.3.140 */ - { - struct dict_avp_data data = { - 1626, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Reporting-Trigger", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_UNSIGNED32 /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, NULL); - } - - /* Report-Interval AVP - 3GPP TS 29.272 #7.3.141 and TS 32.422 #5.10.5 */ - { - struct dict_object * avp; - struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Report-Interval)" , NULL, NULL, NULL }; - struct dict_enumval_data t_0 = { "250ms", { .i32 = 0 }}; - struct dict_enumval_data t_1 = { "500ms", { .i32 = 1 }}; - struct dict_enumval_data t_2 = { "1000ms", { .i32 = 2 }}; - struct dict_enumval_data t_3 = { "2000ms", { .i32 = 3 }}; - struct dict_enumval_data t_4 = { "3000ms", { .i32 = 4 }}; - struct dict_enumval_data t_5 = { "4000ms", { .i32 = 5 }}; - struct dict_enumval_data t_6 = { "6000ms", { .i32 = 6 }}; - struct dict_enumval_data t_7 = { "8000ms", { .i32 = 7 }}; - struct dict_enumval_data t_8 = { "12000ms", { .i32 = 8 }}; - struct dict_enumval_data t_9 = { "16000ms", { .i32 = 9 }}; - struct dict_enumval_data t_10 = { "20000ms", { .i32 = 10 }}; - struct dict_enumval_data t_11 = { "24000ms", { .i32 = 11 }}; - struct dict_enumval_data t_12 = { "28000ms", { .i32 = 12 }}; - struct dict_enumval_data t_13 = { "32000ms", { .i32 = 13 }}; - struct dict_enumval_data t_14 = { "64000ms", { .i32 = 14 }}; - /* Possible in LTE */ - struct dict_enumval_data t_15 = { "120ms", { .i32 = 15 }}; - struct dict_enumval_data t_16 = { "240ms", { .i32 = 16 }}; - struct dict_enumval_data t_17 = { "480ms", { .i32 = 17 }}; - struct dict_enumval_data t_18 = { "640ms", { .i32 = 18 }}; - struct dict_enumval_data t_19 = { "1024ms", { .i32 = 19 }}; - struct dict_enumval_data t_20 = { "2048ms", { .i32 = 20 }}; - struct dict_enumval_data t_21 = { "5120ms", { .i32 = 21 }}; - struct dict_enumval_data t_22 = { "10240ms", { .i32 = 22 }}; - struct dict_enumval_data t_23 = { "1min", { .i32 = 23 }}; - struct dict_enumval_data t_24 = { "6min", { .i32 = 24 }}; - struct dict_enumval_data t_25 = { "12min", { .i32 = 25 }}; - struct dict_enumval_data t_26 = { "30min", { .i32 = 26 }}; - struct dict_enumval_data t_27 = { "60min", { .i32 = 27 }}; - - struct dict_avp_data data = { - 1627, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Report-Interval", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_INTEGER32 /* base type of data */ - }; - - /* Create the Enumerated type, and then the AVP */ - CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); - CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_3 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_4 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_5 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_6 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_7 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_8 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_9 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_10 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_11 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_12 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_13 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_14 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_15 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_16 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_17 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_18 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_19 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_20 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_21 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_22 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_23 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_24 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_25 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_26 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_27 , avp, NULL); - CHECK_dict_new( DICT_AVP, &data , avp, NULL); - } - - /* Report-Amount AVP - 3GPP TS 29.272 #7.3.142 and TS 32.422 #5.10.6 */ - { - struct dict_object * avp; - struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Report-Amount)" , NULL, NULL, NULL }; - struct dict_enumval_data t_0 = { "1", { .i32 = 0 }}; - struct dict_enumval_data t_1 = { "2", { .i32 = 1 }}; - struct dict_enumval_data t_2 = { "4", { .i32 = 2 }}; - struct dict_enumval_data t_3 = { "8", { .i32 = 3 }}; - struct dict_enumval_data t_4 = { "16", { .i32 = 4 }}; - struct dict_enumval_data t_5 = { "32", { .i32 = 5 }}; - struct dict_enumval_data t_6 = { "64", { .i32 = 6 }}; - struct dict_enumval_data t_7 = { "infinity", { .i32 = 7 }}; - - struct dict_avp_data data = { - 1628, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Report-Amount", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_INTEGER32 /* base type of data */ - }; - - /* Create the Enumerated type, and then the AVP */ - CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); - CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_3 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_4 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_5 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_6 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_7 , avp, NULL); - - CHECK_dict_new( DICT_AVP, &data , avp, NULL); - } - - /* Event-Threshold-RSRP AVP - 3GPP TS 29.272 #7.3.143 */ - { - struct dict_avp_data data = { - 1629, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Event-Threshold-RSRP", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_UNSIGNED32 /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, NULL); - } - - /* Event-Threshold-RSRQ AVP - 3GPP TS 29.272 #7.3.144 */ - { - struct dict_avp_data data = { - 1630, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Event-Threshold-RSRQ", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_UNSIGNED32 /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, NULL); - } - - /* Logging-Interval AVP - 3GPP TS 29.272 #7.3.145 and TS 32.422 #5.10.8 */ - { - struct dict_object * avp; - struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Logging-Interval)" , NULL, NULL, NULL }; - struct dict_enumval_data t_0 = { "1.28", { .i32 = 0 }}; - struct dict_enumval_data t_1 = { "2.56", { .i32 = 1 }}; - struct dict_enumval_data t_2 = { "5.12", { .i32 = 2 }}; - struct dict_enumval_data t_3 = { "10.24", { .i32 = 3 }}; - struct dict_enumval_data t_4 = { "20.48", { .i32 = 4 }}; - struct dict_enumval_data t_5 = { "30.72", { .i32 = 5 }}; - struct dict_enumval_data t_6 = { "40.96", { .i32 = 6 }}; - struct dict_enumval_data t_7 = { "61.44", { .i32 = 7 }}; - - struct dict_avp_data data = { - 1631, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Logging-Interval", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_INTEGER32 /* base type of data */ - }; - - /* Create the Enumerated type, and then the AVP */ - CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); - CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_3 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_4 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_5 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_6 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_7 , avp, NULL); - - CHECK_dict_new( DICT_AVP, &data , avp, NULL); - } - - /* Logging-Duration AVP - 3GPP TS 29.272 #7.3.145 and TS 32.422 #5.10.9 */ - { - struct dict_object * avp; - struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Logging-Duration)" , NULL, NULL, NULL }; - struct dict_enumval_data t_0 = { "600sec", { .i32 = 0 }}; - struct dict_enumval_data t_1 = { "1200sec", { .i32 = 1 }}; - struct dict_enumval_data t_2 = { "2400sec", { .i32 = 2 }}; - struct dict_enumval_data t_3 = { "3600sec", { .i32 = 3 }}; - struct dict_enumval_data t_4 = { "5400sec", { .i32 = 4 }}; - struct dict_enumval_data t_5 = { "7200sec", { .i32 = 5 }}; - - struct dict_avp_data data = { - 1632, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Logging-Duration", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_INTEGER32 /* base type of data */ - }; - - /* Create the Enumerated type, and then the AVP */ - CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); - CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_3 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_4 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_5 , avp, NULL); - - CHECK_dict_new( DICT_AVP, &data , avp, NULL); - } - /* APN-Configuration AVP - 3GPP TS 29.272 #7.3.35 */ { struct dict_object * avp; - - struct dict_avp_data data = { - 1430, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "APN-Configuration", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - struct local_rules_definition rules[] = { - { "Context-Identifier", RULE_REQUIRED, -1, 1 } - ,{ "Served-Party-IP-Address", RULE_OPTIONAL, -1, 2 } - ,{ "PDN-Type", RULE_REQUIRED, -1, 1 } - ,{ "Service-Selection", RULE_REQUIRED, -1, 1 } - ,{ "EPS-Subscribed-QoS-Profile", RULE_OPTIONAL, -1, 1 } - ,{ "VPLMN-Dynamic-Address-Allowed", RULE_OPTIONAL, -1, 1 } - ,{ "MIP6-Agent-Info", RULE_OPTIONAL, -1, 1 } - ,{ "Visited-Network-Identifier", RULE_OPTIONAL, -1, 1 } - ,{ "PDN-GW-Allocation-Type", RULE_OPTIONAL, -1, 1 } - ,{ "3GPP-Charging-Characteristics", RULE_OPTIONAL, -1, 1 } - ,{ "AMBR", RULE_OPTIONAL, -1, 1 } - ,{ "Specific-APN-Info", RULE_OPTIONAL, -1, -1 } - ,{ "APN-OI-Replacement", RULE_OPTIONAL, -1, 1 } - ,{ "SIPTO-Permission", RULE_OPTIONAL, -1, 1 } - ,{ "LIPA-Permission", RULE_OPTIONAL, -1, 1 } + { { .avp_vendor = 10415, .avp_name = "Context-Identifier" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Served-Party-IP-Address" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "PDN-Type" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Service-Selection" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "EPS-Subscribed-QoS-Profile" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "VPLMN-Dynamic-Address-Allowed" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "MIP6-Agent-Info" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Visited-Network-Identifier" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "PDN-GW-Allocation-Type" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "3GPP-Charging-Characteristics" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "AMBR" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Specific-APN-Info" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "APN-OI-Replacement" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "SIPTO-Permission" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "LIPA-Permission" }, RULE_OPTIONAL, -1, 1 }, }; - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "APN-Configuration", &avp); PARSE_loc_rules( rules, avp ); } /* APN-Configuration-Profile AVP - 3GPP TS 29.272 #7.3.34 */ { struct dict_object * avp; - - struct dict_avp_data data = { - 1429, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "APN-Configuration-Profile", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - struct local_rules_definition rules[] = { - { "Context-Identifier", RULE_REQUIRED, -1, 1 } - ,{ "All-APN-Configurations-Included-Indicator", RULE_REQUIRED, -1, 1 } - ,{ "APN-Configuration", RULE_REQUIRED, -1, -1 } + { { .avp_vendor = 10415, .avp_name = "Context-Identifier" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "All-APN-Configurations-Included-Indicator" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "APN-Configuration" }, RULE_REQUIRED, -1, 1 }, }; - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - PARSE_loc_rules( rules, avp ); - } - - /* CSG-Subscription-Data AVP - 3GPP TS 29.272 #7.3.78 */ - { - struct dict_object * avp; - - struct dict_avp_data data = { - 1436, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "CSG-Subscription-Data", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - - struct local_rules_definition rules[] = - { - { "CSG-Id", RULE_REQUIRED, -1, 1 } - ,{ "Expiration-Date", RULE_OPTIONAL, -1, 1 } - ,{ "Service-Selection", RULE_OPTIONAL, -1, -1 } - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - PARSE_loc_rules( rules, avp ); - } - - /* RAT-Frequency-Selection-Priority-ID AVP - 3GPP TS 29.272 #7.3.46 */ - { - struct dict_object * avp; - - struct dict_avp_data data = { - 1440, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "RAT-Frequency-Selection-Priority-ID", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_UNSIGNED32 /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* IDA-Flags AVP - 3GPP TS 29.272 #7.3.47 */ - { - struct dict_object * avp; - - struct dict_avp_data data = { - 1441, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "IDA-Flags", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_UNSIGNED32 /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* PUA-Flags AVP - 3GPP TS 29.272 #7.3.48 */ - { - struct dict_object * avp; - - struct dict_avp_data data = { - 1442, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "PUA-Flags", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_UNSIGNED32 /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* NOR-Flags AVP - 3GPP TS 29.272 #7.3.49 */ - { - struct dict_object * avp; - - struct dict_avp_data data = { - 1443, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "NOR-Flags", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_UNSIGNED32 /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* User-Id AVP - 3GPP TS 29.272 #7.3.50 */ - { - struct dict_avp_data data = { - 1444, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "User-Id", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL); - } - - /* Equipment-Status AVP - 3GPP TS 29.272 #7.3.51 */ - { - struct dict_object * avp; - struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Equipment-Status)" , NULL, NULL, NULL }; - struct dict_enumval_data t_0 = { "WHITELISTED", { .i32 = 0 }}; - struct dict_enumval_data t_1 = { "BLACKLISTED", { .i32 = 1 }}; - struct dict_enumval_data t_2 = { "GREYLISTED", { .i32 = 2 }}; - - struct dict_avp_data data = { - 1445, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Equipment-Status", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_INTEGER32 /* base type of data */ - }; - - /* Create the Enumerated type, and then the AVP */ - CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); - CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); - CHECK_dict_new( DICT_AVP, &data , avp, NULL); - } - - /* Regional-Subscription-Zone-Code AVP - 3GPP TS 29.272 #7.3.52 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 1446, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Regional-Subscription-Zone-Code", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* Roaming-Restricted-Due-To-Unsupported-Feature AVP - 3GPP TS 29.272 #7.3.81 */ - { - struct dict_object * avp; - struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Roaming-Restricted-Due-To-Unsupported-Feature)" , NULL, NULL, NULL }; - struct dict_enumval_data t_0 = { "Roaming-Restricted-Due-To-Unsupported-Feature", { .i32 = 0 }}; - - struct dict_avp_data data = { - 1457, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Roaming-Restricted-Due-To-Unsupported-Feature", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_INTEGER32 /* base type of data */ - }; - - /* Create the Enumerated type, and then the AVP */ - CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); - CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); - CHECK_dict_new( DICT_AVP, &data , avp, NULL); - } - - /* Trace-Reference AVP - 3GPP TS 29.272 #7.3.64 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 1459, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Trace-Reference", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data, NULL, &avp); - } - - /* Trace-Depth AVP - 3GPP TS 29.272 #7.3.67 and 3GPP TS 32.422 #5.3 */ - { - struct dict_object * avp; - struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Trace-Depth)" , NULL, NULL, NULL }; - struct dict_enumval_data t_0 = { "Minimum", { .i32 = 0 }}; - struct dict_enumval_data t_1 = { "Medium", { .i32 = 1 }}; - struct dict_enumval_data t_2 = { "Maximum", { .i32 = 2 }}; - struct dict_enumval_data t_3 = { "MinimumWithoutVendorSpecificExtension", { .i32 = 3 }}; - struct dict_enumval_data t_4 = { "MediumWithoutVendorSpecificExtension", { .i32 = 4 }}; - struct dict_enumval_data t_5 = { "MaximumWithoutVendorSpecificExtension", { .i32 = 5 }}; - - struct dict_avp_data data = { - 1462, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Trace-Depth", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_INTEGER32 /* base type of data */ - }; - - /* Create the Enumerated type, and then the AVP */ - CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); - CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_3 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_4 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_5 , avp, NULL); - CHECK_dict_new( DICT_AVP, &data , avp, NULL); - } - - /* Trace-NE-Type-List AVP - 3GPP TS 29.272 #7.3.68 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 1463, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Trace-NE-Type-List", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data, NULL, &avp); - } - - /* Trace-Event-List AVP - 3GPP TS 29.272 #7.3.69 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 1464, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Trace-Interface-List", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data, NULL, &avp); - } - - /* Trace-Event-List AVP - 3GPP TS 29.272 #7.3.70 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 1465, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Trace-Event-List", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data, NULL, &avp); - } - - /* OMC-Id AVP - 3GPP TS 29.272 #7.3.71 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 1466, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "OMC-Id", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data, NULL, &avp); - } - - /* Complete-Data-List-Included-Indicator AVP - 3GPP TS 29.272 #7.3.73 */ - { - struct dict_object * avp; - struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Complete-Data-List-Included-Indicator)" , NULL, NULL, NULL }; - struct dict_enumval_data t_0 = { "All_PDP_CONTEXTS_INCLUDED", { .i32 = 0 }}; - struct dict_enumval_data t_1 = { "MODIFIED/ADDED_PDP CONTEXTS_INCLUDED", { .i32 = 1 }}; - - struct dict_avp_data data = { - 1468, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Complete-Data-List-Included-Indicator", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_INTEGER32 /* base type of data */ - }; - - /* Create the Enumerated type, and then the AVP */ - CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); - CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); - CHECK_dict_new( DICT_AVP, &data , avp, NULL); - } - - /* PDP-Type AVP - 3GPP TS 29.272 #7.3.75 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 1470, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "PDP-Type", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data, NULL, &avp); - } - - /* GMLC-Number AVP - 3GPP TS 29.272 #7.3.85 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 1474, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "GMLC-Number", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data, NULL, &avp); - } - - /* SS-Code AVP - 3GPP TS 29.272 #7.3.87 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 1476, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "SS-Code", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data, NULL, &avp); - } - - /* SS-Status AVP - 3GPP TS 29.272 #7.3.88 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 1477, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "SS-Status", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data, NULL, &avp); - } - - /* Notification-To-UE-User AVP - 3GPP TS 29.272 #7.3.89 */ - { - struct dict_object * avp; - struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Notification-To-UE-User)" , NULL, NULL, NULL }; - struct dict_enumval_data t_0 = { "NOTIFY_LOCATION_ALLOWED", { .i32 = 0 }}; - struct dict_enumval_data t_1 = { "NOTIFYANDVERIFY_LOCATION_ALLOWED_IF_NO_RESPONSE", { .i32 = 1 }}; - struct dict_enumval_data t_2 = { "NOTIFYANDVERIFY_LOCATION_NOT_ALLOWED_IF_NO_RESPONSE", { .i32 = 2 }}; - struct dict_enumval_data t_3 = { "LOCATION_NOT_ALLOWED", { .i32 = 3 }}; - - struct dict_avp_data data = { - 1478, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Notification-To-UE-User", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_INTEGER32 /* base type of data */ - }; - - /* Create the Enumerated type, and then the AVP */ - CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); - CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_3 , avp, NULL); - CHECK_dict_new( DICT_AVP, &data , avp, NULL); - } - - /* Client-Identity AVP - 3GPP TS 29.272 #7.3.91 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 1480, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Client-Identity", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data, NULL, &avp); - } - - /* GMLC-Restriction AVP - 3GPP TS 29.272 #7.3.92 */ - { - struct dict_object * avp; - struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(GMLC-Restriction)" , NULL, NULL, NULL }; - struct dict_enumval_data t_0 = { "GMLC_LIST", { .i32 = 0 }}; - struct dict_enumval_data t_1 = { "HOME_COUNTRY", { .i32 = 1 }}; - - struct dict_avp_data data = { - 1481, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "GMLC-Restriction", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_INTEGER32 /* base type of data */ - }; - - /* Create the Enumerated type, and then the AVP */ - CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); - CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); - CHECK_dict_new( DICT_AVP, &data , avp, NULL); - } - - /* PLMN-Client AVP - 3GPP TS 29.272 #7.3.92 */ - { - struct dict_object * avp; - struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(PLMN-Client)" , NULL, NULL, NULL }; - struct dict_enumval_data t_0 = { "BROADCAST_SERVICE", { .i32 = 0 }}; - struct dict_enumval_data t_1 = { "O_AND_M_HPLMN", { .i32 = 1 }}; - struct dict_enumval_data t_2 = { "O_AND_M_VPLMN", { .i32 = 2 }}; - struct dict_enumval_data t_3 = { "ANONYMOUS_LOCATION", { .i32 = 3 }}; - struct dict_enumval_data t_4 = { "TARGET_UE_SUBSCRIBED_SERVICE", { .i32 = 4 }}; - - struct dict_avp_data data = { - 1482, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "PLMN-Client", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_INTEGER32 /* base type of data */ - }; - - /* Create the Enumerated type, and then the AVP */ - CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); - CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_3 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_4 , avp, NULL); - CHECK_dict_new( DICT_AVP, &data , avp, NULL); - } - - /* ServiceTypeIdentity AVP - 3GPP TS 29.272 #7.3.95 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 1484, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "ServiceTypeIdentity", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_UNSIGNED32 /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data, NULL, &avp); - } - - /* QoS-Subscribed - 3GPP TS 29.272 #7.3.77 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 1404, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "QoS-Subscribed", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* ULR-Flags - 3GPP TS 29.272 #7.3.7 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 1405, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "ULR-Flags", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_UNSIGNED32 /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* Ext-PDP-Type AVP - 3GPP TS 29.272 #7.3.75A */ - { - struct dict_avp_data data = { - 1620, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Ext-PDP-Type", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data, NULL, NULL); - } - - /* Ext-PDP-Address AVP - 3GPP TS 29.272 #7.3.129 */ - { - struct dict_avp_data data = { - 1621, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Ext-PDP-Address", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data, Address_type, NULL); - } - - /* TS-Code AVP - 3GPP TS 29.272 #7.3.100 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 1487, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "TS-Code", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* External-Client AVP - 3GPP TS 29.272 #7.3.90 */ - { - struct dict_object * avp; - - struct dict_avp_data data = { - 1479, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "External-Client", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - - struct local_rules_definition rules[] = - { - { "Client-Identity", RULE_REQUIRED, -1, 1 } - ,{ "GMLC-Restriction", RULE_OPTIONAL, -1, 1 } - ,{ "Notification-To-UE-User", RULE_OPTIONAL, -1, 1 } - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - PARSE_loc_rules( rules, avp ); - } - - /* Service-Type AVP - 3GPP TS 29.272 #7.3.94 */ - { - struct dict_object * avp; - - struct dict_avp_data data = { - 1483, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Service-Type", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - - struct local_rules_definition rules[] = - { - { "ServiceTypeIdentity", RULE_REQUIRED, -1, 1 } - ,{ "GMLC-Restriction", RULE_OPTIONAL, -1, 1 } - ,{ "Notification-To-UE-User", RULE_OPTIONAL, -1, 1 } - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - PARSE_loc_rules( rules, avp ); - } - - /* LCS-PrivacyException AVP - 3GPP TS 29.272 #7.3.86 */ - { - struct dict_object * avp; - - struct dict_avp_data data = { - 1475, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "LCS-PrivacyException", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - - struct local_rules_definition rules[] = - { - { "SS-Code", RULE_REQUIRED, -1, 1 } - ,{ "SS-Status", RULE_REQUIRED, -1, 1 } - ,{ "Notification-To-UE-User", RULE_OPTIONAL, -1, 1 } - ,{ "External-Client", RULE_OPTIONAL, -1, -1 } - ,{ "PLMN-Client", RULE_OPTIONAL, -1, -1 } - ,{ "Service-Type", RULE_OPTIONAL, -1, -1 } - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - PARSE_loc_rules( rules, avp ); - } - - /* MO-LR AVP - 3GPP TS 29.272 #7.3.96 */ - { - struct dict_object * avp; - - struct dict_avp_data data = { - 1485, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "MO-LR", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - - struct local_rules_definition rules[] = - { - { "SS-Code", RULE_REQUIRED, -1, 1 } - ,{ "SS-Status", RULE_REQUIRED, -1, 1 } - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - PARSE_loc_rules( rules, avp ); - } - - /* LCS-Info AVP - 3GPP TS 29.272 #7.3.84 */ - { - struct dict_object * avp; - - struct dict_avp_data data = { - 1473, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "LCS-Info", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - - struct local_rules_definition rules[] = - { - { "GMLC-Number", RULE_OPTIONAL, -1, -1 } - ,{ "LCS-PrivacyException", RULE_OPTIONAL, -1, -1 } - ,{ "MO-LR", RULE_OPTIONAL, -1, -1 } - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - PARSE_loc_rules( rules, avp ); - } - - /* PDP-Context AVP - 3GPP TS 29.272 #7.3.74 */ - { - struct dict_object * avp; - - struct dict_avp_data data = { - 1469, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "PDP-Context", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - - struct local_rules_definition rules[] = - { - { "Context-Identifier", RULE_REQUIRED, -1, 1 } - ,{ "PDP-Type", RULE_REQUIRED, -1, 1 } - ,{ "PDP-Address", RULE_OPTIONAL, -1, 1 } - ,{ "QoS-Subscribed", RULE_REQUIRED, -1, 1 } - ,{ "VPLMN-Dynamic-Address-Allowed", RULE_OPTIONAL, -1, 1 } - ,{ "Service-Selection", RULE_REQUIRED, -1, 1 } - ,{ "3GPP-Charging-Characteristics", RULE_OPTIONAL, -1, 1 } - ,{ "Ext-PDP-Type", RULE_OPTIONAL, -1, 1 } - ,{ "Ext-PDP-Address", RULE_OPTIONAL, -1, 1 } - ,{ "AMBR", RULE_OPTIONAL, -1, 1 } - ,{ "SIPTO-Permission", RULE_OPTIONAL, -1, 1 } - ,{ "LIPA-Permission", RULE_OPTIONAL, -1, 1 } - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - PARSE_loc_rules( rules, avp ); - } - - /* GPRS-Subscription-Data AVP - 3GPP TS 29.272 #7.3.72 */ - { - struct dict_object * avp; - - struct dict_avp_data data = { - 1467, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "GPRS-Subscription-Data", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - - struct local_rules_definition rules[] = - { - { "Complete-Data-List-Included-Indicator", RULE_REQUIRED, -1, 1 } - ,{ "PDP-Context", RULE_REQUIRED, -1, 50 } - }; - - CHECK_dict_new( DICT_AVP, &data, NULL, &avp); - PARSE_loc_rules( rules, avp ); - } - - /* Teleservice-List AVP - 3GPP TS 29.272 #7.3.99 */ - { - struct dict_object * avp; - - struct dict_avp_data data = { - 1486, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Teleservice-List", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - - struct local_rules_definition rules[] = - { - { "TS-Code", RULE_REQUIRED, -1, 1 } - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - PARSE_loc_rules( rules, avp ); - } - - /* Call-Barring-Infor-List AVP - 3GPP TS 29.272 #7.3.101 */ - { - struct dict_object * avp; - - struct dict_avp_data data = { - 1488, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Call-Barring-Infor-List", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - - struct local_rules_definition rules[] = - { - { "SS-Code", RULE_REQUIRED, 1, -1 } - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - PARSE_loc_rules( rules, avp ); - } - - /* SGSN-Number AVP - 3GPP TS 29.272 #7.3.102 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 1489, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "SGSN-Number", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* IDR-Flags AVP - 3GPP TS 29.272 #7.3.103 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 1490, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "IDR-Flags", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_UNSIGNED32 /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* IMS-Voice-Over-PS-Sessions-Supported AVP - 3GPP TS 29.272 #7.3.106 */ - { - struct dict_object * avp; - struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(IMS-Voice-Over-PS-Sessions-Supported)" , NULL, NULL, NULL }; - struct dict_enumval_data t_0 = { "NOT_SUPPORTED", { .i32 = 0 }}; - struct dict_enumval_data t_1 = { "SUPPORTED", { .i32 = 1 }}; - - struct dict_avp_data data = { - 1492, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "IMS-Voice-Over-PS-Sessions-Supported", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_INTEGER32 /* base type of data */ - }; - - /* Create the Enumerated type, and then the AVP */ - CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); - CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); - CHECK_dict_new( DICT_AVP, &data , avp, NULL); - } - - /* SGSN-Number AVP - 3GPP TS 29.272 #7.3.102 */ - { - struct dict_object * avp; - struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Homogeneous-Support-of-IMS-Voice-Over-PSSessions)" , NULL, NULL, NULL }; - struct dict_enumval_data t_0 = { "NOT_SUPPORTED", { .i32 = 0 }}; - struct dict_enumval_data t_1 = { "SUPPORTED", { .i32 = 1 }}; - - struct dict_avp_data data = { - 1493, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Homogeneous-Support-of-IMS-Voice-Over-PSSessions", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_INTEGER32 /* base type of data */ - }; - - CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); - CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* Last-UE-Activity-Time AVP - 3GPP TS 29.272 #7.3.108 */ - { - struct dict_avp_data data = { - 1494, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Last-UE-Activity-Time", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , Time_type, NULL); - } - - /* E-UTRAN-Cell-Global-Identity AVP - 3GPP TS 29.272 #7.3.117 */ - { - struct dict_avp_data data = { - 1602, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "E-UTRAN-Cell-Global-Identity", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data, NULL, NULL); - } - - /* Tracking-Area-Identity AVP - 3GPP TS 29.272 #7.3.118 */ - { - struct dict_avp_data data = { - 1603, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Tracking-Area-Identity", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data, NULL, NULL); - } - - /* Cell-Global-Identity AVP - 3GPP TS 29.272 #7.3.119 */ - { - struct dict_avp_data data = { - 1604, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Cell-Global-Identity", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data, NULL, NULL); - } - - /* Routing-Area-Identity AVP - 3GPP TS 29.272 #7.3.120 */ - { - struct dict_avp_data data = { - 1605, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Routing-Area-Identity", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data, NULL, NULL); - } - - /* Location-Area-Identity AVP - 3GPP TS 29.272 #7.3.121 */ - { - struct dict_avp_data data = { - 1606, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Location-Area-Identity", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data, NULL, NULL); - } - - /* Service-Area-Identity AVP - 3GPP TS 29.272 #7.3.122 */ - { - struct dict_avp_data data = { - 1607, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Service-Area-Identity", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data, NULL, NULL); - } - - /* Geographical-Information AVP - 3GPP TS 29.272 #7.3.123 */ - { - struct dict_avp_data data = { - 1608, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Geographical-Information", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data, NULL, NULL); - } - - /* Geodetic-Information AVP - 3GPP TS 29.272 #7.3.124 */ - { - struct dict_avp_data data = { - 1609, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Geodetic-Information", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data, NULL, NULL); - } - - /* Current-Location-Retrieved AVP - 3GPP TS 29.272 #7.3.125 */ - { - struct dict_object * avp; - struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Current-Location-Retrieved)" , NULL, NULL, NULL }; - struct dict_enumval_data t_0 = { "ACTIVE-LOCATION-RETRIEVAL", { .i32 = 0 }}; - - struct dict_avp_data data = { - 1610, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Current-Location-Retrieved", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_INTEGER32 /* base type of data */ - }; - - CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); - CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* Age-Of-Location-Information AVP - 3GPP TS 29.272 #7.3.126 */ - { - struct dict_avp_data data = { - 1611, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Age-Of-Location-Information", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_UNSIGNED32 /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, NULL); - } - - /* UE-SRVCC-Capability AVP - 3GPP TS 29.272 #7.3.130 */ - { - struct dict_object * avp; - struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(UE-SRVCC-Capability)" , NULL, NULL, NULL }; - struct dict_enumval_data t_0 = { "UE-SRVCC-NOT-SUPPORTED", { .i32 = 0 }}; - struct dict_enumval_data t_1 = { "UE-SRVCC-SUPPORTED", { .i32 = 1 }}; - - struct dict_avp_data data = { - 1615, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "UE-SRVCC-Capability", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_INTEGER32 /* base type of data */ - }; - - CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); - CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* MPS-Priority AVP - 3GPP TS 29.272 #7.3.131 */ - { - struct dict_avp_data data = { - 1616, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "MPS-Priority", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_UNSIGNED32 /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, NULL); - } - - /* VPLMN-LIPA-Allowed AVP - 3GPP TS 29.272 #7.3.132 */ - { - struct dict_object * avp; - struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(VPLMN-LIPA-Allowed)" , NULL, NULL, NULL }; - struct dict_enumval_data t_0 = { "LIPA-NOTALLOWED", { .i32 = 0 }}; - struct dict_enumval_data t_1 = { "LIPA-ALLOWED", { .i32 = 1 }}; - - struct dict_avp_data data = { - 1617, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "VPLMN-LIPA-Allowed", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_INTEGER32 /* base type of data */ - }; - - CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); - CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* Subscribed-Periodic-RAU-TAU-Timer AVP - 3GPP TS 29.272 #7.3.134 */ - { - struct dict_avp_data data = { - 1619, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Subscribed-Periodic-RAU-TAU-Timer", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_UNSIGNED32 /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, NULL); - } - - /* Job-Type AVP - 3GPP TS 29.272 #7.3.132 and 3GPP TS 32.422 #5.10.1 */ - { - struct dict_object * avp; - struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Job-Type)" , NULL, NULL, NULL }; - struct dict_enumval_data t_0 = { "Immediate-MDT-Only", { .i32 = 0 }}; - struct dict_enumval_data t_1 = { "Logged-MDT-only", { .i32 = 1 }}; - struct dict_enumval_data t_2 = { "Trace-Only", { .i32 = 2 }}; - struct dict_enumval_data t_3 = { "Immediate-MDT-and-Trace", { .i32 = 3 }}; - - struct dict_avp_data data = { - 1623, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Job-Type", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_INTEGER32 /* base type of data */ - }; - - CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); - CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_3 , avp, NULL); - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* Relay-Node-Indicator AVP - 3GPP TS 29.272 #7.3.147 */ - { - struct dict_object * avp; - struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Relay-Node-Indicator)" , NULL, NULL, NULL }; - struct dict_enumval_data t_0 = { "NOT_RELAY_NODE", { .i32 = 0 }}; - struct dict_enumval_data t_1 = { "RELAY_NODE", { .i32 = 1 }}; - - struct dict_avp_data data = { - 1633, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Relay-Node-Indicator", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_INTEGER32 /* base type of data */ - }; - - CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); - CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* MDT-User-Consent AVP - 3GPP TS 29.272 #7.3.148 */ - { - struct dict_object * avp; - struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(MDT-User-Consent)" , NULL, NULL, NULL }; - struct dict_enumval_data t_0 = { "CONSENT_NOT_GIVEN", { .i32 = 0 }}; - struct dict_enumval_data t_1 = { "CONSENT_GIVEN", { .i32 = 1 }}; - - struct dict_avp_data data = { - 1634, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "MDT-User-Consent", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_INTEGER32 /* base type of data */ - }; - - CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); - CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* PUR-Flags AVP - 3GPP TS 29.272 #7.3.149 */ - { - struct dict_avp_data data = { - 1635, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "PUR-Flags", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_UNSIGNED32 /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, NULL); - } - - /* User-State AVP - 3GPP TS 29.272 #7.3.114 */ - { - struct dict_object * avp; - struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(User-State)" , NULL, NULL, NULL }; - struct dict_enumval_data t_0 = { "DETACHED", { .i32 = 0 }}; - struct dict_enumval_data t_1 = { "ATTACHED_NOT_REACHABLE_FOR_PAGING", { .i32 = 1 }}; - struct dict_enumval_data t_2 = { "ATTACHED_REACHABLE_FOR_PAGING", { .i32 = 2 }}; - struct dict_enumval_data t_3 = { "CONNECTED_NOT_REACHABLE_FOR_PAGING", { .i32 = 3 }}; - struct dict_enumval_data t_4 = { "CONNECTED_REACHABLE_FOR_PAGING", { .i32 = 4 }}; - struct dict_enumval_data t_5 = { "NETWORK_DETERMINED_NOT_REACHABLE", { .i32 = 5 }}; - - struct dict_avp_data data = { - 1499, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "User-State", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_INTEGER32 /* base type of data */ - }; - - CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); - CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_3 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_4 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_5 , avp, NULL); - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* MME-User-State AVP - 3GPP TS 29.272 #7.3.112 */ - { - struct dict_object * avp; - - struct dict_avp_data data = { - 1497, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "MME-User-State", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - - struct local_rules_definition rules[] = - { - { "User-State", RULE_OPTIONAL, -1, 1 } - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - PARSE_loc_rules( rules, avp ); - } - - /* SGSN-User-State AVP - 3GPP TS 29.272 #7.3.113 */ - { - struct dict_object * avp; - - struct dict_avp_data data = { - 1498, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "SGSN-User-State", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - - struct local_rules_definition rules[] = - { - { "User-State", RULE_OPTIONAL, -1, 1 } - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - PARSE_loc_rules( rules, avp ); - } - - /* EPS-User-State AVP - 3GPP TS 29.272 #7.3.110 */ - { - struct dict_object * avp; - - struct dict_avp_data data = { - 1495, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "EPS-User-State", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - - struct local_rules_definition rules[] = - { - { "MME-User-State", RULE_OPTIONAL, -1, 1 } - ,{ "SGSN-User-State", RULE_OPTIONAL, -1, 1 } - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - PARSE_loc_rules( rules, avp ); - } - - /* MME-Location-Information AVP - 3GPP TS 29.272 #7.3.115 */ - { - struct dict_object * avp; - - struct dict_avp_data data = { - 1600, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "MME-Location-Information", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - - struct local_rules_definition rules[] = - { - { "E-UTRAN-Cell-Global-Identity", RULE_OPTIONAL, -1, 1 } - ,{ "Tracking-Area-Identity", RULE_OPTIONAL, -1, 1 } - ,{ "Geographical-Information", RULE_OPTIONAL, -1, 1 } - ,{ "Geodetic-Information", RULE_OPTIONAL, -1, 1 } - ,{ "Current-Location-Retrieved", RULE_OPTIONAL, -1, 1 } - ,{ "Age-Of-Location-Information", RULE_OPTIONAL, -1, 1 } - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - PARSE_loc_rules( rules, avp ); - } - - /* SGSN-Location-Information AVP - 3GPP TS 29.272 #7.3.116 */ - { - struct dict_object * avp; - - struct dict_avp_data data = { - 1601, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "SGSN-Location-Information", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - - struct local_rules_definition rules[] = - { - { "Cell-Global-Identity", RULE_OPTIONAL, -1, 1 } - ,{ "Location-Area-Identity", RULE_OPTIONAL, -1, 1 } - ,{ "Service-Area-Identity", RULE_OPTIONAL, -1, 1 } - ,{ "Routing-Area-Identity", RULE_OPTIONAL, -1, 1 } - ,{ "Geographical-Information", RULE_OPTIONAL, -1, 1 } - ,{ "Geodetic-Information", RULE_OPTIONAL, -1, 1 } - ,{ "Current-Location-Retrieved", RULE_OPTIONAL, -1, 1 } - ,{ "Age-Of-Location-Information", RULE_OPTIONAL, -1, 1 } - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - PARSE_loc_rules( rules, avp ); - } - - /* Area-Scope AVP - 3GPP TS 29.272 #7.3.138 */ - { - struct dict_object * avp; - - struct dict_avp_data data = { - 1624, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Area-Scope", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - - struct local_rules_definition rules[] = - { - { "Cell-Global-Identity", RULE_OPTIONAL, -1, -1 } - ,{ "E-UTRAN-Cell-Global-Identity", RULE_OPTIONAL, -1, -1 } - ,{ "Routing-Area-Identity", RULE_OPTIONAL, -1, -1 } - ,{ "Location-Area-Identity", RULE_OPTIONAL, -1, -1 } - ,{ "Tracking-Area-Identity", RULE_OPTIONAL, -1, -1 } - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - PARSE_loc_rules( rules, avp ); - } - - /* MDT-Configuration AVP - 3GPP TS 29.272 #7.3.136 */ - { - struct dict_object * avp; - - struct dict_avp_data data = { - 1622, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "MDT-Configuration", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - - struct local_rules_definition rules[] = - { - { "Job-Type", RULE_REQUIRED, -1, 1 } - ,{ "Area-Scope", RULE_OPTIONAL, -1, 1 } - ,{ "List-Of-Measurements", RULE_OPTIONAL, -1, 1 } - ,{ "Reporting-Trigger", RULE_OPTIONAL, -1, 1 } - ,{ "Report-Interval", RULE_OPTIONAL, -1, 1 } - ,{ "Report-Amount", RULE_OPTIONAL, -1, 1 } - ,{ "Event-Threshold-RSRP", RULE_OPTIONAL, -1, 1 } - ,{ "Event-Threshold-RSRQ", RULE_OPTIONAL, -1, 1 } - ,{ "Logging-Interval", RULE_OPTIONAL, -1, 1 } - ,{ "Logging-Duration", RULE_OPTIONAL, -1, 1 } - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - PARSE_loc_rules( rules, avp ); - } - - /* EPS-Location-Information AVP - 3GPP TS 29.272 #7.3.111 */ - { - struct dict_object * avp; - - struct dict_avp_data data = { - 1496, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "EPS-Location-Information", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - - struct local_rules_definition rules[] = - { - { "MME-Location-Information", RULE_OPTIONAL, -1, 1 } - ,{ "SGSN-Location-Information", RULE_OPTIONAL, -1, 1 } - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - PARSE_loc_rules( rules, avp ); - } - - /* Active-APN AVP - 3GPP TS 29.173 #7.3.127 */ - { - struct dict_object * avp; - - struct dict_avp_data data = { - 1612, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Active-APN", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - - struct local_rules_definition rules[] = - { - { "Context-Identifier", RULE_REQUIRED, -1, 1 } - ,{ "Service-Selection", RULE_OPTIONAL, -1, 1 } - ,{ "MIP6-Agent-Info", RULE_OPTIONAL, -1, 1 } - ,{ "Visited-Network-Identifier", RULE_OPTIONAL, -1, 1 } - ,{ "Specific-APN-Info", RULE_OPTIONAL, -1, -1 } - }; - - CHECK_dict_new( DICT_AVP, &data, NULL, &avp); - PARSE_loc_rules( rules, avp ); - } - - /* Error-Diagnostic AVP - 3GPP TS 29.272 #7.3.128 */ - { - struct dict_object * avp; - struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Error-Diagnostic)" , NULL, NULL, NULL }; - struct dict_enumval_data t_0 = { "GPRS_DATA_SUBSCRIBED", { .i32 = 0 }}; - struct dict_enumval_data t_1 = { "NO_GPRS_DATA_SUBSCRIBED", { .i32 = 1 }}; - struct dict_enumval_data t_2 = { "ODB-ALL-APN", { .i32 = 2 }}; - struct dict_enumval_data t_3 = { "ODB-HPLMN-APN", { .i32 = 3 }}; - struct dict_enumval_data t_4 = { "ODB-VPLMN-APN", { .i32 = 4 }}; - - struct dict_avp_data data = { - 1614, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Error-Diagnostic", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_INTEGER32 /* base type of data */ - }; - - CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); - CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_3 , avp, NULL); - CHECK_dict_new( DICT_ENUMVAL, &t_4 , avp, NULL); - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - } - - /* GMLC-Address AVP - 3GPP TS 29.173 #6.4.7 */ - { - struct dict_avp_data data = { - 2405, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "GMLC-Address", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_OCTETSTRING /* base type of data */ - }; - - CHECK_dict_new( DICT_AVP, &data , Address_type, NULL); - } - - /* Supported Features AVP - 3GPP TS 29.229 */ - { - struct dict_object * avp; - struct dict_avp_data data = { - 628, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Supported-Features", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - - struct local_rules_definition rules[] = - { - { "Vendor-Id", RULE_REQUIRED, 1, 1 } - ,{ "Feature-List-ID", RULE_REQUIRED, 1, 1 } - ,{ "Feature-List", RULE_REQUIRED, 1, 1 } - }; - - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); - PARSE_loc_rules( rules, avp ); - } - - /* Trace-Data AVP - 3GPP TS 29.272 #7.3.63 */ - { - struct dict_object * avp; - - struct dict_avp_data data = { - 1458, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Trace-Data", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - - struct local_rules_definition rules[] = - { - { "Trace-Reference", RULE_REQUIRED, -1, 1 } - ,{ "Trace-Depth", RULE_REQUIRED, -1, 1 } - ,{ "Trace-NE-Type-List", RULE_REQUIRED, -1, 1 } - ,{ "Trace-Interface-List", RULE_OPTIONAL, -1, 1 } - ,{ "Trace-Event-List", RULE_REQUIRED, -1, 1 } - ,{ "OMC-Id", RULE_OPTIONAL, -1, 1 } - ,{ "Trace-Collection-Entity", RULE_REQUIRED, -1, 1 } - ,{ "MDT-Configuration", RULE_OPTIONAL, -1, 1 } - }; - - CHECK_dict_new( DICT_AVP, &data, NULL, &avp); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "APN-Configuration-Profile", &avp); PARSE_loc_rules( rules, avp ); } /* Subscription-Data AVP - 3GPP TS 29.272 #7.3.2 */ { - /* - - * The Subscription-Data AVP is of type Grouped. It shall contain - * the information related to the user profile relevant for - * EPS and GERAN/UTRAN. - - Subscription-Data ::= - [ Subscriber-Status ] - [ MSISDN ] - [ STN-SR ] - [ ICS-Indicator ] - [ Network-Access-Mode ] - [ Operator-Determined-Barring ] - [ HPLMN-ODB ] - *10[ Regional-Subscription-Zone-Code] - [ Access-Restriction-Data ] - [ APN-OI-Replacement ] - [ LCS-Info ] - [ Teleservice-List ] - [ Call-Barring-Infor-List ] - [ 3GPP-Charging-Characteristics ] - [ AMBR ] - [ APN-Configuration-Profile ] - [ RAT-Frequency-Selection-Priority-ID ] - [ Trace-Data] - [ GPRS-Subscription-Data ] - *[ CSG-Subscription-Data ] - [ Roaming-Restricted-Due-To-Unsupported-Feature ] - [ Subscribed-Periodic-RAU-TAU-Timer ] - [ MPS-Priority ] - [ VPLMN-LIPA-Allowed ] - [ Relay-Node-Indicator ] - [ MDT-User-Consent ] - *[ AVP ] - - * The AMBR included in this grouped AVP shall include the AMBR - * associated to the user’s subscription (UE-AMBR); - * Max-Requested-Bandwidth-UL and Max-Requested-Bandwidth-DL within - * this AVP shall not both be set to "0". - * The APN-OI-Replacement included in this grouped AVP shall include - * the UE level APN-OI-Replacement associated to the user’s subscription. - */ struct dict_object * avp; - struct dict_avp_data data = { - 1400, /* Code */ - VENDOR_3GPP_Id, /* Vendor */ - "Subscription-Data", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - struct local_rules_definition rules[] = { - { "Subscriber-Status", RULE_OPTIONAL, -1, 1 } - ,{ "MSISDN", RULE_OPTIONAL, -1, 1 } - ,{ "STN-SR", RULE_OPTIONAL, -1, 1 } - ,{ "ICS-Indicator", RULE_OPTIONAL, -1, 1 } - ,{ "Network-Access-Mode", RULE_OPTIONAL, -1, 1 } - ,{ "Operator-Determined-Barring", RULE_OPTIONAL, -1, 1 } - ,{ "HPLMN-ODB", RULE_OPTIONAL, -1, 1 } - ,{ "Regional-Subscription-Zone-Code", RULE_OPTIONAL, -1, 10 } - ,{ "Access-Restriction-Data", RULE_OPTIONAL, -1, 1 } - ,{ "APN-OI-Replacement", RULE_OPTIONAL, -1, 1 } - ,{ "LCS-Info", RULE_OPTIONAL, -1, 1 } - ,{ "Teleservice-List", RULE_OPTIONAL, -1, 1 } - ,{ "Call-Barring-Infor-List", RULE_OPTIONAL, -1, 1 } - ,{ "3GPP-Charging-Characteristics", RULE_OPTIONAL, -1, 1 } - ,{ "AMBR", RULE_OPTIONAL, -1, 1 } - ,{ "APN-Configuration-Profile", RULE_OPTIONAL, -1, 1 } - ,{ "RAT-Frequency-Selection-Priority-ID", RULE_OPTIONAL, -1, 1 } - ,{ "Trace-Data", RULE_OPTIONAL, -1, 1 } - ,{ "GPRS-Subscription-Data", RULE_OPTIONAL, -1, 1 } - ,{ "CSG-Subscription-Data", RULE_OPTIONAL, -1, -1 } - ,{ "Roaming-Restricted-Due-To-Unsupported-Feature", RULE_OPTIONAL, -1, 1 } - ,{ "Subscribed-Periodic-RAU-TAU-Timer", RULE_OPTIONAL, -1, 1 } - ,{ "MPS-Priority", RULE_OPTIONAL, -1, 1 } - ,{ "VPLMN-LIPA-Allowed", RULE_OPTIONAL, -1, 1 } - ,{ "Relay-Node-Indicator", RULE_OPTIONAL, -1, 1 } - ,{ "MDT-User-Consent", RULE_OPTIONAL, -1, 1 } + { { .avp_vendor = 10415, .avp_name = "Subscriber-Status" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "MSISDN" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "STN-SR" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "ICS-Indicator" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Network-Access-Mode" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Operator-Determined-Barring" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "HPLMN-ODB" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Regional-Subscription-Zone-Code" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Access-Restriction-Data" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "APN-OI-Replacement" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "LCS-Info" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Teleservice-List" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Call-Barring-Infor-List" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "3GPP-Charging-Characteristics" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "AMBR" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "APN-Configuration-Profile" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "RAT-Frequency-Selection-Priority-ID" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Trace-Data" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "GPRS-Subscription-Data" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "CSG-Subscription-Data" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Roaming-Restricted-Due-To-Unsupported-Feature" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Subscribed-Periodic-RAU-TAU-Timer" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "MPS-Priority" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "VPLMN-LIPA-Allowed" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Relay-Node-Indicator" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "MDT-User-Consent" }, RULE_OPTIONAL, -1, 1 }, }; - CHECK_dict_new( DICT_AVP, &data , NULL, &avp); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Subscription-Data", &avp); PARSE_loc_rules( rules, avp ); } + }; + /* Command section */ + { /* S6A-Update Location Request - 3GPP TS 29.272 #7.2.3 */ - { - /* - - The Update-Location-Request (ULR) command, indicated by the - Command-Code field set to 316 and the "R" bit set in - the Command Flags field, is sent from MME or SGSN to HSS. - - < Update-Location-Request> ::= < Diameter Header: 316, REQ, PXY, 16777251 > - < Session-Id > - [ Vendor-Specific-Application-Id ] - { Auth-Session-State } - { Origin-Host } - { Origin-Realm } - [ Destination-Host ] - { Destination-Realm } - { User-Name } - *[ Supported-Features ] - [ Terminal-Information ] - { RAT-Type } - { ULR-Flags } - [ UE-SRVCC-Capability ] - { Visited-PLMN-Id } - [ SGSN-Number ] - [ Homogeneous-Support-of-IMS-Voice-Over-PS-Sessions ] - [ GMLC-Address ] - *[ Active-APN ] - *[ AVP ] - *[ Proxy-Info ] - *[ Route-Record ] - */ + { struct dict_object * cmd; - struct dict_cmd_data data = { - 316, /* Code */ - "Update-Location-Request", /* Name */ - CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ - CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE /* Fixed flag values */ - }; + struct dict_cmd_data data = { + 316, /* Code */ + "3GPP/Update-Location-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[] = + { + { { .avp_name = "Session-Id" }, RULE_FIXED_HEAD, -1, 1 }, + { { .avp_name = "Vendor-Specific-Application-Id" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Auth-Session-State" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Host" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Realm" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Destination-Host" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Destination-Realm" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "User-Name" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Supported-Features" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Terminal-Information" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "ULR-Flags" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Visited-PLMN-Id" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Equivalent-PLMN-List" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "RAT-Type" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "SGSN-Number" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Homogeneous-Support-of-IMS-Voice-Over-PS-Sessions" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Active-APN" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "UE-SRVCC-Capability" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Proxy-Info" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_name = "Route-Record" }, RULE_OPTIONAL, -1, -1 }, + }; - struct local_rules_definition rules[] = - { - { "Session-Id", RULE_FIXED_HEAD, -1, 1 } - ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } - ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } - ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } - ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } - ,{ "Destination-Host", RULE_OPTIONAL, -1, 1 } - ,{ "Destination-Realm", RULE_REQUIRED, -1, 1 } - ,{ "User-Name", RULE_REQUIRED, -1, 1 } - ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } - ,{ "Terminal-Information", RULE_OPTIONAL, -1, 1 } - ,{ "RAT-Type", RULE_REQUIRED, 1, 1 } - ,{ "ULR-Flags", RULE_REQUIRED, 1, 1 } - ,{ "UE-SRVCC-Capability", RULE_OPTIONAL, -1, 1 } - ,{ "Visited-PLMN-Id", RULE_REQUIRED, 1, 1 } - ,{ "SGSN-Number", RULE_OPTIONAL, -1, 1 } - ,{ "Homogeneous-Support-of-IMS-Voice-Over-PSSessions", RULE_OPTIONAL, -1, 1 } - ,{ "GMLC-Address", RULE_OPTIONAL, -1, 1 } - ,{ "Active-APN", RULE_OPTIONAL, -1, -1 } - ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } - ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } - }; - - CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); - PARSE_loc_rules( rules, cmd ); - } + CHECK_dict_new(DICT_COMMAND, &data, s6a, &cmd); + PARSE_loc_rules(rules, cmd); + } /* S6A-Update Location Answer - 3GPP TS 29.272 #7.2.4 */ - { - /* - - The Update-Location-Answer (ULA) command, indicated by the - Command-Code field set to 316 and the 'R' bit cleared - in the Command Flags field, is sent from HSS to MME or SGSN. - - < Update-Location-Answer> ::= < Diameter Header: 316, PXY, 16777251 > - < Session-Id > - [ Vendor-Specific-Application-Id ] - [ Result-Code ] - [ Experimental-Result ] - [ Error-Diagnostic ] - { Auth-Session-State } - { Origin-Host } - { Origin-Realm } - *[ Supported-Features ] - [ ULA-Flags ] - [ Subscription-Data ] - *[ AVP ] - *[ Failed-AVP ] - *[ Proxy-Info ] - *[ Route-Record ] - */ + { struct dict_object * cmd; - struct dict_cmd_data data = { - 316, /* Code */ - "Update-Location-Answer", /* Name */ - CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ - CMD_FLAG_PROXIABLE /* Fixed flag values */ - }; + struct dict_cmd_data data = { + 316, /* Code */ + "3GPP/Update-Location-Answer", /* Name */ + CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ + CMD_FLAG_PROXIABLE /* Fixed flag values */ + }; + struct local_rules_definition rules[] = + { + { { .avp_name = "Session-Id" }, RULE_FIXED_HEAD, -1, 1 }, + { { .avp_name = "Vendor-Specific-Application-Id" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Result-Code" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Experimental-Result" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Auth-Session-State" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Host" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Realm" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Error-Diagnostic" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "ULA-Flags" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Subscription-Data" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Failed-AVP" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_name = "Proxy-Info" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_name = "Route-Record" }, RULE_OPTIONAL, -1, -1 }, + }; - struct local_rules_definition rules[] = - { - { "Session-Id", RULE_FIXED_HEAD, -1, 1 } - ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } - ,{ "Result-Code", RULE_OPTIONAL, -1, 1 } - ,{ "Experimental-Result", RULE_OPTIONAL, -1, 1 } - ,{ "Error-Diagnostic", RULE_OPTIONAL, -1, 1 } - ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } - ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } - ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } - ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } - ,{ "ULA-Flags", RULE_OPTIONAL, -1, 1 } - ,{ "Subscription-Data", RULE_OPTIONAL, -1, 1 } - ,{ "Failed-AVP", RULE_OPTIONAL, -1, -1 } - ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } - ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } - }; - - CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); - PARSE_loc_rules( rules, cmd ); - } - - /* S6A-Cancel-Location-Request - 3GPP TS 29.272 #7.2.7 */ - { - /* - - The Cancel-Location-Request (CLR) command, indicated by the - Command-Code field set to 317 and the 'R' bit set in - the Command Flags field, is sent from HSS to MME or SGSN. - - < Cancel-Location-Request> ::= < Diameter Header: 317, REQ, PXY, 16777251 > - < Session-Id > - [ Vendor-Specific-Application-Id ] - { Auth-Session-State } - { Origin-Host } - { Origin-Realm } - { Destination-Host } - { Destination-Realm } - { User-Name } - *[Supported-Features ] - { Cancellation-Type } - *[ AVP ] - *[ Proxy-Info ] - *[ Route-Record ] - */ - struct dict_object * cmd; - struct dict_cmd_data data = { - 317, /* Code */ - "Cancel-Location-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 } - ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } - ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } - ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } - ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } - ,{ "Destination-Host", RULE_OPTIONAL, -1, 1 } - ,{ "Destination-Realm", RULE_REQUIRED, -1, 1 } - ,{ "User-Name", RULE_REQUIRED, -1, 1 } - ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } - ,{ "Cancellation-Type", RULE_REQUIRED, -1, 1 } - ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } - ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } - }; - - CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); - PARSE_loc_rules( rules, cmd ); - } - - /* S6A-Cancel-Location-Answer - 3GPP TS 29.272 #7.2.8 */ - { - /* - - The Cancel-Location-Answer (CLA) command, indicated by the - Command-Code field set to 317 and the 'R' bit cleared - in the Command Flags field, is sent from MME or SGSN to HSS. - - < Cancel-Location-Answer> ::= < Diameter Header: 317, PXY, 16777251 > - < Session-Id > - [ Vendor-Specific-Application-Id ] - *[ Supported-Features ] - [ Result-Code ] - [ Experimental-Result ] - { Auth-Session-State } - { Origin-Host } - { Origin-Realm } - *[ AVP ] - *[ Failed-AVP ] - *[ Proxy-Info ] - *[ Route-Record ] - */ - struct dict_object * cmd; - struct dict_cmd_data data = { - 317, /* Code */ - "Cancel-Location-Answer", /* Name */ - CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ - CMD_FLAG_PROXIABLE /* Fixed flag values */ - }; - - struct local_rules_definition rules[] = - { - { "Session-Id", RULE_FIXED_HEAD, -1, 1 } - ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } - ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } - ,{ "Result-Code", RULE_OPTIONAL, -1, 1 } - ,{ "Experimental-Result", RULE_OPTIONAL, -1, 1 } - ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } - ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } - ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } - ,{ "Failed-AVP", RULE_OPTIONAL, -1, -1 } - ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } - ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } - }; - - CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); - PARSE_loc_rules( rules, cmd ); - } + CHECK_dict_new(DICT_COMMAND, &data, s6a, &cmd); + PARSE_loc_rules(rules, cmd); + } /* S6A-Authentication-Information-Request - 3GPP TS 29.272 #7.2.4 */ - { - /* - - The Authentication-Information-Request (AIR) command, indicated by - the Command-Code field set to 318 and the 'R' - bit set in the Command Flags field, is sent from MME or SGSN to HSS. - - < Authentication-Information-Request> ::= < Diameter Header: 318, REQ, PXY, 16777251 > - < Session-Id > - [ Vendor-Specific-Application-Id ] - { Auth-Session-State } - { Origin-Host } - { Origin-Realm } - [ Destination-Host ] - { Destination-Realm } - { User-Name } - *[ Supported-Features ] - [ Requested-EUTRAN-Authentication-Info ] - [ Requested-UTRAN-GERAN-Authentication-Info ] - { Visited-PLMN-Id } - *[ AVP ] - *[ Proxy-Info ] - *[ Route-Record ] - */ + { struct dict_object * cmd; - struct dict_cmd_data data = { - 318, /* Code */ - "Authentication-Information-Request", /* Name */ - CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ - CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE /* Fixed flag values */ - }; + struct dict_cmd_data data = { + 318, /* Code */ + "3GPP/Authentication-Information-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[] = + { + { { .avp_name = "Session-Id" }, RULE_FIXED_HEAD, -1, 1 }, + { { .avp_name = "Vendor-Specific-Application-Id" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Auth-Session-State" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Host" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Realm" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Destination-Host" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Destination-Realm" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "User-Name" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Supported-Features" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Requested-EUTRAN-Authentication-Info" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Requested-UTRAN-GERAN-Authentication-Info" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Visited-PLMN-Id" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "AIR-Flags" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Proxy-Info" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_name = "Route-Record" }, RULE_OPTIONAL, -1, -1 }, + }; - struct local_rules_definition rules[] = - { - { "Session-Id", RULE_FIXED_HEAD, -1, 1 } - ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } - ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } - ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } - ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } - ,{ "Destination-Host", RULE_OPTIONAL, -1, 1 } - ,{ "Destination-Realm", RULE_REQUIRED, -1, 1 } - ,{ "User-Name", RULE_REQUIRED, -1, 1 } - ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } - ,{ "Requested-EUTRAN-Authentication-Info", RULE_OPTIONAL, -1, 1 } - ,{ "Requested-UTRAN-GERAN-Authentication-Info", RULE_OPTIONAL, -1, 1 } - ,{ "Visited-PLMN-Id", RULE_REQUIRED, -1, 1 } - ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } - ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } - }; - - CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); - PARSE_loc_rules( rules, cmd ); - } + CHECK_dict_new(DICT_COMMAND, &data, s6a, &cmd); + PARSE_loc_rules(rules, cmd); + } /* S6A-Authentication-Information-Answer - 3GPP TS 29.272 #7.2.6 */ - { - /* - - The Authentication-Information-Answer (AIA) command, indicated by - the Command-Code field set to318 and the 'R' bit cleared in the - Command Flags field, is sent from HSS to MME or SGSN. - - < Authentication-Information-Answer> ::= < Diameter Header: 318, PXY, 16777251 > - < Session-Id > - [ Vendor-Specific-Application-Id ] - [ Result-Code ] - [ Experimental-Result ] - [ Error-Diagnostic ] - { Auth-Session-State } - { Origin-Host } - { Origin-Realm } - *[ Supported-Features ] - [ Authentication-Info ] - *[ AVP ] - *[ Failed-AVP ] - *[ Proxy-Info ] - *[ Route-Record ] - */ + { struct dict_object * cmd; - struct dict_cmd_data data = { - 318, /* Code */ - "Authentication-Information-Answer", /* Name */ - CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ - CMD_FLAG_PROXIABLE /* Fixed flag values */ - }; + struct dict_cmd_data data = { + 318, /* Code */ + "3GPP/Authentication-Information-Answer", /* Name */ + CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ + CMD_FLAG_PROXIABLE /* Fixed flag values */ + }; + struct local_rules_definition rules[] = + { + { { .avp_name = "Session-Id" }, RULE_FIXED_HEAD, -1, 1 }, + { { .avp_name = "Vendor-Specific-Application-Id" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Result-Code" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Experimental-Result" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Auth-Session-State" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Host" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Realm" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Error-Diagnostic" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Supported-Features" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "Authentication-Info" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Failed-AVP" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_name = "Proxy-Info" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_name = "Route-Record" }, RULE_OPTIONAL, -1, -1 }, + }; - struct local_rules_definition rules[] = - { - { "Session-Id", RULE_FIXED_HEAD, -1, 1 } - ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } - ,{ "Result-Code", RULE_OPTIONAL, -1, 1 } - ,{ "Experimental-Result", RULE_OPTIONAL, -1, 1 } - ,{ "Error-Diagnostic", RULE_OPTIONAL, -1, 1 } - ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } - ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } - ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } - ,{ "Authentication-Info", RULE_OPTIONAL, -1, 1 } - ,{ "Failed-AVP", RULE_OPTIONAL, -1, -1 } - ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } - ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } - }; - - CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); - PARSE_loc_rules( rules, cmd ); - } - - /* Insert-Subscriber-Data-Request IDR Command - 3GPP TS 29.272 #7.2.9 */ - { - /* - - The Insert-Subscriber-Data-Request (IDR) command, indicated by the - Command-Code field set to 319 and the 'R' bit set in the Command - Flags field, is sent from HSS to MME or SGSN. - - < Insert-Subscriber-Data-Request> ::= < Diameter Header: 319, REQ, PXY, 16777251 > - < Session-Id > - [ Vendor-Specific-Application-Id ] - { Auth-Session-State } - { Origin-Host } - { Origin-Realm } - { Destination-Host } - { Destination-Realm } - { User-Name } - *[ Supported-Features] - { Subscription-Data} - [IDR- Flags ] - *[ AVP ] - *[ Proxy-Info ] - *[ Route-Record ] - */ - struct dict_object * cmd; - struct dict_cmd_data data = { - 319, /* Code */ - "Insert-Subscriber-Data-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 } - ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } - ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } - ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } - ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } - ,{ "Destination-Host", RULE_REQUIRED, -1, 1 } - ,{ "Destination-Realm", RULE_REQUIRED, -1, 1 } - ,{ "User-Name", RULE_REQUIRED, -1, 1 } - ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } - ,{ "Subscription-Data", RULE_REQUIRED, -1, 1 } - ,{ "IDR-Flags", RULE_OPTIONAL, -1, 1 } - ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } - ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } - }; - - CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); - PARSE_loc_rules( rules, cmd ); - } - - /* Insert-Subscriber-Data-Answer IDA Command - 3GPP TS 29.272 #7.2.10 */ - { - /* - - The Insert-Subscriber-Data-Request (IDR) command, indicated by the - Command-Code field set to 319 and the 'R' bit set in the Command - Flags field, is sent from HSS to MME or SGSN. - - < Insert-Subscriber-Data-Answer> ::= < Diameter Header: 319, PXY, 16777251 > - < Session-Id > - [ Vendor-Specific-Application-Id ] - *[ Supported-Features ] - [ Result-Code ] - [ Experimental-Result ] - { Auth-Session-State } - { Origin-Host } - { Origin-Realm } - [ IMS-Voice-Over-PS-Sessions-Supported ] - [ Last-UE-Activity-Time ] - [ RAT-Type ] - [ IDA-Flags ] - [ EPS-User-State ] - [ EPS-Location-Information ] - *[ AVP ] - *[ Failed-AVP ] - *[ Proxy-Info ] - *[ Route-Record ] - */ - struct dict_object * cmd; - struct dict_cmd_data data = { - 319, /* Code */ - "Insert-Subscriber-Data-Answer", /* Name */ - CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ - CMD_FLAG_PROXIABLE /* Fixed flag values */ - }; - - struct local_rules_definition rules[] = - { - { "Session-Id", RULE_FIXED_HEAD, -1, 1 } - ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } - ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } - ,{ "Result-Code", RULE_OPTIONAL, -1, 1 } - ,{ "Experimental-Result", RULE_OPTIONAL, -1, 1 } - ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } - ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } - ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } - ,{ "IMS-Voice-Over-PS-Sessions-Supported", RULE_OPTIONAL, -1, 1 } - ,{ "Last-UE-Activity-Time", RULE_OPTIONAL, -1, 1 } - ,{ "RAT-Type", RULE_OPTIONAL, -1, 1 } - ,{ "IDA-Flags", RULE_OPTIONAL, -1, 1 } - ,{ "EPS-User-State", RULE_OPTIONAL, -1, 1 } - ,{ "EPS-Location-Information", RULE_OPTIONAL, -1, 1 } - ,{ "Failed-AVP", RULE_OPTIONAL, -1, -1 } - ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } - ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } - }; - - CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); - PARSE_loc_rules( rules, cmd ); - } - - /* Delete-Subscriber-Data-Request (DSR) Command - 3GPP TS 29.272 #7.2.11 */ - { - /* - - The Delete-SubscriberData-Request (DSR) command, indicated by - the Command-Code field set to 320 and the 'R' bit - set in the Command Flags field, is sent from HSS to MME or SGSN. - - < Delete-Subscriber-Data-Request > ::= < Diameter Header: 320, REQ, PXY, 16777251 > - < Session-Id > - [ Vendor-Specific-Application-Id ] - { Auth-Session-State } - { Origin-Host } - { Origin-Realm } - { Destination-Host } - { Destination-Realm } - { User-Name } - *[ Supported-Features ] - { DSR-Flags } - *[ Context-Identifier ] - [ Trace-Reference ] - *[ TS-Code ] - *[ SS-Code ] - *[ AVP ] - *[ Proxy-Info ] - *[ Route-Record ] - */ - struct dict_object * cmd; - struct dict_cmd_data data = { - 320, /* Code */ - "Delete-SubscriberData-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 } - ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } - ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } - ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } - ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } - ,{ "Destination-Host", RULE_REQUIRED, -1, 1 } - ,{ "Destination-Realm", RULE_REQUIRED, -1, 1 } - ,{ "User-Name", RULE_REQUIRED, -1, 1 } - ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } - ,{ "DSR-Flags", RULE_REQUIRED, -1, 1 } - ,{ "Context-Identifier", RULE_OPTIONAL, -1, -1 } - ,{ "Trace-Reference", RULE_OPTIONAL, -1, 1 } - ,{ "TS-Code", RULE_OPTIONAL, -1, -1 } - ,{ "SS-Code", RULE_OPTIONAL, -1, -1 } - ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } - ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } - }; - - CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); - PARSE_loc_rules( rules, cmd ); - } - - /* Delete-Subscriber-Data-Answer (DSA) Command - 3GPP TS 29.272 #7.2.12 */ - { - /* - - The Delete-SubscriberData-Answer (DSA) command, indicated by the - Command-Code field set to 320 and the 'R' bit - cleared in the Command Flags field, is sent from MME or SGSN to HSS. - - < Delete-Subscriber-Data-Answer> ::= < Diameter Header: 320, PXY, 16777251 > - < Session-Id > - [ Vendor-Specific-Application-Id ] - *[ Supported-Features ] - [ Result-Code ] - [ Experimental-Result ] - { Auth-Session-State } - { Origin-Host } - { Origin-Realm } - [ DSA-Flags ] - *[ AVP ] - *[ Failed-AVP ] - *[ Proxy-Info ] - *[ Route-Record ] - */ - struct dict_object * cmd; - struct dict_cmd_data data = { - 320, /* Code */ - "Delete-SubscriberData-Answer", /* Name */ - CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ - CMD_FLAG_PROXIABLE /* Fixed flag values */ - }; - - struct local_rules_definition rules[] = - { - { "Session-Id", RULE_FIXED_HEAD, -1, 1 } - ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } - ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } - ,{ "Result-Code", RULE_OPTIONAL, -1, 1 } - ,{ "Experimental-Result", RULE_OPTIONAL, -1, 1 } - ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } - ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } - ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } - ,{ "DSA-Flags", RULE_OPTIONAL, -1, 1 } - ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } - ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } - }; - - CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); - PARSE_loc_rules( rules, cmd ); - } + CHECK_dict_new(DICT_COMMAND, &data, s6a, &cmd); + PARSE_loc_rules(rules, cmd); + } /* Purge-UE-Request (PUR) Command - 3GPP TS 29.272 #7.2.13 */ { - /* - - The Delete-SubscriberData-Request (DSR) command, indicated by - the Command-Code field set to 320 and the 'R' bit - set in the Command Flags field, is sent from HSS to MME or SGSN. - - < Purge-UE-Request> ::= < Diameter Header: 321, REQ, PXY, 16777251 > - < Session-Id > - [ Vendor-Specific-Application-Id ] - { Auth-Session-State } - { Origin-Host } - { Origin-Realm } - [ Destination-Host ] - { Destination-Realm } - { User-Name } - [ PUR-Flags ] - *[ Supported-Features ] - *[ AVP ] - *[ Proxy-Info ] - *[ Route-Record ] - */ struct dict_object * cmd; struct dict_cmd_data data = { 321, /* Code */ - "Purge-UE-Request", /* Name */ + "3GPP/Purge-UE-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 } - ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } - ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } - ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } - ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } - ,{ "Destination-Host", RULE_OPTIONAL, -1, 1 } - ,{ "Destination-Realm", RULE_REQUIRED, -1, 1 } - ,{ "User-Name", RULE_REQUIRED, -1, 1 } - ,{ "PUR-Flags", RULE_OPTIONAL, -1, 1 } - ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } - ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } - ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } + { { .avp_name = "Session-Id" }, RULE_FIXED_HEAD, -1, 1 }, + { { .avp_name = "Vendor-Specific-Application-Id" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Auth-Session-State" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Host" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Realm" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Destination-Host" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Destination-Realm" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "User-Name" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Supported-Features" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_vendor = 10415, .avp_name = "PUR-Flags" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Proxy-Info" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_name = "Route-Record" }, RULE_OPTIONAL, -1, -1 }, }; - CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); + CHECK_dict_new( DICT_COMMAND, &data, s6a, &cmd); PARSE_loc_rules( rules, cmd ); } /* Purge-UE-Answer (PUA) Command - 3GPP TS 29.272 #7.2.14 */ { - /* - - The Purge-UE-Answer (PUA) command, indicated by the Command-Code - field set to 321 and the 'R' bit cleared in the - Command Flags field, is sent from HSS to MME or SGSN. - - < Purge-UE-Answer> ::= < Diameter Header: 321, PXY, 16777251 > - < Session-Id > - [ Vendor-Specific-Application-Id ] - *[ Supported-Features ] - [ Result-Code ] - [ Experimental-Result ] - { Auth-Session-State } - { Origin-Host } - { Origin-Realm } - [ PUA-Flags ] - *[ AVP ] - *[ Failed-AVP ] - *[ Proxy-Info ] - *[ Route-Record ] - */ struct dict_object * cmd; struct dict_cmd_data data = { 321, /* Code */ - "Purge-UE-Answer", /* Name */ + "3GPP/Purge-UE-Answer", /* Name */ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ CMD_FLAG_PROXIABLE /* Fixed flag values */ }; - struct local_rules_definition rules[] = { - { "Session-Id", RULE_FIXED_HEAD, -1, 1 } - ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } - ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } - ,{ "Result-Code", RULE_OPTIONAL, -1, 1 } - ,{ "Experimental-Result", RULE_OPTIONAL, -1, 1 } - ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } - ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } - ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } - ,{ "PUA-Flags", RULE_OPTIONAL, -1, 1 } - ,{ "Failed-AVP", RULE_OPTIONAL, -1, -1 } - ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } - ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } + { { .avp_name = "Session-Id" }, RULE_FIXED_HEAD, -1, 1 }, + { { .avp_name = "Vendor-Specific-Application-Id" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Result-Code" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Experimental-Result" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Auth-Session-State" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Host" }, RULE_REQUIRED, -1, 1 }, + { { .avp_name = "Origin-Realm" }, RULE_REQUIRED, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "Error-Diagnostic" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_vendor = 10415, .avp_name = "PUA-Flags" }, RULE_OPTIONAL, -1, 1 }, + { { .avp_name = "Failed-AVP" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_name = "Proxy-Info" }, RULE_OPTIONAL, -1, -1 }, + { { .avp_name = "Route-Record" }, RULE_OPTIONAL, -1, -1 }, }; - CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); + CHECK_dict_new( DICT_COMMAND, &data, s6a, &cmd); PARSE_loc_rules( rules, cmd ); } - /* Reset-Request (RSR) Command - 3GPP TS 29.272 #7.2.15 */ - { - /* + } - The Reset-Request (RSR) command, indicated by the Command-Code - field set to 322 and the 'R' bit set in the - Command Flags field, is sent from HSS to MME or SGSN. - - < Reset-Request> ::= < Diameter Header: 322, REQ, PXY, 16777251 > - < Session-Id > - [ Vendor-Specific-Application-Id ] - { Auth-Session-State } - { Origin-Host } - { Origin-Realm } - { Destination-Host } - { Destination-Realm } - *[ Supported-Features ] - *[ User-Id ] - *[ AVP ] - *[ Proxy-Info ] - *[ Route-Record ] - */ - struct dict_object * cmd; - struct dict_cmd_data data = { - 322, /* Code */ - "Reset-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 } - ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } - ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } - ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } - ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } - ,{ "Destination-Host", RULE_REQUIRED, -1, 1 } - ,{ "Destination-Realm", RULE_REQUIRED, -1, 1 } - ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } - ,{ "User-Id", RULE_OPTIONAL, -1, -1 } - ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } - ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } - }; - - CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); - PARSE_loc_rules( rules, cmd ); - } - - /* Reset-Answer (RSA) Command - 3GPP TS 29.272 #7.2.16 */ - { - /* - - The Authentication-Information-Answer (RSA) command, indicated by - the Command-Code field set to 322 and the 'R' - bit cleared in the Command Flags field, is sent from MME or SGSN to HSS. - - < Reset-Answer> ::= < Diameter Header: 322, PXY, 16777251 > - < Session-Id > - [ Vendor-Specific-Application-Id ] - *[ Supported-Features ] - [ Result-Code ] - [ Experimental-Result ] - { Auth-Session-State } - { Origin-Host } - { Origin-Realm } - *[ AVP ] - *[ Failed-AVP ] - *[ Proxy-Info ] - *[ Route-Record ] - */ - struct dict_object * cmd; - struct dict_cmd_data data = { - 322, /* Code */ - "Reset-Anwer", /* Name */ - CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ - CMD_FLAG_PROXIABLE /* Fixed flag values */ - }; - - struct local_rules_definition rules[] = - { - { "Session-Id", RULE_FIXED_HEAD, -1, 1 } - ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } - ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } - ,{ "Result-Code", RULE_OPTIONAL, -1, 1 } - ,{ "Experimental-Result", RULE_OPTIONAL, -1, 1 } - ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } - ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } - ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } - ,{ "Failed-AVP", RULE_OPTIONAL, -1, -1 } - ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } - ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } - }; - - CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); - PARSE_loc_rules( rules, cmd ); - } - - /* Notify-Request (NOR) Command - 3GPP TS 29.272 #7.2.17 */ - { - /* - - The Notify-Request (NOR) command, indicated by the Command-Code - field set to 323 and the 'R' bit set in the Command Flags field, - is sent from MME or SGSN to HSS. - - < Notify-Request> ::= < Diameter Header: 323, REQ, PXY, 16777251 > - < Session-Id > - [ Vendor-Specific-Application-Id ] - { Auth-Session-State } - { Origin-Host } - { Origin-Realm } - [ Destination-Host ] - { Destination-Realm } - { User-Name } - *[ Supported-Features ] - [ Terminal-Information ] - [ MIP6-Agent-Info ] - [ Visited-Network-Identifier ] - [ Context-Identifier ] - [ Service-Selection ] - [ Alert-Reason ] - [ UE-SRVCC-Capability ] - [ NOR-Flags ] - *[ AVP ] - *[ Proxy-Info ] - *[ Route-Record ] - */ - struct dict_object * cmd; - struct dict_cmd_data data = { - 323, /* Code */ - "Notify-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 } - ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } - ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } - ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } - ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } - ,{ "Destination-Host", RULE_OPTIONAL, -1, 1 } - ,{ "Destination-Realm", RULE_REQUIRED, -1, 1 } - ,{ "User-Name", RULE_REQUIRED, -1, 1 } - ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } - ,{ "Terminal-Information", RULE_OPTIONAL, -1, 1 } - ,{ "MIP6-Agent-Info", RULE_OPTIONAL, -1, 1 } - ,{ "Visited-Network-Identifier", RULE_OPTIONAL, -1, 1 } - ,{ "Context-Identifier", RULE_OPTIONAL, -1, 1 } - ,{ "Service-Selection", RULE_OPTIONAL, -1, 1 } - ,{ "Alert-Reason", RULE_OPTIONAL, -1, 1 } - ,{ "UE-SRVCC-Capability", RULE_OPTIONAL, -1, 1 } - ,{ "NOR-Flags", RULE_OPTIONAL, -1, 1 } - ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } - ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } - }; - - CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); - PARSE_loc_rules( rules, cmd ); - } - - /* Notify-Answer (NOA) Command - 3GPP TS 29.272 #7.2.18 */ - { - /* - - The Notify-Answer (NOA) command, indicated by the Command-Code - field set to 323 and the 'R' bit cleared in the - Command Flags field, is sent from HSS to MME or SGSN. - - < Notify-Answer> ::= < Diameter Header: 323, PXY, 16777251 > - < Session-Id > - [ Vendor-Specific-Application-Id ] - [ Result-Code ] - [ Experimental-Result ] - { Auth-Session-State } - { Origin-Host } - { Origin-Realm } - *[ Supported-Features ] - *[ AVP ] - *[ Failed-AVP ] - *[ Proxy-Info ] - *[ Route-Record ] - */ - struct dict_object * cmd; - struct dict_cmd_data data = { - 323, /* Code */ - "Notify-Answer", /* Name */ - CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ - CMD_FLAG_PROXIABLE /* Fixed flag values */ - }; - - struct local_rules_definition rules[] = - { - { "Session-Id", RULE_FIXED_HEAD, -1, 1 } - ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } - ,{ "Result-Code", RULE_OPTIONAL, -1, 1 } - ,{ "Experimental-Result", RULE_OPTIONAL, -1, 1 } - ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } - ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } - ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } - ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } - ,{ "Failed-AVP", RULE_OPTIONAL, -1, -1 } - ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } - ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } - }; - - CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); - PARSE_loc_rules( rules, cmd ); - } - - /* ME-Identity-Check-Request (ECR) Command - 3GPP TS 29.272 #7.2.19 */ - { - /* - - The ME-Identity-Check-Request (ECR) command, indicated by the - Command-Code field set to 324 and the 'R' bit set - in the Command Flags field, is sent from MME or SGSN to EIR. - - < ME-Identity-Check-Request > ::= < Diameter Header: 324, REQ, PXY, 16777252 > - < Session-Id > - [ Vendor-Specific-Application-Id ] - { Auth-Session-State } - { Origin-Host } - { Origin-Realm } - [ Destination-Host ] - { Destination-Realm } - { Terminal-Information } - [ User-Name ] - *[ AVP ] - *[ Proxy-Info ] - *[ Route-Record ] - */ - struct dict_object * cmd; - struct dict_cmd_data data = { - 324, /* Code */ - "ME-Identity-Check-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 } - ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } - ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } - ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } - ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } - ,{ "Destination-Host", RULE_OPTIONAL, -1, 1 } - ,{ "Destination-Realm", RULE_REQUIRED, -1, 1 } - ,{ "Terminal-Information", RULE_REQUIRED, -1, 1 } - ,{ "User-Name", RULE_OPTIONAL, -1, 1 } - ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } - ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } - }; - - CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); - PARSE_loc_rules( rules, cmd ); - } - - /* ME-Identity-Check-Answer (ECA) Command - 3GPP TS 29.272 #7.2.20 */ - { - /* - - The ME-Identity-Check-Answer (ECA) command, indicated by the - Command-Code field set to 324 and the 'R' bit - cleared in the Command Flags field, is sent from EIR to MME or SGSN. - - < ME-Identity-Check-Answer> ::= < Diameter Header: 324, PXY, 16777252 > - < Session-Id > - [ Vendor-Specific-Application-Id ] - [ Result-Code ] - [ Experimental-Result ] - { Auth-Session-State } - { Origin-Host } - { Origin-Realm } - [ Equipment-Status ] - *[ AVP ] - *[ Failed-AVP ] - *[ Proxy-Info ] - *[ Route-Record ] - */ - struct dict_object * cmd; - struct dict_cmd_data data = { - 324, /* Code */ - "ME-Identity-Check-Answer", /* Name */ - CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ - CMD_FLAG_PROXIABLE /* Fixed flag values */ - }; - - struct local_rules_definition rules[] = - { - { "Session-Id", RULE_FIXED_HEAD, -1, 1 } - ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } - ,{ "Result-Code", RULE_OPTIONAL, -1, 1 } - ,{ "Experimental-Result", RULE_OPTIONAL, -1, 1 } - ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } - ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } - ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } - ,{ "Equipment-Status", RULE_OPTIONAL, -1, 1 } - ,{ "User-Name", RULE_OPTIONAL, -1, 1 } - ,{ "Failed-AVP", RULE_OPTIONAL, -1, -1 } - ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } - ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } - }; - - CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); - PARSE_loc_rules( rules, cmd ); - } - } - - LOG_D( "Dictionary Extension 'S6A from 3GPP standard v.10.5' initialized"); + LOG_D( "Extension 'Dictionary definitions for DCCA 3GPP S6A' initialized"); return 0; } -EXTENSION_ENTRY("dict_s6a", dict_s6a_init, "dict_nas_mipv6"); +EXTENSION_ENTRY("dict_s6a", dict_s6a_init, "dict_dcca_3gpp"); diff --git a/lib/fd/fd_init.c b/lib/fd/fd_init.c index 714a31aaf2..a4d50ac19b 100644 --- a/lib/fd/fd_init.c +++ b/lib/fd/fd_init.c @@ -33,9 +33,6 @@ int fd_init(const char *conffile) return ret; } - /* Initialize FD Message */ - CHECK_FCT( fd_message_init() ); - /* Parse the configuration file */ if (conffile) { @@ -46,6 +43,9 @@ int fd_init(const char *conffile) CHECK_FCT_DO( fd_set_default_context(), goto error ); } + /* Initialize FD Message */ + CHECK_FCT( fd_message_init() ); + /* Initialize FD logger */ CHECK_FCT_DO( fd_logger_init(), goto error ); diff --git a/lib/fd/fd_message.c b/lib/fd/fd_message.c index 984038a3d7..670eead9d4 100644 --- a/lib/fd/fd_message.c +++ b/lib/fd/fd_message.c @@ -2,7 +2,10 @@ #include "fd_message.h" -#define FD_3GPP_VENDOR_ID 10415 /* 3GPP Vendor ID */ +#define CHECK_dict_search( _type, _criteria, _what, _result ) \ + CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, (_type), (_criteria), (_what), (_result), ENOENT) ); + +#define FD_3GPP_VENDOR_ID 10415 struct dict_object *fd_origin_host = NULL; struct dict_object *fd_origin_realm = NULL; @@ -19,31 +22,20 @@ struct dict_object *fd_vendor_id = NULL; int fd_message_init() { - struct dict_vendor_data vendor_data = { FD_3GPP_VENDOR_ID, "3GPP" }; - CHECK_FCT( fd_dict_new(fd_g_config->cnf_dict, DICT_VENDOR, - &vendor_data, NULL, &fd_vendor) ); + vendor_id_t id = FD_3GPP_VENDOR_ID; - CHECK_FCT( fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, - "Vendor-Id", &fd_vendor_id, ENOENT) ); + CHECK_dict_search( DICT_VENDOR, VENDOR_BY_ID, (void *)&id, &fd_vendor); + CHECK_dict_search( DICT_AVP, AVP_BY_NAME, "Vendor-Id", &fd_vendor_id); - CHECK_FCT( fd_dict_search (fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, - "Origin-Host", &fd_origin_host, ENOENT) ); - CHECK_FCT( fd_dict_search (fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, - "Origin-Realm", &fd_origin_realm, ENOENT) ); - CHECK_FCT( fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, - "Destination-Host", &fd_destination_host, ENOENT) ); - CHECK_FCT( fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, - "Destination-Realm", &fd_destination_realm, ENOENT) ); - CHECK_FCT( fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, - "User-Name", &fd_user_name, ENOENT) ); - CHECK_FCT( fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, - "Auth-Session-State", &fd_auth_session_state, ENOENT) ); - CHECK_FCT( fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, - "Result-Code", &fd_result_code, ENOENT) ); - CHECK_FCT( fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, - "Experimental-Result", &fd_experimental_result, ENOENT) ); - CHECK_FCT( fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, - "Experimental-Result-Code", &fd_experimental_result_code, ENOENT) ); + CHECK_dict_search( DICT_AVP, AVP_BY_NAME, "Origin-Host", &fd_origin_host); + CHECK_dict_search( DICT_AVP, AVP_BY_NAME, "Origin-Realm", &fd_origin_realm); + CHECK_dict_search( DICT_AVP, AVP_BY_NAME, "Destination-Host", &fd_destination_host); + CHECK_dict_search( DICT_AVP, AVP_BY_NAME, "Destination-Realm", &fd_destination_realm); + CHECK_dict_search( DICT_AVP, AVP_BY_NAME, "User-Name", &fd_user_name); + CHECK_dict_search( DICT_AVP, AVP_BY_NAME, "Auth-Session-State", &fd_auth_session_state); + CHECK_dict_search( DICT_AVP, AVP_BY_NAME, "Result-Code", &fd_result_code); + CHECK_dict_search( DICT_AVP, AVP_BY_NAME, "Experimental-Result", &fd_experimental_result); + CHECK_dict_search( DICT_AVP, AVP_BY_NAME, "Experimental-Result-Code", &fd_experimental_result_code); return 0; } diff --git a/lib/fd/s6a/dict_init.c b/lib/fd/s6a/dict_init.c index 7c4c127b97..8133e3b1c3 100644 --- a/lib/fd/s6a/dict_init.c +++ b/lib/fd/s6a/dict_init.c @@ -1,8 +1,7 @@ -#define TRACE_MODULE _s6a_init - #include "s6a_lib.h" -#define S6A_APP_ID 16777251; /* 3GPP S6A Application ID */ +#define CHECK_dict_search( _type, _criteria, _what, _result ) \ + CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, (_type), (_criteria), (_what), (_result), ENOENT) ); struct dict_object *s6a_application = NULL; @@ -12,8 +11,6 @@ struct dict_object *s6a_cmd_ulr = NULL; struct dict_object *s6a_cmd_ula = NULL; struct dict_object *s6a_cmd_pur = NULL; struct dict_object *s6a_cmd_pua = NULL; -struct dict_object *s6a_cmd_clr = NULL; -struct dict_object *s6a_cmd_cla = NULL; struct dict_object *s6a_visited_plmn_id = NULL; struct dict_object *s6a_rat_type = NULL; @@ -26,33 +23,20 @@ struct dict_object *s6a_immediate_response_preferred = NULL; struct dict_object *s6a_authentication_info = NULL; struct dict_object *s6a_re_synchronization_info = NULL; struct dict_object *s6a_service_selection = NULL; -struct dict_object *s6a_ue_srvcc_cap = NULL; -struct dict_object *s6a_imsi = NULL; -struct dict_object *s6a_imei = NULL; -struct dict_object *s6a_software_version = NULL; -struct dict_object *s6a_supported_features = NULL; -struct dict_object *s6a_req_e_utran_auth_info = NULL; -struct dict_object *s6a_req_resync_info = NULL; -struct dict_object *s6a_req_nb_of_req_vectors = NULL; -struct dict_object *s6a_req_geran_auth_info = NULL; +struct dict_object *s6a_ue_srvcc_capability = NULL; struct dict_object *s6a_e_utran_vector = NULL; struct dict_object *s6a_rand = NULL; struct dict_object *s6a_xres = NULL; struct dict_object *s6a_autn = NULL; struct dict_object *s6a_kasme = NULL; -struct dict_object *s6a_pur_flags = NULL; -struct dict_object *s6a_pua_flags = NULL; -struct dict_object *s6a_terminal_info = NULL; -struct dict_object *s6a_gmlc_addr = NULL; struct dict_object *s6a_subscriber_status = NULL; -struct dict_object *s6a_msisdn = NULL; struct dict_object *s6a_ambr = NULL; struct dict_object *s6a_network_access_mode = NULL; struct dict_object *s6a_access_restriction_data = NULL; struct dict_object *s6a_apn_configuration_profile = NULL; struct dict_object *s6a_subscribed_rau_tau_timer = NULL; struct dict_object *s6a_context_identifier = NULL; -struct dict_object *s6a_all_apn_conf_inc_ind = NULL; +struct dict_object *s6a_all_apn_configuration_included_indicator = NULL; struct dict_object *s6a_apn_configuration = NULL; struct dict_object *s6a_max_bandwidth_ul = NULL; struct dict_object *s6a_max_bandwidth_dl = NULL; @@ -63,164 +47,60 @@ struct dict_object *s6a_allocation_retention_priority = NULL; struct dict_object *s6a_priority_level = NULL; struct dict_object *s6a_pre_emption_capability = NULL; struct dict_object *s6a_pre_emption_vulnerability = NULL; -struct dict_object *s6a_served_party_ip_addr = NULL; int s6a_dict_init(void) { - uint32_t app_id = S6A_APP_ID; - - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_APPLICATION, - APPLICATION_BY_ID, (void *)&app_id, &s6a_application, ENOENT)); + application_id_t id = 16777251; + + CHECK_dict_search( DICT_APPLICATION, APPLICATION_BY_ID, (void *)&id, &s6a_application); + + CHECK_dict_search( DICT_COMMAND, CMD_BY_NAME, "3GPP/Authentication-Information-Request", &s6a_cmd_air); + CHECK_dict_search( DICT_COMMAND, CMD_BY_NAME, "3GPP/Authentication-Information-Answer", &s6a_cmd_aia); + CHECK_dict_search( DICT_COMMAND, CMD_BY_NAME, "3GPP/Update-Location-Request", &s6a_cmd_ulr); + CHECK_dict_search( DICT_COMMAND, CMD_BY_NAME, "3GPP/Update-Location-Answer", &s6a_cmd_ula); + CHECK_dict_search( DICT_COMMAND, CMD_BY_NAME, "3GPP/Purge-UE-Request", &s6a_cmd_pur); + CHECK_dict_search( DICT_COMMAND, CMD_BY_NAME, "3GPP/Purge-UE-Answer", &s6a_cmd_pua); + + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Visited-PLMN-Id", &s6a_visited_plmn_id); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "RAT-Type", &s6a_rat_type); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "ULR-Flags", &s6a_ulr_flags); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "ULA-Flags", &s6a_ula_flags); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "UE-SRVCC-Capability", &s6a_ue_srvcc_capability); + + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Requested-EUTRAN-Authentication-Info", &s6a_req_eutran_auth_info); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Number-Of-Requested-Vectors", &s6a_number_of_requested_vectors); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Immediate-Response-Preferred", &s6a_immediate_response_preferred); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Re-Synchronization-Info", &s6a_re_synchronization_info); + + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Authentication-Info", &s6a_authentication_info); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "E-UTRAN-Vector", &s6a_e_utran_vector); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "RAND", &s6a_rand); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "XRES", &s6a_xres); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "AUTN", &s6a_autn); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "KASME", &s6a_kasme); + + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "EPS-Subscribed-QoS-Profile", &s6a_eps_subscribed_qos_profile); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "QoS-Class-Identifier", &s6a_qos_class_identifier); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Allocation-Retention-Priority", &s6a_allocation_retention_priority); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Priority-Level", &s6a_priority_level); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Pre-emption-Capability", &s6a_pre_emption_capability); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Pre-emption-Vulnerability", &s6a_pre_emption_vulnerability); + + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "AMBR", &s6a_ambr); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Max-Requested-Bandwidth-UL", &s6a_max_bandwidth_ul); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Max-Requested-Bandwidth-DL", &s6a_max_bandwidth_dl); + + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "APN-Configuration-Profile", &s6a_apn_configuration_profile); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Context-Identifier", &s6a_context_identifier); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "All-APN-Configurations-Included-Indicator", &s6a_all_apn_configuration_included_indicator); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "APN-Configuration", &s6a_apn_configuration); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Service-Selection", &s6a_service_selection); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "PDN-Type", &s6a_pdn_type); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Subscription-Data", &s6a_subscription_data); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Subscriber-Status", &s6a_subscriber_status); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Network-Access-Mode", &s6a_network_access_mode); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Access-Restriction-Data", &s6a_access_restriction_data); + CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Subscribed-Periodic-RAU-TAU-Timer", &s6a_subscribed_rau_tau_timer); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_COMMAND, CMD_BY_NAME, - "Authentication-Information-Request", &s6a_cmd_air, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_COMMAND, CMD_BY_NAME, - "Authentication-Information-Answer", &s6a_cmd_aia, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_COMMAND, CMD_BY_NAME, - "Update-Location-Request", &s6a_cmd_ulr, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_COMMAND, CMD_BY_NAME, - "Update-Location-Answer", &s6a_cmd_ula, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_COMMAND, CMD_BY_NAME, - "Purge-UE-Request", &s6a_cmd_pur, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_COMMAND, CMD_BY_NAME, - "Purge-UE-Answer", &s6a_cmd_pua, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_COMMAND, CMD_BY_NAME, - "Cancel-Location-Request", &s6a_cmd_clr, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_COMMAND, CMD_BY_NAME, - "Cancel-Location-Answer", &s6a_cmd_cla, ENOENT)); - - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Visited-PLMN-Id", - &s6a_visited_plmn_id, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "RAT-Type", &s6a_rat_type, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "ULR-Flags", &s6a_ulr_flags, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "ULA-Flags", &s6a_ula_flags, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Subscription-Data", - &s6a_subscription_data, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Requested-EUTRAN-Authentication-Info", - &s6a_req_eutran_auth_info, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Number-Of-Requested-Vectors", - &s6a_number_of_requested_vectors, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Immediate-Response-Preferred", - &s6a_immediate_response_preferred, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Authentication-Info", - &s6a_authentication_info, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Re-Synchronization-Info", - &s6a_re_synchronization_info, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Service-Selection", - &s6a_service_selection, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "UE-SRVCC-Capability", - &s6a_ue_srvcc_cap, ENOENT)); - CHECK_FCT(fd_dict_search (fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "User-Name", &s6a_imsi, ENOENT)); - CHECK_FCT(fd_dict_search (fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "IMEI", &s6a_imei, ENOENT)); - CHECK_FCT(fd_dict_search (fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Software-Version", - &s6a_software_version, ENOENT)); - CHECK_FCT(fd_dict_search (fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Supported-Features", - &s6a_supported_features, ENOENT)); - CHECK_FCT(fd_dict_search (fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Requested-EUTRAN-Authentication-Info", - &s6a_req_e_utran_auth_info, ENOENT)); - CHECK_FCT(fd_dict_search (fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Number-Of-Requested-Vectors", - &s6a_req_nb_of_req_vectors, ENOENT)); - CHECK_FCT(fd_dict_search (fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Re-Synchronization-Info", - &s6a_req_resync_info, ENOENT)); - CHECK_FCT(fd_dict_search (fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Requested-UTRAN-GERAN-Authentication-Info", - &s6a_req_geran_auth_info, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "E-UTRAN-Vector", - &s6a_e_utran_vector, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "RAND", &s6a_rand, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "XRES", &s6a_xres, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "AUTN", &s6a_autn, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "KASME", &s6a_kasme, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "PUR-Flags", &s6a_pur_flags, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "PUA-Flags", &s6a_pua_flags, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Terminal-Information", - &s6a_terminal_info, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "GMLC-Address", &s6a_gmlc_addr, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Subscriber-Status", - &s6a_subscriber_status, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "MSISDN", &s6a_msisdn, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "AMBR", &s6a_ambr, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Network-Access-Mode", - &s6a_network_access_mode, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Access-Restriction-Data", - &s6a_access_restriction_data, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "APN-Configuration-Profile", - &s6a_apn_configuration_profile, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Subscribed-Periodic-RAU-TAU-Timer", - &s6a_subscribed_rau_tau_timer, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Context-Identifier", - &s6a_context_identifier, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "All-APN-Configurations-Included-Indicator", - &s6a_all_apn_conf_inc_ind, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "APN-Configuration", - &s6a_apn_configuration, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Max-Requested-Bandwidth-UL", - &s6a_max_bandwidth_ul, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Max-Requested-Bandwidth-DL", - &s6a_max_bandwidth_dl, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "PDN-Type", &s6a_pdn_type, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "EPS-Subscribed-QoS-Profile", - &s6a_eps_subscribed_qos_profile, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "QoS-Class-Identifier", - &s6a_qos_class_identifier, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Allocation-Retention-Priority", - &s6a_allocation_retention_priority, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Priority-Level", - &s6a_priority_level, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Pre-emption-Capability", - &s6a_pre_emption_capability, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Pre-emption-Vulnerability", - &s6a_pre_emption_vulnerability, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Served-Party-IP-Address", - &s6a_served_party_ip_addr, ENOENT)); - return 0; } diff --git a/lib/fd/s6a/s6a_lib.h b/lib/fd/s6a/s6a_lib.h index 43d18fd28e..232fab922e 100644 --- a/lib/fd/s6a/s6a_lib.h +++ b/lib/fd/s6a/s6a_lib.h @@ -49,7 +49,6 @@ extern "C" { #define S6A_UE_SRVCC_NOT_SUPPORTED (0) #define S6A_UE_SRVCC_SUPPORTED (1) -/* Some global variables for dictionary */ extern struct dict_object *s6a_application; extern struct dict_object *s6a_cmd_air; @@ -58,8 +57,6 @@ extern struct dict_object *s6a_cmd_ulr; extern struct dict_object *s6a_cmd_ula; extern struct dict_object *s6a_cmd_pur; extern struct dict_object *s6a_cmd_pua; -extern struct dict_object *s6a_cmd_clr; -extern struct dict_object *s6a_cmd_cla; extern struct dict_object *s6a_visited_plmn_id; extern struct dict_object *s6a_rat_type; @@ -72,34 +69,20 @@ extern struct dict_object *s6a_immediate_response_preferred; extern struct dict_object *s6a_authentication_info; extern struct dict_object *s6a_re_synchronization_info; extern struct dict_object *s6a_service_selection; -extern struct dict_object *s6a_ue_srvcc_cap; -extern struct dict_object *s6a_imsi; -extern struct dict_object *s6a_imei; -extern struct dict_object *s6a_software_version; -extern struct dict_object *s6a_supported_features; -extern struct dict_object *s6a_req_e_utran_auth_info; -extern struct dict_object *s6a_req_resync_info; -extern struct dict_object *s6a_req_nb_of_req_vectors; -extern struct dict_object *s6a_req_geran_auth_info; -extern struct dict_object *s6a_immediate_response_pref; +extern struct dict_object *s6a_ue_srvcc_capability; extern struct dict_object *s6a_e_utran_vector; extern struct dict_object *s6a_rand; extern struct dict_object *s6a_xres; extern struct dict_object *s6a_autn; extern struct dict_object *s6a_kasme; -extern struct dict_object *s6a_pur_flags; -extern struct dict_object *s6a_pua_flags; -extern struct dict_object *s6a_terminal_info; -extern struct dict_object *s6a_gmlc_addr; extern struct dict_object *s6a_subscriber_status; -extern struct dict_object *s6a_msisdn; extern struct dict_object *s6a_ambr; extern struct dict_object *s6a_network_access_mode; extern struct dict_object *s6a_access_restriction_data; extern struct dict_object *s6a_apn_configuration_profile; extern struct dict_object *s6a_subscribed_rau_tau_timer; extern struct dict_object *s6a_context_identifier; -extern struct dict_object *s6a_all_apn_conf_inc_ind; +extern struct dict_object *s6a_all_apn_configuration_included_indicator; extern struct dict_object *s6a_apn_configuration; extern struct dict_object *s6a_max_bandwidth_ul; extern struct dict_object *s6a_max_bandwidth_dl; @@ -110,7 +93,6 @@ extern struct dict_object *s6a_allocation_retention_priority; extern struct dict_object *s6a_priority_level; extern struct dict_object *s6a_pre_emption_capability; extern struct dict_object *s6a_pre_emption_vulnerability; -extern struct dict_object *s6a_served_party_ip_addr; int s6a_dict_init(void); diff --git a/src/hss/hss_s6a_handler.c b/src/hss/hss_s6a_handler.c index 2d356255c9..0f35dcbc9d 100644 --- a/src/hss/hss_s6a_handler.c +++ b/src/hss/hss_s6a_handler.c @@ -169,6 +169,13 @@ static int hss_air_cb( struct msg **msg, struct avp *avp, out: CHECK_FCT( fd_message_experimental_rescode_set(ans, result_code) ); + + /* Set the Auth-Session-State AVP */ + CHECK_FCT( fd_msg_avp_new(fd_auth_session_state, 0, &avp) ); + val.i32 = 1; + CHECK_FCT( fd_msg_avp_setvalue(avp, &val) ); + CHECK_FCT( fd_msg_avp_add(ans, MSG_BRW_LAST_CHILD, avp) ); + CHECK_FCT( fd_msg_send(msg, NULL, NULL) ); return 0; @@ -238,23 +245,14 @@ static int hss_ulr_cb( struct msg **msg, struct avp *avp, CHECK_FCT( fd_msg_avp_hdr(avp, &hdr) ); if (!(hdr->avp_value->u32 & S6A_ULR_SKIP_SUBSCRIBER_DATA)) { - struct avp *avp_msisdn, *avp_access_restriction_data; + struct avp *avp_access_restriction_data; struct avp *avp_subscriber_status, *avp_network_access_mode; struct avp *avp_ambr, *avp_max_bandwidth_ul, *avp_max_bandwidth_dl; int i; - c_uint8_t msisdn[MAX_IMSI_LEN]; - int msisdn_len; /* Set the Subscription Data */ CHECK_FCT( fd_msg_avp_new(s6a_subscription_data, 0, &avp) ); - CHECK_FCT( fd_msg_avp_new(s6a_msisdn, 0, &avp_msisdn) ); - core_bcd_to_buffer(imsi_bcd, msisdn, &msisdn_len); - val.os.data = msisdn; - val.os.len = msisdn_len; - CHECK_FCT( fd_msg_avp_setvalue(avp_msisdn, &val) ); - CHECK_FCT( fd_msg_avp_add(avp, MSG_BRW_LAST_CHILD, avp_msisdn) ); - if (subscription_data.access_restriction_data) { CHECK_FCT( fd_msg_avp_new(s6a_access_restriction_data, 0, @@ -302,7 +300,8 @@ static int hss_ulr_cb( struct msg **msg, struct avp *avp, { /* Set the APN Configuration Profile */ struct avp *apn_configuration_profile; - struct avp *context_identifier, *all_apn_conf_inc_ind; + struct avp *context_identifier; + struct avp *all_apn_configuration_included_indicator; CHECK_FCT( fd_msg_avp_new(s6a_apn_configuration_profile, 0, &apn_configuration_profile) ); @@ -314,12 +313,15 @@ static int hss_ulr_cb( struct msg **msg, struct avp *avp, CHECK_FCT( fd_msg_avp_add(apn_configuration_profile, MSG_BRW_LAST_CHILD, context_identifier) ); - CHECK_FCT( fd_msg_avp_new(s6a_all_apn_conf_inc_ind, 0, - &all_apn_conf_inc_ind) ); + CHECK_FCT( fd_msg_avp_new( + s6a_all_apn_configuration_included_indicator, 0, + &all_apn_configuration_included_indicator) ); val.i32 = 0; - CHECK_FCT( fd_msg_avp_setvalue(all_apn_conf_inc_ind, &val) ); + CHECK_FCT( fd_msg_avp_setvalue( + all_apn_configuration_included_indicator, &val) ); CHECK_FCT( fd_msg_avp_add(apn_configuration_profile, - MSG_BRW_LAST_CHILD, all_apn_conf_inc_ind) ); + MSG_BRW_LAST_CHILD, + all_apn_configuration_included_indicator) ); for (i = 0; i < subscription_data.num_of_pdn; i++) { @@ -476,7 +478,7 @@ int hss_s6a_init(void) &hdl_ulr) ); /* Advertise the support for the application in the peer */ - CHECK_FCT( fd_disp_app_support ( s6a_application, fd_vendor, 1, 0 ) ); + CHECK_FCT( fd_disp_app_support(s6a_application, fd_vendor, 1, 0) ); return 0; } diff --git a/src/mme/mme_s6a_handler.c b/src/mme/mme_s6a_handler.c index 317caec04e..ae1f78400d 100644 --- a/src/mme/mme_s6a_handler.c +++ b/src/mme/mme_s6a_handler.c @@ -773,7 +773,7 @@ void mme_s6a_send_ulr(mme_ue_t *mme_ue) CHECK_FCT_DO( fd_msg_avp_add(req, MSG_BRW_LAST_CHILD, avp), goto out ); /* Set the UE-SRVCC Capability */ - CHECK_FCT_DO( fd_msg_avp_new(s6a_ue_srvcc_cap, 0, &avp), goto out ); + CHECK_FCT_DO( fd_msg_avp_new(s6a_ue_srvcc_capability, 0, &avp), goto out ); val.u32 = S6A_UE_SRVCC_NOT_SUPPORTED; CHECK_FCT_DO( fd_msg_avp_setvalue(avp, &val), goto out ); CHECK_FCT_DO( fd_msg_avp_add(req, MSG_BRW_LAST_CHILD, avp), goto out ); @@ -813,7 +813,7 @@ int mme_s6a_init(void) CHECK_FCT( fd_sess_handler_create(&mme_s6a_reg, (void *)free, NULL, NULL) ); /* Advertise the support for the application in the peer */ - CHECK_FCT( fd_disp_app_support ( s6a_application, fd_vendor, 1, 0 ) ); + CHECK_FCT( fd_disp_app_support(s6a_application, fd_vendor, 1, 0) ); return 0; } diff --git a/support/freeDiameter/hss.conf.in b/support/freeDiameter/hss.conf.in index f813ac7d83..45c399aded 100644 --- a/support/freeDiameter/hss.conf.in +++ b/support/freeDiameter/hss.conf.in @@ -224,8 +224,14 @@ TLS_CA = "@prefix@/etc/freeDiameter/cacert.pem"; # 8 - tree - display the complete information in an easier to read format spanning several lines. LoadExtension = "dbg_msg_dumps.fdx" : "0x8888"; +LoadExtension = "dict_rfc5777.fdx"; +LoadExtension = "dict_mip6i.fdx"; LoadExtension = "dict_nas_mipv6.fdx"; +LoadExtension = "@prefix@/lib/nextepc/dict_nasreq.so"; +LoadExtension = "@prefix@/lib/nextepc/dict_dcca.so"; +LoadExtension = "@prefix@/lib/nextepc/dict_dcca_3gpp.so"; LoadExtension = "@prefix@/lib/nextepc/dict_s6a.so"; +#LoadExtension = "@prefix@/lib/nextepc/dict_legacy_xml.so" : "@prefix@/etc/freeDiameter/dict_legacy_xml.conf"; ############################################################## diff --git a/support/freeDiameter/mme.conf.in b/support/freeDiameter/mme.conf.in index 1d2b8e8ea9..a26e745eab 100644 --- a/support/freeDiameter/mme.conf.in +++ b/support/freeDiameter/mme.conf.in @@ -224,7 +224,12 @@ TLS_CA = "@prefix@/etc/freeDiameter/cacert.pem"; # 8 - tree - display the complete information in an easier to read format spanning several lines. LoadExtension = "dbg_msg_dumps.fdx" : "0x8888"; +LoadExtension = "dict_rfc5777.fdx"; +LoadExtension = "dict_mip6i.fdx"; LoadExtension = "dict_nas_mipv6.fdx"; +LoadExtension = "@prefix@/lib/nextepc/dict_nasreq.so"; +LoadExtension = "@prefix@/lib/nextepc/dict_dcca.so"; +LoadExtension = "@prefix@/lib/nextepc/dict_dcca_3gpp.so"; LoadExtension = "@prefix@/lib/nextepc/dict_s6a.so"; #LoadExtension = "@prefix@/lib/nextepc/dict_legacy_xml.so" : "@prefix@/etc/freeDiameter/dict_legacy_xml.conf";