# HG changeset patch # User Sebastien Decugis # Date 1594057314 -28800 # Node ID 19ab8ac08a361642e7f9ec9f2657202c6f8ef9ee # Parent edfb2b662b91af94b2fccc48b11eec904ccab370# Parent 6a35c5470ef4c8fb0cf81e20efa83eecc93cc1be Merge diff -r 6a35c5470ef4 -r 19ab8ac08a36 CMakeLists.txt --- a/CMakeLists.txt Tue Jul 07 01:24:48 2020 +0800 +++ b/CMakeLists.txt Tue Jul 07 01:41:54 2020 +0800 @@ -71,6 +71,12 @@ SET(DEBUG 1) ENDIF (CMAKE_BUILD_TYPE MATCHES "Debug|Profiling|DebugValgrind") +# Build with fatal warnings? +IF (ERRORS_ON_WARNINGS) + SET(CMAKE_C_FLAGS "-Wall -Werror ${CMAKE_C_FLAGS}") + SET(CMAKE_REQUIRED_FLAGS "-Wno-error ${CMAKE_REQUIRED_FLAGS}") +ENDIF (ERRORS_ON_WARNINGS) + # some subfolders use yacc and lex parsers SET(BISON_GENERATE_DEFINES TRUE) SET(BISON_PREFIX_OUTPUTS TRUE) @@ -109,4 +115,3 @@ IF ( BUILD_TESTING ) SUBDIRS(tests) ENDIF ( BUILD_TESTING ) - diff -r 6a35c5470ef4 -r 19ab8ac08a36 LICENSE --- a/LICENSE Tue Jul 07 01:24:48 2020 +0800 +++ b/LICENSE Tue Jul 07 01:41:54 2020 +0800 @@ -52,3 +52,6 @@ * Thomas Klausner: several extensions and numerous fixes / improvements. + + * Luke Mewburn: + numerous fixes / improvements. diff -r 6a35c5470ef4 -r 19ab8ac08a36 contrib/debian/changelog --- a/contrib/debian/changelog Tue Jul 07 01:24:48 2020 +0800 +++ b/contrib/debian/changelog Tue Jul 07 01:41:54 2020 +0800 @@ -1,3 +1,126 @@ +freediameter (UNRELEASED) UNRELEASED; urgency=low + + * freeDiameter: + - Add -g to help + - Change -d and -q to control syslog level, as per stdout logging. + - Syslog to LOG_DAEMON. + - Actually syslog to LOG_DEBUG, now that -d/-q are used. + - Add -p pidfile + - SCTP client: bind to local endpoints configured with ListenOn so + that the SCTP INIT only contains those local endpoint addresses, + matching what is advertised in the CER. + * Base dictionary: Add rules for Experimental-Result. + * All extensions: Hide symbols except for fd_ext_init() and fd_ext_fini(). + * dbg_dict_dump.fdx: add extension to write the dictionary + to the given file or to the log. + * dbg_dict_dump_json.fdx: add extension to write the dictionary as JSON + to the given file or stdout. + * dict_dcca_3gpp.fdx: Update to 3GPP Release 15, adding many standards. + This adds 96 TYPEs, 145 ENUMVALs, 791 AVPs, 52 RULEs. + There are various breaking changes (documented below). + * contrib/dictionary_dcca_3gpp.json: Remove non-3GPP AVPs that are + actually from base IETF RFCs: + - MIP6-Feature-Vector (124). IETF RFC 5447 + - Service-Selection (493). IETF RFC 5778 + - Mobile-Node-Identifier (506). IETF RFC 5779 + - QoS-Capability (578). IETF RFC 5777. + * New API: fd_msg_add_result(): set Result-Code or Experimental-Result. + * New API: log level FD_LOG_INFO. + * fd_conf_dump(): fix formatting of local endpoints. + * fd_msg_search_avp(): support searching avp as well as msg. + * Fix compiler warnings. + * Add ERRORS_ON_WARNINGS cmake boolean to enable fatal compiler warnings. + * New tool: grep_fd_dict_dump: cleanup fd_dict_dump() output in logs. + * New tool: csv_to_fd: convert .csv with AVP tables to freeDiameter C or JSON. + * New tool: org_to_csv: convert .org files into .csv files. + + * dict_dcca_3gpp.fdx changes per update to 3GPP Release 15 as at 2019-12: + - AVP changes: + - 3GPP-CG-IPv6-Address (14) renamed to 3GPP-CG-Ipv6-Address (14). + - 3GPP-GGSN-IPv6-Address (16) renamed to 3GPP-GGSN-Ipv6-Address (16). + - 3GPP-IPv6-DNS-Servers (17) renamed to 3GPP-Ipv6-DNS-Servers (17). + - 3GPP-SGSN-IPv6-Address (15) renamed to 3GPP-SGSN-Ipv6-Address (15). + - 3GPP2-BSID (9010) flag M MUST. + - 3GPP2-BSID (9010) type changed from OctetString to UTF8String. + - ADC-Revalidation-Time (2801) Time removed in 3GPP TS 29.212 V12.1.0 (2013-06). + - ADC-Rule-Base-Name (1095) flag M MUST. + - ADC-Rule-Definition (1094) flag M MUST. + - ADC-Rule-Install (1092) flag M MUST. + - ADC-Rule-Name (1096) flag M MUST. + - ADC-Rule-Remove (1093) flag M MUST. + - ADC-Rule-Report (1097) flag M MUST. + - Application-Service-Type (2102) type changed from UTF8String to Enumerated. + - Application–Session–Id (2103) type changed from UTF8String to Unsigned32. + - Call-Barring-Infor-List (1488) renamed to Call-Barring-Info (1488). + - External-Identifier (28) OctetString replaced by External-Identifier (3111) UTF8String. + - LCS-Requestor-Id (1239) renamed to LCS-Requestor-ID (1239). + - LCS-Requestor-Id-String (1240) renamed to LCS-Requestor-ID-String (1240). + - MBMS-BMSC-SSM-IPv6-Address (919) renamed to MBMS-BMSC-SSM-Ipv6-Address (919). + - MBMS-GGSN-IPv6-Address (917) renamed to MBMS-GGSN-Ipv6-Address (917). + - MBMSGW-Address (2307) renamed to MBMS-GW-Address (2307). + - Measurement-Period-LTE (1656) code changed to Measurement-Period-LTE (1655). + - Measurement-Period-UMTS (1655) code changed to Measurement-Period-UMTS (1656). + - MME-LocationInformation (1600) renamed to MME-Location-Information(1600). + - PDG-Address (895) Address removed in 3GPP TS 32.299 V12.6.0 (2014-09). + - PDG-Charging-Id (896) Unsigned32 removed in 3GPP TS 32.299 V12.6.0 (2014-09). + - PDN-Connection-ID (1065) flag M MUST NOT. + - PoC-User-Role-info-Units (1254) renamed to PoC-User-Role-Info-Units (1254). + - PS-to-CS-Session-Continuity (1099) flag M MUST NOT. + - SS-Status (1477) type changed from Grouped to OctetString. + - Status (2702) renamed to Status-AS-Code (2702). + - WAG-Address (890) Address removed in 3GPP TS 32.299 V12.6.0 (2014-09). + - WAG-PLMN-Id (891) OctetString removed in 3GPP TS 32.299 V12.6.0 (2014-09). + - WLAN-Information (875) Grouped removed in 3GPP TS 32.299 V12.6.0 (2014-09). + - WLAN-Radio-Container (892) Grouped removed in 3GPP TS 32.299 V12.6.0 (2014-09). + - WLAN-Session-Id (1246) UTF8String removed in 3GPP TS 32.299 V12.6.0 (2014-09). + - WLAN-Technology (893) Unsigned32 removed in 3GPP TS 32.299 V12.6.0 (2014-09). + - WLAN-UE-Local-IPAddress (894) Address removed in 3GPP TS 32.299 V12.6.0 (2014-09). + - AVP renames: + - Rename Call-Barring-Infor-List (1488) to Call-Barring-Info (1488). + - Rename LCS-Requestor-Id (1239) to LCS-Requestor-ID (1239). + - Rename LCS-Requestor-Id-String (1240) to LCS-Requestor-ID-String (1240). + - Rename MBMSGW-Address (2307) to MBMS-GW-Address (2307). + - Rename MME-LocationInformation (1600) to MME-Location-Information(1600). + - Rename PoC-User-Role-info-Units (1254) to PoC-User-Role-Info-Units (1254). + - Rename Status (2702) to Status-AS-Code (2702). + - AVP name conflicts: + - Time-Window (3818) in 3GPP TS 29.345 V12.1.0 (2014-12) predates + Time-Window-29.154 (4204) in 3GPP TS 29.154 V13.1.0 (2016-03). + - Add Enumerated(3GPP/Experimental-Result-Code). 145 values. + - Update standards: + - 3GPP TS 29.061 V15.5.0 (2018-12). 15 AVPs. + - 3GPP TS 29.173 V15.0.0 (2018-06). 1 AVP. + - 3GPP TS 29.212 V15.9.0 (2019-12). 46 AVPs. + - 3GPP TS 29.214 V15.7.0 (2019-09). 27 AVPs. + - 3GPP TS 29.229 V15.2.0 (2019-09). 8 AVPs. + - 3GPP TS 29.272 V15.10.0 (2019-12). 44 AVPs. + - 3GPP TS 29.329 V15.2.0 (2019-09). 5 AVPs. + - 3GPP TS 32.299 V15.7.0 (2019-06). 154 AVPs. + - Add standards: + - 3GPP TS 29.109 V15.0.0 (2017-06). 21 AVPs. + - 3GPP TS 29.128 V15.6.0 (2019-09). 25 AVPs. + - 3GPP TS 29.153 V15.1.0 (2019-09). 2 AVPs. + - 3GPP TS 29.154 V15.3.0 (2019-09). 16 AVPs. + - 3GPP TS 29.172 V15.2.0 (2019-12). 66 AVPs. + - 3GPP TS 29.209 V6.8.0 (2011-09). 2 AVPs. + - 3GPP TS 29.215 V15.2.0 (2019-09). 9 AVPs. + - 3GPP TS 29.217 V15.1.0 (2019-09). 14 AVPs. + - 3GPP TS 29.219 V15.3.0 (2019-09). 7 AVPs. + - 3GPP TS 29.234 V11.2.0 (2013-06). 19 AVPs. + - 3GPP TS 29.273 V15.4.0 (2019-09). 40 AVPs. + - 3GPP TS 29.283 V15.1.0 (2019-09). 16 AVPs. + - 3GPP TS 29.336 V15.7.0 (2019-09). 79 AVPs. + - 3GPP TS 29.337 V15.0.0 (2018-06). 4 AVPs. + - 3GPP TS 29.338 V15.1.0 (2018-12). 34 AVPs. + - 3GPP TS 29.343 V15.1.0 (2019-09). 13 AVPs. + - 3GPP TS 29.344 V15.1.0 (2019-09). 7 AVPs. + - 3GPP TS 29.345 V15.1.0 (2019-09). 68 AVPs. + - 3GPP TS 29.368 V15.1.0 (2019-09). 12 AVPs. + - 3GPP TS 29.388 V15.1.0 (2019-09). 3 AVPs. + - 3GPP TS 29.389 V15.1.0 (2019-09). 3 AVPs. + - 3GPP TS 29.468 V15.8.0 (2019-12). 33 AVPs. + - 3GPP TS 29.561 V16.3.0 (2020-03). 9 AVPs. + freediameter (1.4.0) RELEASED; urgency=low * New API: fd_fifo_set_max to change the capacity of a queue. diff -r 6a35c5470ef4 -r 19ab8ac08a36 contrib/dict_json/dictionary_dcca_3gpp.json --- a/contrib/dict_json/dictionary_dcca_3gpp.json Tue Jul 07 01:24:48 2020 +0800 +++ b/contrib/dict_json/dictionary_dcca_3gpp.json Tue Jul 07 01:41:54 2020 +0800 @@ -2930,36 +2930,6 @@ "Vendor": 10415 }, { - "Code": 28, - "Flags": { - "Must": "V", - "MustNot": "M" - }, - "Name": "External-Identifier", - "Type": "OctetString", - "Vendor": 10415 - }, - { - "Code": 124, - "Flags": { - "Must": "M", - "MustNot": "VP" - }, - "Name": "MIP6-Feature-Vector", - "Type": "Unsigned64", - "Vendor": 10415 - }, - { - "Code": 493, - "Flags": { - "Must": "M", - "MustNot": "VP" - }, - "Name": "Service-Selection", - "Type": "UTF8String", - "Vendor": 10415 - }, - { "Code": 500, "Flags": { "Must": "VM", @@ -3020,16 +2990,6 @@ "Vendor": 10415 }, { - "Code": 506, - "Flags": { - "Must": "M", - "MustNot": "VP" - }, - "Name": "Mobile-Node-Identifier", - "Type": "UTF8String", - "Vendor": 10415 - }, - { "Code": 507, "Flags": { "Must": "VM", @@ -3560,16 +3520,6 @@ "Vendor": 10415 }, { - "Code": 578, - "Flags": { - "Must": "M", - "MustNot": "VP" - }, - "Name": "QoS-Capability", - "Type": "Grouped", - "Vendor": 10415 - }, - { "Code": 600, "Flags": { "Must": "VM", @@ -7956,7 +7906,7 @@ "MustNot": "" }, "Name": "SS-Status", - "Type": "Grouped", + "Type": "OctetString", "Vendor": 10415 }, { @@ -8065,7 +8015,7 @@ "Must": "VM", "MustNot": "" }, - "Name": "Call-Barring-Infor-List", + "Name": "Call-Barring-Info", "Type": "Grouped", "Vendor": 10415 }, @@ -8435,7 +8385,7 @@ "Must": "V", "MustNot": "M" }, - "Name": "MME-LocationInformation", + "Name": "MME-Location-Information", "Type": "Grouped", "Vendor": 10415 }, @@ -10850,6 +10800,16 @@ "Vendor": 10415 }, { + "Code": 3111, + "Flags": { + "Must": "V", + "MustNot": "M" + }, + "Name": "External-Identifier", + "Type": "UTF8String", + "Vendor": 10415 + }, + { "Code": 3401, "Flags": { "Must": "VM", diff -r 6a35c5470ef4 -r 19ab8ac08a36 contrib/test_Gx/main_gx.c --- a/contrib/test_Gx/main_gx.c Tue Jul 07 01:24:48 2020 +0800 +++ b/contrib/test_Gx/main_gx.c Tue Jul 07 01:41:54 2020 +0800 @@ -700,53 +700,6 @@ } -/* Search a given AVP model in an AVP (extracted from libfreediameter/message.c ) */ -int fd_avp_search_avp ( struct avp * groupedavp, struct dict_object * what, struct avp ** avp ) -{ - struct avp * nextavp; - struct avp_hdr * nextavphdr; - struct dict_avp_data dictdata; - - - TRACE_ENTRY("%p %p %p", groupedavp, what, avp); - - CHECK_FCT( fd_dict_getval(what, &dictdata) ); - - // Loop only in the group AVP - CHECK_FCT( fd_msg_browse(groupedavp, MSG_BRW_FIRST_CHILD, (void *)&nextavp, NULL) ); - CHECK_FCT( fd_msg_avp_hdr( nextavp, &nextavphdr ) ); - - while (nextavphdr) { - - if ( (nextavphdr->avp_code == dictdata.avp_code) && (nextavphdr->avp_vendor == dictdata.avp_vendor) ) // always 0 if no Vendor flag - { - break; - } - - // Otherwise move to next AVP in the grouped AVP - CHECK_FCT( fd_msg_browse(nextavp, MSG_BRW_NEXT, (void *)&nextavp, NULL) ); - - if(nextavp!=NULL) - { - CHECK_FCT( fd_msg_avp_hdr( nextavp, &nextavphdr ) ); - } - else - nextavphdr=NULL; - } - if (avp) - *avp = nextavp; - - if (avp && nextavp) { - struct dictionary * dict; - CHECK_FCT( fd_dict_getdict( what, &dict) ); - CHECK_FCT_DO( fd_msg_parse_dict( nextavp, dict, NULL ), ); - } - - if (avp || nextavp) - return 0; - else - return ENOENT; -} static int cca_cb( struct msg ** msg, struct avp * t_avp , @@ -784,7 +737,7 @@ CHECK_FCT(fd_msg_search_avp ( *msg, chrg_rule_grp, &g_avp )); - CHECK_FCT(fd_avp_search_avp(g_avp, chrg_rule_name, &avp)); + CHECK_FCT(fd_msg_search_avp(g_avp, chrg_rule_name, &avp)); if(avp) { CHECK_FCT(fd_msg_avp_hdr(avp, &avpdata)); diff -r 6a35c5470ef4 -r 19ab8ac08a36 contrib/tools/README --- a/contrib/tools/README Tue Jul 07 01:24:48 2020 +0800 +++ b/contrib/tools/README Tue Jul 07 01:41:54 2020 +0800 @@ -1,2 +1,11 @@ +csv_to_fd converts CSV files containing RADIUS or Diameter AVP tables +into various formats, including freeDiameter C code and JSON documents. + +grep_fd_dict_dump processes stdin for the output of fd_dict_dump() +or dbg_dict_dump.fdx and reformats to remove pointer addresses, +to allow diff of output between freeDiameter invocations. + +org_to_csv converts org files into CSV files, suitable for csv_to_fd. + org_to_fd.pl converts org files like diameter-rfcs.org to C fragments that can be included in freeDiameter code. diff -r 6a35c5470ef4 -r 19ab8ac08a36 contrib/tools/csv_to_fd --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contrib/tools/csv_to_fd Tue Jul 07 01:41:54 2020 +0800 @@ -0,0 +1,662 @@ +#!/usr/bin/env python + +""" +Convert 8 column CSV files containing RADIUS or Diameter AVP tables +into various formats. + +Format of the CSV files is one of: +- Row per 3GPP AVP tables: + Name, Code, Section, DataType, Must, May, ShouldNot, MustNot + - Name: + AVP Name. String, validated as ALPHA *(ALPHA / DIGIT / "-") + per RFC 6733 section 3.2. + May start with a DIGIT (e.g., "3GPP-IMSI"). + - Code: + AVP Code. Integer, 0..4294967295. + - Section: + Section in relevant standard. String. + - DataType: + AVP Data Type. String, validated per basic and derived types in: + - RFC 6733 section 4.2 + - RFC 6733 section 4.3 + - RFC 7155 section 4.1 + - Must, May, ShouldNot, MustNot: + Flags, possibly comma or space separated: M, P, V + +- Comment row. First cell: + # Comment text 'Comment text' + #= '/*========*/' + # Blank line + +- Parameter row: + @Parameter,Value [, ...] + Supported Parameter terms: + standard Standard name. E.g. '3GPP TS 29.272', 'RFC 6733'. + vendor Vendor number. + +""" + +from __future__ import print_function +from __future__ import with_statement + +import abc +import csv +import collections +import json +import re +import optparse +import os +import sys + +CSV_COLUMN_NAMES = [ + 'name', + 'code', + 'section', + 'datatype', + 'must', + 'may', + 'shouldnot', + 'mustnot', +] + +DERIVED_TO_BASE = { + 'Address': 'OctetString', # RFC 6733 section 4.3.1 + 'Time': 'OctetString', # RFC 6733 section 4.3.1 + 'UTF8String': 'OctetString', # RFC 6733 section 4.3.1 + 'DiameterIdentity': 'OctetString', # RFC 6733 section 4.3.1 + 'DiameterURI': 'OctetString', # RFC 6733 section 4.3.1 + 'Enumerated': 'Integer32', # RFC 6733 section 4.3.1 + 'IPFilterRule': 'OctetString', # RFC 6733 section 4.3.1 + 'QoSFilterRule': 'OctetString', # RFC 7155 section 4.1.1 +} + +# See https://www.iana.org/assignments/enterprise-numbers/enterprise-numbers +VENDOR_TO_NAME = { + 0: '', + 193: 'Ericsson', + 8164: 'Starent', + 10415: '3GPP', +} + + +class Avp(object): + """Store an AVP row.""" + + # Regex to validate avp-name per RFC 6733 section 3.2, + # with changes: + # - Allow avp-name to start with numbers (for 3GPP) + # - Allow '.' in avp-name, for existing dict_dcca_3gpp usage. +# TODO: if starts with digit, ensure contains a letter somewhere? + _name_re = re.compile(r'^[a-zA-Z0-9][a-zA-Z0-9-\.]*$') + + # Regex to validate flags: M, P, V, comma, space + _flags_re = re.compile(r'^[MPV, ]*$') + + __slots__ = CSV_COLUMN_NAMES + [ + 'filename', 'line_num', 'standard', 'vendor', ] + + def __init__(self, name, code, section, datatype, + must, may, shouldnot, mustnot, extra_cells=[], + filename='', line_num=0, standard='', vendor=0): + # Members from CSV row + self.name = name + self.code = int(code) + self.section = section + self.datatype = datatype + self.must = must + self.may = may + self.shouldnot = shouldnot + self.mustnot = mustnot + # Members from file state + self.filename = filename + self.line_num = line_num + self.standard = standard + self.vendor = vendor + # Validate CSV fields + if not self._name_re.match(self.name): + raise ValueError('Invalid AVP name "{}"'.format(self.name)) + if (self.code < 0 or self.code > 4294967295): + raise ValueError('AVP "{}" invalid code {}'.format( + self.name, self.code)) + if (self.datatype not in ( + 'OctetString', 'Integer32', 'Integer64', 'Unsigned32', + 'Unsigned64', 'Float32', 'Float64', 'Grouped') + and self.datatype not in DERIVED_TO_BASE): + raise ValueError('{} invalid data type "{}"'.format( + self.description(), self.datatype)) + # Validate flags + flags = collections.Counter() + for val, desc in [ + (self.must, 'Must'), + (self.may, 'May'), + (self.shouldnot, 'Should Not'), + (self.mustnot, 'Must Not'), + ]: + if not self._flags_re.match(val): + raise ValueError('{} invalid {} Flags "{}"'.format( + self.description(), desc, val)) + flags.update(val) + # Check occurrence of M,V in Must,May,ShouldNot,MustNot + for flag in 'MV': + # TODO: can AVP flags not appear at all? + # if flags[flag] == 0: + # raise ValueError('{} Flag "{}" not set'.format( + # self.description(), flag)) + if flags[flag] > 1: + raise ValueError('{} Flag "{}" set {} times'.format( + self.description(), flag, flags[flag])) + # Compare V presence against vendor + if 'V' in self.must: + if self.vendor == 0: + raise ValueError('{} Flag "V" set for vendor 0'.format( + self.description())) + else: + if self.vendor != 0: + raise ValueError('{} Flag "V" not set for vendor {}'.format( + self.description(), self.vendor)) + + @property + def __dict__(self): + return {s: getattr(self, s) for s in self.__slots__} + + def __eq__(self, other): + """Equality comparison of Avp instances. + Considered equal if name, vendor, code, datatype, and flags are equal. + """ + if other is self: + return True + if type(other) is not type(self): + return NotImplemented + return ( + other.name, other.vendor, other.code, other.datatype, + other.must, other.may, other.shouldnot, other.mustnot, + ) == ( + self.name, self.vendor, self.code, self.datatype, + self.must, self.may, self.shouldnot, self.mustnot, + ) + + def __ne__(self, other): + return not self == other + + def description(self): + return 'AVP "{}" ({})'.format(self.name, self.code) + + +class Processor(object): + """Interface for processor of Avp.""" + + __metaclass__ = abc.ABCMeta + + @classmethod + def cls_name(cls): + """Return the name, lower-case, without "processor" suffix.""" + suffix = 'processor' + name = cls.__name__.lower() + if name.endswith(suffix): + return name[:-len(suffix)] + return name + + @classmethod + def cls_desc(cls): + """Return the first line of the docstring.""" + if cls.__doc__ is None: + return "" + return cls.__doc__.split('\n')[0] + + @abc.abstractmethod + def filename(self, filename): + """Called when a file is opened.""" + pass + + @abc.abstractmethod + def avp(self, avp): + """Process a validated Avp.""" + pass + + @abc.abstractmethod + def comment(self, comment, filename, line_num): + """Process a comment row: + #comment, + """ + pass + + @abc.abstractmethod + def generate(self): + """Invoked after all rows processed.""" + pass + + @abc.abstractmethod + def parameter(self, name, value): + """Process a parameter row: + @name,value. + """ + pass + + +class DebugProcessor(Processor): + """Display the CSV parsing.""" + + def filename(self, filename): + print('File: {}'.format(filename)) + + def avp(self, avp): + avpdict = vars(avp) + print('AVP: {name}, {code}, {datatype}'.format(**avpdict)) + + def comment(self, comment, filename, line_num): + print('Comment: {}'.format(comment)) + + def generate(self): + print('Generate') + + def parameter(self, name, value): + print('Parameter: {} {}'.format(name, value)) + + +class NoopProcessor(Processor): + """Validate the CSV; no other output.""" + + def filename(self, filename): + pass + + def avp(self, avp): + pass + + def comment(self, comment, filename, line_num): + pass + + def generate(self): + pass + + def parameter(self, name, value): + pass + + +class FdcProcessor(Processor): + """Generate freeDiameter C code. + + Comment cells are parsed as: + # text comment /* text comment */ + #= /*==============*/ + # [blank line] + """ + + COMMENT_WIDTH = 64 + + class AvpFunction(object): + """Maintain per-function state to create DICT_AVP entries. + """ + + def __init__(self, name): + self.__name = name + self.__lines = [] + self.__derived = set() + + @property + def name(self): + """Return name.""" + return self.__name + + @property + def lines(self): + """Return all lines.""" + return self.__lines + + @lines.setter + def lines(self, value): + """Set to append a line.""" + self.__lines.append(value) + + @property + def derived(self): + """Return list of all derived values.""" + return list(self.__derived) + + @derived.setter + def derived(self, value): + """Set to store a derived type.""" + self.__derived.add(value) + + def __init__(self): + self._filenames = [] + self._functions = collections.OrderedDict() + + def filename(self, filename): + self._filenames.append(os.path.basename(filename)) + + def avp(self, avp): + comment = '{name}, {datatype}, code {code}'.format(**vars(avp)) + if avp.section != '': + comment += ', section {}'.format(avp.section) + self.add_comment(comment) + self.add('\t{') + self.add('\t\tstruct dict_avp_data data = {') +# TODO: remove comments? + self.add('\t\t\t{},\t/* Code */'.format(avp.code)) + self.add('\t\t\t{},\t/* Vendor */'.format(avp.vendor)) + self.add('\t\t\t\"{}\",\t/* Name */'.format(avp.name)) + self.add('\t\t\t{},\t/* Fixed flags */'.format( + self.build_flags(', '.join([avp.must, avp.mustnot])))) + self.add('\t\t\t{},\t/* Fixed flag values */'.format( + self.build_flags(avp.must))) +# TODO: add trailing comma? + self.add('\t\t\tAVP_TYPE_{}\t/* base type of data */'.format( + DERIVED_TO_BASE.get(avp.datatype, avp.datatype).upper())) + self.add('\t\t};') + avp_type = 'NULL' + if avp.datatype == 'Enumerated': + self.add('\t\tstruct dict_object\t*type;') + vendor_prefix = '' + if avp.vendor != 0: + vendor_prefix = '{}/'.format(VENDOR_TO_NAME[avp.vendor]) + self.add( + '\t\tstruct dict_type_data\t tdata = {{ AVP_TYPE_INTEGER32, ' + '"Enumerated({prefix}{name})", NULL, NULL, NULL }};'.format( + prefix=vendor_prefix, name=avp.name)) +# XXX: add enumerated values + self.add('\t\tCHECK_dict_new(DICT_TYPE, &tdata, NULL, &type);') + avp_type = "type" + elif avp.datatype in DERIVED_TO_BASE: + avp_type = '{}_type'.format(avp.datatype) + self.derived(avp.datatype) + self.add('\t\tCHECK_dict_new(DICT_AVP, &data, {}, NULL);'.format( + avp_type)) +# TODO: remove ; on scope brace + self.add('\t};') + self.add('') + + def comment(self, comment, filename, line_num): + if comment == '': + self.add('') + elif comment == '=': + self.add_header() + elif comment.startswith(' '): + self.add_comment(comment[1:]) + else: + raise ValueError('Unsupported comment "{}"'.format(comment)) + + def generate(self): + fp = sys.stdout + self.write_introduction(fp) + for func in self._functions: + self.write_function(fp, self._functions[func]) + + def parameter(self, name, value): + pass + + # internal methods + + def current_avpfunction(self): + """Return current AvpFunction to update. + + Note: allows for easier future enhancement to generate separate + C functions per AVP groups such as: by csv file, standard, or vendor. + """ + name = 'add_avps' + if name not in self._functions: + self._functions[name] = self.AvpFunction(name) + return self._functions[name] + + def add(self, line): + self.current_avpfunction().lines = line + + def derived(self, value): + self.current_avpfunction().derived = value + + def build_c_token(self, value): + """Convert a string into a valid C token.""" + return re.sub(r'[^\w]', '_', value) + + def build_flags(self, flags): + result = [] + if 'V' in flags: + result.append('AVP_FLAG_VENDOR') + if 'M' in flags: + result.append('AVP_FLAG_MANDATORY') + if not result: + return '0'; + return ' |'.join(result) + + def add_comment(self, comment): + self.add(self.format_comment(comment)) + + def add_header(self): + self.add(self.format_header()) + + def format_comment(self, comment): + return '\t/* {:<{width}} */'.format(comment, width=self.COMMENT_WIDTH) + + def format_header(self): + return '\t/*={:=<{width}}=*/'.format('', width=self.COMMENT_WIDTH) + + def write_introduction(self, fp): + """Write the introduction to the generated file.""" + fp.write('''\ +/* +Generated by: +\tcsv_to_fd -p {processor} {files} + +Do not modify; modify the source .csv files instead. +*/ + +#include + +#define CHECK_dict_new( _type, _data, _parent, _ref ) \\ +\tCHECK_FCT( fd_dict_new( fd_g_config->cnf_dict, \ +(_type), (_data), (_parent), (_ref)) ); + +#define CHECK_dict_search( _type, _criteria, _what, _result ) \\ +\tCHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, \ +(_type), (_criteria), (_what), (_result), ENOENT) ); +'''.format( + processor=self.cls_name(), + files=' '.join(self._filenames))) + + def write_function(self, fp, avpfunction): + """Generate a function from AvpFunction.""" + function = self.build_c_token(avpfunction.name) + # Function start + fp.write('''\ + +int {}() +{{ +'''.format(function)) + + # Create variables used by derived type validation + for derived in avpfunction.derived: + fp.write('''\ +\tstruct dict_object * {name}_type = NULL; +\tCHECK_dict_search(DICT_TYPE, TYPE_BY_NAME, "{name}", &{name}_type); + +'''.format(name=derived)) + + # Write generated DICT_AVP creation + fp.write('\n'.join(avpfunction.lines)) + + # Write function end + fp.write('''\ + +\treturn 0; +}} /* {}() */ +'''.format(function)) + + +class JsonProcessor(Processor): + """Generate freeDiameter JSON object. + """ + + def __init__(self): + self.avps = [] + + def filename(self, filename): + pass + + def avp(self, avp): + flags = collections.OrderedDict([ + ('Must', self.build_flags(avp.must)), + ('MustNot', self.build_flags(avp.mustnot)), + ]) + row = collections.OrderedDict([ + ('Code', avp.code), + ('Flags', flags), + ('Name', avp.name), + ('Type', avp.datatype), + ('Vendor', avp.vendor), + ]) + self.avps.append(row) + + def comment(self, comment, filename, line_num): + pass + + def generate(self): + doc = {"AVPs": self.avps} + print(json.dumps(doc, indent=2)) + + def parameter(self, name, value): + pass + + def build_flags(self, flags): + result = [] + if 'V' in flags: + result.append('V') + if 'M' in flags: + result.append('M') + return ''.join(result) + + +def avp_conflict(description, avp, conflict): + """Raise error for duplicate or conflicting AVPs. + """ + if avp == conflict: + raise ValueError( + '{} {} duplicated in' + ' file "{}" line {}'.format( + avp.description(), description, + conflict.filename, conflict.line_num)) + else: + raise ValueError( + '{} {} conflicts with {}' + ' in file "{}" line {}'.format( + avp.description(), description, + conflict.description(), + conflict.filename, conflict.line_num)) + + +def main(): + """Main application entry. + """ + + # Build dict of name: NameProcessor + processors = { + cls.cls_name(): cls + for cls in Processor.__subclasses__() + } + + # Build Processor name to desc + processor_help = '\n'.join( + [' {:8} {}'.format(key, processors[key].cls_desc()) + for key in sorted(processors)]) + + # Custom OptionParser with improved help + class MyParser(optparse.OptionParser): + """Custom OptionParser without epilog formatting.""" + def format_help(self, formatter=None): + return """\ +{} +Supported PROCESSOR options: +{} +""".format( + optparse.OptionParser.format_help(self, formatter), + processor_help) + + # Parse options + parser = MyParser( + usage='%prog [-h] [-p PROCESSOR] FILE ...', + description="""\ +Convert CSV files FILE ... containing RADIUS or Diameter AVP tables +into various formats using the specified processor PROCESSOR. +""") + parser.add_option( + '-p', '--processor', + default='noop', + help='AVP processor. One of: {}. [%default]'.format( + ', '.join(processors.keys()))) + (opts, args) = parser.parse_args() + if len(args) < 1: + parser.error('Incorrect number of arguments. Use -h for help.') + + # Find processor + try: + avpproc = processors[opts.processor]() + except KeyError as e: + parser.error('Unknown processor "{}".'.format(opts.processor)) + + # dict of [vendor][code] : Avp + avp_codes = collections.defaultdict(dict) + + # dict of [vendor][name] : Avp + avp_names = collections.defaultdict(dict) + + # Process files + for filename in args: + avpproc.filename(filename) + with open(filename, 'r') as csvfile: + csvdata = csv.DictReader(csvfile, CSV_COLUMN_NAMES, + restkey='extra_cells', restval='') + standard = '' + vendor = 0 + errors = [] + for row in csvdata: + try: + if csvdata.restkey in row: + raise ValueError('Extra cells: {}'.format( + ','.join(row[csvdata.restkey]))) + if row['name'] in (None, '', 'Attribute Name'): + continue + elif row['name'].startswith('#'): + comment = row['name'][1:] + avpproc.comment(comment, filename, csvdata.line_num) + elif row['name'].startswith('@'): + parameter = row['name'][1:] + value = row['code'] + if False: + pass + elif parameter == 'standard': + standard = value + elif parameter == 'vendor': + vendor = int(value) + else: + raise ValueError('Unknown parameter "{}"'.format( + parameter)) + avpproc.parameter(parameter, value) + else: + avp = Avp(filename=filename, line_num=csvdata.line_num, + standard=standard, vendor=vendor, + **row) + # Ensure AVP vendor/code not already defined + if avp.code in avp_codes[avp.vendor]: + conflict = avp_codes[avp.vendor][avp.code] + avp_conflict('Code', avp, conflict) + avp_codes[avp.vendor][avp.code] = avp + # Ensure AVP vendor/name not already defined + if avp.name in avp_names[avp.vendor]: + conflict = avp_names[avp.vendor][avp.name] + avp_conflict('Name', avp, conflict) + avp_names[avp.vendor][avp.name] = avp + # Process AVP + avpproc.avp(avp) + except (TypeError, ValueError) as e: + errors.append('CSV file "{}" line {}: {}\n'.format( + filename, csvdata.line_num, e)) + if errors: + sys.stderr.write(''.join(errors)) + sys.exit(1) + + # Generate result + avpproc.generate() + + +if __name__ == '__main__': + main() + +# vim: set et sw=4 sts=4 : diff -r 6a35c5470ef4 -r 19ab8ac08a36 contrib/tools/diameter-rfcs.csv --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contrib/tools/diameter-rfcs.csv Tue Jul 07 01:41:54 2020 +0800 @@ -0,0 +1,202 @@ +Attribute Name,Code,Section defined,Value Type,MUST,MAY,SHOULD NOT,MUST NOT +@vendor,0,,,,,, +@standard,RFC 3588,,,,,, +#=,,,,,,, +# RFC 3588 - Diameter #,,,,,,, +#=,,,,,,, +#,,,,,,, +Acct-Interim-Interval,85,9.8.2,Unsigned32,M,P,,V +Accounting-Realtime-Required,483,9.8.7,Enumerated,M,P,,V +Acct-Multi-Session-Id,50,9.8.5,UTF8String,M,P,,V +Accounting-Record-Number,485,9.8.3,Unsigned32,M,P,,V +Accounting-Record-Type,480,9.8.1,Enumerated,M,P,,V +Accounting-Session-Id,44,9.8.4,OctetString,M,P,,V +Accounting-Sub-Session-Id,287,9.8.6,Unsigned64,M,P,,V +Acct-Application-Id,259,6.9,Unsigned32,M,P,,V +Auth-Application-Id,258,6.8,Unsigned32,M,P,,V +Auth-Request-Type,274,8.7,Enumerated,M,P,,V +Authorization-Lifetime,291,8.9,Unsigned32,M,P,,V +Auth-Grace-Period,276,8.10,Unsigned32,M,P,,V +Auth-Session-State,277,8.11,Enumerated,M,P,,V +Re-Auth-Request-Type,285,8.12,Enumerated,M,P,,V +Class,25,8.20,OctetString,M,P,,V +Destination-Host,293,6.5,DiameterIdentity,M,P,,V +Destination-Realm,283,6.6,DiameterIdentity,M,P,,V +Disconnect-Cause,273,5.4.3,Enumerated,M,P,,V +E2E-Sequence-AVP,300,6.15,Grouped,M,P,,V +Error-Message,281,7.3,UTF8String,,P,,"V,M" +Error-Reporting-Host,294,7.4,DiameterIdentity,,P,,"V,M" +Event-Timestamp,55,8.21,Time,M,P,,V +Experimental-Result,297,7.6,Grouped,M,P,,V +Experimental-Result-Code,298,7.7,Unsigned32,M,P,,V +Failed-AVP,279,7.5,Grouped,M,P,,V +Firmware-Revision,267,5.3.4,Unsigned32,,,,"P,V,M" +Host-IP-Address,257,5.3.5,Address,M,P,,V +Inband-Security-Id,299,6.10,Unsigned32,M,P,,V +Multi-Round-Time-Out,272,8.19,Unsigned32,M,P,,V +Origin-Host,264,6.3,DiameterIdentity,M,P,,V +Origin-Realm,296,6.4,DiameterIdentity,M,P,,V +Origin-State-Id,278,8.16,Unsigned32,M,P,,V +Product-Name,269,5.3.7,UTF8String,,,,"P,V,M" +Proxy-Host,280,6.7.3,DiameterIdentity,M,,,"P,V" +Proxy-Info,284,6.7.2,Grouped,M,,,"P,V" +Proxy-State,33,6.7.4,OctetString,M,,,"P,V" +Redirect-Host,292,6.12,DiameterURI,M,P,,V +Redirect-Host-Usage,261,6.13,Enumerated,M,P,,V +Redirect-Max-Cache-Time,262,6.14,Unsigned32,M,P,,V +Result-Code,268,7.1,Unsigned32,M,P,,V +Route-Record,282,6.7.1,DiameterIdentity,M,,,"P,V" +Session-Id,263,8.8,UTF8String,M,P,,V +Session-Timeout,27,8.13,Unsigned32,M,P,,V +Session-Binding,270,8.17,Unsigned32,M,P,,V +Session-Server-Failover,271,8.18,Enumerated,M,P,,V +Supported-Vendor-Id,265,5.3.6,Unsigned32,M,P,,V +Termination-Cause,295,8.15,Enumerated,M,P,,V +User-Name,1,8.14,UTF8String,M,P,,V +Vendor-Id,266,5.3.3,Unsigned32,M,P,,V +Vendor-Specific-Application-Id,260,6.11,Grouped,M,P,,V +@standard,RFC 4005,,,,,, +#=,,,,,,, +# RFC 4005 - NAS #,,,,,,, +#=,,,,,,, +#,,,,,,, +NAS-Port,5,4.2,Unsigned32,M,P,,V +NAS-Port-Id,87,4.3,UTF8String,M,P,,V +NAS-Port-Type,61,4.4,Enumerated,M,P,,V +Called-Station-Id,30,4.5,UTF8String,M,P,,V +Calling-Station-Id,31,4.6,UTF8String,M,P,,V +Connect-Info,77,4.7,UTF8String,M,P,,V +Originating-Line-Info,94,4.8,OctetString,,"M,P",,V +Reply-Message,18,4.9,UTF8String,M,P,,V +User-Password,2,5.1,OctetString,M,P,,V +Password-Retry,75,5.2,Unsigned32,M,P,,V +Prompt,76,5.3,Enumerated,M,P,,V +CHAP-Auth,402,5.4,Grouped,M,P,,V +CHAP-Algorithm,403,5.5,Enumerated,M,P,,V +CHAP-Ident,404,5.6,OctetString,M,P,,V +CHAP-Response,405,5.7,OctetString,M,P,,V +CHAP-Challenge,60,5.8,OctetString,M,P,,V +ARAP-Password,70,5.9,OctetString,M,P,,V +ARAP-Challenge-Response,84,5.10,OctetString,M,P,,V +ARAP-Security,73,5.11,Unsigned32,M,P,,V +ARAP-Security-Data,74,5.12,OctetString,M,P,,V +Service-Type,6,6.1,Enumerated,M,P,,V +Callback-Number,19,6.2,UTF8String,M,P,,V +Callback-Id,20,6.3,UTF8String,M,P,,V +Idle-Timeout,28,6.4,Unsigned32,M,P,,V +Port-Limit,62,6.5,Unsigned32,M,P,,V +NAS-Filter-Rule,400,6.6,IPFilterRule,M,P,,V +Filter-Id,11,6.7,UTF8String,M,P,,V +Configuration-Token,78,6.8,OctetString,M,,,"P,V" +QoS-Filter-Rule,407,6.9,QoSFilterRule,,,, +Framed-Protocol,7,6.10.1,Enumerated,M,P,,V +Framed-Routing,10,6.10.2,Enumerated,M,P,,V +Framed-MTU,12,6.10.3,Unsigned32,M,P,,V +Framed-Compression,13,6.10.4,Enumerated,M,P,,V +Framed-IP-Address,8,6.11.1,OctetString,M,P,,V +Framed-IP-Netmask,9,6.11.2,OctetString,M,P,,V +Framed-Route,22,6.11.3,UTF8String,M,P,,V +Framed-Pool,88,6.11.4,OctetString,M,P,,V +Framed-Interface-Id,96,6.11.5,Unsigned64,M,P,,V +Framed-IPv6-Prefix,97,6.11.6,OctetString,M,P,,V +Framed-IPv6-Route,99,6.11.7,UTF8String,M,P,,V +Framed-IPv6-Pool,100,6.11.8,OctetString,M,P,,V +Framed-IPX-Network,23,6.12.1,UTF8String,M,P,,V +Framed-Appletalk-Link,37,6.13.1,Unsigned32,M,P,,V +Framed-Appletalk-Network,38,6.13.2,Unsigned32,M,P,,V +Framed-Appletalk-Zone,39,6.13.3,OctetString,M,P,,V +ARAP-Features,71,6.14.1,OctetString,M,P,,V +ARAP-Zone-Access,72,6.14.2,Enumerated,M,P,,V +Login-IP-Host,14,6.15.1,OctetString,M,P,,V +Login-IPv6-Host,98,6.15.2,OctetString,M,P,,V +Login-Service,15,6.15.3,Enumerated,M,P,,V +Login-TCP-Port,16,6.16.1,Unsigned32,M,P,,V +Login-LAT-Service,34,6.17.1,OctetString,M,P,,V +Login-LAT-Node,35,6.17.2,OctetString,M,P,,V +Login-LAT-Group,36,6.17.3,OctetString,M,P,,V +Login-LAT-Port,63,6.17.4,OctetString,M,P,,V +Tunneling,401,7.1,Grouped,M,P,,V +Tunnel-Type,64,7.2,Enumerated,M,P,,V +Tunnel-Medium-Type,65,7.3,Enumerated,M,P,,V +Tunnel-Client-Endpoint,66,7.4,UTF8String,M,P,,V +Tunnel-Server-Endpoint,67,7.5,UTF8String,M,P,,V +Tunnel-Password,69,7.6,OctetString,M,P,,V +Tunnel-Private-Group-Id,81,7.7,OctetString,M,P,,V +Tunnel-Assignment-Id,82,7.8,OctetString,M,P,,V +Tunnel-Preference,83,7.9,Unsigned32,M,P,,V +Tunnel-Client-Auth-Id,90,7.10,UTF8String,M,P,,V +Tunnel-Server-Auth-Id,91,7.11,UTF8String,M,P,,V +Accounting-Input-Octets,363,8.1,Unsigned64,M,P,,V +Accounting-Output-Octets,364,8.2,Unsigned64,M,P,,V +Accounting-Input-Packets,365,8.3,Unsigned64,M,P,,V +Accounting-Output-Packets,366,8.4,Unsigned64,M,P,,V +Acct-Session-Time,46,8.5,Unsigned32,M,P,,V +Acct-Authentic,45,8.6,Enumerated,M,P,,V +Acounting-Auth-Method,406,8.7,Enumerated,M,P,,V +Acct-Delay-Time,41,8.8,Unsigned32,M,P,,V +Acct-Link-Count,51,8.9,Unsigned32,M,P,,V +Acct-Tunnel-Connection,68,8.10,OctetString,M,P,,V +Acct-Tunnel-Packets-Lost,86,8.11,Unsigned32,M,P,,V +NAS-Identifier,32,9.3.1,UTF8String,M,P,,V +NAS-IP-Address,4,9.3.2,OctetString,M,P,,V +NAS-IPv6-Address,95,9.3.3,OctetString,M,P,,V +State,24,9.3.4,OctetString,M,P,,V +# Termination-Cause already in RFC 3588,295,9.3.5,Enumerated,M,P,,V +#,,,,,,, +Origin-AAA-Protocol,408,9.3.6,Enumerated,M,P,,V +@standard,RFC 4006,,,,,, +#=,,,,,,, +# RFC 4006 - DCCA #,,,,,,, +#=,,,,,,, +#,,,,,,, +CC-Correlation-Id,411,8.1,OctetString,,"P,M",,V +CC-Input-Octets,412,8.24,Unsigned64,M,P,,V +CC-Money,413,8.22,Grouped,M,P,,V +CC-Output-Octets,414,8.25,Unsigned64,M,P,,V +CC-Request-Number,415,8.2,Unsigned32,M,P,,V +CC-Request-Type,416,8.3,Enumerated,M,P,,V +CC-Service-Specific-Units,417,8.26,Unsigned64,M,P,,V +CC-Session-Failover,418,8.4,Enumerated,M,P,,V +CC-Sub-Session-Id,419,8.5,Unsigned64,M,P,,V +CC-Time,420,8.21,Unsigned32,M,P,,V +CC-Total-Octets,421,8.23,Unsigned64,M,P,,V +CC-Unit-Type,454,8.32,Enumerated,M,P,,V +Check-Balance-Result,422,8.6,Enumerated,M,P,,V +Cost-Information,423,8.7,Grouped,M,P,,V +Cost-Unit,424,8.12,UTF8String,M,P,,V +Credit-Control,426,8.13,Enumerated,M,P,,V +Credit-Control-Failure-Handling,427,8.14,Enumerated,M,P,,V +Currency-Code,425,8.11,Unsigned32,M,P,,V +Direct-Debiting-Failure-Handling,428,8.15,Enumerated,M,P,,V +Exponent,429,8.9,Integer32,M,P,,V +Final-Unit-Action,449,8.35,Enumerated,M,P,,V +Final-Unit-Indication,430,8.34,Grouped,M,P,,V +Granted-Service-Unit,431,8.17,Grouped,M,P,,V +G-S-U-Pool-Identifier,453,8.31,Unsigned32,M,P,,V +G-S-U-Pool-Reference,457,8.30,Grouped,M,P,,V +Multiple-Services-Credit-Control,456,8.16,Grouped,M,P,,V +Multiple-Services-Indicator,455,8.40,Enumerated,M,P,,V +Rating-Group,432,8.29,Unsigned32,M,P,,V +Redirect-Address-Type,433,8.38,Enumerated,M,P,,V +Redirect-Server,434,8.37,Grouped,M,P,,V +Redirect-Server-Address,435,8.39,UTF8String,M,P,,V +Requested-Action,436,8.41,Enumerated,M,P,,V +Requested-Service-Unit,437,8.18,Grouped,M,P,,V +Restriction-Filter-Rule,438,8.36,IPFilterRule,M,P,,V +Service-Context-Id,461,8.42,UTF8String,M,P,,V +Service-Identifier,439,8.28,Unsigned32,M,P,,V +Service-Parameter-Info,440,8.43,Grouped,,"P,M",,V +Service-Parameter-Type,441,8.44,Unsigned32,,"P,M",,V +Service-Parameter-Value,442,8.45,OctetString,,"P,M",,V +Subscription-Id,443,8.46,Grouped,M,P,,V +Subscription-Id-Data,444,8.48,UTF8String,M,P,,V +Subscription-Id-Type,450,8.47,Enumerated,M,P,,V +Tariff-Change-Usage,452,8.27,Enumerated,M,P,,V +Tariff-Time-Change,451,8.20,Time,M,P,,V +Unit-Value,445,8.8,Grouped,M,P,,V +Used-Service-Unit,446,8.19,Grouped,M,P,,V +User-Equipment-Info,458,8.49,Grouped,,"P,M",,V +User-Equipment-Info-Type,459,8.50,Enumerated,,"P,M",,V +User-Equipment-Info-Value,460,8.51,OctetString,,"P,M",,V +Value-Digits,447,8.10,Integer64,M,P,,V +Validity-Time,448,8.33,Unsigned32,M,P,,V diff -r 6a35c5470ef4 -r 19ab8ac08a36 contrib/tools/diameter-rfcs.org --- a/contrib/tools/diameter-rfcs.org Tue Jul 07 01:24:48 2020 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,188 +0,0 @@ -| Attribute Name | Code | Section | Data | MUST | MAY | SHLD NOT | MUST NOT | Encr | -| # RFC 3588 - Diameter # | | | | | | | | | -| Acct-Interim-Interval | 85 | 9.8.2 | Unsigned32 | M | P | | V | Y | -| Accounting-Realtime-Required | 483 | 9.8.7 | Enumerated | M | P | | V | Y | -| Acct-Multi-Session-Id | 50 | 9.8.5 | UTF8String | M | P | | V | Y | -| Accounting-Record-Number | 485 | 9.8.3 | Unsigned32 | M | P | | V | Y | -| Accounting-Record-Type | 480 | 9.8.1 | Enumerated | M | P | | V | Y | -| Accounting-Session-Id | 44 | 9.8.4 | OctetString | M | P | | V | Y | -| Accounting-Sub-Session-Id | 287 | 9.8.6 | Unsigned64 | M | P | | V | Y | -| Acct-Application-Id | 259 | 6.9 | Unsigned32 | M | P | | V | N | -| Auth-Application-Id | 258 | 6.8 | Unsigned32 | M | P | | V | N | -| Auth-Request-Type | 274 | 8.7 | Enumerated | M | P | | V | N | -| Authorization-Lifetime | 291 | 8.9 | Unsigned32 | M | P | | V | N | -| Auth-Grace-Period | 276 | 8.10 | Unsigned32 | M | P | | V | N | -| Auth-Session-State | 277 | 8.11 | Enumerated | M | P | | V | N | -| Re-Auth-Request-Type | 285 | 8.12 | Enumerated | M | P | | V | N | -| Class | 25 | 8.20 | OctetString | M | P | | V | Y | -| Destination-Host | 293 | 6.5 | DiamIdent | M | P | | V | N | -| Destination-Realm | 283 | 6.6 | DiamIdent | M | P | | V | N | -| Disconnect-Cause | 273 | 5.4.3 | Enumerated | M | P | | V | N | -| E2E-Sequence-AVP | 300 | 6.15 | Grouped | M | P | | V | Y | -| Error-Message | 281 | 7.3 | UTF8String | | P | | V,M | N | -| Error-Reporting-Host | 294 | 7.4 | DiamIdent | | P | | V,M | N | -| Event-Timestamp | 55 | 8.21 | Time | M | P | | V | N | -| Experimental-Result | 297 | 7.6 | Grouped | M | P | | V | N | -| Experimental-Result-Code | 298 | 7.7 | Unsigned32 | M | P | | V | N | -| Failed-AVP | 279 | 7.5 | Grouped | M | P | | V | N | -| Firmware-Revision | 267 | 5.3.4 | Unsigned32 | | | | P,V,M | N | -| Host-IP-Address | 257 | 5.3.5 | Address | M | P | | V | N | -| Inband-Security-Id | 299 | 6.10 | Unsigned32 | M | P | | V | N | -| Multi-Round-Time-Out | 272 | 8.19 | Unsigned32 | M | P | | V | Y | -| Origin-Host | 264 | 6.3 | DiamIdent | M | P | | V | N | -| Origin-Realm | 296 | 6.4 | DiamIdent | M | P | | V | N | -| Origin-State-Id | 278 | 8.16 | Unsigned32 | M | P | | V | N | -| Product-Name | 269 | 5.3.7 | UTF8String | | | | P,V,M | N | -| Proxy-Host | 280 | 6.7.3 | DiamIdent | M | | | P,V | N | -| Proxy-Info | 284 | 6.7.2 | Grouped | M | | | P,V | N | -| Proxy-State | 33 | 6.7.4 | OctetString | M | | | P,V | N | -| Redirect-Host | 292 | 6.12 | DiamURI | M | P | | V | N | -| Redirect-Host-Usage | 261 | 6.13 | Enumerated | M | P | | V | N | -| Redirect-Max-Cache-Time | 262 | 6.14 | Unsigned32 | M | P | | V | N | -| Result-Code | 268 | 7.1 | Unsigned32 | M | P | | V | N | -| Route-Record | 282 | 6.7.1 | DiamIdent | M | | | P,V | N | -| Session-Id | 263 | 8.8 | UTF8String | M | P | | V | Y | -| Session-Timeout | 27 | 8.13 | Unsigned32 | M | P | | V | N | -| Session-Binding | 270 | 8.17 | Unsigned32 | M | P | | V | Y | -| Session-Server-Failover | 271 | 8.18 | Enumerated | M | P | | V | Y | -| Supported-Vendor-Id | 265 | 5.3.6 | Unsigned32 | M | P | | V | N | -| Termination-Cause | 295 | 8.15 | Enumerated | M | P | | V | N | -| User-Name | 1 | 8.14 | UTF8String | M | P | | V | Y | -| Vendor-Id | 266 | 5.3.3 | Unsigned32 | M | P | | V | N | -| Vendor-Specific-Application-Id | 260 | 6.11 | Grouped | M | P | | V | N | -| # RFC 4005 - NAS # | | | | | | | | | -| NAS-Port | 5 | 4.2 | Unsigned32 | M | P | | V | Y | -| NAS-Port-Id | 87 | 4.3 | UTF8String | M | P | | V | Y | -| NAS-Port-Type | 61 | 4.4 | Enumerated | M | P | | V | Y | -| Called-Station-Id | 30 | 4.5 | UTF8String | M | P | | V | Y | -| Calling-Station-Id | 31 | 4.6 | UTF8String | M | P | | V | Y | -| Connect-Info | 77 | 4.7 | UTF8String | M | P | | V | Y | -| Originating-Line-Info | 94 | 4.8 | OctetString | | M,P | | V | Y | -| Reply-Message | 18 | 4.9 | UTF8String | M | P | | V | Y | -| User-Password | 2 | 5.1 | OctetString | M | P | | V | Y | -| Password-Retry | 75 | 5.2 | Unsigned32 | M | P | | V | Y | -| Prompt | 76 | 5.3 | Enumerated | M | P | | V | Y | -| CHAP-Auth | 402 | 5.4 | Grouped | M | P | | V | Y | -| CHAP-Algorithm | 403 | 5.5 | Enumerated | M | P | | V | Y | -| CHAP-Ident | 404 | 5.6 | OctetString | M | P | | V | Y | -| CHAP-Response | 405 | 5.7 | OctetString | M | P | | V | Y | -| CHAP-Challenge | 60 | 5.8 | OctetString | M | P | | V | Y | -| ARAP-Password | 70 | 5.9 | OctetString | M | P | | V | Y | -| ARAP-Challenge-Response | 84 | 5.10 | OctetString | M | P | | V | Y | -| ARAP-Security | 73 | 5.11 | Unsigned32 | M | P | | V | Y | -| ARAP-Security-Data | 74 | 5.12 | OctetString | M | P | | V | Y | -| Service-Type | 6 | 6.1 | Enumerated | M | P | | V | Y | -| Callback-Number | 19 | 6.2 | UTF8String | M | P | | V | Y | -| Callback-Id | 20 | 6.3 | UTF8String | M | P | | V | Y | -| Idle-Timeout | 28 | 6.4 | Unsigned32 | M | P | | V | Y | -| Port-Limit | 62 | 6.5 | Unsigned32 | M | P | | V | Y | -| NAS-Filter-Rule | 400 | 6.6 | IPFltrRule | M | P | | V | Y | -| Filter-Id | 11 | 6.7 | UTF8String | M | P | | V | Y | -| Configuration-Token | 78 | 6.8 | OctetString | M | | | P,V | | -| QoS-Filter-Rule | 407 | 6.9 | QoSFltrRule | | | | | | -| Framed-Protocol | 7 | 6.10.1 | Enumerated | M | P | | V | Y | -| Framed-Routing | 10 | 6.10.2 | Enumerated | M | P | | V | Y | -| Framed-MTU | 12 | 6.10.3 | Unsigned32 | M | P | | V | Y | -| Framed-Compression | 13 | 6.10.4 | Enumerated | M | P | | V | Y | -| Framed-IP-Address | 8 | 6.11.1 | OctetString | M | P | | V | Y | -| Framed-IP-Netmask | 9 | 6.11.2 | OctetString | M | P | | V | Y | -| Framed-Route | 22 | 6.11.3 | UTF8String | M | P | | V | Y | -| Framed-Pool | 88 | 6.11.4 | OctetString | M | P | | V | Y | -| Framed-Interface-Id | 96 | 6.11.5 | Unsigned64 | M | P | | V | Y | -| Framed-IPv6-Prefix | 97 | 6.11.6 | OctetString | M | P | | V | Y | -| Framed-IPv6-Route | 99 | 6.11.7 | UTF8String | M | P | | V | Y | -| Framed-IPv6-Pool | 100 | 6.11.8 | OctetString | M | P | | V | Y | -| Framed-IPX-Network | 23 | 6.12.1 | UTF8String | M | P | | V | Y | -| Framed-Appletalk-Link | 37 | 6.13.1 | Unsigned32 | M | P | | V | Y | -| Framed-Appletalk-Network | 38 | 6.13.2 | Unsigned32 | M | P | | V | Y | -| Framed-Appletalk-Zone | 39 | 6.13.3 | OctetString | M | P | | V | Y | -| ARAP-Features | 71 | 6.14.1 | OctetString | M | P | | V | Y | -| ARAP-Zone-Access | 72 | 6.14.2 | Enumerated | M | P | | V | Y | -| Login-IP-Host | 14 | 6.15.1 | OctetString | M | P | | V | Y | -| Login-IPv6-Host | 98 | 6.15.2 | OctetString | M | P | | V | Y | -| Login-Service | 15 | 6.15.3 | Enumerated | M | P | | V | Y | -| Login-TCP-Port | 16 | 6.16.1 | Unsigned32 | M | P | | V | Y | -| Login-LAT-Service | 34 | 6.17.1 | OctetString | M | P | | V | Y | -| Login-LAT-Node | 35 | 6.17.2 | OctetString | M | P | | V | Y | -| Login-LAT-Group | 36 | 6.17.3 | OctetString | M | P | | V | Y | -| Login-LAT-Port | 63 | 6.17.4 | OctetString | M | P | | V | Y | -| Tunneling | 401 | 7.1 | Grouped | M | P | | V | N | -| Tunnel-Type | 64 | 7.2 | Enumerated | M | P | | V | Y | -| Tunnel-Medium-Type | 65 | 7.3 | Enumerated | M | P | | V | Y | -| Tunnel-Client-Endpoint | 66 | 7.4 | UTF8String | M | P | | V | Y | -| Tunnel-Server-Endpoint | 67 | 7.5 | UTF8String | M | P | | V | Y | -| Tunnel-Password | 69 | 7.6 | OctetString | M | P | | V | Y | -| Tunnel-Private-Group-Id | 81 | 7.7 | OctetString | M | P | | V | Y | -| Tunnel-Assignment-Id | 82 | 7.8 | OctetString | M | P | | V | Y | -| Tunnel-Preference | 83 | 7.9 | Unsigned32 | M | P | | V | Y | -| Tunnel-Client-Auth-Id | 90 | 7.10 | UTF8String | M | P | | V | Y | -| Tunnel-Server-Auth-Id | 91 | 7.11 | UTF8String | M | P | | V | Y | -| Accounting-Input-Octets | 363 | 8.1 | Unsigned64 | M | P | | V | Y | -| Accounting-Output-Octets | 364 | 8.2 | Unsigned64 | M | P | | V | Y | -| Accounting-Input-Packets | 365 | 8.3 | Unsigned64 | M | P | | V | Y | -| Accounting-Output-Packets | 366 | 8.4 | Unsigned64 | M | P | | V | Y | -| Acct-Session-Time | 46 | 8.5 | Unsigned32 | M | P | | V | Y | -| Acct-Authentic | 45 | 8.6 | Enumerated | M | P | | V | Y | -| Acounting-Auth-Method | 406 | 8.7 | Enumerated | M | P | | V | Y | -| Acct-Delay-Time | 41 | 8.8 | Unsigned32 | M | P | | V | Y | -| Acct-Link-Count | 51 | 8.9 | Unsigned32 | M | P | | V | Y | -| Acct-Tunnel-Connection | 68 | 8.10 | OctetString | M | P | | V | Y | -| Acct-Tunnel-Packets-Lost | 86 | 8.11 | Unsigned32 | M | P | | V | Y | -| NAS-Identifier | 32 | 9.3.1 | UTF8String | M | P | | V | Y | -| NAS-IP-Address | 4 | 9.3.2 | OctetString | M | P | | V | Y | -| NAS-IPv6-Address | 95 | 9.3.3 | OctetString | M | P | | V | Y | -| State | 24 | 9.3.4 | OctetString | M | P | | V | Y | -| Termination-Cause | 295 | 9.3.5 | Enumerated | M | P | | V | Y | -| Origin-AAA-Protocol | 408 | 9.3.6 | Enumerated | M | P | | V | Y | -| # RFC 4006 - DCCA # | | | | | | | | | -| CC-Correlation-Id | 411 | 8.1 | OctetString | | P,M | | V | Y | -| CC-Input-Octets | 412 | 8.24 | Unsigned64 | M | P | | V | Y | -| CC-Money | 413 | 8.22 | Grouped | M | P | | V | Y | -| CC-Output-Octets | 414 | 8.25 | Unsigned64 | M | P | | V | Y | -| CC-Request-Number | 415 | 8.2 | Unsigned32 | M | P | | V | Y | -| CC-Request-Type | 416 | 8.3 | Enumerated | M | P | | V | Y | -| CC-Service-Specific-Units | 417 | 8.26 | Unsigned64 | M | P | | V | Y | -| CC-Session-Failover | 418 | 8.4 | Enumerated | M | P | | V | Y | -| CC-Sub-Session-Id | 419 | 8.5 | Unsigned64 | M | P | | V | Y | -| CC-Time | 420 | 8.21 | Unsigned32 | M | P | | V | Y | -| CC-Total-Octets | 421 | 8.23 | Unsigned64 | M | P | | V | Y | -| CC-Unit-Type | 454 | 8.32 | Enumerated | M | P | | V | Y | -| Check-Balance-Result | 422 | 8.6 | Enumerated | M | P | | V | Y | -| Cost-Information | 423 | 8.7 | Grouped | M | P | | V | Y | -| Cost-Unit | 424 | 8.12 | UTF8String | M | P | | V | Y | -| Credit-Control | 426 | 8.13 | Enumerated | M | P | | V | Y | -| Credit-Control-Failure-Handling | 427 | 8.14 | Enumerated | M | P | | V | Y | -| Currency-Code | 425 | 8.11 | Unsigned32 | M | P | | V | Y | -| Direct-Debiting-Failure-Handling | 428 | 8.15 | Enumerated | M | P | | V | Y | -| Exponent | 429 | 8.9 | Integer32 | M | P | | V | Y | -| Final-Unit-Action | 449 | 8.35 | Enumerated | M | P | | V | Y | -| Final-Unit-Indication | 430 | 8.34 | Grouped | M | P | | V | Y | -| Granted-Service-Unit | 431 | 8.17 | Grouped | M | P | | V | Y | -| G-S-U-Pool-Identifier | 453 | 8.31 | Unsigned32 | M | P | | V | Y | -| G-S-U-Pool-Reference | 457 | 8.30 | Grouped | M | P | | V | Y | -| Multiple-Services-Credit-Control | 456 | 8.16 | Grouped | M | P | | V | Y | -| Multiple-Services-Indicator | 455 | 8.40 | Enumerated | M | P | | V | Y | -| Rating-Group | 432 | 8.29 | Unsigned32 | M | P | | V | Y | -| Redirect-Address-Type | 433 | 8.38 | Enumerated | M | P | | V | Y | -| Redirect-Server | 434 | 8.37 | Grouped | M | P | | V | Y | -| Redirect-Server-Address | 435 | 8.39 | UTF8String | M | P | | V | Y | -| Requested-Action | 436 | 8.41 | Enumerated | M | P | | V | Y | -| Requested-Service-Unit | 437 | 8.18 | Grouped | M | P | | V | Y | -| Restriction-Filter-Rule | 438 | 8.36 | IPFiltrRule | M | P | | V | Y | -| Service-Context-Id | 461 | 8.42 | UTF8String | M | P | | V | Y | -| Service-Identifier | 439 | 8.28 | Unsigned32 | M | P | | V | Y | -| Service-Parameter-Info | 440 | 8.43 | Grouped | | P,M | | V | Y | -| Service-Parameter-Type | 441 | 8.44 | Unsigned32 | | P,M | | V | Y | -| Service-Parameter-Value | 442 | 8.45 | OctetString | | P,M | | V | Y | -| Subscription-Id | 443 | 8.46 | Grouped | M | P | | V | Y | -| Subscription-Id-Data | 444 | 8.48 | UTF8String | M | P | | V | Y | -| Subscription-Id-Type | 450 | 8.47 | Enumerated | M | P | | V | Y | -| Tariff-Change-Usage | 452 | 8.27 | Enumerated | M | P | | V | Y | -| Tariff-Time-Change | 451 | 8.20 | Time | M | P | | V | Y | -| Unit-Value | 445 | 8.8 | Grouped | M | P | | V | Y | -| Used-Service-Unit | 446 | 8.19 | Grouped | M | P | | V | Y | -| User-Equipment-Info | 458 | 8.49 | Grouped | | P,M | | V | Y | -| User-Equipment-Info-Type | 459 | 8.50 | Enumerated | | P,M | | V | Y | -| User-Equipment-Info-Value | 460 | 8.51 | OctetString | | P,M | | V | Y | -| Value-Digits | 447 | 8.10 | Integer64 | M | P | | V | Y | -| Validity-Time | 448 | 8.33 | Unsigned32 | M | P | | V | Y | diff -r 6a35c5470ef4 -r 19ab8ac08a36 contrib/tools/grep_fd_dict_dump --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contrib/tools/grep_fd_dict_dump Tue Jul 07 01:41:54 2020 +0800 @@ -0,0 +1,11 @@ +#!/bin/sh + +# Grep stdin for the output of fd_dict_dump() and reformat to remove +# pointer addresses. Use to post-process the output of dict_dump.fdx +# into a format that's diff-able between freeDiameter invocations. + +egrep '^ *{dict|VENDOR|APPLICATION|TYPE|ENUMVAL|AVP|COMMAND|RULE' \ + | sed \ + -e 's/{dict.*}(@0x[^ ]*): //' \ + -e 's/{dict(0x[^ ]*) : \(.*\)}/\1/' \ + -e 's/p:[^ ]* //' diff -r 6a35c5470ef4 -r 19ab8ac08a36 contrib/tools/org_to_csv --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contrib/tools/org_to_csv Tue Jul 07 01:41:54 2020 +0800 @@ -0,0 +1,19 @@ +#!/usr/bin/env python + +""" +Convert |-separated 11-column .org files to CSV, +with first and last empty columns ignored. +""" + +import csv +import fileinput +import re +import sys + +csvout = csv.writer(sys.stdout) +for line in fileinput.input(): + row = re.split(r'\s*\|\s*', line) + row.extend([''] * (10 - len(row))) + csvout.writerow(row[1:10]) + +# vim: set et sw=4 sts=4 : diff -r 6a35c5470ef4 -r 19ab8ac08a36 contrib/tools/org_to_fd.pl --- a/contrib/tools/org_to_fd.pl Tue Jul 07 01:24:48 2020 +0800 +++ b/contrib/tools/org_to_fd.pl Tue Jul 07 01:41:54 2020 +0800 @@ -1,12 +1,15 @@ #!/usr/bin/env perl use strict; +use File::Basename; use Getopt::Std; +my ($progname) = basename($0); + our ($opt_V, $opt_v); -# default to 3GPP -my ($vendor) = 10415; -my ($vendor_name) = "3GPP"; +# default to Base +my ($vendor) = 0; +my ($vendor_name) = ""; sub convert_must_to_flags($) { my ($allmust) = @_; @@ -21,7 +24,7 @@ my ($type) = @_; return "AVP_TYPE_GROUPED" if ($type =~ m/Grouped/); - return "AVP_TYPE_OCTETSTRING" if ($type =~ m/(Address|DiameterIdentity|DiameterURI|OctetString|IPFilterRule|Time|UTF8String)/); + return "AVP_TYPE_OCTETSTRING" if ($type =~ m/(Address|DiameterIdentity|DiameterURI|OctetString|IPFilterRule|Time|UTF8String|QoSFilterRule)/); return "AVP_TYPE_INTEGER32" if ($type =~ m/Enumerated|Integer32/); return "AVP_TYPE_INTEGER64" if ($type =~ m/Integer64/); return "AVP_TYPE_UNSIGNED32" if ($type =~ m/Unsigned32/); @@ -29,7 +32,19 @@ return "AVP_TYPE_FLOAT32" if ($type =~ m/Float32/); return "AVP_TYPE_FLOAT64" if ($type =~ m/Float64/); - return "UNKNOWN TYPE: $type"; + die("unknown type '$type'"); +} + + +my ($comment_width) = 64; + +sub print_header() { + printf "\t/*=%s=*/\n", '=' x $comment_width; +} + +sub print_comment($) { + my ($str) = @_; + printf "\t/* %-*s */\n", $comment_width, $str; } sub print_insert($$) { @@ -39,8 +54,8 @@ if ($type =~ m/(Grouped|OctetString|Integer32|Integer64|Unsigned32|Unsigned64|Float32|Float64)/) { $avp_type = "NULL"; } elsif ($type =~ m/Enumerated/) { - print "\t\tstruct dict_object *type;\n"; - print "\t\tstruct dict_type_data tdata = { AVP_TYPE_INTEGER32, \"Enumerated(" . ($vendor_name ? "$vendor_name/" : "") ."$name)\", NULL, NULL, NULL };\n"; + print "\t\tstruct dict_object\t*type;\n"; + print "\t\tstruct dict_type_data\t tdata = { AVP_TYPE_INTEGER32, \"Enumerated(" . ($vendor_name ? "$vendor_name/" : "") ."$name)\", NULL, NULL, NULL };\n"; # XXX: add enumerated values print "\t\tCHECK_dict_new(DICT_TYPE, &tdata, NULL, &type);\n"; $avp_type = "type"; @@ -52,8 +67,8 @@ } sub usage($) { - die("usage: org_to_fd.pl [-V vendor_name -v vendor_code] [file ...]\n"); - exit(@_); + print STDERR "usage: $progname [-V vendor_name] [-v vendor_code] [file ...]\n"; + exit(1); } getopts("V:v:") || usage(1); @@ -61,29 +76,45 @@ if (defined($opt_v)) { $vendor = $opt_v; if (!defined($opt_V)) { - usage(1); + usage(1); } $vendor_name = $opt_V; } -print "\t/* The following is created automatically. Do not modify. */\n"; -print "\t/* Changes will be lost during the next update. Modify the source org file instead. */\n\n"; +print_header(); +print_comment("Start of generated data."); +print_comment(""); +print_comment("The following is created automatically with:"); +print_comment(" org_to_fd.pl -V '$vendor_name' -v $vendor"); +print_comment("Changes will be lost during the next update."); +print_comment("Do not modify; modify the source .org file instead."); +print_header(); +print "\n"; while (<>) { - my ($dummy, $name, $code, $section, $type, $must, $may, $shouldnot, $mustnot, $encr) = split /\|/; + my ($dummy, $name, $code, $section, $type, $must, $may, $shouldnot, $mustnot, $encr) = split /\s*\|\s*/; next if ($name =~ m/Attribute Name/); - if ($name =~ m/ # (.*)/) { - print "\t/* $1 */\n"; + if ($name =~ m/# (.*)/) { + print_comment($1); + next; + } + if ($name =~ m/#/) { + print("\n"); next; } - + + if ($name =~ m/\s/) { + die("name '$name' contains space"); + } - $name =~ s/ *//g; - $code =~ s/ *//g; - $type =~ s/ *//g; - - print "\t/* $name */\n\t{\n\t\tstruct dict_avp_data data = {\n"; + my ($desc) = $name; + $desc .= ", " . $type; + $desc .= ", code " . $code; + $desc .= ", section " . $section if $section ne ""; + print_comment($desc); + print "\t{\n"; + print "\t\tstruct dict_avp_data data = {\n"; print "\t\t\t$code,\t/* Code */\n"; print "\t\t\t$vendor,\t/* Vendor */\n"; print "\t\t\t\"$name\",\t/* Name */\n"; @@ -94,3 +125,7 @@ print_insert($type, $name); print "\t};\n\n"; } + +print_header(); +print_comment("End of generated data."); +print_header(); diff -r 6a35c5470ef4 -r 19ab8ac08a36 extensions/CMakeLists.txt --- a/extensions/CMakeLists.txt Tue Jul 07 01:24:48 2020 +0800 +++ b/extensions/CMakeLists.txt Tue Jul 07 01:41:54 2020 +0800 @@ -10,6 +10,8 @@ ADD_LIBRARY(${EXTNAME} MODULE ${ARGN}) SET_TARGET_PROPERTIES(${EXTNAME} PROPERTIES PREFIX "" ) SET_TARGET_PROPERTIES(${EXTNAME} PROPERTIES SUFFIX ".fdx" ) + SET_TARGET_PROPERTIES(${EXTNAME} PROPERTIES C_VISIBILITY_PRESET hidden ) + SET_TARGET_PROPERTIES(${EXTNAME} PROPERTIES CXX_VISIBILITY_PRESET hidden ) ENDMACRO(FD_ADD_EXTENSION) # Use the macro FD_EXTENSION_SUBDIR(extmacroname subdir descr default) to @@ -88,6 +90,8 @@ #### # Debug & test extensions +FD_EXTENSION_SUBDIR(dbg_dict_dump "Log dictionary dump" ON) +FD_EXTENSION_SUBDIR(dbg_dict_dump_json "Dump dictionary as JSON" OFF) FD_EXTENSION_SUBDIR(dbg_loglevel "Read loglevel from file -- allows runtime change" ON) FD_EXTENSION_SUBDIR(dbg_monitor "Outputs periodical status information" ON) FD_EXTENSION_SUBDIR(dbg_msg_timings "Show some timing information for messages" ON) diff -r 6a35c5470ef4 -r 19ab8ac08a36 extensions/acl_wl/aw_tree.c --- a/extensions/acl_wl/aw_tree.c Tue Jul 07 01:24:48 2020 +0800 +++ b/extensions/acl_wl/aw_tree.c Tue Jul 07 01:41:54 2020 +0800 @@ -339,7 +339,7 @@ { struct split_name sn; int lbl, found; - struct tree_item * ti; + struct tree_item * ti = NULL; struct fd_list * senti, *li; TRACE_ENTRY("%p %p", name, result); diff -r 6a35c5470ef4 -r 19ab8ac08a36 extensions/app_diameap/CMakeLists.txt --- a/extensions/app_diameap/CMakeLists.txt Tue Jul 07 01:24:48 2020 +0800 +++ b/extensions/app_diameap/CMakeLists.txt Tue Jul 07 01:41:54 2020 +0800 @@ -1,11 +1,26 @@ # The Diameter EAP Application extension PROJECT("Diameter EAP Application extension" C) +INCLUDE (CheckCSourceCompiles) + # Find MySQL FIND_PACKAGE(MySQL REQUIRED) FIND_PACKAGE(Gcrypt REQUIRED) INCLUDE_DIRECTORIES(${MySQL_INCLUDE_DIR}) +# Check for my_bool, deprecated in MySQL 8.0 +SET(CHECK_MYSQL_MY_BOOL " +#include +int main() { +my_bool f; +}") +SET(CMAKE_REQUIRED_INCLUDES ${MySQL_INCLUDE_DIR}) +SET(CMAKE_REQUIRED_LIBRARIES ${MySQL_LIBRARY}) +CHECK_C_SOURCE_COMPILES("${CHECK_MYSQL_MY_BOOL}" HAVE_MYSQL_MY_BOOL) +IF (HAVE_MYSQL_MY_BOOL) + ADD_DEFINITIONS(-DHAVE_MYSQL_MY_BOOL) +ENDIF() + # Parse plugins ADD_SUBDIRECTORY(plugins) diff -r 6a35c5470ef4 -r 19ab8ac08a36 extensions/app_diameap/diameap_eap.c --- a/extensions/app_diameap/diameap_eap.c Tue Jul 07 01:24:48 2020 +0800 +++ b/extensions/app_diameap/diameap_eap.c Tue Jul 07 01:41:54 2020 +0800 @@ -59,7 +59,7 @@ struct eap_packet *eapPacket) { TRACE_ENTRY("%p %p",eap_sm, eapPacket); - if ((eap_sm->respMethod == TYPE_NAK)) + if (eap_sm->respMethod == TYPE_NAK) { int id; eap_sm->user.pmethods = 0; @@ -100,7 +100,7 @@ if (eap_sm->user.userid == NULL) { - if ((eap_sm->currentMethod == TYPE_NONE)) + if (eap_sm->currentMethod == TYPE_NONE) { *vendor = VENDOR_IETF; *eaptype = TYPE_IDENTITY; diff -r 6a35c5470ef4 -r 19ab8ac08a36 extensions/app_diameap/diameap_init.c --- a/extensions/app_diameap/diameap_init.c Tue Jul 07 01:24:48 2020 +0800 +++ b/extensions/app_diameap/diameap_init.c Tue Jul 07 01:41:54 2020 +0800 @@ -38,6 +38,11 @@ #include "diameap_common.h" +#ifndef HAVE_MYSQL_MY_BOOL +#include +typedef bool my_bool; +#endif /* HAVE_MYSQL_MY_BOOL */ + /* Dictionary Object templates */ struct dict_object * dataobj_diameap_cmd = NULL; /* Diameter-EAP-Request Command Code */ struct dict_object * dataobj_diameap_app = NULL; /* Diameter EAP Application object */ diff -r 6a35c5470ef4 -r 19ab8ac08a36 extensions/app_diameap/diameap_server.c --- a/extensions/app_diameap/diameap_server.c Tue Jul 07 01:24:48 2020 +0800 +++ b/extensions/app_diameap/diameap_server.c Tue Jul 07 01:41:54 2020 +0800 @@ -1674,6 +1674,7 @@ break; default: TRACE_DEBUG(INFO, "%sUnknown AVP Base Type.",DIAMEAP_EXTENSION) + memset(&val, 0, sizeof(val)); ; } return val; @@ -1959,22 +1960,16 @@ switch (*toadd) { case 1: - attribute_op = malloc(strlen(op)); - memset(attribute_op, 0, strlen(op)); - strncpy(attribute_op, op + 1, strlen(op) - 1); - attribute_op[strlen(op)] = '\0'; + attribute_op = calloc(strlen(op), sizeof(char *)); + memcpy(attribute_op, op + 1, strlen(op) - 1); break; case 2: - attribute_op = malloc(strlen(op)); - memset(attribute_op, 0, strlen(op)); - strncpy(attribute_op, op, strlen(op) - 1); - attribute_op[strlen(op)] = '\0'; + attribute_op = calloc(strlen(op), sizeof(char *)); + memcpy(attribute_op, op, strlen(op) - 1); break; default: - attribute_op = malloc(strlen(op) + 1); - memset(attribute_op, 0, strlen(op) + 1); - strcpy(attribute_op, op); - attribute_op[strlen(op) + 1] = '\0'; + attribute_op = calloc(strlen(op) + 1, sizeof(char *)); + memcpy(attribute_op, op, strlen(op)); } if (strcmp(attribute_op, "=") == 0) { @@ -3064,7 +3059,7 @@ struct sess_state * diameap_sess_data = NULL; struct diameap_state_machine * diameap_sm = NULL; struct diameap_eap_interface eap_i; - struct msg *req, *ans; + struct msg *req, *ans = NULL; boolean non_fatal_error = FALSE; if (rmsg == NULL) diff -r 6a35c5470ef4 -r 19ab8ac08a36 extensions/app_radgw/md5.c --- a/extensions/app_radgw/md5.c Tue Jul 07 01:24:48 2020 +0800 +++ b/extensions/app_radgw/md5.c Tue Jul 07 01:41:54 2020 +0800 @@ -286,8 +286,7 @@ byteReverse(ctx->in, 14); /* Append length in bits and transform */ - ((u32 *) ctx->in)[14] = ctx->bits[0]; - ((u32 *) ctx->in)[15] = ctx->bits[1]; + os_memcpy(&ctx->in[56], &ctx->bits[0], 8); MD5Transform(ctx->buf, (u32 *) ctx->in); byteReverse((unsigned char *) ctx->buf, 4); diff -r 6a35c5470ef4 -r 19ab8ac08a36 extensions/app_radgw/rgw_clients.c --- a/extensions/app_radgw/rgw_clients.c Tue Jul 07 01:24:48 2020 +0800 +++ b/extensions/app_radgw/rgw_clients.c Tue Jul 07 01:41:54 2020 +0800 @@ -548,7 +548,7 @@ int idx; int valid_nas_info = 0; struct radius_attr_hdr *nas_ip = NULL, *nas_ip6 = NULL, *nas_id = NULL; - size_t nas_id_len; + size_t nas_id_len = 0; char * oh_str = NULL; size_t oh_strlen = 0; int oh_free = 0; char * or_str = NULL; size_t or_strlen = 0; char * rr_str = NULL; size_t rr_strlen = 0; @@ -710,7 +710,7 @@ ASSERT(nas_id); { - int found, ret; + int found = 0, ret; struct addrinfo hint, *res, *ptr; /* @@ -763,7 +763,7 @@ hint.ai_flags = AI_CANONNAME; ret = getaddrinfo(buf, NULL, &hint, &res); if (ret == 0) { - strncpy(buf, res->ai_canonname, sizeof(buf)); + snprintf(buf, sizeof(buf), "%s", res->ai_canonname); /* The name was resolved correctly, does it match the IP of the client? */ for (ptr = res; ptr != NULL; ptr = ptr->ai_next) { if (cli->sa->sa_family != ptr->ai_family) diff -r 6a35c5470ef4 -r 19ab8ac08a36 extensions/app_sip/TODO --- a/extensions/app_sip/TODO Tue Jul 07 01:24:48 2020 +0800 +++ b/extensions/app_sip/TODO Tue Jul 07 01:41:54 2020 +0800 @@ -49,6 +49,10 @@ * add mutex on mysql writing * check multithreading of mysql! * get destination host in database for RTR and PPR +* libapp_sip.c: fix username_pure memory leaks +* app_sip_MAR_cb: + - too much mysql_real_escape_string() use, both within the function and functions it calls + - on error, leaks allocated: sipuri, username, query. diff -r 6a35c5470ef4 -r 19ab8ac08a36 extensions/app_sip/app_sip.h --- a/extensions/app_sip/app_sip.h Tue Jul 07 01:24:48 2020 +0800 +++ b/extensions/app_sip/app_sip.h Tue Jul 07 01:41:54 2020 +0800 @@ -110,8 +110,6 @@ void DigestCalcResponse(HASHHEX HA1,char * pszNonce,char * pszNonceCount,char * pszCNonce,char * pszQop,char * pszMethod,char * pszDigestUri,HASHHEX HEntity,HASHHEX Response); void DigestCalcResponseAuth(HASHHEX HA1,char * pszNonce,char * pszNonceCount,char * pszCNonce,char * pszQop,char * pszMethod,char * pszDigestUri,HASHHEX HEntity,HASHHEX Response); -int fd_avp_search_avp ( struct avp * groupedavp, struct dict_object * what, struct avp ** avp ); - //thread procedure void *rtr_socket(void *); void *ppr_socket(void *); diff -r 6a35c5470ef4 -r 19ab8ac08a36 extensions/app_sip/libapp_sip.c --- a/extensions/app_sip/libapp_sip.c Tue Jul 07 01:24:48 2020 +0800 +++ b/extensions/app_sip/libapp_sip.c Tue Jul 07 01:41:54 2020 +0800 @@ -66,54 +66,6 @@ return; } - -/* Search a given AVP model in an AVP (extracted from libfreediameter/message.c ) */ -int fd_avp_search_avp ( struct avp * groupedavp, struct dict_object * what, struct avp ** avp ) -{ - struct avp * nextavp; - struct avp_hdr * nextavphdr; - struct dict_avp_data dictdata; - - - TRACE_ENTRY("%p %p %p", groupedavp, what, avp); - - CHECK_FCT( fd_dict_getval(what, &dictdata) ); - - // Loop only in the group AVP - CHECK_FCT( fd_msg_browse(groupedavp, MSG_BRW_FIRST_CHILD, (void *)&nextavp, NULL) ); - CHECK_FCT( fd_msg_avp_hdr( nextavp, &nextavphdr ) ); - - while (nextavphdr) { - - if ( (nextavphdr->avp_code == dictdata.avp_code) && (nextavphdr->avp_vendor == dictdata.avp_vendor) ) // always 0 if no Vendor flag - { - break; - } - - // Otherwise move to next AVP in the grouped AVP - CHECK_FCT( fd_msg_browse(nextavp, MSG_BRW_NEXT, (void *)&nextavp, NULL) ); - - if(nextavp!=NULL) - { - CHECK_FCT( fd_msg_avp_hdr( nextavp, &nextavphdr ) ); - } - else - nextavphdr=NULL; - } - if (avp) - *avp = nextavp; - - if (avp && nextavp) { - struct dictionary * dict; - CHECK_FCT( fd_dict_getdict( what, &dict) ); - CHECK_FCT_DO( fd_msg_parse_dict( nextavp, dict, NULL ), ); - } - - if (avp || nextavp) - return 0; - else - return ENOENT; -} struct avp_hdr *walk_digest(struct avp *avp, int avp_code) { struct avp_hdr *temphdr=NULL; diff -r 6a35c5470ef4 -r 19ab8ac08a36 extensions/app_sip/md5.c --- a/extensions/app_sip/md5.c Tue Jul 07 01:24:48 2020 +0800 +++ b/extensions/app_sip/md5.c Tue Jul 07 01:41:54 2020 +0800 @@ -309,8 +309,7 @@ byteReverse(ctx->in, 14); /* Append length in bits and transform */ - ((u32 *) ctx->in)[14] = ctx->bits[0]; - ((u32 *) ctx->in)[15] = ctx->bits[1]; + os_memcpy(&ctx->in[56], &ctx->bits[0], 8); MD5Transform(ctx->buf, (u32 *) ctx->in); byteReverse((unsigned char *) ctx->buf, 4); diff -r 6a35c5470ef4 -r 19ab8ac08a36 extensions/app_sip/multimediaauth.c --- a/extensions/app_sip/multimediaauth.c Tue Jul 07 01:24:48 2020 +0800 +++ b/extensions/app_sip/multimediaauth.c Tue Jul 07 01:41:54 2020 +0800 @@ -50,7 +50,7 @@ union avp_value val; int found_cnonce=0; struct avp * tempavp=NULL,*sipAuthentication=NULL,*sipAuthenticate=NULL; - char * result; + char * result = NULL; char password[51]; int idx=0, number_of_auth_items=0,i=0, ret=0; //Flags and variables for Database @@ -148,7 +148,7 @@ if(not_found) { - TRACE_DEBUG(FULL,"The user %s doesn't exist!",username); + TRACE_DEBUG(FULL,"The user %s doesn't exist!", avphdr->avp_value->os.data); result="DIAMETER_ERROR_USER_UNKNOWN"; free(username); goto out; @@ -320,7 +320,7 @@ //CHECK_FCT(fd_msg_browse ( avp, MSG_BRW_WALK, &avp, NULL) ); - CHECK_FCT(fd_avp_search_avp (avp, sip_dict.Digest_CNonce, &a2 )); + CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_CNonce, &a2 )); if(a2!=NULL) found_cnonce=1; @@ -457,7 +457,7 @@ char * digest_username=NULL, *digest_uri=NULL, *digest_response=NULL, *digest_realm=NULL, *digest_nonce=NULL, *digest_method=NULL, *digest_qop=NULL, *digest_algorithm=NULL, *digest_cnonce=NULL, *digest_noncecount=NULL; - CHECK_FCT(fd_avp_search_avp (avp, sip_dict.Digest_Nonce, &a2 )); + CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_Nonce, &a2 )); if(a2!=NULL) { CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) ); @@ -486,7 +486,7 @@ } } - CHECK_FCT(fd_avp_search_avp (avp, sip_dict.Digest_Response, &a2 )); + CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_Response, &a2 )); if(a2!=NULL) { CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) ); @@ -500,7 +500,7 @@ } } - CHECK_FCT(fd_avp_search_avp (avp, sip_dict.Digest_Realm, &a2 )); + CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_Realm, &a2 )); if(a2!=NULL) { CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) ); @@ -514,7 +514,7 @@ } } - CHECK_FCT(fd_avp_search_avp (avp, sip_dict.Digest_Method, &a2 )); + CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_Method, &a2 )); if(a2!=NULL) { CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) ); @@ -530,7 +530,7 @@ else digest_method=""; - CHECK_FCT(fd_avp_search_avp (avp, sip_dict.Digest_URI, &a2 )); + CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_URI, &a2 )); if(a2!=NULL) { CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) ); @@ -544,7 +544,7 @@ } } - CHECK_FCT(fd_avp_search_avp (avp, sip_dict.Digest_QOP, &a2 )); + CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_QOP, &a2 )); if(a2!=NULL) { CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) ); @@ -559,7 +559,7 @@ } else digest_qop=NULL; - CHECK_FCT(fd_avp_search_avp (avp, sip_dict.Digest_Algorithm, &a2 )); + CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_Algorithm, &a2 )); if(a2!=NULL) { CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) ); @@ -574,7 +574,7 @@ } else digest_algorithm=NULL; - CHECK_FCT(fd_avp_search_avp (avp, sip_dict.Digest_CNonce, &a2 )); + CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_CNonce, &a2 )); if(a2!=NULL) { CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) ); @@ -589,7 +589,7 @@ } else digest_cnonce=""; - CHECK_FCT(fd_avp_search_avp (avp, sip_dict.Digest_Nonce_Count, &a2 )); + CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_Nonce_Count, &a2 )); if(a2!=NULL) { CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) ); @@ -604,7 +604,7 @@ } else digest_noncecount=""; - CHECK_FCT(fd_avp_search_avp (avp, sip_dict.Digest_Username, &a2 )); + CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_Username, &a2 )); if(a2!=NULL) { CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) ); diff -r 6a35c5470ef4 -r 19ab8ac08a36 extensions/app_sip/registrationtermination.c --- a/extensions/app_sip/registrationtermination.c Tue Jul 07 01:24:48 2020 +0800 +++ b/extensions/app_sip/registrationtermination.c Tue Jul 07 01:41:54 2020 +0800 @@ -114,7 +114,7 @@ } } - if(structure->strreason!='\0') + if(structure->strreason[0]!='\0') got_streason=1; diff -r 6a35c5470ef4 -r 19ab8ac08a36 extensions/dbg_dict_dump/CMakeLists.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/extensions/dbg_dict_dump/CMakeLists.txt Tue Jul 07 01:41:54 2020 +0800 @@ -0,0 +1,12 @@ +# Dictionary dump extension +PROJECT("Dictionary dump extension" C) +FD_ADD_EXTENSION(dbg_dict_dump dbg_dict_dump.c) + + +#### +## INSTALL section ## + +INSTALL(TARGETS dbg_dict_dump + LIBRARY DESTINATION ${INSTALL_EXTENSIONS_SUFFIX} + COMPONENT freeDiameter-debug-tools) + diff -r 6a35c5470ef4 -r 19ab8ac08a36 extensions/dbg_dict_dump/dbg_dict_dump.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/extensions/dbg_dict_dump/dbg_dict_dump.c Tue Jul 07 01:41:54 2020 +0800 @@ -0,0 +1,87 @@ +/********************************************************************************************************* +* Software License Agreement (BSD License) * +* Author: Luke Mewburn * +* * +* Copyright (c) 2020, 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. * +*********************************************************************************************************/ + +/* + * Dump Diameter dictionary (using fd_dict_dump()) to a file or the log. + * + * If conffile is provided, write the dump to that file, + * otherwise write to log. + */ + +#include + +static int dbg_dict_dump_entry(char * conffile) +{ + TRACE_ENTRY("%p", conffile); + + FILE * out = NULL; + if (conffile) { + LOG_N("Dictionary dump to file '%s'", conffile); + out = fopen(conffile, "w"); + if (NULL == out) { + LOG_E("Cannot open output file '%s' for writing", conffile); + return EINVAL; + } + } else { + LOG_N("Dictionary dump to log"); + } + + char * tbuf = NULL; size_t tbuflen = 0; + if (NULL == fd_dict_dump(&tbuf, &tbuflen, NULL, fd_g_config->cnf_dict)) { + LOG_E("Cannot dump dictionary"); + } else if (out) { + fprintf(out, "%s\n", tbuf); + } else { + LOG_N("%s", fd_dict_dump(&tbuf, &tbuflen, NULL, fd_g_config->cnf_dict)); + } + free(tbuf); + if (out) { + fclose(out); + out = NULL; + } + + LOG_N("Dictionary dump completed"); + return 0; +} + +void fd_ext_fini(void) +{ + TRACE_ENTRY(); + + /* Nothing to do */ + return; +} + +EXTENSION_ENTRY("dbg_dict_dump", dbg_dict_dump_entry); diff -r 6a35c5470ef4 -r 19ab8ac08a36 extensions/dbg_dict_dump_json/CMakeLists.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/extensions/dbg_dict_dump_json/CMakeLists.txt Tue Jul 07 01:41:54 2020 +0800 @@ -0,0 +1,21 @@ +PROJECT("Dictionary dump to JSON extension" C) +FD_ADD_EXTENSION(dbg_dict_dump_json dbg_dict_dump_json.cc) + +# sneakily uses dictionary-internal.h +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../../libfdproto) + +INCLUDE(FindPkgConfig) + +# Uses JSONCPP to write JSON files +PKG_CHECK_MODULES(JSONCPP REQUIRED jsoncpp) +INCLUDE_DIRECTORIES(${JSONCPP_INCLUDE_DIRS}) +LINK_DIRECTORIES(${JSONCPP_LIBDIR}) +TARGET_LINK_LIBRARIES(dbg_dict_dump_json ${JSONCPP_LIBRARIES}) + +#### +## INSTALL section ## + +INSTALL(TARGETS dbg_dict_dump_json + LIBRARY DESTINATION ${INSTALL_EXTENSIONS_SUFFIX} + COMPONENT freeDiameter-debug-tools) + diff -r 6a35c5470ef4 -r 19ab8ac08a36 extensions/dbg_dict_dump_json/dbg_dict_dump_json.cc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/extensions/dbg_dict_dump_json/dbg_dict_dump_json.cc Tue Jul 07 01:41:54 2020 +0800 @@ -0,0 +1,441 @@ +/********************************************************************************************************** + * Software License Agreement (BSD License) * + * Author: Thomas Klausner * + * * + * Copyright (c) 2020 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. * + **********************************************************************************************************/ + + +/* + * Dump Diameter dictionary to JSON file. + */ + +#include +#include "dictionary-internal.h" +#include +#include + +#include +#include + + +void +dump_vendor(dict_object *self, struct dict_vendor_data *data, struct dict_object *parent, int depth, Json::Value &main) +{ + Json::Value vendor; + + vendor["Code"] = Json::Value(data->vendor_id); + vendor["Name"] = Json::Value(data->vendor_name); + main["Vendors"].append(vendor); +} + +void +dump_application(dict_object *self, struct dict_application_data *data, struct dict_object *parent, int depth, Json::Value &main) +{ + Json::Value application; + + application["Code"] = Json::Value(data->application_id); + application["Name"] = Json::Value(data->application_name); + main["Applications"].append(application); +} + +void +dump_enumval(dict_object *self, struct dict_enumval_data *data, struct dict_object *parent, int depth, Json::Value &main) +{ + enum dict_avp_basetype type; + struct dict_type_data type_data; + Json::Value enumval; + bool is_printable; + + type = parent->data.type.type_base; + + /* Standard only allows Integer32 Enumerated values, but freeDiameter is more permissive */ + switch (type) { + case AVP_TYPE_OCTETSTRING: + is_printable = true; + for (size_t i = 0; i < data->enum_value.os.len; i++) { + if (isprint(data->enum_value.os.data[i]) == 0) { + is_printable = false; + break; + } + } + if (is_printable) { + std::string output((const char*)data->enum_value.os.data, (size_t)data->enum_value.os.len); + enumval["Code"] = Json::Value(output); + } else { + std::stringstream quoted_string; + quoted_string << "<"; + for (size_t i = 0; i < data->enum_value.os.len; i++) { + quoted_string << std::hex << std::setfill('0') << std::setw(2) << (int)data->enum_value.os.data[i]; + } + quoted_string << ">"; + enumval["Code"] = Json::Value(quoted_string.str()); + } + break; + + case AVP_TYPE_INTEGER32: + enumval["Code"] = Json::Value(data->enum_value.i32); + break; + + case AVP_TYPE_INTEGER64: + enumval["Code"] = Json::Value(static_cast(data->enum_value.i64)); + break; + + case AVP_TYPE_UNSIGNED32: + enumval["Code"] = Json::Value(data->enum_value.u32); + break; + + case AVP_TYPE_UNSIGNED64: + enumval["Code"] = Json::Value(static_cast(data->enum_value.u64)); + break; + + case AVP_TYPE_FLOAT32: + enumval["Code"] = Json::Value(data->enum_value.f32); + break; + + case AVP_TYPE_FLOAT64: + enumval["Code"] = Json::Value(data->enum_value.f64); + break; + + default: + printf("??? (ERROR unknown type %d)", type); + break; + } + if (fd_dict_getval(parent, &type_data) != 0) { + /* TODO: fd_dict_getval error */ + return; + } + if (!main.isMember("Types") || !main["Types"].isMember(type_data.type_name)) { + /* TODO: missing type error */ + return; + } + + enumval["Name"] = Json::Value(data->enum_name); + main["Types"][type_data.type_name]["EnumValues"].append(enumval); +} + +void +dump_type(dict_object *self, struct dict_type_data *data, struct dict_object *parent, int depth, Json::Value &main) +{ + Json::Value type; + + type["Name"] = Json::Value(data->type_name); + type["Base"] = Json::Value(type_base_name[data->type_base]); + main["Types"][data->type_name] = type; +} + +#define AVPFL_str "%s%s" +#define AVPFL_val(_val) (_val & AVP_FLAG_VENDOR)?"V":"" , (_val & AVP_FLAG_MANDATORY)?"M":"" + +void +dump_avp(dict_object *self, struct dict_avp_data *data, struct dict_object *parent, int depth, Json::Value &main) +{ + struct dict_object *type = NULL; + struct dict_type_data type_data; + Json::Value avp; + char flags[10]; + + if (fd_dict_search(fd_g_config->cnf_dict, DICT_TYPE, TYPE_OF_AVP, self, &type, 0) != 0) { + /* TODO: fd_dict_search error */ + return; + } + + if ((type == NULL) || (fd_dict_getval(type, &type_data) != 0)) { + avp["Type"] = Json::Value(type_base_name[data->avp_basetype]); + } else { + if (strstr(type_data.type_name, "Enumerated") != 0) { + if (data->avp_basetype == AVP_TYPE_INTEGER32) { + avp["Type"] = "Enumerated"; + } else { + /* freeDiameter allows enumerated types not based on integer32; + * write those out with their basic type for dict_json */ + avp["Type"] = Json::Value(type_base_name[data->avp_basetype]); + } + } else { + avp["Type"] = Json::Value(type_data.type_name); + } + if (main["Types"].isMember(type_data.type_name) && main["Types"][type_data.type_name].isMember("EnumValues")) { + avp["EnumValues"] = main["Types"][type_data.type_name]["EnumValues"]; + } + } + + avp["Code"] = Json::Value(data->avp_code); + if (data->avp_vendor != 0) { + avp["Vendor"] = Json::Value(data->avp_vendor); + } + avp["Name"] = Json::Value(data->avp_name); + snprintf(flags, sizeof(flags), AVPFL_str, AVPFL_val(data->avp_flag_val)); + avp["Flags"]["Must"] = Json::Value(flags); + snprintf(flags, sizeof(flags), AVPFL_str, AVPFL_val(data->avp_flag_mask & ~data->avp_flag_val)); + avp["Flags"]["MustNot"] = Json::Value(flags); + + main["AVPs"].append(avp); +} + +#define CMDFL_str "%s%s%s%s" +#define CMDFL_val(_val) (_val & CMD_FLAG_REQUEST)?"R":"" , (_val & CMD_FLAG_PROXIABLE)?"P":"" , (_val & CMD_FLAG_ERROR)?"E":"" , (_val & CMD_FLAG_RETRANSMIT)?"T":"" + +void +dump_command(dict_object *self, struct dict_cmd_data *data, struct dict_object *parent, int depth, Json::Value &main) +{ + Json::Value command; + char flags[10]; + + command["Code"] = Json::Value(data->cmd_code); + command["Name"] = Json::Value(data->cmd_name); + snprintf(flags, sizeof(flags), CMDFL_str, CMDFL_val(data->cmd_flag_val)); + command["Flags"]["Must"] = Json::Value(flags); + snprintf(flags, sizeof(flags), CMDFL_str, CMDFL_val(data->cmd_flag_mask & ~data->cmd_flag_val)); + command["Flags"]["MustNot"] = Json::Value(flags); + main["Commands"].append(command); +} + +bool dump_object(dict_object *self, int depth, Json::Value &main); + +void +dump_rule(dict_object *self, struct dict_rule_data *data, struct dict_object *parent, int depth, Json::Value &main) +{ + Json::Value avp_rule; + struct dict_avp_data avp_data; + const char *slot, *entry, *parent_avp_name; + vendor_id_t parent_avp_vendor; + unsigned int i; + bool found = false; + enum dict_object_type parent_type; + + if (fd_dict_getval(data->rule_avp, &avp_data) != 0) { + /* TODO: fd_dict_getval error */ + return; + } + + if (avp_data.avp_vendor != 0) { + avp_rule["Vendor"] = Json::Value(avp_data.avp_vendor); + } + avp_rule["AVP"] = Json::Value(avp_data.avp_name); + /* TODO is this correct? what does rule_order specify? */ + if (data->rule_position == RULE_FIXED_HEAD) { + avp_rule["First"] = Json::Value(true); + } + /* TODO: insert "unbounded" for -1? */ + if (data->rule_min != -1) { + avp_rule["Min"] = Json::Value(data->rule_min); + } + if (data->rule_max != -1) { + avp_rule["Max"] = Json::Value(data->rule_max); + } + + int ret = fd_dict_gettype(parent, &parent_type); + if (ret != 0) { + /* TODO: fd_dict_gettype error */ + return; + } + + if (parent_type == DICT_AVP) { + struct dict_avp_data parent_data; + + slot = "AVPRules"; + entry = "AVP"; + if (fd_dict_getval(parent, &parent_data) != 0) { + /* TODO: fd_dict_getval error */ + return; + } + parent_avp_name = parent_data.avp_name; + parent_avp_vendor = parent_data.avp_vendor; + } else if (parent_type == DICT_COMMAND) { + struct dict_cmd_data parent_data; + + slot = "CommandRules"; + entry = "Command"; + if (fd_dict_getval(parent, &parent_data) != 0) { + /* TODO: fd_dict_getval error */ + return; + } + parent_avp_name = parent_data.cmd_name; + parent_avp_vendor = 0; + } else { + /* TODO: error, unknown case */ + return; + } + + for (i=0; inext; li != list; li = li->next) { + if (!dump_object((dict_object *)li->o, depth, main)) { + LOG_E("error dumping %s", type); + return false; + } + } + return true; +} + +bool +dump_object(dict_object *self, int depth, Json::Value &main) +{ + enum dict_object_type t; + int ret = fd_dict_gettype (self, &t); + if (ret != 0) { + return false; + } + + switch (t) { +#define DUMP_OBJECT_CASE(TYPE, STRUCT, DUMP_FUNCTION) \ + case TYPE: { \ + struct STRUCT * data = NULL; \ + int i; \ + data = (struct STRUCT *)malloc(sizeof(struct STRUCT)); \ + if (!data) { \ + /* TODO: malloc error */ \ + return false; \ + } \ + ret = fd_dict_getval(self, data); \ + if (ret != 0) { \ + /* TODO: fd_dict_getval error */ \ + free(data); \ + return false; \ + } \ + DUMP_FUNCTION(self, data, self->parent, depth, main); \ + if (depth > 0) { \ + for (i=0; ilist[i].o == NULL) && (self->list[i].next != &self->list[i])) { \ + dump_list(&self->list[i], 0, depth-1, main); \ + break; \ + } \ + } \ + } \ + } \ + break; + + DUMP_OBJECT_CASE(DICT_VENDOR, dict_vendor_data, dump_vendor); + DUMP_OBJECT_CASE(DICT_APPLICATION, dict_application_data, dump_application); + DUMP_OBJECT_CASE(DICT_TYPE, dict_type_data, dump_type); + DUMP_OBJECT_CASE(DICT_ENUMVAL, dict_enumval_data, dump_enumval); + DUMP_OBJECT_CASE(DICT_AVP, dict_avp_data, dump_avp); + DUMP_OBJECT_CASE(DICT_COMMAND, dict_cmd_data, dump_command); + DUMP_OBJECT_CASE(DICT_RULE, dict_rule_data, dump_rule); + default: + /* TODO: unhandled type error */ + return false; + } + return true; +} + +bool +dump_dictionary_to_json(dictionary *dict, Json::Value &main) +{ + if (dict == NULL) { + return false; + } + + if (pthread_rwlock_rdlock(&dict->dict_lock) != 0) { + return false; + } + + dump_list(&(dict->dict_types), "types", 2, main); + dump_object(&(dict->dict_vendors), 3, main); + dump_list(&(dict->dict_vendors.list[0]), "vendors", 3, main); + dump_object(&(dict->dict_applications), 1, main); + dump_list(&(dict->dict_applications.list[0]), "applications", 1, main); + dump_list(&(dict->dict_cmd_code), "commands", 1, main); + + if (pthread_rwlock_unlock( &dict->dict_lock) != 0) { + return false; + } + + return true; +} + + +static int +dbg_dict_dump_json_entry(char * conffile) +{ + TRACE_ENTRY("%p", conffile); + Json::Value main; + Json::Value types = Json::Value::null; + Json::StyledWriter writer; + FILE *out = stdout; + + if (conffile) { + if ((out=fopen(conffile, "w")) == NULL) { + LOG_E("cannot open output file '%s' for writing", conffile); + return EINVAL; + } + } + + /* get main dictionary */ + struct dictionary * dict = fd_g_config->cnf_dict; + if (!dump_dictionary_to_json(dict, main)) { + LOG_E("error dumping dictionary to JSON"); + return EINVAL; + } + /* remove enumerated types before dumping, they are in AVPs */ + /* convert remaining ones to array */ + Json::Value::Members members = main["Types"].getMemberNames(); + for (Json::Value::Members::const_iterator it = members.begin() ; it != members.end(); ++it) { + if (strncmp("Enumerated", main["Types"][*it]["Name"].asCString(), strlen("Enumerated")) == 0) { + main["Types"].removeMember(*it); + } else { + types.append(main["Types"][*it]); + } + } + main.removeMember("Types"); + main["Types"] = types; + + std::string value_str = writer.write(main); + fprintf(out, "%s\n", value_str.c_str()); + + if (conffile) { + fclose(out); + } + + LOG_N("Extension 'Dump dictionaries to JSON' initialized"); + return 0; +} + +extern "C" { + EXTENSION_ENTRY("dbg_dict_dump_json", dbg_dict_dump_json_entry); +} diff -r 6a35c5470ef4 -r 19ab8ac08a36 extensions/dbg_monitor/dbg_monitor.c --- a/extensions/dbg_monitor/dbg_monitor.c Tue Jul 07 01:24:48 2020 +0800 +++ b/extensions/dbg_monitor/dbg_monitor.c Tue Jul 07 01:41:54 2020 +0800 @@ -75,7 +75,9 @@ static pthread_t thr; static void * mn_thr(void * arg) { +#ifdef DEBUG int i = 0; +#endif fd_log_threadname("Monitor thread"); char * buf = NULL; size_t len; diff -r 6a35c5470ef4 -r 19ab8ac08a36 extensions/dbg_rt/dbg_rt.c --- a/extensions/dbg_rt/dbg_rt.c Tue Jul 07 01:24:48 2020 +0800 +++ b/extensions/dbg_rt/dbg_rt.c Tue Jul 07 01:41:54 2020 +0800 @@ -33,8 +33,8 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * *********************************************************************************************************/ -/* - * Debug-only extension for routing module; +/* + * Debug-only extension for routing module; * displays state information at the end of routing information process. */ #include @@ -47,7 +47,7 @@ { char * buf = NULL; size_t buflen; TRACE_ENTRY("%p %p", cbdata, msg); - + LOG_D("[dbg_rt] FWD routing message: %p", msg ? *msg : NULL); if (msg) { CHECK_MALLOC( fd_msg_dump_treeview(&buf, &buflen, NULL, *msg, NULL, 0, 1) ); @@ -63,19 +63,20 @@ struct fd_list * li; struct msg * msg = *pmsg; char * buf = NULL; size_t buflen; - + TRACE_ENTRY("%p %p %p", cbdata, msg, candidates); - + LOG_D("[dbg_rt] OUT routing message: %p", msg); CHECK_MALLOC( fd_msg_dump_treeview(&buf, &buflen, NULL, msg, NULL, 0, 1) ); LOG_D("%s", buf); + free(buf); LOG_D("[dbg_rt] Current list of candidates (%p): (score - id)", msg); - + for (li = candidates->next; li != candidates; li = li->next) { struct rtd_candidate *c = (struct rtd_candidate *) li; LOG_D("[dbg_rt] %d -\t%s", c->score, c->diamid); } - + return 0; } @@ -83,7 +84,7 @@ static int dbgrt_main(char * conffile) { TRACE_ENTRY("%p", conffile); - + CHECK_FCT( fd_rt_fwd_register ( dbgrt_fwd_cb, NULL, RT_FWD_ALL, &fwd_hdl ) ); CHECK_FCT( fd_rt_out_register ( dbgrt_out_cb, NULL, -1 /* so that it is called late */, &out_hdl ) ); @@ -94,11 +95,11 @@ void fd_ext_fini(void) { TRACE_ENTRY(); - + /* Unregister the modules */ CHECK_FCT_DO( fd_rt_fwd_unregister ( fwd_hdl, NULL ), /* continue */ ); CHECK_FCT_DO( fd_rt_out_unregister ( out_hdl, NULL ), /* continue */ ); - + return ; } diff -r 6a35c5470ef4 -r 19ab8ac08a36 extensions/dict_dcca_3gpp/CMakeLists.txt --- a/extensions/dict_dcca_3gpp/CMakeLists.txt Tue Jul 07 01:24:48 2020 +0800 +++ b/extensions/dict_dcca_3gpp/CMakeLists.txt Tue Jul 07 01:41:54 2020 +0800 @@ -2,7 +2,7 @@ PROJECT("Diameter DCCA (Diameter Credit Control Application) 3GPP dictionary definitions" C) # Compile as a module -FD_ADD_EXTENSION(dict_dcca_3gpp dict_dcca_3gpp.c) +FD_ADD_EXTENSION(dict_dcca_3gpp dict_dcca_3gpp.c add_avps.c) #### diff -r 6a35c5470ef4 -r 19ab8ac08a36 extensions/dict_dcca_3gpp/add_avps.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/extensions/dict_dcca_3gpp/add_avps.c Tue Jul 07 01:41:54 2020 +0800 @@ -0,0 +1,21454 @@ +/* +Generated by: + csv_to_fd -p fdc dict_dcca_3gpp.csv + +Do not modify; modify the source .csv files instead. +*/ + +#include + +#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) ); + +int add_avps() +{ + struct dict_object * DiameterIdentity_type = NULL; + CHECK_dict_search(DICT_TYPE, TYPE_BY_NAME, "DiameterIdentity", &DiameterIdentity_type); + + struct dict_object * DiameterURI_type = NULL; + CHECK_dict_search(DICT_TYPE, TYPE_BY_NAME, "DiameterURI", &DiameterURI_type); + + struct dict_object * Time_type = NULL; + CHECK_dict_search(DICT_TYPE, TYPE_BY_NAME, "Time", &Time_type); + + struct dict_object * UTF8String_type = NULL; + CHECK_dict_search(DICT_TYPE, TYPE_BY_NAME, "UTF8String", &UTF8String_type); + + struct dict_object * IPFilterRule_type = NULL; + CHECK_dict_search(DICT_TYPE, TYPE_BY_NAME, "IPFilterRule", &IPFilterRule_type); + + struct dict_object * Address_type = NULL; + CHECK_dict_search(DICT_TYPE, TYPE_BY_NAME, "Address", &Address_type); + + /*==================================================================*/ + /* 3GPP TS 29.061 V15.5.0 (2018-12) */ + /* Interworking between the Public Land Mobile Network (PLMN) */ + /* supporting packet based services and */ + /* Packet Data Networks (PDN) */ + /* */ + /* From 3GPP 29061-f50.doc */ + /*==================================================================*/ + + /*==================================================================*/ + /* 3GPP TS 29.061 Table 9a: Gi/Sgi specific AVPs */ + + /* Note: 3GPP TS 29.061 is unclear and inconsistent about M. */ + /* For this reason, other sources are assumed more trustworthy. */ + /*==================================================================*/ + + /* Fix: 3GPP-IMSI (1) changed to Must M. */ + /* 3GPP-IMSI, UTF8String, code 1, section 16.4.7 */ + { + 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); + }; + + /* Fix: 3GPP-Charging-Id (2) type changed from OctetString to Unsigned32, */ + /* per 3GPP TS 29.061 clause 16.4.7.2/2 and packet dumps. */ + /* 3GPP-Charging-Id, Unsigned32, code 2, section 16.4.7 */ + { + 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); + }; + + /* Fix: 3GPP-PDP-Type (3) changed to Must M. */ + /* 3GPP-PDP-Type, Enumerated, code 3, section 16.4.7 */ + { + 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, "Enumerated(3GPP/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, OctetString, code 4, section 16.4.7 */ + { + 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); + }; + + /* Fix: 3GPP-GPRS-Negotiated-QoS-Profile (5) changed to Must M per contrib/3gpp. */ + /* 3GPP-GPRS-Negotiated-QoS-Profile, UTF8String, code 5, section 16.4.7 */ + { + 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); + }; + + /* 3GPP-SGSN-Address, OctetString, code 6, section 16.4.7 */ + { + 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, OctetString, code 7, section 16.4.7 */ + { + 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); + }; + + /* Fix: 3GPP-IMSI-MCC-MNC (8) changed to Must M per packet dumps. */ + /* 3GPP-IMSI-MCC-MNC, UTF8String, code 8, section 16.4.7 */ + { + 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); + }; + + /* Fix: 3GPP-GGSN-MCC-MNC (9) changed to Must M per contrib/3gpp. */ + /* 3GPP-GGSN-MCC-MNC, UTF8String, code 9, section 16.4.7 */ + { + 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); + }; + + /* Fix: 3GPP-NSAPI (10) changed to Must M per contrib/3gpp. */ + /* 3GPP-NSAPI, OctetString, code 10, section 16.4.7 */ + { + 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); + }; + + /* Note: 3GPP TS 29.061 Table 9a does not define */ + /* 3GPP-Session-Stop-Indicator (11) even when it is referenced */ + /* by other 3GPP Diameter AVPs including PS-Information (874). */ + /* */ + /* Fix: Add 3GPP-Session-Stop-Indicator (11) OctetString. */ + /* 3GPP-Session-Stop-Indicator, OctetString, code 11, section 16.4.7 */ + { + 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); + }; + + /* Fix: 3GPP-Selection-Mode (12) changed to Must M per contrib/3gpp. */ + /* 3GPP-Selection-Mode, UTF8String, code 12, section 16.4.7 */ + { + 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); + }; + + /* Fix: 3GPP-Charging-Characteristics (13) changed to Must M per contrib/3gpp. */ + /* 3GPP-Charging-Characteristics, UTF8String, code 13, section 16.4.7 */ + { + 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); + }; + + /* Note: 3GPP TS 29.061 V12.6.0 (2014-06) renamed */ + /* 3GPP-CG-IPv6-Address (14) to 3GPP-CG-Ipv6-Address. */ + /* */ + /* Fix: 3GPP-CG-Ipv6-Address (14) changed to Must M per contrib/3gpp. */ + /* Change-1.4.0: 3GPP-CG-IPv6-Address (14) renamed to 3GPP-CG-Ipv6-Address (14). */ + /* 3GPP-CG-Ipv6-Address, OctetString, code 14, section 16.4.7 */ + { + 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); + }; + + /* Note: 3GPP TS 29.061 V12.6.0 (2014-06) renamed */ + /* 3GPP-SGSN-IPv6-Address (15) to 3GPP-SGSN-Ipv6-Address. */ + /* */ + /* Fix: 3GPP-SGSN-Ipv6-Address (15) changed to Must M per contrib/3gpp. */ + /* Change-1.4.0: 3GPP-SGSN-IPv6-Address (15) renamed to 3GPP-SGSN-Ipv6-Address (15). */ + /* 3GPP-SGSN-Ipv6-Address, OctetString, code 15, section 16.4.7 */ + { + 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); + }; + + /* Note: 3GPP TS 29.061 V12.6.0 (2014-06) renamed */ + /* 3GPP-GGSN-IPv6-Address (16) to 3GPP-GGSN-Ipv6-Address. */ + /* */ + /* Fix: 3GPP-GGSN-Ipv6-Address (16) changed to Must M per contrib/3gpp. */ + /* Change-1.4.0: 3GPP-GGSN-IPv6-Address (16) renamed to 3GPP-GGSN-Ipv6-Address (16). */ + /* 3GPP-GGSN-Ipv6-Address, OctetString, code 16, section 16.4.7 */ + { + 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); + }; + + /* Note: 3GPP TS 29.061 V12.6.0 (2014-06) renamed */ + /* 3GPP-IPv6-DNS-Servers (17) to 3GPP-Ipv6-DNS-Servers. */ + /* */ + /* Fix: 3GPP-Ipv6-DNS-Servers (17) changed to Must M per contrib/3gpp. */ + /* Change-1.4.0: 3GPP-IPv6-DNS-Servers (17) renamed to 3GPP-Ipv6-DNS-Servers (17). */ + /* 3GPP-Ipv6-DNS-Servers, OctetString, code 17, section 16.4.7 */ + { + 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); + }; + + /* Fix: 3GPP-SGSN-MCC-MNC (18) changed to Must M per contrib/3gpp. */ + /* 3GPP-SGSN-MCC-MNC, UTF8String, code 18, section 16.4.7 */ + { + 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); + }; + + /* Fix: 3GPP-IMEISV (20) changed to Must M. */ + /* 3GPP-IMEISV, OctetString, code 20, section 16.4.7 */ + { + 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); + }; + + /* Fix: 3GPP-RAT-Type (21) changed to Must M. */ + /* 3GPP-RAT-Type, OctetString, code 21, section 16.4.7 */ + { + 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); + }; + + /* Fix: 3GPP-User-Location-Info (22) changed to Must M. */ + /* 3GPP-User-Location-Info, OctetString, code 22, section 16.4.7 */ + { + 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); + }; + + /* Fix: 3GPP-MS-TimeZone (23) changed to Must M. */ + /* 3GPP-MS-TimeZone, OctetString, code 23, section 16.4.7 */ + { + 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, OctetString, code 24, section 16.4.7 */ + { + 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, OctetString, code 25, section 16.4.7 */ + { + 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, OctetString, code 26, section 16.4.7 */ + { + 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, OctetString, code 27, section 16.4.7 */ + { + 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); + }; + + /* Note: 3GPP TS 29.061 Table 9a does not define */ + /* External-Identifier (28) for Diameter; it is RADIUS only. */ + /* 3GPP TS 29.061 Table 9b refers to 3GPP TS 29.336 */ + /* for External-Identifier (3111). */ + /* */ + /* Change-1.4.0: External-Identifier (28) OctetString replaced by External-Identifier (3111) UTF8String. */ + + /* TWAN-Identifier, OctetString, code 29, section 16.4.7 */ + { + struct dict_avp_data data = { + 29, /* Code */ + 10415, /* Vendor */ + "TWAN-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); + }; + + /* 3GPP-User-Location-Info-Time, OctetString, code 30, section 16.4.7 */ + { + struct dict_avp_data data = { + 30, /* Code */ + 10415, /* Vendor */ + "3GPP-User-Location-Info-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, NULL, NULL); + }; + + /* 3GPP-Secondary-RAT-Usage, OctetString, code 31, section 16.4.7 */ + { + struct dict_avp_data data = { + 31, /* Code */ + 10415, /* Vendor */ + "3GPP-Secondary-RAT-Usage", /* 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 TS 29.061 Table 10: Gmb specific AVPs */ + /*==================================================================*/ + + /* TMGI, OctetString, code 900, section 17.7.2 */ + { + 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, UTF8String, code 901, section 17.7.3 */ + { + 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, Enumerated, code 902, section 17.7.5 */ + { + 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, "Enumerated(3GPP/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, OctetString, code 903, section 17.7.6 */ + { + 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, OctetString, code 904, section 17.7.7 */ + { + 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, UTF8String, code 905, section 17.7.8 */ + { + 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, Enumerated, code 906, section 17.7.9 */ + { + 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, "Enumerated(3GPP/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, Enumerated, code 907, section 17.7.10 */ + { + 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, "Enumerated(3GPP/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, OctetString, code 908, section 17.7.11 */ + { + 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, UTF8String, code 909, section 17.7.12 */ + { + 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, OctetString, code 910, section 17.7.13 */ + { + 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, OctetString, code 911, section 17.7.14 */ + { + 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, OctetString, code 912, section 17.7.15 */ + { + 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, UTF8String, code 913, section 17.7.16 */ + { + 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, Enumerated, code 914, section 17.7.17 */ + { + 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, "Enumerated(3GPP/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, Enumerated, code 915, section 17.7.18 */ + { + 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, "Enumerated(3GPP/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, OctetString, code 916, section 17.7.19 */ + { + 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); + }; + + /* Note: 3GPP TS 29.061 V12.6.0 (2014-06) renamed */ + /* MBMS-GGSN-IPv6-Address (917) to MBMS-GGSN-Ipv6-Address. */ + /* */ + /* Change-1.4.0: MBMS-GGSN-IPv6-Address (917) renamed to MBMS-GGSN-Ipv6-Address (917). */ + /* MBMS-GGSN-Ipv6-Address, OctetString, code 917, section 17.7.20 */ + { + 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, OctetString, code 918, section 17.7.21 */ + { + 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); + }; + + /* Note: 3GPP TS 29.061 V12.6.0 (2014-06) renamed */ + /* MBMS-BMSC-SSM-IPv6-Address (919) to MBMS-BMSC-SSM-Ipv6-Address. */ + /* */ + /* Change-1.4.0: MBMS-BMSC-SSM-IPv6-Address (919) renamed to MBMS-BMSC-SSM-Ipv6-Address (919). */ + /* MBMS-BMSC-SSM-Ipv6-Address, OctetString, code 919, section 17.7.22 */ + { + 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, OctetString, code 920, section 17.7.23 */ + { + 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, Enumerated, code 921, section 17.7.24 */ + { + 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, "Enumerated(3GPP/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, Enumerated, code 922, section 17.7.25 */ + { + 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, "Enumerated(3GPP/MBMS-HC-Indicator)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /*==================================================================*/ + /* 3GPP TS 29.061 Table 20.5a.1: SGmb specific AVPs */ + /*==================================================================*/ + + /* MBMS-Access-Indicator, Enumerated, code 923, section 20.5a.1 */ + { + struct dict_avp_data data = { + 923, /* Code */ + 10415, /* Vendor */ + "MBMS-Access-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, "Enumerated(3GPP/MBMS-Access-Indicator)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Note: Name conflict with 3GPP TS 29.061 MBMS-GW-SSM-IP-Address (3522). */ + /* 3GPP TS 29.061 V10.4.0 (2011-09) CR 0355 added MBMS-GW-SSM-IP-Address (924). */ + /* 3GPP TS 29.468 V14.0.0 (2016-12) CR 0021 added MBMS-GW-SSM-IP-Address (3522). */ + /* MBMS-GW-SSM-IP-Address, OctetString, code 924, section 20.5a.2 */ + { + struct dict_avp_data data = { + 924, /* Code */ + 10415, /* Vendor */ + "MBMS-GW-SSM-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, NULL, NULL); + }; + + /* Note: 3GPP TS 29.061 V12.6.0 (2014-06) renamed */ + /* MBMS-GW-SSM-IPv6-Address (925) to MBMS-GW-SSM-Ipv6-Address. */ + /* Note: Name conflict with 3GPP TS 29.061 MBMS-GW-SSM-IPv6-Address (3523). */ + /* 3GPP TS 29.061 V10.4.0 (2011-09) CR 0355 added MBMS-GW-SSM-IPv6-Address (925). */ + /* 3GPP TS 29.061 V12.6.0 (2014-06) renamed */ + /* MBMS-GW-SSM-IPv6-Address (925) to MBMS-GW-SSM-Ipv6-Address. */ + /* 3GPP TS 29.468 V14.0.0 (2016-12) CR 0021 added MBMS-GW-SSM-IPv6-Address (3523). */ + /* MBMS-GW-SSM-IPv6-Address, OctetString, code 925, section 20.5a.3 */ + { + struct dict_avp_data data = { + 925, /* Code */ + 10415, /* Vendor */ + "MBMS-GW-SSM-IPv6-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); + }; + + /* MBMS-BMSC-SSM-UDP-Port, OctetString, code 926, section 20.5a.4 */ + { + struct dict_avp_data data = { + 926, /* Code */ + 10415, /* Vendor */ + "MBMS-BMSC-SSM-UDP-Port", /* 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); + }; + + /* MBMS-GW-UDP-Port, OctetString, code 927, section 20.5a.5 */ + { + struct dict_avp_data data = { + 927, /* Code */ + 10415, /* Vendor */ + "MBMS-GW-UDP-Port", /* 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); + }; + + /* MBMS-GW-UDP-Port-Indicator, Enumerated, code 928, section 20.5a.6 */ + { + struct dict_avp_data data = { + 928, /* Code */ + 10415, /* Vendor */ + "MBMS-GW-UDP-Port-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, "Enumerated(3GPP/MBMS-GW-UDP-Port-Indicator)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* MBMS-Data-Transfer-Start, Unsigned64, code 929, section 20.5a.7 */ + { + struct dict_avp_data data = { + 929, /* Code */ + 10415, /* Vendor */ + "MBMS-Data-Transfer-Start", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_UNSIGNED64 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* MBMS-Data-Transfer-Stop, Unsigned64, code 930, section 20.5a.8 */ + { + struct dict_avp_data data = { + 930, /* Code */ + 10415, /* Vendor */ + "MBMS-Data-Transfer-Stop", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_UNSIGNED64 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Note: 3GPP TS 29.061 Table 20.5a.1 row MBMS-Flag (931) has */ + /* incorrect name and should be "MBMS-Flags" per clause 20.5a.9. */ + /* */ + /* Fix: MBMS-Flag (931) renamed to MBMS-Flags (931). */ + /* MBMS-Flags, Unsigned32, code 931, section 20.5a.9 */ + { + struct dict_avp_data data = { + 931, /* Code */ + 10415, /* Vendor */ + "MBMS-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); + }; + + /* Restart-Counter, Unsigned32, code 932, section 20.5a.10 */ + { + struct dict_avp_data data = { + 932, /* Code */ + 10415, /* Vendor */ + "Restart-Counter", /* 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); + }; + + /* Diagnostic-Info, Unsigned32, code 933, section 20.5a.11 */ + { + struct dict_avp_data data = { + 933, /* Code */ + 10415, /* Vendor */ + "Diagnostic-Info", /* 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); + }; + + /* MBMS-Cell-List, OctetString, code 934, section 20.5a.12 */ + { + struct dict_avp_data data = { + 934, /* Code */ + 10415, /* Vendor */ + "MBMS-Cell-List", /* 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 TS 29.109 V15.0.0 (2017-06) */ + /* Generic Authentication Architecture (GAA); */ + /* Zh and Zn Interfaces based on the Diameter protocol; */ + /* Stage 3 */ + /* */ + /* From 3GPP 29109-f00.doc */ + /*==================================================================*/ + + /*==================================================================*/ + /* 3GPP TS 29.109 Table 6.1: New Diameter Multimedia Application AVPs */ + /*==================================================================*/ + + /* GBA-UserSecSettings, OctetString, code 400, section 6.3.1.1 */ + { + struct dict_avp_data data = { + 400, /* Code */ + 10415, /* Vendor */ + "GBA-UserSecSettings", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); + }; + + /* Transaction-Identifier, OctetString, code 401, section 6.3.1.2 */ + { + struct dict_avp_data data = { + 401, /* Code */ + 10415, /* Vendor */ + "Transaction-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); + }; + + /* NAF-Id, OctetString, code 402, section 6.3.1.3 */ + { + struct dict_avp_data data = { + 402, /* Code */ + 10415, /* Vendor */ + "NAF-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); + }; + + /* GAA-Service-Identifier, OctetString, code 403, section 6.3.1.4 */ + { + struct dict_avp_data data = { + 403, /* Code */ + 10415, /* Vendor */ + "GAA-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, NULL, NULL); + }; + + /* Key-ExpiryTime, Time, code 404, section 6.3.1.5 */ + { + struct dict_avp_data data = { + 404, /* Code */ + 10415, /* Vendor */ + "Key-ExpiryTime", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); + }; + + /* ME-Key-Material, OctetString, code 405, section 6.3.1.6 */ + { + struct dict_avp_data data = { + 405, /* Code */ + 10415, /* Vendor */ + "ME-Key-Material", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); + }; + + /* UICC-Key-Material, OctetString, code 406, section 6.3.1.7 */ + { + struct dict_avp_data data = { + 406, /* Code */ + 10415, /* Vendor */ + "UICC-Key-Material", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); + }; + + /* Note: 3GPP TS 29.109 Table 6.1 row GBA_U-Awareness-Indicator (407) */ + /* has an underscore in the name (contrary to RFC 6733 section 4.1). */ + /* */ + /* Fix: GBA_U-Awareness-Indicator (407) renamed to GBA-U-Awareness-Indicator (407). */ + /* GBA-U-Awareness-Indicator, Enumerated, code 407, section 6.3.1.8 */ + { + struct dict_avp_data data = { + 407, /* Code */ + 10415, /* Vendor */ + "GBA-U-Awareness-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, "Enumerated(3GPP/GBA-U-Awareness-Indicator)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* BootstrapInfoCreationTime, Time, code 408, section 6.3.1.9 */ + { + struct dict_avp_data data = { + 408, /* Code */ + 10415, /* Vendor */ + "BootstrapInfoCreationTime", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); + }; + + /* GUSS-Timestamp, Time, code 409, section 6.3.1.10 */ + { + struct dict_avp_data data = { + 409, /* Code */ + 10415, /* Vendor */ + "GUSS-Timestamp", /* 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); + }; + + /* GBA-Type, Enumerated, code 410, section 6.3.1.11 */ + { + struct dict_avp_data data = { + 410, /* Code */ + 10415, /* Vendor */ + "GBA-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, "Enumerated(3GPP/GBA-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* UE-Id, OctetString, code 411, section 6.3.1.12 */ + { + struct dict_avp_data data = { + 411, /* Code */ + 10415, /* Vendor */ + "UE-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); + }; + + /* UE-Id-Type, Enumerated, code 412, section 6.3.1.13 */ + { + struct dict_avp_data data = { + 412, /* Code */ + 10415, /* Vendor */ + "UE-Id-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, "Enumerated(3GPP/UE-Id-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* UICC-App-Label, OctetString, code 413, section 6.3.1.14 */ + { + struct dict_avp_data data = { + 413, /* Code */ + 10415, /* Vendor */ + "UICC-App-Label", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); + }; + + /* UICC-ME, Enumerated, code 414, section 6.3.1.15 */ + { + struct dict_avp_data data = { + 414, /* Code */ + 10415, /* Vendor */ + "UICC-ME", /* 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, "Enumerated(3GPP/UICC-ME)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Requested-Key-Lifetime, Time, code 415, section 6.3.1.16 */ + { + struct dict_avp_data data = { + 415, /* Code */ + 10415, /* Vendor */ + "Requested-Key-Lifetime", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); + }; + + /* Private-Identity-Request, Enumerated, code 416, section 6.3.1.17 */ + { + struct dict_avp_data data = { + 416, /* Code */ + 10415, /* Vendor */ + "Private-Identity-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, "Enumerated(3GPP/Private-Identity-Request)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* GBA-Push-Info, OctetString, code 417, section 6.3.1.18 */ + { + struct dict_avp_data data = { + 417, /* Code */ + 10415, /* Vendor */ + "GBA-Push-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); + }; + + /* NAF-SA-Identifier, OctetString, code 418, section 6.3.1.19 */ + { + struct dict_avp_data data = { + 418, /* Code */ + 10415, /* Vendor */ + "NAF-SA-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); + }; + + /* Security-Feature-Request, OctetString, code 419, section 6.3.1.20 */ + { + struct dict_avp_data data = { + 419, /* Code */ + 10415, /* Vendor */ + "Security-Feature-Request", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); + }; + + /* Security-Feature-Response, OctetString, code 420, section 6.3.1.21 */ + { + struct dict_avp_data data = { + 420, /* Code */ + 10415, /* Vendor */ + "Security-Feature-Response", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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 TS 29.128 V15.6.0 (2019-09) */ + /* Mobility Management Entity (MME) and Serving GPRS Support */ + /* Node (SGSN) interfaces for interworking with packet data */ + /* networks and applications */ + /* */ + /* From 3GPP 29128-f60.docx */ + /*==================================================================*/ + + /*==================================================================*/ + /* 3GPP TS 29.128 Table 6.4.1-1: T6a/T6b specific Diameter AVPs */ + /*==================================================================*/ + + /* Communication-Failure-Information, Grouped, code 4300, section 6.4.4 */ + { + struct dict_avp_data data = { + 4300, /* Code */ + 10415, /* Vendor */ + "Communication-Failure-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); + }; + + /* Cause-Type, Unsigned32, code 4301, section 6.4.5 */ + { + struct dict_avp_data data = { + 4301, /* Code */ + 10415, /* Vendor */ + "Cause-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); + }; + + /* S1AP-Cause, Unsigned32, code 4302, section 6.4.6 */ + { + struct dict_avp_data data = { + 4302, /* Code */ + 10415, /* Vendor */ + "S1AP-Cause", /* 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); + }; + + /* RANAP-Cause, Unsigned32, code 4303, section 6.4.7 */ + { + struct dict_avp_data data = { + 4303, /* Code */ + 10415, /* Vendor */ + "RANAP-Cause", /* 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); + }; + + /* BSSGP-Cause, Unsigned32, code 4309, section 6.4.8 */ + { + struct dict_avp_data data = { + 4309, /* Code */ + 10415, /* Vendor */ + "BSSGP-Cause", /* 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); + }; + + /* GMM-Cause, Unsigned32, code 4304, section 6.4.9 */ + { + struct dict_avp_data data = { + 4304, /* Code */ + 10415, /* Vendor */ + "GMM-Cause", /* 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-Cause, Unsigned32, code 4305, section 6.4.10 */ + { + struct dict_avp_data data = { + 4305, /* Code */ + 10415, /* Vendor */ + "SM-Cause", /* 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-UE-Per-Location-Configuration, Grouped, code 4306, section 6.4.11 */ + { + struct dict_avp_data data = { + 4306, /* Code */ + 10415, /* Vendor */ + "Number-Of-UE-Per-Location-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); + }; + + /* Number-Of-UE-Per-Location-Report, Grouped, code 4307, section 6.4.12 */ + { + struct dict_avp_data data = { + 4307, /* Code */ + 10415, /* Vendor */ + "Number-Of-UE-Per-Location-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); + }; + + /* UE-Count, Unsigned32, code 4308, section 6.4.13 */ + { + struct dict_avp_data data = { + 4308, /* Code */ + 10415, /* Vendor */ + "UE-Count", /* 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); + }; + + /* Connection-Action, Unsigned32, code 4314, section 6.4.18 */ + { + struct dict_avp_data data = { + 4314, /* Code */ + 10415, /* Vendor */ + "Connection-Action", /* 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); + }; + + /* Non-IP-Data, OctetString, code 4315, section 6.4.19 */ + { + struct dict_avp_data data = { + 4315, /* Code */ + 10415, /* Vendor */ + "Non-IP-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); + }; + + /* Serving-PLMN-Rate-Control, Grouped, code 4310, section 6.4.21 */ + { + struct dict_avp_data data = { + 4310, /* Code */ + 10415, /* Vendor */ + "Serving-PLMN-Rate-Control", /* 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); + }; + + /* Uplink-Rate-Limit, Unsigned32, code 4311, section 6.4.23 */ + { + struct dict_avp_data data = { + 4311, /* Code */ + 10415, /* Vendor */ + "Uplink-Rate-Limit", /* 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); + }; + + /* Downlink-Rate-Limit, Unsigned32, code 4312, section 6.4.22 */ + { + struct dict_avp_data data = { + 4312, /* Code */ + 10415, /* Vendor */ + "Downlink-Rate-Limit", /* 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); + }; + + /* Extended-PCO, OctetString, code 4313, section 6.4.26 */ + { + struct dict_avp_data data = { + 4313, /* Code */ + 10415, /* Vendor */ + "Extended-PCO", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); + }; + + /* SCEF-Wait-Time, Time, code 4316, section 6.4.24 */ + { + struct dict_avp_data data = { + 4316, /* Code */ + 10415, /* Vendor */ + "SCEF-Wait-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); + }; + + /* CMR-Flags, Unsigned32, code 4317, section 6.4.25 */ + { + struct dict_avp_data data = { + 4317, /* Code */ + 10415, /* Vendor */ + "CMR-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); + }; + + /* RRC-Cause-Counter, Grouped, code 4318, section 6.4.27 */ + { + struct dict_avp_data data = { + 4318, /* Code */ + 10415, /* Vendor */ + "RRC-Cause-Counter", /* 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); + }; + + /* Counter-Value, Unsigned32, code 4319, section 6.4.28 */ + { + struct dict_avp_data data = { + 4319, /* Code */ + 10415, /* Vendor */ + "Counter-Value", /* 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); + }; + + /* RRC-Counter-Timestamp, Time, code 4320, section 6.4.29 */ + { + struct dict_avp_data data = { + 4320, /* Code */ + 10415, /* Vendor */ + "RRC-Counter-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); + }; + + /* TDA-Flags, Unsigned32, code 4321, section 6.4.31 */ + { + struct dict_avp_data data = { + 4321, /* Code */ + 10415, /* Vendor */ + "TDA-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); + }; + + /* Idle-Status-Indication, Grouped, code 4322, section 6.4.32 */ + { + struct dict_avp_data data = { + 4322, /* Code */ + 10415, /* Vendor */ + "Idle-Status-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); + }; + + /* Idle-Status-Timestamp, Time, code 4323, section 6.4.33 */ + { + struct dict_avp_data data = { + 4323, /* Code */ + 10415, /* Vendor */ + "Idle-Status-Timestamp", /* 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); + }; + + /* Active-Time, Unsigned32, code 4324, section 6.4.34 */ + { + struct dict_avp_data data = { + 4324, /* Code */ + 10415, /* Vendor */ + "Active-Time", /* 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); + }; + + /*==================================================================*/ + /* 3GPP TS 29.140 V7.0.0 (2007-06) */ + /* MM10 interface based on Diameter protocol; */ + /* Stage 3 */ + /* */ + /* From 3GPP 29140-700.doc */ + /*==================================================================*/ + + /*==================================================================*/ + /* 3GPP TS 29.140 Table 6.3.1: Diameter MM10 Application AVPs */ + /* */ + /* Note: AVPs referenced from other sources are not added here. */ + /*==================================================================*/ + + /* Served-User-Identity, Grouped, code 1100, section 6.3.1 */ + { + 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); + }; + + /* VASP-ID, UTF8String, code 1101, section 6.3.3 */ + { + 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, UTF8String, code 1102, section 6.3.4 */ + { + 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, Enumerated, code 1103, section 6.3.5 */ + { + 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, "Enumerated(3GPP/Trigger-Event)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Sender-Address, UTF8String, code 1104, section 6.3.7 */ + { + 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, Grouped, code 1105, section 6.3.8 */ + { + 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, Grouped, code 1106, section 6.3.9 */ + { + 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); + }; + + /* Note: Name conflict with 3GPP TS 29.329 Sequence-Number (716) */ + /* and 3GPP TS 29.283 Sequence-Number (4512). */ + /* 3GPP TS 29.140 V6.1.0 (2005-06) allocated Sequence-Number (1107). */ + /* 3GPP TS 29.329 V10.0.0 (2010-09) CR 0163 added Sequence-Number (716). */ + /* 3GPP TS 29.283 V13.1.0 (2016-06) allocated Sequence-Number (4512). */ + /* */ + /* Fix: Sequence-Number (1107) renamed to Sequence-Number-29.140 (1107). */ + /* Sequence-Number-29.140, Unsigned32, code 1107, section 6.3.10 */ + { + 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); + }; + + /* Note: Name conflict with 3GPP TS 32.299 Recipient-Address (1201); */ + /* 3GPP TS 29.140 V6.1.0 (2005-06) allocated Recipient-Address (1108). */ + /* 3GPP TS 32.299 V6.4.0 (2005-09) CR 0028 added Recipient-Address (1201). */ + /* */ + /* Fix: Recipient-Address (1108) renamed to Recipient-Address-29.140 (1108). */ + /* Recipient-Address-29.140, UTF8String, code 1108, section 6.3.11 */ + { + 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, UTF8String, code 1109, section 6.3.12 */ + { + 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, Enumerated, code 1110, section 6.3.13 */ + { + 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, "Enumerated(3GPP/Originating-Interface)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Delivery-Report, Enumerated, code 1111, section 6.3.14 */ + { + 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, "Enumerated(3GPP/Delivery-Report)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Read-Reply, Enumerated, code 1112, section 6.3.15 */ + { + 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, "Enumerated(3GPP/Read-Reply)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Sender-Visibility, Enumerated, code 1113, section 6.3.16 */ + { + 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, "Enumerated(3GPP/Sender-Visibility)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Service-Key, UTF8String, code 1114, section 6.3.17 */ + { + 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, UTF8String, code 1115, section 6.3.18 */ + { + 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); + }; + + /* Note: Name conflict with 3GPP TS 32.299 V11.6.0 Status (2702). */ + /* 3GPP TS 32.299 V11.10.0 (2013-12) CR 0566 renamed */ + /* Status (2702) to Status-Code (2702). */ + /* 3GPP TS 32.299 V11.14.0 (2014-12) CR 0617 renamed */ + /* Status-Code (2702) to Status-AS-Code (2702). */ + /* */ + /* TODO: rename back to Status ? */ + /* Fix: Status (1116) renamed to Status-29.140 (1116). */ + /* Status-29.140, Grouped, code 1116, section 6.3.19 */ + { + 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, UTF8String, code 1117, section 6.3.20 */ + { + 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, UTF8String, code 1118, section 6.3.21 */ + { + 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, Enumerated, code 1119, section 6.3.22 */ + { + 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, "Enumerated(3GPP/Routeing-Address-Resolution)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /*==================================================================*/ + /* 3GPP TS 29.153 V15.1.0 (2019-09) */ + /* Service capability exposure functionality over Ns */ + /* reference point */ + /* */ + /* From 3GPP 29153-f10.doc */ + /*==================================================================*/ + + /*==================================================================*/ + /* 3GPP TS 29.153 Table 5.3.1.1: Ns specific Diameter AVPs */ + /*==================================================================*/ + + /* Network-Congestion-Area-Report, Grouped, code 4101, section 5.3.2 */ + { + struct dict_avp_data data = { + 4101, /* Code */ + 10415, /* Vendor */ + "Network-Congestion-Area-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); + }; + + /* Ns-Request-Type, Unsigned32, code 4102, section 5.3.3 */ + { + struct dict_avp_data data = { + 4102, /* Code */ + 10415, /* Vendor */ + "Ns-Request-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); + }; + + /*==================================================================*/ + /* 3GPP TS 29.154 V15.3.0 (2019-09) */ + /* Service capability exposure functionality over */ + /* Nt reference point */ + /* */ + /* From 3GPP 29154-f30.doc */ + /*==================================================================*/ + + /*==================================================================*/ + /* 3GPP TS 29.154 Table 5.3.1.1: Nt specific Diameter AVPs */ + /*==================================================================*/ + + /* Network-Area-Info-List, OctetString, code 4201, section 5.3.2 */ + { + struct dict_avp_data data = { + 4201, /* Code */ + 10415, /* Vendor */ + "Network-Area-Info-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); + }; + + /* Number-Of-UEs, Unsigned32, code 4209, section 5.3.10 */ + { + struct dict_avp_data data = { + 4209, /* Code */ + 10415, /* Vendor */ + "Number-Of-UEs", /* 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); + }; + + /* Reference-Id, OctetString, code 4202, section 5.3.3 */ + { + struct dict_avp_data data = { + 4202, /* Code */ + 10415, /* Vendor */ + "Reference-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); + }; + + /* Transfer-Request-Type, Unsigned32, code 4203, section 5.3.4 */ + { + struct dict_avp_data data = { + 4203, /* Code */ + 10415, /* Vendor */ + "Transfer-Request-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); + }; + + /* Note: Name conflict with 3GPP TS 29.345 Time-Window (3818). */ + /* Time-Window (3818) in 3GPP TS 29.345 V12.1.0 (2014-12) predates */ + /* Time-Window (4204) in 3GPP TS 29.154 V13.1.0 (2016-03). */ + /* */ + /* Fix: Time-Window (4204) renamed to Time-Window-29.154 (4204). */ + /* Time-Window-29.154, Grouped, code 4204, section 5.3.5 */ + { + struct dict_avp_data data = { + 4204, /* Code */ + 10415, /* Vendor */ + "Time-Window-29.154", /* 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); + }; + + /* Transfer-End-Time, Time, code 4205, section 5.3.6 */ + { + struct dict_avp_data data = { + 4205, /* Code */ + 10415, /* Vendor */ + "Transfer-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); + }; + + /* Transfer-Policy, Grouped, code 4207, section 5.3.8 */ + { + struct dict_avp_data data = { + 4207, /* Code */ + 10415, /* Vendor */ + "Transfer-Policy", /* 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); + }; + + /* Transfer-Policy-Id, Unsigned32, code 4208, section 5.3.9 */ + { + struct dict_avp_data data = { + 4208, /* Code */ + 10415, /* Vendor */ + "Transfer-Policy-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); + }; + + /* Transfer-Start-Time, Time, code 4206, section 5.3.7 */ + { + struct dict_avp_data data = { + 4206, /* Code */ + 10415, /* Vendor */ + "Transfer-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); + }; + + /*==================================================================*/ + /* 3GPP TS 29.154 Table A.6.3.1-1: Nta specific Diameter AVPs */ + /*==================================================================*/ + + /* Access-Network-Reports, Grouped, code 4210, section A.6.3.2 */ + { + struct dict_avp_data data = { + 4210, /* Code */ + 10415, /* Vendor */ + "Access-Network-Reports", /* 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); + }; + + /* Event-Configuration, Grouped, code 4211, section A.6.3.3 */ + { + struct dict_avp_data data = { + 4211, /* Code */ + 10415, /* Vendor */ + "Event-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); + }; + + /* Event-Configuration-State, Unsigned32, code 4212, section A.6.3.4 */ + { + struct dict_avp_data data = { + 4212, /* Code */ + 10415, /* Vendor */ + "Event-Configuration-State", /* 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); + }; + + /* Event-Configuration-Status, Grouped, code 4213, section A.6.3.5 */ + { + struct dict_avp_data data = { + 4213, /* Code */ + 10415, /* Vendor */ + "Event-Configuration-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); + }; + + /* Event-Reporting-Results, Unsigned32, code 4214, section A.6.3.6 */ + { + struct dict_avp_data data = { + 4214, /* Code */ + 10415, /* Vendor */ + "Event-Reporting-Results", /* 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); + }; + + /* Event-Reports, Grouped, code 4215, section A.6.3.7 */ + { + struct dict_avp_data data = { + 4215, /* Code */ + 10415, /* Vendor */ + "Event-Reports", /* 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); + }; + + /* Extended-SCEF-Reference-ID, Unsigned64, code 4216, section A.6.3.8 */ + { + struct dict_avp_data data = { + 4216, /* Code */ + 10415, /* Vendor */ + "Extended-SCEF-Reference-ID", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED64 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /*==================================================================*/ + /* 3GPP TS 29.172 V15.2.0 (2019-12) */ + /* Location Services (LCS); */ + /* Evolved Packet Core (EPC) LCS Protocol (ELP) between the */ + /* Gateway Mobile Location Centre (GMLC) and the */ + /* Mobile Management Entity (MME); */ + /* SLg interface */ + /* */ + /* From 3GPP 29172-f20.docx */ + /*==================================================================*/ + + /*==================================================================*/ + /* 3GPP TS 29.172 Table 7.4.1-1: Diameter ELP Application AVPs */ + /*==================================================================*/ + + /* SLg-Location-Type, Enumerated, code 2500, section 7.4.2 */ + { + struct dict_avp_data data = { + 2500, /* Code */ + 10415, /* Vendor */ + "SLg-Location-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, "Enumerated(3GPP/SLg-Location-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* LCS-EPS-Client-Name, Grouped, code 2501, section 7.4.3 */ + { + struct dict_avp_data data = { + 2501, /* Code */ + 10415, /* Vendor */ + "LCS-EPS-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-Requestor-Name, Grouped, code 2502, section 7.4.4 */ + { + struct dict_avp_data data = { + 2502, /* Code */ + 10415, /* Vendor */ + "LCS-Requestor-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-Priority, Unsigned32, code 2503, section 7.4.5 */ + { + struct dict_avp_data data = { + 2503, /* Code */ + 10415, /* Vendor */ + "LCS-Priority", /* 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); + }; + + /* LCS-QoS, Grouped, code 2504, section 7.4.6 */ + { + struct dict_avp_data data = { + 2504, /* Code */ + 10415, /* Vendor */ + "LCS-QoS", /* 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); + }; + + /* Horizontal-Accuracy, Unsigned32, code 2505, section 7.4.7 */ + { + struct dict_avp_data data = { + 2505, /* Code */ + 10415, /* Vendor */ + "Horizontal-Accuracy", /* 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); + }; + + /* Vertical-Accuracy, Unsigned32, code 2506, section 7.4.8 */ + { + struct dict_avp_data data = { + 2506, /* Code */ + 10415, /* Vendor */ + "Vertical-Accuracy", /* 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); + }; + + /* Vertical-Requested, Enumerated, code 2507, section 7.4.9 */ + { + struct dict_avp_data data = { + 2507, /* Code */ + 10415, /* Vendor */ + "Vertical-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, "Enumerated(3GPP/Vertical-Requested)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Velocity-Requested, Enumerated, code 2508, section 7.4.10 */ + { + struct dict_avp_data data = { + 2508, /* Code */ + 10415, /* Vendor */ + "Velocity-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, "Enumerated(3GPP/Velocity-Requested)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Response-Time, Enumerated, code 2509, section 7.4.11 */ + { + struct dict_avp_data data = { + 2509, /* Code */ + 10415, /* Vendor */ + "Response-Time", /* 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, "Enumerated(3GPP/Response-Time)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Supported-GAD-Shapes, Unsigned32, code 2510, section 7.4.12 */ + { + struct dict_avp_data data = { + 2510, /* Code */ + 10415, /* Vendor */ + "Supported-GAD-Shapes", /* 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); + }; + + /* LCS-Codeword, UTF8String, code 2511, section 7.4.13 */ + { + struct dict_avp_data data = { + 2511, /* Code */ + 10415, /* Vendor */ + "LCS-Codeword", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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-Privacy-Check, Enumerated, code 2512, section 7.4.14 */ + { + struct dict_avp_data data = { + 2512, /* Code */ + 10415, /* Vendor */ + "LCS-Privacy-Check", /* 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, "Enumerated(3GPP/LCS-Privacy-Check)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Accuracy-Fulfilment-Indicator, Enumerated, code 2513, section 7.4.15 */ + { + struct dict_avp_data data = { + 2513, /* Code */ + 10415, /* Vendor */ + "Accuracy-Fulfilment-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, "Enumerated(3GPP/Accuracy-Fulfilment-Indicator)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Age-Of-Location-Estimate, Unsigned32, code 2514, section 7.4.16 */ + { + struct dict_avp_data data = { + 2514, /* Code */ + 10415, /* Vendor */ + "Age-Of-Location-Estimate", /* 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); + }; + + /* Velocity-Estimate, OctetString, code 2515, section 7.4.17 */ + { + struct dict_avp_data data = { + 2515, /* Code */ + 10415, /* Vendor */ + "Velocity-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); + }; + + /* EUTRAN-Positioning-Data, OctetString, code 2516, section 7.4.18 */ + { + struct dict_avp_data data = { + 2516, /* Code */ + 10415, /* Vendor */ + "EUTRAN-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, NULL, NULL); + }; + + /* ECGI, OctetString, code 2517, section 7.4.19 */ + { + struct dict_avp_data data = { + 2517, /* Code */ + 10415, /* Vendor */ + "ECGI", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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-Event, Enumerated, code 2518, section 7.4.20 */ + { + struct dict_avp_data data = { + 2518, /* Code */ + 10415, /* Vendor */ + "Location-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, "Enumerated(3GPP/Location-Event)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Pseudonym-Indicator, Enumerated, code 2519, section 7.4.21 */ + { + struct dict_avp_data data = { + 2519, /* Code */ + 10415, /* Vendor */ + "Pseudonym-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, "Enumerated(3GPP/Pseudonym-Indicator)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* LCS-Service-Type-ID, Unsigned32, code 2520, section 7.4.22 */ + { + struct dict_avp_data data = { + 2520, /* Code */ + 10415, /* Vendor */ + "LCS-Service-Type-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); + }; + + /* LCS-Privacy-Check-Non-Session, Grouped, code 2521, section 7.4.23 */ + { + struct dict_avp_data data = { + 2521, /* Code */ + 10415, /* Vendor */ + "LCS-Privacy-Check-Non-Session", /* 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-Privacy-Check-Session, Grouped, code 2522, section 7.4.24 */ + { + struct dict_avp_data data = { + 2522, /* Code */ + 10415, /* Vendor */ + "LCS-Privacy-Check-Session", /* 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-QoS-Class, Enumerated, code 2523, section 7.4.27 */ + { + struct dict_avp_data data = { + 2523, /* Code */ + 10415, /* Vendor */ + "LCS-QoS-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, "Enumerated(3GPP/LCS-QoS-Class)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* GERAN-Positioning-Info, Grouped, code 2524, section 7.4.29 */ + { + struct dict_avp_data data = { + 2524, /* Code */ + 10415, /* Vendor */ + "GERAN-Positioning-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); + }; + + /* GERAN-Positioning-Data, OctetString, code 2525, section 7.4.30 */ + { + struct dict_avp_data data = { + 2525, /* Code */ + 10415, /* Vendor */ + "GERAN-Positioning-Data", /* 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); + }; + + /* GERAN-GANSS-Positioning-Data, OctetString, code 2526, section 7.4.31 */ + { + struct dict_avp_data data = { + 2526, /* Code */ + 10415, /* Vendor */ + "GERAN-GANSS-Positioning-Data", /* 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); + }; + + /* UTRAN-Positioning-Info, Grouped, code 2527, section 7.4.32 */ + { + struct dict_avp_data data = { + 2527, /* Code */ + 10415, /* Vendor */ + "UTRAN-Positioning-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); + }; + + /* UTRAN-Positioning-Data, OctetString, code 2528, section 7.4.33 */ + { + struct dict_avp_data data = { + 2528, /* Code */ + 10415, /* Vendor */ + "UTRAN-Positioning-Data", /* 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); + }; + + /* UTRAN-GANSS-Positioning-Data, OctetString, code 2529, section 7.4.34 */ + { + struct dict_avp_data data = { + 2529, /* Code */ + 10415, /* Vendor */ + "UTRAN-GANSS-Positioning-Data", /* 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); + }; + + /* LRR-Flags, Unsigned32, code 2530, section 7.4.35 */ + { + struct dict_avp_data data = { + 2530, /* Code */ + 10415, /* Vendor */ + "LRR-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); + }; + + /* LCS-Reference-Number, OctetString, code 2531, section 7.4.37 */ + { + struct dict_avp_data data = { + 2531, /* Code */ + 10415, /* Vendor */ + "LCS-Reference-Number", /* 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); + }; + + /* Deferred-Location-Type, Unsigned32, code 2532, section 7.4.36 */ + { + struct dict_avp_data data = { + 2532, /* Code */ + 10415, /* Vendor */ + "Deferred-Location-Type", /* 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); + }; + + /* Area-Event-Info, Grouped, code 2533, section 7.4.38 */ + { + struct dict_avp_data data = { + 2533, /* Code */ + 10415, /* Vendor */ + "Area-Event-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); + }; + + /* Area-Definition, Grouped, code 2534, section 7.4.39 */ + { + struct dict_avp_data data = { + 2534, /* Code */ + 10415, /* Vendor */ + "Area-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); + }; + + /* Area, Grouped, code 2535, section 7.4.40 */ + { + struct dict_avp_data data = { + 2535, /* Code */ + 10415, /* Vendor */ + "Area", /* 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); + }; + + /* Area-Type, Unsigned32, code 2536, section 7.4.41 */ + { + struct dict_avp_data data = { + 2536, /* Code */ + 10415, /* Vendor */ + "Area-Type", /* 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); + }; + + /* Area-Identification, Grouped, code 2537, section 7.4.42 */ + { + struct dict_avp_data data = { + 2537, /* Code */ + 10415, /* Vendor */ + "Area-Identification", /* 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); + }; + + /* Occurrence-Info, Enumerated, code 2538, section 7.4.43 */ + { + struct dict_avp_data data = { + 2538, /* Code */ + 10415, /* Vendor */ + "Occurrence-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, "Enumerated(3GPP/Occurrence-Info)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Interval-Time, Unsigned32, code 2539, section 7.4.44 */ + { + struct dict_avp_data data = { + 2539, /* Code */ + 10415, /* Vendor */ + "Interval-Time", /* 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); + }; + + /* Periodic-LDR-Information, Grouped, code 2540, section 7.4.45 */ + { + struct dict_avp_data data = { + 2540, /* Code */ + 10415, /* Vendor */ + "Periodic-LDR-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); + }; + + /* Reporting-Amount, Unsigned32, code 2541, section 7.4.46 */ + { + struct dict_avp_data data = { + 2541, /* Code */ + 10415, /* Vendor */ + "Reporting-Amount", /* 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-Interval, Unsigned32, code 2542, section 7.4.47 */ + { + struct dict_avp_data data = { + 2542, /* Code */ + 10415, /* Vendor */ + "Reporting-Interval", /* 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-PLMN-List, Grouped, code 2543, section 7.4.48 */ + { + struct dict_avp_data data = { + 2543, /* Code */ + 10415, /* Vendor */ + "Reporting-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); + }; + + /* PLMN-ID-List, Grouped, code 2544, section 7.4.49 */ + { + struct dict_avp_data data = { + 2544, /* Code */ + 10415, /* Vendor */ + "PLMN-ID-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); + }; + + /* PLR-Flags, Unsigned32, code 2545, section 7.4.52 */ + { + struct dict_avp_data data = { + 2545, /* Code */ + 10415, /* Vendor */ + "PLR-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); + }; + + /* PLA-Flags, Unsigned32, code 2546, section 7.4.53 */ + { + struct dict_avp_data data = { + 2546, /* Code */ + 10415, /* Vendor */ + "PLA-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); + }; + + /* Deferred-MT-LR-Data, Grouped, code 2547, section 7.4.54 */ + { + struct dict_avp_data data = { + 2547, /* Code */ + 10415, /* Vendor */ + "Deferred-MT-LR-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); + }; + + /* Termination-Cause, Unsigned32, code 2548, section 7.4.55 */ + { + struct dict_avp_data data = { + 2548, /* Code */ + 10415, /* Vendor */ + "Termination-Cause", /* 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); + }; + + /* LRA-Flags, Unsigned32, code 2549, section 7.4.56 */ + { + struct dict_avp_data data = { + 2549, /* Code */ + 10415, /* Vendor */ + "LRA-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); + }; + + /* Periodic-Location-Support-Indicator, Enumerated, code 2550, section 7.4.50 */ + { + struct dict_avp_data data = { + 2550, /* Code */ + 10415, /* Vendor */ + "Periodic-Location-Support-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, "Enumerated(3GPP/Periodic-Location-Support-Indicator)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Prioritized-List-Indicator, Enumerated, code 2551, section 7.4.51 */ + { + struct dict_avp_data data = { + 2551, /* Code */ + 10415, /* Vendor */ + "Prioritized-List-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, "Enumerated(3GPP/Prioritized-List-Indicator)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* ESMLC-Cell-Info, Grouped, code 2552, section 7.4.57 */ + { + struct dict_avp_data data = { + 2552, /* Code */ + 10415, /* Vendor */ + "ESMLC-Cell-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); + }; + + /* Cell-Portion-ID, Unsigned32, code 2553, section 7.4.58 */ + { + struct dict_avp_data data = { + 2553, /* Code */ + 10415, /* Vendor */ + "Cell-Portion-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); + }; + + /* 1xRTT-RCID, OctetString, code 2554, section 7.4.59 */ + { + struct dict_avp_data data = { + 2554, /* Code */ + 10415, /* Vendor */ + "1xRTT-RCID", /* 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); + }; + + /* Delayed-Location-Reporting-Data, Grouped, code 2555, section 7.4.60 */ + { + struct dict_avp_data data = { + 2555, /* Code */ + 10415, /* Vendor */ + "Delayed-Location-Reporting-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); + }; + + /* Civic-Address, UTF8String, code 2556, section 7.4.61 */ + { + struct dict_avp_data data = { + 2556, /* Code */ + 10415, /* Vendor */ + "Civic-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, UTF8String_type, NULL); + }; + + /* Barometric-Pressure, Unsigned32, code 2557, section 7.4.62 */ + { + struct dict_avp_data data = { + 2557, /* Code */ + 10415, /* Vendor */ + "Barometric-Pressure", /* 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); + }; + + /* UTRAN-Additional-Positioning-Data, OctetString, code 2558, section 7.4.63 */ + { + struct dict_avp_data data = { + 2558, /* Code */ + 10415, /* Vendor */ + "UTRAN-Additional-Positioning-Data", /* 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); + }; + + /* Motion-Event-Info, Grouped, code 2559, section 7.4.64 */ + { + struct dict_avp_data data = { + 2559, /* Code */ + 10415, /* Vendor */ + "Motion-Event-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); + }; + + /* Linear-Distance, Unsigned32, code 2560, section 7.4.65 */ + { + struct dict_avp_data data = { + 2560, /* Code */ + 10415, /* Vendor */ + "Linear-Distance", /* 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); + }; + + /* Maximum-Interval, Unsigned32, code 2561, section 7.4.66 */ + { + struct dict_avp_data data = { + 2561, /* Code */ + 10415, /* Vendor */ + "Maximum-Interval", /* 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); + }; + + /* Sampling-Interval, Unsigned32, code 2562, section 7.4.67 */ + { + struct dict_avp_data data = { + 2562, /* Code */ + 10415, /* Vendor */ + "Sampling-Interval", /* 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-Duration, Unsigned32, code 2563, section 7.4.68 */ + { + struct dict_avp_data data = { + 2563, /* Code */ + 10415, /* Vendor */ + "Reporting-Duration", /* 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-Location-Requirements, Unsigned32, code 2564, section 7.4.69 */ + { + struct dict_avp_data data = { + 2564, /* Code */ + 10415, /* Vendor */ + "Reporting-Location-Requirements", /* 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); + }; + + /* Additional-Area, Grouped, code 2565, section 7.4.70 */ + { + struct dict_avp_data data = { + 2565, /* Code */ + 10415, /* Vendor */ + "Additional-Area", /* 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); + }; + + /*==================================================================*/ + /* 3GPP TS 29.173 V15.0.0 (2018-06) */ + /* Location Services (LCS); */ + /* Diameter-based SLh interface for Control Plane LCS */ + /* */ + /* From 3GPP 29173-f00.doc */ + /*==================================================================*/ + + /*==================================================================*/ + /* 3GPP TS 29.173 Table 6.4.1/1: SLh specific Diameter AVPs */ + /*==================================================================*/ + + /* LMSI, OctetString, code 2400, section 6.4.2 */ + { + 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, Grouped, code 2401, section 6.4.3 */ + { + 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, DiameterIdentity, code 2402, section 6.4.4 */ + { + 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, OctetString, code 2403, section 6.4.5 */ + { + 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, Unsigned32, code 2404, section 6.4.6 */ + { + 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, Address, code 2405, section 6.4.7 */ + { + 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, Grouped, code 2406, section 6.4.8 */ + { + 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, Address, code 2407, section 6.4.9 */ + { + 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, DiameterIdentity, code 2408, section 6.4.12 */ + { + 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, DiameterIdentity, code 2409, section 6.4.13 */ + { + 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, DiameterIdentity, code 2410, section 6.4.14 */ + { + 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); + }; + + /* RIA-Flags, Unsigned32, code 2411, section 6.4.15 */ + { + struct dict_avp_data data = { + 2411, /* Code */ + 10415, /* Vendor */ + "RIA-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); + }; + + /*==================================================================*/ + /* 3GPP TS 29.209 V6.8.0 (2011-09) */ + /* Policy control over Gq interface */ + /* */ + /* From 3GPP 29209-680.doc */ + /* */ + /* Replaced by 3GPP TS 29.214. */ + /*==================================================================*/ + + /*==================================================================*/ + /* 3GPP TS 29.209 Table 6.5.1: Gq specific Diameter AVPs */ + /* Note: Only AVPs not provided by 3GPP TS 29.214. */ + /*==================================================================*/ + + /* Authorization-Token, OctetString, code 506, section 6.5.7 */ + { + struct dict_avp_data data = { + 506, /* Code */ + 10415, /* Vendor */ + "Authorization-Token", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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-Grouping, Grouped, code 508, section 6.5.9 */ + { + struct dict_avp_data data = { + 508, /* Code */ + 10415, /* Vendor */ + "Flow-Grouping", /* 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); + }; + + /*==================================================================*/ + /* 3GPP TS 29.210 V6.7.0 (2006-12) */ + /* Charging rule provisioning over Gx interface */ + /* */ + /* From 3GPP 29210-670.doc */ + /* */ + /* Replaced by 3GPP TS 29.212. */ + /*==================================================================*/ + + /*==================================================================*/ + /* 3GPP TS 29.210 Table 5.2: Gx specific Diameter AVPs */ + /* Note: Only AVPs not provided by 3GPP TS 29.212. */ + /*==================================================================*/ + + /* PDP-Session-Operation, Enumerated, code 1015, section 5.2.21 */ + { + 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, "Enumerated(3GPP/PDP-Session-Operation)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /*==================================================================*/ + /* 3GPP TS 29.212 V15.9.0 (2019-12) */ + /* Policy and Charging Control (PCC); Reference points */ + /* */ + /* From 3GPP 29212-f90.doc */ + /*==================================================================*/ + + /*==================================================================*/ + /* 3GPP TS 29.212 Table 5.3.0.1: Gx specific Diameter AVPs */ + /*==================================================================*/ + + /* Change-1.4.0: ADC-Revalidation-Time (2801) Time removed in 3GPP TS 29.212 V12.1.0 (2013-06). */ + + /* Note: Name conflict with 3GPP TS 32.299 3GPP-PS-Data-Off-Status (4406). */ + /* 3GPP TS 29.212 V14.3.0 (2017-03) CR 1559 added 3GPP-PS-Data-Off-Status (2847). */ + /* 3GPP TS 32.299 V14.3.0 (2017-03) CR 0760 added 3GPP-PS-Data-Off-Status (4406). */ + /* 3GPP-PS-Data-Off-Status, Enumerated, code 2847, section 5.3.133 */ + { + struct dict_avp_data data = { + 2847, /* Code */ + 10415, /* Vendor */ + "3GPP-PS-Data-Off-Status", /* 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, "Enumerated(3GPP/3GPP-PS-Data-Off-Status)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Access-Availability-Change-Reason, Unsigned32, code 2833, section 5.3.121 */ + { + struct dict_avp_data data = { + 2833, /* Code */ + 10415, /* Vendor */ + "Access-Availability-Change-Reason", /* 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); + }; + + /* Access-Network-Charging-Identifier-Gx, Grouped, code 1022, section 5.3.22 */ + { + 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, Grouped, code 1034, section 5.3.32 */ + { + 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, Address, code 1050, section 5.3.49 */ + { + 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); + }; + + /* AN-GW-Status, Enumerated, code 2811, section 5.3.100 */ + { + struct dict_avp_data data = { + 2811, /* Code */ + 10415, /* Vendor */ + "AN-GW-Status", /* 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, "Enumerated(3GPP/AN-GW-Status)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* APN-Aggregate-Max-Bitrate-DL, Unsigned32, code 1040, section 5.3.39 */ + { + 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, Unsigned32, code 1041, section 5.3.40 */ + { + 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); + }; + + /* Application-Detection-Information, Grouped, code 1098, section 5.3.91 */ + { + 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); + }; + + /* Bearer-Control-Mode, Enumerated, code 1023, section 5.3.23 */ + { + 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, "Enumerated(3GPP/Bearer-Control-Mode)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Bearer-Identifier, OctetString, code 1020, section 5.3.20 */ + { + 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, Enumerated, code 1021, section 5.3.21 */ + { + 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, "Enumerated(3GPP/Bearer-Operation)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Bearer-Usage, Enumerated, code 1000, section 5.3.1 */ + { + 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, "Enumerated(3GPP/Bearer-Usage)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Charging-Correlation-Indicator, Enumerated, code 1073, section 5.3.67 */ + { + 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, "Enumerated(3GPP/Charging-Correlation-Indicator)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Charging-Rule-Base-Name, UTF8String, code 1004, section 5.3.5 */ + { + 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-Definition, Grouped, code 1003, section 5.3.4 */ + { + 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-Install, Grouped, code 1001, section 5.3.2 */ + { + 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-Name, OctetString, code 1005, section 5.3.6 */ + { + 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-Remove, Grouped, code 1002, section 5.3.3 */ + { + 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-Report, Grouped, code 1018, section 5.3.18 */ + { + 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); + }; + + /* CoA-Information, Grouped, code 1039, section 5.3.37 */ + { + 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); + }; + + /* CoA-IP-Address, Address, code 1035, section 5.3.33 */ + { + 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); + }; + + /* Conditional-APN-Aggregate-Max-Bitrate, Grouped, code 2818, section 5.3.105 */ + { + struct dict_avp_data data = { + 2818, /* Code */ + 10415, /* Vendor */ + "Conditional-APN-Aggregate-Max-Bitrate", /* 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); + }; + + /* Conditional-Policy-Information, Grouped, code 2840, section 5.3.128 */ + { + struct dict_avp_data data = { + 2840, /* Code */ + 10415, /* Vendor */ + "Conditional-Policy-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); + }; + + /* Credit-Management-Status, Unsigned32, code 1082, section 5.3.102 */ + { + struct dict_avp_data data = { + 1082, /* Code */ + 10415, /* Vendor */ + "Credit-Management-Status", /* 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); + }; + + /* CSG-Information-Reporting, Enumerated, code 1071, section 5.3.64 */ + { + 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, "Enumerated(3GPP/CSG-Information-Reporting)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Default-Access, Enumerated, code 2829, section 5.3.120 */ + { + struct dict_avp_data data = { + 2829, /* Code */ + 10415, /* Vendor */ + "Default-Access", /* 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, "Enumerated(3GPP/Default-Access)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Default-Bearer-Indication, Enumerated, code 2844, section 5.3.132 */ + { + struct dict_avp_data data = { + 2844, /* Code */ + 10415, /* Vendor */ + "Default-Bearer-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, "Enumerated(3GPP/Default-Bearer-Indication)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Default-EPS-Bearer-QoS, Grouped, code 1049, section 5.3.48 */ + { + 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); + }; + + /* Default-QoS-Information, Grouped, code 2816, section 5.3.103 */ + { + struct dict_avp_data data = { + 2816, /* Code */ + 10415, /* Vendor */ + "Default-QoS-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); + }; + + /* Default-QoS-Name, UTF8String, code 2817, section 5.3.104 */ + { + struct dict_avp_data data = { + 2817, /* Code */ + 10415, /* Vendor */ + "Default-QoS-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); + }; + + /* Event-Report-Indication, Grouped, code 1033, section 5.3.30 */ + { + 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, Enumerated, code 1006, section 5.3.7 */ + { + 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, "Enumerated(3GPP/Event-Trigger)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Execution-Time, Time, code 2839, section 5.3.127 */ + { + struct dict_avp_data data = { + 2839, /* Code */ + 10415, /* Vendor */ + "Execution-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); + }; + + /* Extended-APN-AMBR-DL, Unsigned32, code 2848, section 5.3.134 */ + { + struct dict_avp_data data = { + 2848, /* Code */ + 10415, /* Vendor */ + "Extended-APN-AMBR-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); + }; + + /* Extended-APN-AMBR-UL, Unsigned32, code 2849, section 5.3.135 */ + { + struct dict_avp_data data = { + 2849, /* Code */ + 10415, /* Vendor */ + "Extended-APN-AMBR-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); + }; + + /* Extended-GBR-DL, Unsigned32, code 2850, section 5.3.136 */ + { + struct dict_avp_data data = { + 2850, /* Code */ + 10415, /* Vendor */ + "Extended-GBR-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); + }; + + /* Extended-GBR-UL, Unsigned32, code 2851, section 5.3.137 */ + { + struct dict_avp_data data = { + 2851, /* Code */ + 10415, /* Vendor */ + "Extended-GBR-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); + }; + + /* Flow-Direction, Enumerated, code 1080, section 5.3.65 */ + { + 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, "Enumerated(3GPP/Flow-Direction)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Flow-Information, Grouped, code 1058, section 5.3.53 */ + { + 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, OctetString, code 1057, section 5.3.52 */ + { + 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); + }; + + /* Fixed-User-Location-Info, Grouped, code 2825, section 5.3.112 */ + { + struct dict_avp_data data = { + 2825, /* Code */ + 10415, /* Vendor */ + "Fixed-User-Location-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); + }; + + /* Guaranteed-Bitrate-DL, Unsigned32, code 1025, section 5.3.25 */ + { + 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, Unsigned32, code 1026, section 5.3.26 */ + { + 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); + }; + + /* Note: HeNB-BBF-FQDN (2803) UTF8String removed in 3GPP TS 29.212 V11.8.0 (2013-03). */ + + /* HeNB-Local-IP-Address, Address, code 2804, section 5.3.95 */ + { + 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); + }; + + /* IP-CAN-Session-Charging-Scope, Enumerated, code 2827, section 5.3.114 */ + { + struct dict_avp_data data = { + 2827, /* Code */ + 10415, /* Vendor */ + "IP-CAN-Session-Charging-Scope", /* 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, "Enumerated(3GPP/IP-CAN-Session-Charging-Scope)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* IP-CAN-Type, Enumerated, code 1027, section 5.3.27 */ + { + 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, "Enumerated(3GPP/IP-CAN-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Note: 3GPP TS 29.212 Table 5.3.0.1 row Max-PLR-DL (2852) */ + /* incorrectly lists type as Unsigned32 instead of Float32. */ + /* 3GPP TS 29.212 clause 5.3.138 uses Float32. */ + /* */ + /* Fix: Max-PLR-DL (2852) type changed from Float32 to Unsigned32. */ + /* Max-PLR-DL, Unsigned32, code 2852, section 5.3.138 */ + { + struct dict_avp_data data = { + 2852, /* Code */ + 10415, /* Vendor */ + "Max-PLR-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); + }; + + /* Note: 3GPP TS 29.212 Table 5.3.0.1 row Max-PLR-UL (2853) */ + /* incorrectly lists type as Unsigned32 instead of Float32. */ + /* 3GPP TS 29.212 clause 5.3.139 uses Float32. */ + /* */ + /* Fix: Max-PLR-UL (2853) type changed from Float32 to Unsigned32. */ + /* Max-PLR-UL, Unsigned32, code 2853, section 5.3.139 */ + { + struct dict_avp_data data = { + 2853, /* Code */ + 10415, /* Vendor */ + "Max-PLR-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); + }; + + /* Metering-Method, Enumerated, code 1007, section 5.3.8 */ + { + 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, "Enumerated(3GPP/Metering-Method)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Monitoring-Flags, Unsigned32, code 2828, section 5.3.115 */ + { + struct dict_avp_data data = { + 2828, /* Code */ + 10415, /* Vendor */ + "Monitoring-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); + }; + + /* Monitoring-Key, OctetString, code 1066, section 5.3.59 */ + { + 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, Enumerated, code 2809, section 5.3.98 */ + { + 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, "Enumerated(3GPP/Mute-Notification)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Monitoring-Time, Time, code 2810, section 5.3.99 */ + { + 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); + }; + + /* NBIFOM-Mode, Enumerated, code 2830, section 5.3.117 */ + { + struct dict_avp_data data = { + 2830, /* Code */ + 10415, /* Vendor */ + "NBIFOM-Mode", /* 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, "Enumerated(3GPP/NBIFOM-Mode)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* NBIFOM-Support, Enumerated, code 2831, section 5.3.116 */ + { + struct dict_avp_data data = { + 2831, /* Code */ + 10415, /* Vendor */ + "NBIFOM-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, "Enumerated(3GPP/NBIFOM-Support)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* NetLoc-Access-Support, Unsigned32, code 2824, section 5.3.111 */ + { + struct dict_avp_data data = { + 2824, /* Code */ + 10415, /* Vendor */ + "NetLoc-Access-Support", /* 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); + }; + + /* Network-Request-Support, Enumerated, code 1024, section 5.3.24 */ + { + 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, "Enumerated(3GPP/Network-Request-Support)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Offline, Enumerated, code 1008, section 5.3.9 */ + { + 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, "Enumerated(3GPP/Offline)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Online, Enumerated, code 1009, section 5.3.10 */ + { + 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, "Enumerated(3GPP/Online)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Packet-Filter-Content, IPFilterRule, code 1059, section 5.3.54 */ + { + 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, OctetString, code 1060, section 5.3.55 */ + { + 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, Grouped, code 1061, section 5.3.56 */ + { + 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, Enumerated, code 1062, section 5.3.57 */ + { + 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, "Enumerated(3GPP/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, Enumerated, code 1072, section 5.3.66 */ + { + 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, "Enumerated(3GPP/Packet-Filter-Usage)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* PCC-Rule-Status, Enumerated, code 1019, section 5.3.19 */ + { + 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, "Enumerated(3GPP/PCC-Rule-Status)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Note: 3GPP TS 29.212 Table 5.3.0.1 row PDN-Connection-ID (1065) */ + /* missing M, assume MUST NOT. */ + /* */ + /* Change-1.4.0: PDN-Connection-ID (1065) flag M MUST NOT. */ + /* PDN-Connection-ID, OctetString, code 1065, section 5.3.58 */ + { + struct dict_avp_data data = { + 1065, /* Code */ + 10415, /* Vendor */ + "PDN-Connection-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); + }; + + /* PRA-Install, Grouped, code 2845, section 5.3.130 */ + { + struct dict_avp_data data = { + 2845, /* Code */ + 10415, /* Vendor */ + "PRA-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); + }; + + /* PRA-Remove, Grouped, code 2846, section 5.3.131 */ + { + struct dict_avp_data data = { + 2846, /* Code */ + 10415, /* Vendor */ + "PRA-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); + }; + + /* Precedence, Unsigned32, code 1010, section 5.3.11 */ + { + 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, Enumerated, code 1047, section 5.3.46 */ + { + 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, "Enumerated(3GPP/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, Enumerated, code 1048, section 5.3.47 */ + { + 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, "Enumerated(3GPP/Pre-emption-Vulnerability)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Presence-Reporting-Area-Elements-List, OctetString, code 2820, section 5.3.107 */ + { + struct dict_avp_data data = { + 2820, /* Code */ + 10415, /* Vendor */ + "Presence-Reporting-Area-Elements-List", /* 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); + }; + + /* Presence-Reporting-Area-Identifier, OctetString, code 2821, section 5.3.108 */ + { + struct dict_avp_data data = { + 2821, /* Code */ + 10415, /* Vendor */ + "Presence-Reporting-Area-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); + }; + + /* Presence-Reporting-Area-Information, Grouped, code 2822, section 5.3.109 */ + { + struct dict_avp_data data = { + 2822, /* Code */ + 10415, /* Vendor */ + "Presence-Reporting-Area-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); + }; + + /* Presence-Reporting-Area-Node, Unsigned32, code 2855, section 5.3.141 */ + { + struct dict_avp_data data = { + 2855, /* Code */ + 10415, /* Vendor */ + "Presence-Reporting-Area-Node", /* 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); + }; + + /* Presence-Reporting-Area-Status, Unsigned32, code 2823, section 5.3.110 */ + { + struct dict_avp_data data = { + 2823, /* Code */ + 10415, /* Vendor */ + "Presence-Reporting-Area-Status", /* 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); + }; + + /* Priority-Level, Unsigned32, code 1046, section 5.3.45 */ + { + 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); + }; + + /* Note: 3GPP TS 29.212 Table 5.3.0.1 row PS-to-CS-Session-Continuity (1099) */ + /* missing M, assume MUST NOT. */ + /* */ + /* Change-1.4.0: PS-to-CS-Session-Continuity (1099) flag M MUST NOT. */ + /* PS-to-CS-Session-Continuity, Enumerated, code 1099, section 5.3.84 */ + { + struct dict_avp_data data = { + 1099, /* Code */ + 10415, /* Vendor */ + "PS-to-CS-Session-Continuity", /* 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, "Enumerated(3GPP/PS-to-CS-Session-Continuity)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* QoS-Class-Identifier, Enumerated, code 1028, section 5.3.17 */ + { + 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, "Enumerated(3GPP/QoS-Class-Identifier)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* QoS-Information, Grouped, code 1016, section 5.3.16 */ + { + 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, Enumerated, code 1029, section 5.3.28 */ + { + 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, "Enumerated(3GPP/QoS-Negotiation)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* QoS-Upgrade, Enumerated, code 1030, section 5.3.29 */ + { + 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, "Enumerated(3GPP/QoS-Upgrade)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* RAN-NAS-Release-Cause, OctetString, code 2819, section 5.3.106 */ + { + struct dict_avp_data data = { + 2819, /* Code */ + 10415, /* Vendor */ + "RAN-NAS-Release-Cause", /* 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); + }; + + /* RAN-Rule-Support, Unsigned32, code 2832, section 5.3.122 */ + { + struct dict_avp_data data = { + 2832, /* Code */ + 10415, /* Vendor */ + "RAN-Rule-Support", /* 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); + }; + + /* RAT-Type, Enumerated, code 1032, section 5.3.31 */ + { + 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, "Enumerated(3GPP/RAT-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Redirect-Information, Grouped, code 1085, section 5.3.82 */ + { + 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, Enumerated, code 1086, section 5.3.83 */ + { + 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, "Enumerated(3GPP/Redirect-Support)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Removal-Of-Access, Enumerated, code 2842, section 5.3.126 */ + { + struct dict_avp_data data = { + 2842, /* Code */ + 10415, /* Vendor */ + "Removal-Of-Access", /* 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, "Enumerated(3GPP/Removal-Of-Access)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Reporting-Level, Enumerated, code 1011, section 5.3.12 */ + { + 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, "Enumerated(3GPP/Reporting-Level)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Resource-Allocation-Notification, Enumerated, code 1063, section 5.3.50 */ + { + 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, "Enumerated(3GPP/Resource-Allocation-Notification)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Resource-Release-Notification, Enumerated, code 2841, section 5.3.125 */ + { + struct dict_avp_data data = { + 2841, /* Code */ + 10415, /* Vendor */ + "Resource-Release-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, "Enumerated(3GPP/Resource-Release-Notification)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Revalidation-Time, Time, code 1042, section 5.3.41 */ + { + 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); + }; + + /* Routing-Filter, Grouped, code 1078, section 5.3.72 */ + { + 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, Address, code 1079, section 5.3.73 */ + { + 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, Grouped, code 1076, section 5.3.70 */ + { + 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, OctetString, code 1077, section 5.3.71 */ + { + 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, Grouped, code 1081, section 5.3.68 */ + { + 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, Grouped, code 1075, section 5.3.69 */ + { + 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); + }; + + /* Routing-Rule-Failure-Code, Unsigned32, code 2834, section 5.3.119 */ + { + struct dict_avp_data data = { + 2834, /* Code */ + 10415, /* Vendor */ + "Routing-Rule-Failure-Code", /* 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); + }; + + /* Routing-Rule-Report, Grouped, code 2835, section 5.3.118 */ + { + struct dict_avp_data data = { + 2835, /* Code */ + 10415, /* Vendor */ + "Routing-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); + }; + + /* Rule-Activation-Time, Time, code 1043, section 5.3.42 */ + { + 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); + }; + + /* Rule-Deactivation-Time, Time, code 1044, section 5.3.43 */ + { + 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); + }; + + /* Rule-Failure-Code, Enumerated, code 1031, section 5.3.38 */ + { + 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, "Enumerated(3GPP/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, OctetString, code 1056, section 5.3.51 */ + { + 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); + }; + + /* Session-Release-Cause, Enumerated, code 1045, section 5.3.44 */ + { + 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, "Enumerated(3GPP/Session-Release-Cause)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* TCP-Source-Port, Unsigned32, code 2843, section 5.3.129 */ + { + struct dict_avp_data data = { + 2843, /* Code */ + 10415, /* Vendor */ + "TCP-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); + }; + + /* TDF-Information, Grouped, code 1087, section 5.3.78 */ + { + 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, OctetString, code 1088, section 5.3.77 */ + { + 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, OctetString, code 2802, section 5.3.92 */ + { + 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, DiameterIdentity, code 1089, section 5.3.80 */ + { + 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, DiameterIdentity, code 1090, section 5.3.79 */ + { + 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, Address, code 1091, section 5.3.81 */ + { + 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); + }; + + /* TFT-Filter, IPFilterRule, code 1012, section 5.3.13 */ + { + 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, Grouped, code 1013, section 5.3.14 */ + { + 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); + }; + + /* Traffic-Steering-Policy-Identifier-DL, OctetString, code 2836, section 5.3.123 */ + { + struct dict_avp_data data = { + 2836, /* Code */ + 10415, /* Vendor */ + "Traffic-Steering-Policy-Identifier-DL", /* 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); + }; + + /* Traffic-Steering-Policy-Identifier-UL, OctetString, code 2837, section 5.3.124 */ + { + struct dict_avp_data data = { + 2837, /* Code */ + 10415, /* Vendor */ + "Traffic-Steering-Policy-Identifier-UL", /* 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); + }; + + /* ToS-Traffic-Class, OctetString, code 1014, section 5.3.15 */ + { + 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, IPFilterRule, code 1036, section 5.3.34 */ + { + 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, Unsigned32, code 1037, section 5.3.35 */ + { + 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, Grouped, code 1038, section 5.3.36 */ + { + 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); + }; + + /* UDP-Source-Port, Unsigned32, code 2806, section 5.3.97 */ + { + 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, Address, code 2805, section 5.3.96 */ + { + 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); + }; + + /* UE-Status, Unsigned32, code 2854, section 5.3.140 */ + { + struct dict_avp_data data = { + 2854, /* Code */ + 10415, /* Vendor */ + "UE-Status", /* 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); + }; + + /* Usage-Monitoring-Information, Grouped, code 1067, section 5.3.60 */ + { + 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); + }; + + /* Usage-Monitoring-Level, Enumerated, code 1068, section 5.3.61 */ + { + 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, "Enumerated(3GPP/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, Enumerated, code 1069, section 5.3.62 */ + { + 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, "Enumerated(3GPP/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, Enumerated, code 1070, section 5.3.63 */ + { + 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, "Enumerated(3GPP/Usage-Monitoring-Support)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* User-Location-Info-Time, Time, code 2812, section 5.3.101 */ + { + struct dict_avp_data data = { + 2812, /* Code */ + 10415, /* Vendor */ + "User-Location-Info-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); + }; + + /* PCSCF-Restoration-Indication, Unsigned32, code 2826, section 5.3.113 */ + { + struct dict_avp_data data = { + 2826, /* Code */ + 10415, /* Vendor */ + "PCSCF-Restoration-Indication", /* 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); + }; + + /*==================================================================*/ + /* 3GPP TS 29.212 Table 5a.3.0.1: Gxx specific Diameter AVPs */ + /*==================================================================*/ + + /* QoS-Rule-Install, Grouped, code 1051, section 5a.3.1 */ + { + 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, Grouped, code 1052, section 5a.3.2 */ + { + 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, Grouped, code 1053, section 5a.3.3 */ + { + 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, OctetString, code 1054, section 5a.3.4 */ + { + 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, UTF8String, code 1074, section 5a.3.7 */ + { + 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, Grouped, code 1055, section 5a.3.5 */ + { + 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, Enumerated, code 1064, section 5a.3.6 */ + { + 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, "Enumerated(3GPP/Session-Linking-Indicator)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /*==================================================================*/ + /* 3GPP TS 29.212 Table 5b.3.0.1: Sd specific Diameter AVPs */ + /*==================================================================*/ + + /* Change-1.4.0: ADC-Rule-Base-Name (1095) flag M MUST. */ + /* ADC-Rule-Base-Name, UTF8String, code 1095, section 5b.3.4 */ + { + 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 |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL); + }; + + /* Change-1.4.0: ADC-Rule-Definition (1094) flag M MUST. */ + /* ADC-Rule-Definition, Grouped, code 1094, section 5b.3.3 */ + { + struct dict_avp_data data = { + 1094, /* Code */ + 10415, /* Vendor */ + "ADC-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); + }; + + /* Change-1.4.0: ADC-Rule-Install (1092) flag M MUST. */ + /* ADC-Rule-Install, Grouped, code 1092, section 5b.3.1 */ + { + struct dict_avp_data data = { + 1092, /* Code */ + 10415, /* Vendor */ + "ADC-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); + }; + + /* Change-1.4.0: ADC-Rule-Name (1096) flag M MUST. */ + /* ADC-Rule-Name, OctetString, code 1096, section 5b.3.5 */ + { + struct dict_avp_data data = { + 1096, /* Code */ + 10415, /* Vendor */ + "ADC-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); + }; + + /* Change-1.4.0: ADC-Rule-Remove (1093) flag M MUST. */ + /* ADC-Rule-Remove, Grouped, code 1093, section 5b.3.2 */ + { + struct dict_avp_data data = { + 1093, /* Code */ + 10415, /* Vendor */ + "ADC-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); + }; + + /* Change-1.4.0: ADC-Rule-Report (1097) flag M MUST. */ + /* ADC-Rule-Report, Grouped, code 1097, section 5b.3.6 */ + { + struct dict_avp_data data = { + 1097, /* Code */ + 10415, /* Vendor */ + "ADC-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); + }; + + /*==================================================================*/ + /* 3GPP TS 29.212 Table 5c.3.1.1: St specific Diameter AVPs */ + /*==================================================================*/ + + /* Request-Type, Unsigned32, code 2838, section 5c.3.2 */ + { + struct dict_avp_data data = { + 2838, /* Code */ + 10415, /* Vendor */ + "Request-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); + }; + + /*==================================================================*/ + /* 3GPP TS 29.212 Table E.6.3.1.1: S15 specific Diameter AVPs */ + /*==================================================================*/ + + /* CS-Service-Qos-Request-Identifier, OctetString, code 2807, section E.6.3.2 */ + { + 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, Enumerated, code 2808, section E.6.3.3 */ + { + 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, "Enumerated(3GPP/CS-Service-QoS-Request-Operation)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* CS-Service-Resource-Report, Grouped, code 2813, section E.6.3.6 */ + { + struct dict_avp_data data = { + 2813, /* Code */ + 10415, /* Vendor */ + "CS-Service-Resource-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); + }; + + /* CS-Service-Resource-Failure-Cause, Enumerated, code 2814, section E.6.3.5 */ + { + struct dict_avp_data data = { + 2814, /* Code */ + 10415, /* Vendor */ + "CS-Service-Resource-Failure-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, "Enumerated(3GPP/CS-Service-Resource-Failure-Cause)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* CS-Service-Resource-Result-Operation, Enumerated, code 2815, section E.6.3.4 */ + { + struct dict_avp_data data = { + 2815, /* Code */ + 10415, /* Vendor */ + "CS-Service-Resource-Result-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, "Enumerated(3GPP/CS-Service-Resource-Result-Operation)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /*==================================================================*/ + /* 3GPP TS 29.214 V15.7.0 (2019-09) */ + /* Policy and Charging Control over Rx reference point */ + /* */ + /* From 3GPP 29214-f70.doc */ + /*==================================================================*/ + + /*==================================================================*/ + /* 3GPP TS 29.214 Table 5.3.0.1: Rx specific Diameter AVPs */ + /*==================================================================*/ + + /* Abort-Cause, Enumerated, code 500, section 5.3.1 */ + { + 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, "Enumerated(3GPP/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, Address, code 501, section 5.3.2 */ + { + 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, Grouped, code 502, section 5.3.3 */ + { + 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, OctetString, code 503, section 5.3.4 */ + { + 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, Grouped, code 526, section 5.3.24 */ + { + 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, OctetString, code 504, section 5.3.5 */ + { + 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, OctetString, code 505, section 5.3.6 */ + { + 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); + }; + + /* AF-Requested-Data, Unsigned32, code 551, section 5.3.50 */ + { + struct dict_avp_data data = { + 551, /* Code */ + 10415, /* Vendor */ + "AF-Requested-Data", /* 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); + }; + + /* AF-Signalling-Protocol, Enumerated, code 529, section 5.3.26 */ + { + 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, "Enumerated(3GPP/AF-Signalling-Protocol)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Application-Service-Provider-Identity, UTF8String, code 532, section 5.3.29 */ + { + 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, OctetString, code 524, section 5.3.7 */ + { + 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); + }; + + /* Content-Version, Unsigned64, code 552, section 5.3.49 */ + { + struct dict_avp_data data = { + 552, /* Code */ + 10415, /* Vendor */ + "Content-Version", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_UNSIGNED64 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Extended-Max-Requested-BW-DL, Unsigned32, code 554, section 5.3.52 */ + { + struct dict_avp_data data = { + 554, /* Code */ + 10415, /* Vendor */ + "Extended-Max-Requested-BW-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); + }; + + /* Extended-Max-Requested-BW-UL, Unsigned32, code 555, section 5.3.53 */ + { + struct dict_avp_data data = { + 555, /* Code */ + 10415, /* Vendor */ + "Extended-Max-Requested-BW-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); + }; + + /* Extended-Max-Supported-BW-DL, Unsigned32, code 556, section 5.3.54 */ + { + struct dict_avp_data data = { + 556, /* Code */ + 10415, /* Vendor */ + "Extended-Max-Supported-BW-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); + }; + + /* Extended-Max-Supported-BW-UL, Unsigned32, code 557, section 5.3.55 */ + { + struct dict_avp_data data = { + 557, /* Code */ + 10415, /* Vendor */ + "Extended-Max-Supported-BW-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); + }; + + /* Extended-Min-Desired-BW-DL, Unsigned32, code 558, section 5.3.56 */ + { + struct dict_avp_data data = { + 558, /* Code */ + 10415, /* Vendor */ + "Extended-Min-Desired-BW-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); + }; + + /* Extended-Min-Desired-BW-UL, Unsigned32, code 559, section 5.3.57 */ + { + struct dict_avp_data data = { + 559, /* Code */ + 10415, /* Vendor */ + "Extended-Min-Desired-BW-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); + }; + + /* Extended-Min-Requested-BW-DL, Unsigned32, code 560, section 5.3.58 */ + { + struct dict_avp_data data = { + 560, /* Code */ + 10415, /* Vendor */ + "Extended-Min-Requested-BW-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); + }; + + /* Extended-Min-Requested-BW-UL, Unsigned32, code 561, section 5.3.59 */ + { + struct dict_avp_data data = { + 561, /* Code */ + 10415, /* Vendor */ + "Extended-Min-Requested-BW-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); + }; + + /* Flow-Description, IPFilterRule, code 507, section 5.3.8 */ + { + 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, Unsigned32, code 509, section 5.3.9 */ + { + 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, Grouped, code 510, section 5.3.10 */ + { + 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, Enumerated, code 511, section 5.3.11 */ + { + 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, "Enumerated(3GPP/Flow-Status)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Flow-Usage, Enumerated, code 512, section 5.3.12 */ + { + 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, "Enumerated(3GPP/Flow-Usage)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* GCS-Identifier, OctetString, code 538, section 5.3.36 */ + { + struct dict_avp_data data = { + 538, /* Code */ + 10415, /* Vendor */ + "GCS-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); + }; + + /* Note: 3GPP TS 29.214 Table 5.3.0.1 row IMS-Content-Identifier (563) */ + /* missing M, assume MUST NOT. */ + /* */ + /* Fix: IMS-Content-Identifier (563) flag M MUST NOT. */ + /* IMS-Content-Identifier, OctetString, code 563, section 5.3.60 */ + { + struct dict_avp_data data = { + 563, /* Code */ + 10415, /* Vendor */ + "IMS-Content-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); + }; + + /* Note: 3GPP TS 29.214 Table 5.3.0.1 row IMS-Content (564) */ + /* missing M, assume MUST NOT. */ + /* */ + /* Fix: IMS-Content (564) flag M MUST NOT. */ + /* IMS-Content-Type, Enumerated, code 564, section 5.3.61 */ + { + struct dict_avp_data data = { + 564, /* Code */ + 10415, /* Vendor */ + "IMS-Content-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, "Enumerated(3GPP/IMS-Content-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* IP-Domain-Id, OctetString, code 537, section 5.3.35 */ + { + 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); + }; + + /* Max-Requested-Bandwidth-DL, Unsigned32, code 515, section 5.3.14 */ + { + 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, Unsigned32, code 516, section 5.3.15 */ + { + 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); + }; + + /* Max-Supported-Bandwidth-DL, Unsigned32, code 543, section 5.3.41 */ + { + struct dict_avp_data data = { + 543, /* Code */ + 10415, /* Vendor */ + "Max-Supported-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); + }; + + /* Max-Supported-Bandwidth-UL, Unsigned32, code 544, section 5.3.42 */ + { + struct dict_avp_data data = { + 544, /* Code */ + 10415, /* Vendor */ + "Max-Supported-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); + }; + + /* MCPTT-Identifier, OctetString, code 547, section 5.3.45 */ + { + struct dict_avp_data data = { + 547, /* Code */ + 10415, /* Vendor */ + "MCPTT-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); + }; + + /* MCVideo-Identifier, OctetString, code 562, section 5.3.45a */ + { + struct dict_avp_data data = { + 562, /* Code */ + 10415, /* Vendor */ + "MCVideo-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); + }; + + /* Media-Component-Description, Grouped, code 517, section 5.3.16 */ + { + 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, Unsigned32, code 518, section 5.3.17 */ + { + 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-Component-Status, Unsigned32, code 549, section 5.3.48 */ + { + struct dict_avp_data data = { + 549, /* Code */ + 10415, /* Vendor */ + "Media-Component-Status", /* 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); + }; + + /* Media-Sub-Component, Grouped, code 519, section 5.3.18 */ + { + 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, Enumerated, code 520, section 5.3.19 */ + { + 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, "Enumerated(3GPP/Media-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* MPS-Identifier, OctetString, code 528, section 5.3.30 */ + { + 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-Desired-Bandwidth-DL, Unsigned32, code 545, section 5.3.43 */ + { + struct dict_avp_data data = { + 545, /* Code */ + 10415, /* Vendor */ + "Min-Desired-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-Desired-Bandwidth-UL, Unsigned32, code 546, section 5.3.44 */ + { + struct dict_avp_data data = { + 546, /* Code */ + 10415, /* Vendor */ + "Min-Desired-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); + }; + + /* Min-Requested-Bandwidth-DL, Unsigned32, code 534, section 5.3.32 */ + { + 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, Unsigned32, code 535, section 5.3.33 */ + { + 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); + }; + + /* Priority-Sharing-Indicator, Enumerated, code 550, section 5.3.47 */ + { + struct dict_avp_data data = { + 550, /* Code */ + 10415, /* Vendor */ + "Priority-Sharing-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, "Enumerated(3GPP/Priority-Sharing-Indicator)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Pre-emption-Control-Info, Unsigned32, code 553, section 5.3.51 */ + { + struct dict_avp_data data = { + 553, /* Code */ + 10415, /* Vendor */ + "Pre-emption-Control-Info", /* 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); + }; + + /* Required-Access-Info, Enumerated, code 536, section 5.3.34 */ + { + 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, "Enumerated(3GPP/Required-Access-Info)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Retry-Interval, Unsigned32, code 541, section 5.3.39 */ + { + struct dict_avp_data data = { + 541, /* Code */ + 10415, /* Vendor */ + "Retry-Interval", /* 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); + }; + + /* Rx-Request-Type, Enumerated, code 533, section 5.3.31 */ + { + 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, "Enumerated(3GPP/Rx-Request-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* RR-Bandwidth, Unsigned32, code 521, section 5.3.20 */ + { + 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, Unsigned32, code 522, section 5.3.21 */ + { + 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-Authorization-Info, Unsigned32, code 548, section 5.3.46 */ + { + struct dict_avp_data data = { + 548, /* Code */ + 10415, /* Vendor */ + "Service-Authorization-Info", /* 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); + }; + + /* Service-URN, OctetString, code 525, section 5.3.23 */ + { + 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); + }; + + /* Service-Info-Status, Enumerated, code 527, section 5.3.25 */ + { + 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, "Enumerated(3GPP/Service-Info-Status)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Sharing-Key-DL, Unsigned32, code 539, section 5.3.37 */ + { + struct dict_avp_data data = { + 539, /* Code */ + 10415, /* Vendor */ + "Sharing-Key-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); + }; + + /* Sharing-Key-UL, Unsigned32, code 540, section 5.3.38 */ + { + struct dict_avp_data data = { + 540, /* Code */ + 10415, /* Vendor */ + "Sharing-Key-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); + }; + + /* Specific-Action, Enumerated, code 513, section 5.3.13 */ + { + 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, "Enumerated(3GPP/Specific-Action)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* SIP-Forking-Indication, Enumerated, code 523, section 5.3.22 */ + { + 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, "Enumerated(3GPP/SIP-Forking-Indication)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Sponsor-Identity, UTF8String, code 531, section 5.3.28 */ + { + 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, Grouped, code 530, section 5.3.27 */ + { + 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); + }; + + /* Sponsoring-Action, Enumerated, code 542, section 5.3.40 */ + { + struct dict_avp_data data = { + 542, /* Code */ + 10415, /* Vendor */ + "Sponsoring-Action", /* 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, "Enumerated(3GPP/Sponsoring-Action)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /*==================================================================*/ + /* 3GPP TS 29.215 V15.2.0 (2019-09) */ + /* Policy and Charging Control (PCC) over S9 reference point; */ + /* Stage 3 */ + /* */ + /* From 3GPP 29215-f20.doc */ + /*==================================================================*/ + + /*==================================================================*/ + /* 3GPP TS 29.215 Table 5.3.0.1: S9 specific Diameter AVPs */ + /*==================================================================*/ + + /* DRA-Deployment, Enumerated, code 2206, section 5.3.7 */ + { + struct dict_avp_data data = { + 2206, /* Code */ + 10415, /* Vendor */ + "DRA-Deployment", /* 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, "Enumerated(3GPP/DRA-Deployment)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Multiple-BBERF-Action, Enumerated, code 2204, section 5.3.6 */ + { + struct dict_avp_data data = { + 2204, /* Code */ + 10415, /* Vendor */ + "Multiple-BBERF-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, "Enumerated(3GPP/Multiple-BBERF-Action)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Subsession-Decision-Info, Grouped, code 2200, section 5.3.1 */ + { + struct dict_avp_data data = { + 2200, /* Code */ + 10415, /* Vendor */ + "Subsession-Decision-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); + }; + + /* Subsession-Enforcement-Info, Grouped, code 2201, section 5.3.2 */ + { + struct dict_avp_data data = { + 2201, /* Code */ + 10415, /* Vendor */ + "Subsession-Enforcement-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); + }; + + /* Subsession-Id, Unsigned32, code 2202, section 5.3.3 */ + { + struct dict_avp_data data = { + 2202, /* Code */ + 10415, /* Vendor */ + "Subsession-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); + }; + + /* Subsession-Operation, Enumerated, code 2203, section 5.3.4 */ + { + struct dict_avp_data data = { + 2203, /* Code */ + 10415, /* Vendor */ + "Subsession-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, "Enumerated(3GPP/Subsession-Operation)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* DRA-Binding, Enumerated, code 2208, section 5.3.x */ + { + struct dict_avp_data data = { + 2208, /* Code */ + 10415, /* Vendor */ + "DRA-Binding", /* 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, "Enumerated(3GPP/DRA-Binding)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /*==================================================================*/ + /* 3GPP TS 29.215 Table A.7.3.1.1: S9a specific Diameter AVPs */ + /*==================================================================*/ + + /* PCRF-Address, DiameterIdentity, code 2207, section A.7.3.1.1 */ + { + struct dict_avp_data data = { + 2207, /* Code */ + 10415, /* Vendor */ + "PCRF-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, DiameterIdentity_type, NULL); + }; + + /*==================================================================*/ + /* 3GPP TS 29.215 Table A.8.3.1.1: S9a* specific Diameter AVPs */ + /*==================================================================*/ + + /* UE-Local-IPv6-Prefix, OctetString, code 2205, section A.8.3.1 */ + { + struct dict_avp_data data = { + 2205, /* Code */ + 10415, /* Vendor */ + "UE-Local-IPv6-Prefix", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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 TS 29.217 V15.1.0 (2019-09) */ + /* Policy and Charging Control (PCC); */ + /* Congestion reporting over Np reference point */ + /* */ + /* From 3GPP 29217-f10.doc */ + /*==================================================================*/ + + /*==================================================================*/ + /* 3GPP TS 29.217 Table 5.3.1.1: Np specific Diameter AVPs */ + /*==================================================================*/ + + /* Aggregated-Congestion-Info, Grouped, code 4000, section 5.3.2 */ + { + struct dict_avp_data data = { + 4000, /* Code */ + 10415, /* Vendor */ + "Aggregated-Congestion-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); + }; + + /* Aggregated-RUCI-Report, Grouped, code 4001, section 5.3.3 */ + { + struct dict_avp_data data = { + 4001, /* Code */ + 10415, /* Vendor */ + "Aggregated-RUCI-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); + }; + + /* Congestion-Level-Definition, Grouped, code 4002, section 5.3.4 */ + { + struct dict_avp_data data = { + 4002, /* Code */ + 10415, /* Vendor */ + "Congestion-Level-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); + }; + + /* Congestion-Level-Range, Unsigned32, code 4003, section 5.3.5 */ + { + struct dict_avp_data data = { + 4003, /* Code */ + 10415, /* Vendor */ + "Congestion-Level-Range", /* 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); + }; + + /* Congestion-Level-Set-Id, Unsigned32, code 4004, section 5.3.6 */ + { + struct dict_avp_data data = { + 4004, /* Code */ + 10415, /* Vendor */ + "Congestion-Level-Set-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); + }; + + /* Congestion-Level-Value, Unsigned32, code 4005, section 5.3.7 */ + { + struct dict_avp_data data = { + 4005, /* Code */ + 10415, /* Vendor */ + "Congestion-Level-Value", /* 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); + }; + + /* Congestion-Location-Id, Grouped, code 4006, section 5.3.8 */ + { + struct dict_avp_data data = { + 4006, /* Code */ + 10415, /* Vendor */ + "Congestion-Location-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); + }; + + /* Conditional-Restriction, Unsigned32, code 4007, section 5.3.9 */ + { + struct dict_avp_data data = { + 4007, /* Code */ + 10415, /* Vendor */ + "Conditional-Restriction", /* 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); + }; + + /* eNodeB-Id, OctetString, code 4008, section 5.3.10 */ + { + struct dict_avp_data data = { + 4008, /* Code */ + 10415, /* Vendor */ + "eNodeB-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); + }; + + /* IMSI-List, OctetString, code 4009, section 5.3.11 */ + { + struct dict_avp_data data = { + 4009, /* Code */ + 10415, /* Vendor */ + "IMSI-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); + }; + + /* RCAF-Id, DiameterIdentity, code 4010, section 5.3.12 */ + { + struct dict_avp_data data = { + 4010, /* Code */ + 10415, /* Vendor */ + "RCAF-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, DiameterIdentity_type, NULL); + }; + + /* Reporting-Restriction, Unsigned32, code 4011, section 5.3.13 */ + { + struct dict_avp_data data = { + 4011, /* Code */ + 10415, /* Vendor */ + "Reporting-Restriction", /* 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); + }; + + /* RUCI-Action, Unsigned32, code 4012, section 5.3.14 */ + { + struct dict_avp_data data = { + 4012, /* Code */ + 10415, /* Vendor */ + "RUCI-Action", /* 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); + }; + + /* Extended-eNodeB-Id, OctetString, code 4013, section 5.3.15 */ + { + struct dict_avp_data data = { + 4013, /* Code */ + 10415, /* Vendor */ + "Extended-eNodeB-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 TS 29.219 V15.3.0 (2019-09) */ + /* Policy and Charging Control: Spending Limit Reporting over */ + /* Sy reference point */ + /* */ + /* From 3GPP 29219-f30.doc */ + /*==================================================================*/ + + /*==================================================================*/ + /* 3GPP TS 29.219 Table 5.3.0.1: Sy specific Diameter AVPs */ + /*==================================================================*/ + + /* Pending-Policy-Counter-Information, Grouped, code 2905, section 5.3.5 */ + { + struct dict_avp_data data = { + 2905, /* Code */ + 10415, /* Vendor */ + "Pending-Policy-Counter-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); + }; + + /* Pending-Policy-Counter-Change-Time, Time, code 2906, section 5.3.6 */ + { + struct dict_avp_data data = { + 2906, /* Code */ + 10415, /* Vendor */ + "Pending-Policy-Counter-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); + }; + + /* Policy-Counter-Identifier, UTF8String, code 2901, section 5.3.1 */ + { + struct dict_avp_data data = { + 2901, /* Code */ + 10415, /* Vendor */ + "Policy-Counter-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); + }; + + /* Policy-Counter-Status, UTF8String, code 2902, section 5.3.2 */ + { + struct dict_avp_data data = { + 2902, /* Code */ + 10415, /* Vendor */ + "Policy-Counter-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); + }; + + /* Policy-Counter-Status-Report, Grouped, code 2903, section 5.3.3 */ + { + struct dict_avp_data data = { + 2903, /* Code */ + 10415, /* Vendor */ + "Policy-Counter-Status-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); + }; + + /* SL-Request-Type, Enumerated, code 2904, section 5.3.4 */ + { + struct dict_avp_data data = { + 2904, /* Code */ + 10415, /* Vendor */ + "SL-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, "Enumerated(3GPP/SL-Request-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* SN-Request-Type, Unsigned32, code 2907, section 5.3.7 */ + { + struct dict_avp_data data = { + 2907, /* Code */ + 10415, /* Vendor */ + "SN-Request-Type", /* 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); + }; + + /*==================================================================*/ + /* 3GPP TS 29.229 V15.2.0 (2019-09) */ + /* Cx and Dx interfaces based on the Diameter protocol; */ + /* Protocol details */ + /* */ + /* From 3GPP 29229-f20.doc */ + /*==================================================================*/ + + /*==================================================================*/ + /* 3GPP TS 29.229 Table 6.3.1: Diameter Multimedia Application AVPs */ + /* */ + /* Note: AVPs referenced from other sources are not added here. */ + /*==================================================================*/ + + /* Visited-Network-Identifier, OctetString, code 600, section 6.3.1 */ + { + 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); + }; + + /* Public-Identity, UTF8String, code 601, section 6.3.2 */ + { + 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); + }; + + /* Server-Name, UTF8String, code 602, section 6.3.3 */ + { + 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); + }; + + /* Server-Capabilities, Grouped, code 603, section 6.3.4 */ + { + 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); + }; + + /* Mandatory-Capability, Unsigned32, code 604, section 6.3.5 */ + { + 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); + }; + + /* Optional-Capability, Unsigned32, code 605, section 6.3.6 */ + { + 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); + }; + + /* Note: Name conflict with 3GPP TS 29.329 User-Data (702). */ + /* 3GPP TS 29.229 V6.2.0 (2004-09) allocated User-Data (606). */ + /* 3GPP TS 29.329 V6.2.0 (2004-09) allocated User-Data (702). */ + /* User-Data, OctetString, code 606, section 6.3.7 */ + { + 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); + }; + + /* SIP-Number-Auth-Items, Unsigned32, code 607, section 6.3.8 */ + { + 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); + }; + + /* SIP-Authentication-Scheme, UTF8String, code 608, section 6.3.9 */ + { + 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-Authenticate, OctetString, code 609, section 6.3.10 */ + { + 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-Authorization, OctetString, code 610, section 6.3.11 */ + { + 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-Authentication-Context, OctetString, code 611, section 6.3.12 */ + { + 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-Auth-Data-Item, Grouped, code 612, section 6.3.13 */ + { + 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-Item-Number, Unsigned32, code 613, section 6.3.14 */ + { + 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); + }; + + /* Server-Assignment-Type, Enumerated, code 614, section 6.3.15 */ + { + 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, "Enumerated(3GPP/Server-Assignment-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Deregistration-Reason, Grouped, code 615, section 6.3.16 */ + { + 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); + }; + + /* Reason-Code, Enumerated, code 616, section 6.3.17 */ + { + 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, "Enumerated(3GPP/Reason-Code)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Reason-Info, UTF8String, code 617, section 6.3.18 */ + { + 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); + }; + + /* Charging-Information, Grouped, code 618, section 6.3.19 */ + { + 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); + }; + + /* Primary-Event-Charging-Function-Name, DiameterURI, code 619, section 6.3.20 */ + { + 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); + }; + + /* Secondary-Event-Charging-Function-Name, DiameterURI, code 620, section 6.3.21 */ + { + 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); + }; + + /* Primary-Charging-Collection-Function-Name, DiameterURI, code 621, section 6.3.22 */ + { + 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); + }; + + /* Secondary-Charging-Collection-Function-Name, DiameterURI, code 622, section 6.3.23 */ + { + 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); + }; + + /* User-Authorization-Type, Enumerated, code 623, section 6.3.24 */ + { + 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, "Enumerated(3GPP/User-Authorization-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* User-Data-Already-Available, Enumerated, code 624, section 6.3.26 */ + { + 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, "Enumerated(3GPP/User-Data-Already-Available)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Confidentiality-Key, OctetString, code 625, section 6.3.27 */ + { + 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); + }; + + /* Integrity-Key, OctetString, code 626, section 6.3.28 */ + { + 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); + }; + + /* Note: User-Data-Request-Type (627) removed in 3GPP TS 29.229 V6.5.0 (2005-06). */ + + /* Supported-Features, Grouped, code 628, section 6.3.29 */ + { + 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); + }; + + /* Feature-List-ID, Unsigned32, code 629, section 6.3.30 */ + { + 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); + }; + + /* Feature-List, Unsigned32, code 630, section 6.3.31 */ + { + 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); + }; + + /* Supported-Applications, Grouped, code 631, section 6.3.32 */ + { + 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); + }; + + /* Associated-Identities, Grouped, code 632, section 6.3.33 */ + { + 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); + }; + + /* Originating-Request, Enumerated, code 633, section 6.3.34 */ + { + 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, "Enumerated(3GPP/Originating-Request)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Wildcarded-Public-Identity, UTF8String, code 634, section 6.3.35 */ + { + 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); + }; + + /* SIP-Digest-Authenticate, Grouped, code 635, section 6.3.36 */ + { + 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); + }; + + /* Wildcarded-IMPU, UTF8String, code 636, section 6.3.43 */ + { + 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); + }; + + /* UAR-Flags, Unsigned32, code 637, section 6.3.44 */ + { + 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); + }; + + /* Loose-Route-Indication, Enumerated, code 638, section 6.3.45 */ + { + 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, "Enumerated(3GPP/Loose-Route-Indication)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* SCSCF-Restoration-Info, Grouped, code 639, section 6.3.46 */ + { + 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); + }; + + /* Path, OctetString, code 640, section 6.3.47 */ + { + 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); + }; + + /* Contact, OctetString, code 641, section 6.3.48 */ + { + 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); + }; + + /* Subscription-Info, Grouped, code 642, section 6.3.49 */ + { + 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); + }; + + /* Call-ID-SIP-Header, OctetString, code 643, section 6.3.49.1 */ + { + 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); + }; + + /* From-SIP-Header, OctetString, code 644, section 6.3.49.2 */ + { + 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); + }; + + /* To-SIP-Header, OctetString, code 645, section 6.3.49.3 */ + { + 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); + }; + + /* Record-Route, OctetString, code 646, section 6.3.49.4 */ + { + 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); + }; + + /* Associated-Registered-Identities, Grouped, code 647, section 6.3.50 */ + { + 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); + }; + + /* Multiple-Registration-Indication, Enumerated, code 648, section 6.3.51 */ + { + 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, "Enumerated(3GPP/Multiple-Registration-Indication)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Restoration-Info, Grouped, code 649, section 6.3.52 */ + { + 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); + }; + + /* Session-Priority, Enumerated, code 650, section 6.3.56 */ + { + 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, "Enumerated(3GPP/Session-Priority)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Identity-with-Emergency-Registration, Grouped, code 651, section 6.3.57 */ + { + 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); + }; + + /* Priviledged-Sender-Indication, Enumerated, code 652, section 6.3.58 */ + { + 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, "Enumerated(3GPP/Priviledged-Sender-Indication)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* LIA-Flags, Unsigned32, code 653, section 6.3.59 */ + { + 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); + }; + + /* Initial-CSeq-Sequence-Number, Unsigned32, code 654, section 6.3.62 */ + { + struct dict_avp_data data = { + 654, /* Code */ + 10415, /* Vendor */ + "Initial-CSeq-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); + }; + + /* SAR-Flags, Unsigned32, code 655, section 6.3.63 */ + { + struct dict_avp_data data = { + 655, /* Code */ + 10415, /* Vendor */ + "SAR-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); + }; + + /* Allowed-WAF-WWSF-Identities, Grouped, code 656, section 6.3.64 */ + { + struct dict_avp_data data = { + 656, /* Code */ + 10415, /* Vendor */ + "Allowed-WAF-WWSF-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); + }; + + /* WebRTC-Authentication-Function-Name, UTF8String, code 657, section 6.3.65 */ + { + struct dict_avp_data data = { + 657, /* Code */ + 10415, /* Vendor */ + "WebRTC-Authentication-Function-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); + }; + + /* WebRTC-Web-Server-Function-Name, UTF8String, code 658, section 6.3.66 */ + { + struct dict_avp_data data = { + 658, /* Code */ + 10415, /* Vendor */ + "WebRTC-Web-Server-Function-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); + }; + + /* RTR-Flags, Unsigned32, code 659, section 6.3.69 */ + { + struct dict_avp_data data = { + 659, /* Code */ + 10415, /* Vendor */ + "RTR-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); + }; + + /*==================================================================*/ + /* 3GPP TS 29.234 V11.2.0 (2013-06) */ + /* 3GPP system to Wireless Local Area Network (WLAN) */ + /* interworking; */ + /* Stage 3 */ + /* */ + /* From 3GPP 29234-b20.doc */ + /*==================================================================*/ + + /*==================================================================*/ + /* 3GPP TS 29.234 Table 10.1.1: Diameter Multimedia Application AVPs */ + /*==================================================================*/ + + /* 3GPP-WLAN-APN-Id, OctetString, code 100, section 10.1.15 */ + { + struct dict_avp_data data = { + 100, /* Code */ + 10415, /* Vendor */ + "3GPP-WLAN-APN-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); + }; + + /* Authentication-Method, Enumerated, code 300, section 10.1.5 */ + { + struct dict_avp_data data = { + 300, /* Code */ + 10415, /* Vendor */ + "Authentication-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, "Enumerated(3GPP/Authentication-Method)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Authentication-Information-SIM, OctetString, code 301, section 10.1.6 */ + { + struct dict_avp_data data = { + 301, /* Code */ + 10415, /* Vendor */ + "Authentication-Information-SIM", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); + }; + + /* Authorization-Information-SIM, OctetString, code 302, section 10.1.7 */ + { + struct dict_avp_data data = { + 302, /* Code */ + 10415, /* Vendor */ + "Authorization-Information-SIM", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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-User-Data, Grouped, code 303, section 10.1.8 */ + { + struct dict_avp_data data = { + 303, /* Code */ + 10415, /* Vendor */ + "WLAN-User-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); + }; + + /* Charging-Data, Grouped, code 304, section 10.1.10 */ + { + struct dict_avp_data data = { + 304, /* Code */ + 10415, /* Vendor */ + "Charging-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); + }; + + /* WLAN-Access, Enumerated, code 305, section 10.1.11 */ + { + struct dict_avp_data data = { + 305, /* Code */ + 10415, /* Vendor */ + "WLAN-Access", /* 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, "Enumerated(3GPP/WLAN-Access)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* WLAN-3GPP-IP-Access, Enumerated, code 306, section 10.1.12 */ + { + struct dict_avp_data data = { + 306, /* Code */ + 10415, /* Vendor */ + "WLAN-3GPP-IP-Access", /* 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, "Enumerated(3GPP/WLAN-3GPP-IP-Access)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* APN-Authorized, Grouped, code 307, section 10.1.14 */ + { + struct dict_avp_data data = { + 307, /* Code */ + 10415, /* Vendor */ + "APN-Authorized", /* 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); + }; + + /* Note: APN-Id (308) OctetString removed in 3GPP TS 29.234 V6.5.0 (2005-12). */ + + /* APN-Barring-Type, Enumerated, code 309, section 10.1.16 */ + { + struct dict_avp_data data = { + 309, /* Code */ + 10415, /* Vendor */ + "APN-Barring-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, "Enumerated(3GPP/APN-Barring-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* WLAN-Direct-IP-Access, Enumerated, code 310, section 10.1.17 */ + { + struct dict_avp_data data = { + 310, /* Code */ + 10415, /* Vendor */ + "WLAN-Direct-IP-Access", /* 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, "Enumerated(3GPP/WLAN-Direct-IP-Access)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Session-Request-Type, Enumerated, code 311, section 10.1.23 */ + { + struct dict_avp_data data = { + 311, /* Code */ + 10415, /* Vendor */ + "Session-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, "Enumerated(3GPP/Session-Request-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Routing-Policy, IPFilterRule, code 312, section 10.1.24 */ + { + struct dict_avp_data data = { + 312, /* Code */ + 10415, /* Vendor */ + "Routing-Policy", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); + }; + + /* Max-Requested-Bandwidth, OctetString, code 313, section 10.1.26 */ + { + struct dict_avp_data data = { + 313, /* Code */ + 10415, /* Vendor */ + "Max-Requested-Bandwidth", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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-Characteristics, Integer32, code 314, section 10.1.27 */ + { + struct dict_avp_data data = { + 314, /* Code */ + 10415, /* Vendor */ + "Charging-Characteristics", /* 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); + }; + + /* Charging-Nodes, Grouped, code 315, section 10.1.28 */ + { + struct dict_avp_data data = { + 315, /* Code */ + 10415, /* Vendor */ + "Charging-Nodes", /* 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); + }; + + /* Primary-OCS-Charging-Function-Name, DiameterIdentity, code 316, section 10.1.29 */ + { + struct dict_avp_data data = { + 316, /* Code */ + 10415, /* Vendor */ + "Primary-OCS-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, DiameterIdentity_type, NULL); + }; + + /* Secondary-OCS-Charging-Function-Name, DiameterIdentity, code 317, section 10.1.30 */ + { + struct dict_avp_data data = { + 317, /* Code */ + 10415, /* Vendor */ + "Secondary-OCS-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, DiameterIdentity_type, NULL); + }; + + /* Note: 3GPP TS 29.273 from Release 12 now defines 3GPP-AAA-Server-Name (318). */ + /* */ + /* Maximum-Number-Accesses, Unsigned32, code 319, section 10.1.38 */ + { + struct dict_avp_data data = { + 319, /* Code */ + 10415, /* Vendor */ + "Maximum-Number-Accesses", /* 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); + }; + + /*==================================================================*/ + /* 3GPP TS 29.272 V15.10.0 (2019-12) */ + /* Mobility Management Entity (MME) */ + /* and Serving GPRS Support Node (SGSN) related interfaces */ + /* based on Diameter protocol */ + /* */ + /* From 3GPP 29272-fa0.docx */ + /*==================================================================*/ + + /*==================================================================*/ + /* 3GPP TS 29.272 Table 7.3.1/1: S6a/S6d, S7a/S7d and S13/S13' specific DiameterAVPs */ + /*==================================================================*/ + + /* Subscription-Data, Grouped, code 1400, section 7.3.2 */ + { + 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, Grouped, code 1401, section 7.3.3 */ + { + 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, UTF8String, code 1402, section 7.3.4 */ + { + 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, UTF8String, code 1403, section 7.3.5 */ + { + 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, OctetString, code 1404, section 7.3.77 */ + { + 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, Unsigned32, code 1405, section 7.3.7 */ + { + 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, Unsigned32, code 1406, section 7.3.8 */ + { + 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, OctetString, code 1407, section 7.3.9 */ + { + 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, Grouped, code 1408, section 7.3.11 */ + { + 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, Grouped, code 1409, section 7.3.12 */ + { + 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, Unsigned32, code 1410, section 7.3.14 */ + { + 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, OctetString, code 1411, section 7.3.15 */ + { + 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, Unsigned32, code 1412, section 7.3.16 */ + { + 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, Grouped, code 1413, section 7.3.17 */ + { + 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, Grouped, code 1414, section 7.3.18 */ + { + 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, Grouped, code 1415, section 7.3.19 */ + { + 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, Grouped, code 1416, section 7.3.20 */ + { + 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, Enumerated, code 1417, section 7.3.21 */ + { + 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, "Enumerated(3GPP/Network-Access-Mode)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* HPLMN-ODB, Unsigned32, code 1418, section 7.3.22 */ + { + 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, Unsigned32, code 1419, section 7.3.23 */ + { + 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, Enumerated, code 1420, section 7.3.24 */ + { + 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, "Enumerated(3GPP/Cancellation-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* DSR-Flags, Unsigned32, code 1421, section 7.3.25 */ + { + 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, Unsigned32, code 1422, section 7.3.26 */ + { + 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, Unsigned32, code 1423, section 7.3.27 */ + { + 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, Enumerated, code 1424, section 7.3.29 */ + { + 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, "Enumerated(3GPP/Subscriber-Status)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Operator-Determined-Barring, Unsigned32, code 1425, section 7.3.30 */ + { + 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, Unsigned32, code 1426, section 7.3.31 */ + { + 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, UTF8String, code 1427, section 7.3.32 */ + { + 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, Enumerated, code 1428, section 7.3.33 */ + { + 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, "Enumerated(3GPP/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, Grouped, code 1429, section 7.3.34 */ + { + 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, Grouped, code 1430, section 7.3.35 */ + { + 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, Grouped, code 1431, section 7.3.37 */ + { + 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, Enumerated, code 1432, section 7.3.38 */ + { + 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, "Enumerated(3GPP/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, OctetString, code 1433, section 7.3.39 */ + { + 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, Enumerated, code 1434, section 7.3.83 */ + { + 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, "Enumerated(3GPP/Alert-Reason)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* AMBR, Grouped, code 1435, section 7.3.41 */ + { + 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, Grouped, code 1436, section 7.3.78 */ + { + 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, Unsigned32, code 1437, section 7.3.79 */ + { + 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, Enumerated, code 1438, section 7.3.44 */ + { + 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, "Enumerated(3GPP/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, Time, code 1439, section 7.3.80 */ + { + 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, Unsigned32, code 1440, section 7.3.46 */ + { + 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, Unsigned32, code 1441, section 7.3.47 */ + { + 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, Unsigned32, code 1442, section 7.3.48 */ + { + 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, Unsigned32, code 1443, section 7.3.49 */ + { + 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, UTF8String, code 1444, section 7.3.50 */ + { + 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, Enumerated, code 1445, section 7.3.51 */ + { + 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, "Enumerated(3GPP/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, OctetString, code 1446, section 7.3.52 */ + { + 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, OctetString, code 1447, section 7.3.53 */ + { + 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, OctetString, code 1448, section 7.3.54 */ + { + 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, OctetString, code 1449, section 7.3.55 */ + { + 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, OctetString, code 1450, section 7.3.56 */ + { + 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, Address, code 1452, section 7.3.98 */ + { + 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, OctetString, code 1453, section 7.3.59 */ + { + 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, OctetString, code 1454, section 7.3.60 */ + { + 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, Enumerated, code 1456, section 7.3.62 */ + { + 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, "Enumerated(3GPP/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, Enumerated, code 1457, section 7.3.81 */ + { + 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, "Enumerated(3GPP/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, Grouped, code 1458, section 7.3.63 */ + { + 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, OctetString, code 1459, section 7.3.64 */ + { + 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, Enumerated, code 1462, section 7.3.67 */ + { + 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, "Enumerated(3GPP/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, OctetString, code 1463, section 7.3.68 */ + { + 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, OctetString, code 1464, section 7.3.69 */ + { + 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, OctetString, code 1465, section 7.3.70 */ + { + 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, OctetString, code 1466, section 7.3.71 */ + { + 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, Grouped, code 1467, section 7.3.72 */ + { + 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, Enumerated, code 1468, section 7.3.73 */ + { + 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, "Enumerated(3GPP/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, Grouped, code 1469, section 7.3.74 */ + { + 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, OctetString, code 1470, section 7.3.75 */ + { + 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, OctetString, code 1471, section 7.3.6 */ + { + 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, Grouped, code 1472, section 7.3.82 */ + { + 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, Grouped, code 1473, section 7.3.84 */ + { + 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, OctetString, code 1474, section 7.3.85 */ + { + 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, Grouped, code 1475, section 7.3.86 */ + { + 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, OctetString, code 1476, section 7.3.87 */ + { + 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); + }; + + /* Note: 3GPP TS 29.272 V12.5.0 (2014-06) Table 7.3.1/1 */ + /* changed row SS-Status (1477) to be OctetString instead of Grouped. */ + /* Clause 7.3.88 already described SS-Status (1147) as OctetString. */ + /* */ + /* Change-1.4.0: SS-Status (1477) type changed from Grouped to OctetString. */ + /* SS-Status, OctetString, code 1477, section 7.3.88 */ + { + 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_OCTETSTRING /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Notification-To-UE-User, Enumerated, code 1478, section 7.3.89 */ + { + 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, "Enumerated(3GPP/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, Grouped, code 1479, section 7.3.90 */ + { + 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, OctetString, code 1480, section 7.3.91 */ + { + 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, Enumerated, code 1481, section 7.3.92 */ + { + 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, "Enumerated(3GPP/GMLC-Restriction)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* PLMN-Client, Enumerated, code 1482, section 7.3.93 */ + { + 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, "Enumerated(3GPP/PLMN-Client)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Service-Type, Grouped, code 1483, section 7.3.94 */ + { + 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, Unsigned32, code 1484, section 7.3.95 */ + { + 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, Grouped, code 1485, section 7.3.96 */ + { + 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, Grouped, code 1486, section 7.3.99 */ + { + 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, OctetString, code 1487, section 7.3.100 */ + { + 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); + }; + + /* Note: 3GPP TS 29.272 V12.4.0 (2014-03) renamed */ + /* Call-Barring-Infor-List (1488) to Call-Barring-Info (1488). */ + /* */ + /* Change-1.4.0: Call-Barring-Infor-List (1488) renamed to Call-Barring-Info (1488). */ + /* Call-Barring-Info, Grouped, code 1488, section 7.3.101 */ + { + struct dict_avp_data data = { + 1488, /* Code */ + 10415, /* Vendor */ + "Call-Barring-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); + }; + + /* SGSN-Number, OctetString, code 1489, section 7.3.102 */ + { + 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, Unsigned32, code 1490, section 7.3.103 */ + { + 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, Enumerated, code 1491, section 7.3.104 */ + { + 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, "Enumerated(3GPP/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, Enumerated, code 1492, section 7.3.106 */ + { + 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, "Enumerated(3GPP/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, Enumerated, code 1493, section 7.3.107 */ + { + 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, "Enumerated(3GPP/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, Time, code 1494, section 7.3.108 */ + { + 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, Grouped, code 1495, section 7.3.110 */ + { + 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, Grouped, code 1496, section 7.3.111 */ + { + 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, Grouped, code 1497, section 7.3.112 */ + { + 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, Grouped, code 1498, section 7.3.113 */ + { + 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, Enumerated, code 1499, section 7.3.114 */ + { + 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, "Enumerated(3GPP/User-State)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Note: 3GPP TS 29.272 Table 7.3.1/1 row MME-Location-Information (1600) */ + /* incorrectly has a space instead of hyphen in the name. */ + /* */ + /* Change-1.4.0: MME-LocationInformation (1600) renamed to MME-Location-Information(1600). */ + /* MME-Location-Information, Grouped, code 1600, section 7.3.115 */ + { + struct dict_avp_data data = { + 1600, /* Code */ + 10415, /* Vendor */ + "MME-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); + }; + + /* SGSN-Location-Information, Grouped, code 1601, section 7.3.116 */ + { + 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, OctetString, code 1602, section 7.3.117 */ + { + 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, OctetString, code 1603, section 7.3.118 */ + { + 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, OctetString, code 1604, section 7.3.119 */ + { + 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, OctetString, code 1605, section 7.3.120 */ + { + 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, OctetString, code 1606, section 7.3.121 */ + { + 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, OctetString, code 1607, section 7.3.122 */ + { + 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, OctetString, code 1608, section 7.3.123 */ + { + 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, OctetString, code 1609, section 7.3.124 */ + { + 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, Enumerated, code 1610, section 7.3.125 */ + { + 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, "Enumerated(3GPP/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, Unsigned32, code 1611, section 7.3.126 */ + { + 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, Grouped, code 1612, section 7.3.127 */ + { + 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, Enumerated, code 1614, section 7.3.128 */ + { + 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, "Enumerated(3GPP/Error-Diagnostic)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Ext-PDP-Address, Address, code 1621, section 7.3.129 */ + { + 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, Enumerated, code 1615, section 7.3.130 */ + { + 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, "Enumerated(3GPP/UE-SRVCC-Capability)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* MPS-Priority, Unsigned32, code 1616, section 7.3.131 */ + { + 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, Enumerated, code 1617, section 7.3.132 */ + { + 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, "Enumerated(3GPP/VPLMN-LIPA-Allowed)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* LIPA-Permission, Enumerated, code 1618, section 7.3.133 */ + { + 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, "Enumerated(3GPP/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, Unsigned32, code 1619, section 7.3.134 */ + { + 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, OctetString, code 1620, section 7.3.75A */ + { + 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, Enumerated, code 1613, section 7.3.135 */ + { + 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, "Enumerated(3GPP/SIPTO-Permission)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* MDT-Configuration, Grouped, code 1622, section 7.3.136 */ + { + 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, Enumerated, code 1623, section 7.3.137 */ + { + 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, "Enumerated(3GPP/Job-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Area-Scope, Grouped, code 1624, section 7.3.138 */ + { + 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, Unsigned32, code 1625, section 7.3.139 */ + { + 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, Unsigned32, code 1626, section 7.3.140 */ + { + 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, Enumerated, code 1627, section 7.3.141 */ + { + 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, "Enumerated(3GPP/Report-Interval)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Report-Amount, Enumerated, code 1628, section 7.3.142 */ + { + 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, "Enumerated(3GPP/Report-Amount)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Event-Threshold-RSRP, Unsigned32, code 1629, section 7.3.143 */ + { + 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, Unsigned32, code 1630, section 7.3.144 */ + { + 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, Enumerated, code 1631, section 7.3.145 */ + { + 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, "Enumerated(3GPP/Logging-Interval)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Logging-Duration, Enumerated, code 1632, section 7.3.146 */ + { + 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, "Enumerated(3GPP/Logging-Duration)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Relay-Node-Indicator, Enumerated, code 1633, section 7.3.147 */ + { + 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, "Enumerated(3GPP/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, Enumerated, code 1634, section 7.3.148 */ + { + 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, "Enumerated(3GPP/MDT-User-Consent)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* PUR-Flags, Unsigned32, code 1635, section 7.3.149 */ + { + 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, Enumerated, code 1636, section 7.3.150 */ + { + 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, "Enumerated(3GPP/Subscribed-VSRVCC)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Equivalent-PLMN-List, Grouped, code 1637, section 7.3.151 */ + { + 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, Unsigned32, code 1638, section 7.3.152 */ + { + 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, Unsigned32, code 1639, section 7.3.153 */ + { + 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, Unsigned32, code 1640, section 7.3.154 */ + { + 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, Grouped, code 1641, section 7.3.155 */ + { + 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, UTF8String, code 1642, section 7.3.163 */ + { + 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, OctetString, code 1643, section 7.3.157 */ + { + 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, OctetString, code 1645, section 7.3.159 */ + { + 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, Enumerated, code 1648, section 7.3.162 */ + { + 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, "Enumerated(3GPP/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, Grouped, code 1649, section 7.3.156 */ + { + 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, Enumerated, code 1650, section 7.3.164 */ + { + 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, "Enumerated(3GPP/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, Unsigned32, code 1654, section 7.3.165 */ + { + 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); + }; + + /* Note: 3GPP TS 29.272 V12.9.0 (2015-12) changed AVP code of */ + /* Measurement-Period-LTE (1655) from 1656. */ + /* */ + /* Change-1.4.0: Measurement-Period-LTE (1656) code changed to Measurement-Period-LTE (1655). */ + /* Measurement-Period-LTE, Enumerated, code 1655, section 7.3.166 */ + { + struct dict_avp_data data = { + 1655, /* 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, "Enumerated(3GPP/Measurement-Period-LTE)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Note: 3GPP TS 29.272 V12.9.0 (2015-12) changed AVP code of */ + /* Measurement-Period-UMTS (1656) from 1655. */ + /* */ + /* Change-1.4.0: Measurement-Period-UMTS (1655) code changed to Measurement-Period-UMTS (1656). */ + /* Measurement-Period-UMTS, Enumerated, code 1656, section 7.3.167 */ + { + struct dict_avp_data data = { + 1656, /* 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, "Enumerated(3GPP/Measurement-Period-UMTS)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Collection-Period-RRM-LTE, Enumerated, code 1657, section 7.3.168 */ + { + 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, "Enumerated(3GPP/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, Enumerated, code 1658, section 7.3.169 */ + { + 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, "Enumerated(3GPP/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, OctetString, code 1659, section 7.3.170 */ + { + 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, OctetString, code 1660, section 7.3.171 */ + { + 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, Integer32, code 1661, section 7.3.172 */ + { + 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, Integer32, code 1662, section 7.3.173 */ + { + 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); + }; + + /* Restoration-Priority, Unsigned32, code 1663, section 7.3.174 */ + { + struct dict_avp_data data = { + 1663, /* Code */ + 10415, /* Vendor */ + "Restoration-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); + }; + + /* SGs-MME-Identity, UTF8String, code 1664, section 7.3.175 */ + { + struct dict_avp_data data = { + 1664, /* Code */ + 10415, /* Vendor */ + "SGs-MME-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); + }; + + /* SIPTO-Local-Network-Permission, Unsigned32, code 1665, section 7.3.176 */ + { + struct dict_avp_data data = { + 1665, /* Code */ + 10415, /* Vendor */ + "SIPTO-Local-Network-Permission", /* 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); + }; + + /* Coupled-Node-Diameter-ID, DiameterIdentity, code 1666, section 7.3.177 */ + { + struct dict_avp_data data = { + 1666, /* Code */ + 10415, /* Vendor */ + "Coupled-Node-Diameter-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, DiameterIdentity_type, NULL); + }; + + /* WLAN-offloadability, Grouped, code 1667, section 7.3.181 */ + { + struct dict_avp_data data = { + 1667, /* Code */ + 10415, /* Vendor */ + "WLAN-offloadability", /* 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); + }; + + /* WLAN-offloadability-EUTRAN, Unsigned32, code 1668, section 7.3.182 */ + { + struct dict_avp_data data = { + 1668, /* Code */ + 10415, /* Vendor */ + "WLAN-offloadability-EUTRAN", /* 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); + }; + + /* WLAN-offloadability-UTRAN, Unsigned32, code 1669, section 7.3.183 */ + { + struct dict_avp_data data = { + 1669, /* Code */ + 10415, /* Vendor */ + "WLAN-offloadability-UTRAN", /* 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); + }; + + /* Reset-ID, OctetString, code 1670, section 7.3.184 */ + { + struct dict_avp_data data = { + 1670, /* Code */ + 10415, /* Vendor */ + "Reset-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); + }; + + /* MDT-Allowed-PLMN-Id, OctetString, code 1671, section 7.3.185 */ + { + struct dict_avp_data data = { + 1671, /* Code */ + 10415, /* Vendor */ + "MDT-Allowed-PLMN-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); + }; + + /* Adjacent-PLMNs, Grouped, code 1672, section 7.3.186 */ + { + struct dict_avp_data data = { + 1672, /* Code */ + 10415, /* Vendor */ + "Adjacent-PLMNs", /* 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); + }; + + /* Adjacent-Access-Restriction-Data, Grouped, code 1673, section 7.3.187 */ + { + struct dict_avp_data data = { + 1673, /* Code */ + 10415, /* Vendor */ + "Adjacent-Access-Restriction-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); + }; + + /* DL-Buffering-Suggested-Packet-Count, Integer32, code 1674, section 7.3.188 */ + { + struct dict_avp_data data = { + 1674, /* Code */ + 10415, /* Vendor */ + "DL-Buffering-Suggested-Packet-Count", /* 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); + }; + + /* IMSI-Group-Id, Grouped, code 1675, section 7.3.189 */ + { + struct dict_avp_data data = { + 1675, /* Code */ + 10415, /* Vendor */ + "IMSI-Group-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); + }; + + /* Group-Service-Id, Unsigned32, code 1676, section 7.3.190 */ + { + struct dict_avp_data data = { + 1676, /* Code */ + 10415, /* Vendor */ + "Group-Service-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); + }; + + /* Group-PLMN-Id, OctetString, code 1677, section 7.3.191 */ + { + struct dict_avp_data data = { + 1677, /* Code */ + 10415, /* Vendor */ + "Group-PLMN-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); + }; + + /* Local-Group-Id, OctetString, code 1678, section 7.3.192 */ + { + struct dict_avp_data data = { + 1678, /* Code */ + 10415, /* Vendor */ + "Local-Group-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); + }; + + /* AIR-Flags, Unsigned32, code 1679, section 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); + }; + + /* UE-Usage-Type, Unsigned32, code 1680, section 7.3.202 */ + { + struct dict_avp_data data = { + 1680, /* Code */ + 10415, /* Vendor */ + "UE-Usage-Type", /* 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); + }; + + /* Non-IP-PDN-Type-Indicator, Enumerated, code 1681, section 7.3.204 */ + { + struct dict_avp_data data = { + 1681, /* Code */ + 10415, /* Vendor */ + "Non-IP-PDN-Type-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, "Enumerated(3GPP/Non-IP-PDN-Type-Indicator)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Non-IP-Data-Delivery-Mechanism, Unsigned32, code 1682, section 7.3.205 */ + { + struct dict_avp_data data = { + 1682, /* Code */ + 10415, /* Vendor */ + "Non-IP-Data-Delivery-Mechanism", /* 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); + }; + + /* Note: 3GPP TS 29.272 Table 7.3.1/1 row Additional-Context-ID (1683) has */ + /* incorrect name and should be "Additional-Context-Identifier" per clause 7.3.206. */ + /* */ + /* Fix: Additional-Context-ID (1683) renamed to Additional-Context-Identifier (1683). */ + /* Additional-Context-Identifier, Unsigned32, code 1683, section 7.3.206 */ + { + struct dict_avp_data data = { + 1683, /* Code */ + 10415, /* Vendor */ + "Additional-Context-Identifier", /* 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); + }; + + /* SCEF-Realm, DiameterIdentity, code 1684, section 7.3.207 */ + { + struct dict_avp_data data = { + 1684, /* Code */ + 10415, /* Vendor */ + "SCEF-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); + }; + + /* Subscription-Data-Deletion, Grouped, code 1685, section 7.3.208 */ + { + struct dict_avp_data data = { + 1685, /* Code */ + 10415, /* Vendor */ + "Subscription-Data-Deletion", /* 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); + }; + + /* Note: 3GPP TS 29.272 Table 7.3.1/1 row Preferred-Data-Mode (1686) */ + /* incorrectly has value type Grouped instead of Unsigned32, */ + /* conflicting with clause 7.3.209. */ + /* */ + /* Fix: Preferred-Data-Mode (1686) type changed from Grouped to Unsigned32. */ + /* Preferred-Data-Mode, Unsigned32, code 1686, section 7.3.209 */ + { + struct dict_avp_data data = { + 1686, /* Code */ + 10415, /* Vendor */ + "Preferred-Data-Mode", /* 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); + }; + + /* Emergency-Info, Grouped, code 1687, section 7.3.210 */ + { + struct dict_avp_data data = { + 1687, /* Code */ + 10415, /* Vendor */ + "Emergency-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); + }; + + /* V2X-Subscription-Data, Grouped, code 1688, section 7.3.212 */ + { + struct dict_avp_data data = { + 1688, /* Code */ + 10415, /* Vendor */ + "V2X-Subscription-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); + }; + + /* V2X-Permission, Unsigned32, code 1689, section 7.3.213 */ + { + struct dict_avp_data data = { + 1689, /* Code */ + 10415, /* Vendor */ + "V2X-Permission", /* 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); + }; + + /* PDN-Connection-Continuity, Unsigned32, code 1690, section 7.3.214 */ + { + struct dict_avp_data data = { + 1690, /* Code */ + 10415, /* Vendor */ + "PDN-Connection-Continuity", /* 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); + }; + + /* eDRX-Cycle-Length, Grouped, code 1691, section 7.3.215 */ + { + struct dict_avp_data data = { + 1691, /* Code */ + 10415, /* Vendor */ + "eDRX-Cycle-Length", /* 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); + }; + + /* eDRX-Cycle-Length-Value, OctetString, code 1692, section 7.3.216 */ + { + struct dict_avp_data data = { + 1692, /* Code */ + 10415, /* Vendor */ + "eDRX-Cycle-Length-Value", /* 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); + }; + + /* UE-PC5-AMBR, Unsigned32, code 1693, section 7.3.217 */ + { + struct dict_avp_data data = { + 1693, /* Code */ + 10415, /* Vendor */ + "UE-PC5-AMBR", /* 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); + }; + + /* MBSFN-Area, Grouped, code 1694, section 7.3.219 */ + { + struct dict_avp_data data = { + 1694, /* Code */ + 10415, /* Vendor */ + "MBSFN-Area", /* 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); + }; + + /* MBSFN-Area-ID, Unsigned32, code 1695, section 7.3.220 */ + { + struct dict_avp_data data = { + 1695, /* Code */ + 10415, /* Vendor */ + "MBSFN-Area-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); + }; + + /* Carrier-Frequency, Unsigned32, code 1696, section 7.3.221 */ + { + struct dict_avp_data data = { + 1696, /* Code */ + 10415, /* Vendor */ + "Carrier-Frequency", /* 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); + }; + + /* RDS-Indicator, Enumerated, code 1697, section 7.3.222 */ + { + struct dict_avp_data data = { + 1697, /* Code */ + 10415, /* Vendor */ + "RDS-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, "Enumerated(3GPP/RDS-Indicator)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Service-Gap-Time, Unsigned32, code 1698, section 7.3.223 */ + { + struct dict_avp_data data = { + 1698, /* Code */ + 10415, /* Vendor */ + "Service-Gap-Time", /* 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); + }; + + /* Aerial-UE-Subscription-Information, Unsigned32, code 1699, section 7.3.224 */ + { + struct dict_avp_data data = { + 1699, /* Code */ + 10415, /* Vendor */ + "Aerial-UE-Subscription-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); + }; + + /* Broadcast-Location-Assistance-Data-Types, Unsigned64, code 1700, section 7.3.225 */ + { + struct dict_avp_data data = { + 1700, /* Code */ + 10415, /* Vendor */ + "Broadcast-Location-Assistance-Data-Types", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_UNSIGNED64 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Paging-Time-Window, Grouped, code 1701, section 7.3.226 */ + { + struct dict_avp_data data = { + 1701, /* Code */ + 10415, /* Vendor */ + "Paging-Time-Window", /* 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); + }; + + /* Operation-Mode, Unsigned32, code 1702, section 7.3.227 */ + { + struct dict_avp_data data = { + 1702, /* Code */ + 10415, /* Vendor */ + "Operation-Mode", /* 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); + }; + + /* Paging-Time-Window-Length, OctetString, code 1703, section 7.3.228 */ + { + struct dict_avp_data data = { + 1703, /* Code */ + 10415, /* Vendor */ + "Paging-Time-Window-Length", /* 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); + }; + + /* Core-Network-Restrictions, Unsigned32, code 1704, section 7.3.230 */ + { + struct dict_avp_data data = { + 1704, /* Code */ + 10415, /* Vendor */ + "Core-Network-Restrictions", /* 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); + }; + + /* eDRX-Related-RAT, Grouped, code 1705, section 7.3.229 */ + { + struct dict_avp_data data = { + 1705, /* Code */ + 10415, /* Vendor */ + "eDRX-Related-RAT", /* 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); + }; + + /* Interworking-5GS-Indicator, Enumerated, code 1706, section 7.3.231 */ + { + struct dict_avp_data data = { + 1706, /* Code */ + 10415, /* Vendor */ + "Interworking-5GS-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, "Enumerated(3GPP/Interworking-5GS-Indicator)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /*==================================================================*/ + /* 3GPP TS 29.273 V15.4.0 (2019-09) */ + /* Evolved Packet System (EPS); */ + /* 3GPP EPS AAA interfaces */ + /* */ + /* From 3GPP 29273-f40.docx */ + /*==================================================================*/ + + /*==================================================================*/ + /* 3GPP TS 29.273 Table 5.2.3.1/1: Diameter STa AVPs */ + /* */ + /* Note: AVPs referenced from other sources are not added here. */ + /*==================================================================*/ + + /* ANID, UTF8String, code 1504, section 5.2.3.7 */ + { + struct dict_avp_data data = { + 1504, /* Code */ + 10415, /* Vendor */ + "ANID", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); + }; + + /* AN-Trusted, Enumerated, code 1503, section 5.2.3.9 */ + { + struct dict_avp_data data = { + 1503, /* Code */ + 10415, /* Vendor */ + "AN-Trusted", /* 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, "Enumerated(3GPP/AN-Trusted)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* MIP-FA-RK, OctetString, code 1506, section 5.2.3.12 */ + { + struct dict_avp_data data = { + 1506, /* Code */ + 10415, /* Vendor */ + "MIP-FA-RK", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); + }; + + /* MIP-FA-RK-SPI, Unsigned32, code 1507, section 5.2.3.13 */ + { + struct dict_avp_data data = { + 1507, /* Code */ + 10415, /* Vendor */ + "MIP-FA-RK-SPI", /* 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); + }; + + /* Full-Network-Name, OctetString, code 1516, section 5.2.3.14 */ + { + struct dict_avp_data data = { + 1516, /* Code */ + 10415, /* Vendor */ + "Full-Network-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); + }; + + /* Short-Network-Name, OctetString, code 1517, section 5.2.3.15 */ + { + struct dict_avp_data data = { + 1517, /* Code */ + 10415, /* Vendor */ + "Short-Network-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); + }; + + /* WLAN-Identifier, Grouped, code 1509, section 5.2.3.18 */ + { + struct dict_avp_data data = { + 1509, /* Code */ + 10415, /* Vendor */ + "WLAN-Identifier", /* 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); + }; + + /* AAA-Failure-Indication, Unsigned32, code 1518, section 8.2.3.21 */ + { + struct dict_avp_data data = { + 1518, /* Code */ + 10415, /* Vendor */ + "AAA-Failure-Indication", /* 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); + }; + + /* Transport-Access-Type, Enumerated, code 1519, section 5.2.3.19 */ + { + struct dict_avp_data data = { + 1519, /* Code */ + 10415, /* Vendor */ + "Transport-Access-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, "Enumerated(3GPP/Transport-Access-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* DER-Flags, Unsigned32, code 1520, section 5.2.3.20 */ + { + struct dict_avp_data data = { + 1520, /* Code */ + 10415, /* Vendor */ + "DER-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); + }; + + /* DEA-Flags, Unsigned32, code 1521, section 5.2.3.21 */ + { + struct dict_avp_data data = { + 1521, /* Code */ + 10415, /* Vendor */ + "DEA-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); + }; + + /* SSID, UTF8String, code 1524, section 5.2.3.22 */ + { + struct dict_avp_data data = { + 1524, /* Code */ + 10415, /* Vendor */ + "SSID", /* 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); + }; + + /* HESSID, UTF8String, code 1525, section 5.2.3.23 */ + { + struct dict_avp_data data = { + 1525, /* Code */ + 10415, /* Vendor */ + "HESSID", /* 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); + }; + + /* Access-Network-Info, Grouped, code 1526, section 5.2.3.24 */ + { + struct dict_avp_data data = { + 1526, /* Code */ + 10415, /* Vendor */ + "Access-Network-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); + }; + + /* TWAN-Connection-Mode, Unsigned32, code 1527, section 5.2.3.25 */ + { + struct dict_avp_data data = { + 1527, /* Code */ + 10415, /* Vendor */ + "TWAN-Connection-Mode", /* 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); + }; + + /* TWAN-Connectivity-Parameters, Grouped, code 1528, section 5.2.3.26 */ + { + struct dict_avp_data data = { + 1528, /* Code */ + 10415, /* Vendor */ + "TWAN-Connectivity-Parameters", /* 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); + }; + + /* Connectivity-Flags, Unsigned32, code 1529, section 5.2.3.27 */ + { + struct dict_avp_data data = { + 1529, /* Code */ + 10415, /* Vendor */ + "Connectivity-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); + }; + + /* TWAN-PCO, OctetString, code 1530, section 5.2.3.28 */ + { + struct dict_avp_data data = { + 1530, /* Code */ + 10415, /* Vendor */ + "TWAN-PCO", /* 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); + }; + + /* TWAG-CP-Address, Address, code 1531, section 5.2.3.29 */ + { + struct dict_avp_data data = { + 1531, /* Code */ + 10415, /* Vendor */ + "TWAG-CP-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); + }; + + /* TWAG-UP-Address, UTF8String, code 1532, section 5.2.3.30 */ + { + struct dict_avp_data data = { + 1532, /* Code */ + 10415, /* Vendor */ + "TWAG-UP-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, UTF8String_type, NULL); + }; + + /* TWAN-S2a-Failure-Cause, Unsigned32, code 1533, section 5.2.3.31 */ + { + struct dict_avp_data data = { + 1533, /* Code */ + 10415, /* Vendor */ + "TWAN-S2a-Failure-Cause", /* 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); + }; + + /* SM-Back-Off-Timer, Unsigned32, code 1534, section 5.2.3.32 */ + { + struct dict_avp_data data = { + 1534, /* Code */ + 10415, /* Vendor */ + "SM-Back-Off-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); + }; + + /* WLCP-Key, OctetString, code 1535, section 5.2.3.33 */ + { + struct dict_avp_data data = { + 1535, /* Code */ + 10415, /* Vendor */ + "WLCP-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); + }; + + /* Emergency-Services, Unsigned32, code 1538, section 7.2.3.4 */ + { + struct dict_avp_data data = { + 1538, /* Code */ + 10415, /* Vendor */ + "Emergency-Services", /* 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); + }; + + /* IMEI-Check-In-VPLMN-Result, Unsigned32, code 1540, section 5.2.3.35 */ + { + struct dict_avp_data data = { + 1540, /* Code */ + 10415, /* Vendor */ + "IMEI-Check-In-VPLMN-Result", /* 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); + }; + + + /*==================================================================*/ + /* 3GPP TS 29.273 Table 6.2.3.1/1: Diameter SWd AVPs */ + /* */ + /* Note: No AVPs are first defined in this table. */ + /*==================================================================*/ + + /*==================================================================*/ + /* 3GPP TS 29.273 Table 7.2.3.1/1: Diameter SWm AVPs */ + /* */ + /* Note: AVPs referenced from other sources are not added here. */ + /*==================================================================*/ + + /* Trace-Info, Grouped, code 1505, section 8.2.3.1.3 */ + { + struct dict_avp_data data = { + 1505, /* Code */ + 10415, /* Vendor */ + "Trace-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); + }; + + /* AAR-Flags, Unsigned32, code 1539, section 7.2.3.5 */ + { + struct dict_avp_data data = { + 1539, /* Code */ + 10415, /* Vendor */ + "AAR-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); + }; + + + /*==================================================================*/ + /* 3GPP TS 29.273 Table 8.2.3.0/1: Diameter SWx AVPs */ + /* */ + /* Note: AVPs referenced from other sources are not added here. */ + /*==================================================================*/ + + /* Non-3GPP-User-Data, Grouped, code 1500, section 8.2.3.1 */ + { + struct dict_avp_data data = { + 1500, /* Code */ + 10415, /* Vendor */ + "Non-3GPP-User-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); + }; + + /* Non-3GPP-IP-Access, Enumerated, code 1501, section 8.2.3.3 */ + { + struct dict_avp_data data = { + 1501, /* Code */ + 10415, /* Vendor */ + "Non-3GPP-IP-Access", /* 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, "Enumerated(3GPP/Non-3GPP-IP-Access)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Non-3GPP-IP-Access-APN, Enumerated, code 1502, section 8.2.3.4 */ + { + struct dict_avp_data data = { + 1502, /* Code */ + 10415, /* Vendor */ + "Non-3GPP-IP-Access-APN", /* 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, "Enumerated(3GPP/Non-3GPP-IP-Access-APN)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* PPR-Flags, Unsigned32, code 1508, section 8.2.3.17 */ + { + struct dict_avp_data data = { + 1508, /* Code */ + 10415, /* Vendor */ + "PPR-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); + }; + + /* TWAN-Default-APN-Context-Id, Unsigned32, code 1512, section 8.2.3.18 */ + { + struct dict_avp_data data = { + 1512, /* Code */ + 10415, /* Vendor */ + "TWAN-Default-APN-Context-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); + }; + + /* TWAN-Access-Info, Grouped, code 1510, section 8.2.3.19 */ + { + struct dict_avp_data data = { + 1510, /* Code */ + 10415, /* Vendor */ + "TWAN-Access-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); + }; + + /* Access-Authorization-Flags, Unsigned32, code 1511, section 8.2.3.20 */ + { + struct dict_avp_data data = { + 1511, /* Code */ + 10415, /* Vendor */ + "Access-Authorization-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); + }; + + /* 3GPP-AAA-Server-Name, DiameterIdentity, code 318, section 8.2.3.24 */ + { + struct dict_avp_data data = { + 318, /* Code */ + 10415, /* Vendor */ + "3GPP-AAA-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, DiameterIdentity_type, NULL); + }; + + /* ERP-Authorization, Unsigned32, code 1541, section 8.2.3.27 */ + { + struct dict_avp_data data = { + 1541, /* Code */ + 10415, /* Vendor */ + "ERP-Authorization", /* 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); + }; + + + /*==================================================================*/ + /* 3GPP TS 29.273 Table 9.2.3.1.1/1: Diameter S6b AVPs for DSMIPv6 */ + /* */ + /* Note: AVPs referenced from other sources are not added here. */ + /*==================================================================*/ + + /* RAR-Flags, Unsigned32, code 1522, section 9.2.3.1.5 */ + { + struct dict_avp_data data = { + 1522, /* Code */ + 10415, /* Vendor */ + "RAR-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); + }; + + /* Note: Trust-Relationship-Update (1515) Enumerated removed in 3GPP TS 29.273 V11.4.0 (2012-12). */ + + /* DER-S6b-Flags, Unsigned32, code 1523, section 9.2.3.7 */ + { + struct dict_avp_data data = { + 1523, /* Code */ + 10415, /* Vendor */ + "DER-S6b-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); + }; + + + /*==================================================================*/ + /* 3GPP TS 29.273 Table 9.2.3.2.1/1: Diameter S6b AVPs for PMIPv6 or GTPv2 */ + /* */ + /* Note: AVPs referenced from other sources are not added here. */ + /*==================================================================*/ + + /* Origination-Time-Stamp, Unsigned64, code 1536, section 9.2.3.2.6 */ + { + struct dict_avp_data data = { + 1536, /* Code */ + 10415, /* Vendor */ + "Origination-Time-Stamp", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_UNSIGNED64 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Maximum-Wait-Time, Unsigned32, code 1537, section 9.2.3.2.7 */ + { + struct dict_avp_data data = { + 1537, /* Code */ + 10415, /* Vendor */ + "Maximum-Wait-Time", /* 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); + }; + + + /*==================================================================*/ + /* 3GPP TS 29.273 Table 9.2.3.6.1/1: Diameter S6b AVPs for MIPv4 FACoA */ + /* */ + /* Note: No AVPs are first defined in this table. */ + /*==================================================================*/ + + /*==================================================================*/ + /* 3GPP TS 29.283 V15.1.0 (2019-09) */ + /* Diameter Data Management Applications */ + /* */ + /* From 3GPP 29283-f10.doc */ + /*==================================================================*/ + + /*==================================================================*/ + /* 3GPP TS 29.283 Table 7.3.1-1: MCPTT-2, MCVideo-2, MCData-2 and CSC-13 specific Diameter AVPs */ + /*==================================================================*/ + + /* MCPTT-ID, UTF8String, code 4500, section 7.3.2 */ + { + struct dict_avp_data data = { + 4500, /* Code */ + 10415, /* Vendor */ + "MCPTT-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); + }; + + /* Data-Identification, Grouped, code 4501, section 7.3.3 */ + { + struct dict_avp_data data = { + 4501, /* Code */ + 10415, /* Vendor */ + "Data-Identification", /* 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); + }; + + /* Data-Identification-Prefix, Unsigned32, code 4502, section 7.3.11 */ + { + struct dict_avp_data data = { + 4502, /* Code */ + 10415, /* Vendor */ + "Data-Identification-Prefix", /* 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); + }; + + /* Data-Identification-Flags, Unsigned64, code 4503, section 7.3.12 */ + { + struct dict_avp_data data = { + 4503, /* Code */ + 10415, /* Vendor */ + "Data-Identification-Flags", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED64 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* DPR-Flags, Unsigned32, code 4504, section 7.3.13 */ + { + struct dict_avp_data data = { + 4504, /* Code */ + 10415, /* Vendor */ + "DPR-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); + }; + + /* DPA-Flags, Unsigned32, code 4505, section 7.3.14 */ + { + struct dict_avp_data data = { + 4505, /* Code */ + 10415, /* Vendor */ + "DPA-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); + }; + + /* DUR-Flags, Unsigned32, code 4506, section 7.3.15 */ + { + struct dict_avp_data data = { + 4506, /* Code */ + 10415, /* Vendor */ + "DUR-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); + }; + + /* DUA-Flags, Unsigned32, code 4507, section 7.3.16 */ + { + struct dict_avp_data data = { + 4507, /* Code */ + 10415, /* Vendor */ + "DUA-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); + }; + + /* NDR-Flags, Unsigned32, code 4508, section 7.3.17 */ + { + struct dict_avp_data data = { + 4508, /* Code */ + 10415, /* Vendor */ + "NDR-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); + }; + + /* NDA-Flags, Unsigned32, code 4509, section 7.3.18 */ + { + struct dict_avp_data data = { + 4509, /* Code */ + 10415, /* Vendor */ + "NDA-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-Data-Id, Unsigned32, code 4510, section 7.3.19 */ + { + struct dict_avp_data data = { + 4510, /* Code */ + 10415, /* Vendor */ + "User-Data-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); + }; + + /* MC-Service-User-Profile-Data, Grouped, code 4511, section 7.3.20 */ + { + struct dict_avp_data data = { + 4511, /* Code */ + 10415, /* Vendor */ + "MC-Service-User-Profile-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); + }; + + /* Note: Name conflict with 3GPP TS 29.140 Sequence-Number (1107). */ + /* and 3GPP TS 29.329 Sequence-Number (716). */ + /* 3GPP TS 29.140 V6.1.0 (2005-06) allocated Sequence-Number (1107). */ + /* 3GPP TS 29.329 V10.0.0 (2010-09) CR 0163 added Sequence-Number (716). */ + /* 3GPP TS 29.283 V13.1.0 (2016-06) allocated Sequence-Number (4512). */ + /* */ + /* Fix: Sequence-Number (4512) renamed to Sequence-Number-29.283 (4512). */ + /* Sequence-Number-29.283, Unsigned32, code 4512, section 7.3.21 */ + { + struct dict_avp_data data = { + 4512, /* Code */ + 10415, /* Vendor */ + "Sequence-Number-29.283", /* 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); + }; + + /* Data, Grouped, code 4513, section 7.3.22 */ + { + struct dict_avp_data data = { + 4513, /* Code */ + 10415, /* Vendor */ + "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); + }; + + /* MCVideo-ID, UTF8String, code 4514, section 7.3.24 */ + { + struct dict_avp_data data = { + 4514, /* Code */ + 10415, /* Vendor */ + "MCVideo-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); + }; + + /* MCData-ID, UTF8String, code 4515, section 7.3.25 */ + { + struct dict_avp_data data = { + 4515, /* Code */ + 10415, /* Vendor */ + "MCData-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); + }; + + /*==================================================================*/ + /* 3GPP TS 29.329 V15.2.0 (2019-09) */ + /* Sh Interface based on the Diameter protocol; */ + /* Protocol details */ + /* */ + /* From 3GPP 29329-f20.doc */ + /*==================================================================*/ + + /*==================================================================*/ + /* 3GPP TS 29.329 Table 6.3.1: Table 6.3.1: Diameter Multimedia Application AVPs */ + /* */ + /* Note: AVPs referenced from other sources are not added here. */ + /*==================================================================*/ + + /* User-Identity, Grouped, code 700, section 6.3.1 */ + { + 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, OctetString, code 701, section 6.3.2 */ + { + 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); + }; + + /* Note: Name conflict with 3GPP TS 29.229 User-Data (606). */ + /* 3GPP TS 29.229 V6.2.0 (2004-09) allocated User-Data (606). */ + /* 3GPP TS 29.329 V6.2.0 (2004-09) allocated User-Data (702). */ + /* */ + /* Fix: User-Data (702) renamed to User-Data-29.329 (702). */ + /* User-Data-29.329, OctetString, code 702, section 6.3.3 */ + { + 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, Enumerated, code 703, section 6.3.4 */ + { + 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, "Enumerated(3GPP/Data-Reference)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Service-Indication, OctetString, code 704, section 6.3.5 */ + { + 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, Enumerated, code 705, section 6.3.6 */ + { + 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, "Enumerated(3GPP/Subs-Req-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Requested-Domain, Enumerated, code 706, section 6.3.7 */ + { + 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, "Enumerated(3GPP/Requested-Domain)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Current-Location, Enumerated, code 707, section 6.3.8 */ + { + 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, "Enumerated(3GPP/Current-Location)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Identity-Set, Enumerated, code 708, section 6.3.10 */ + { + 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, "Enumerated(3GPP/Identity-Set)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Expiry-Time, Time, code 709, section 6.3.16 */ + { + 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, Enumerated, code 710, section 6.3.17 */ + { + 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, "Enumerated(3GPP/Send-Data-Indication)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* DSAI-Tag, OctetString, code 711, section 6.3.18 */ + { + 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); + }; + + /* One-Time-Notification, Enumerated, code 712, section 6.3.22 */ + { + 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, "Enumerated(3GPP/One-Time-Notification)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Requested-Nodes, Unsigned32, code 713, section 6.3.7A */ + { + 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, Enumerated, code 714, section 6.3.23 */ + { + 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, "Enumerated(3GPP/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, Grouped, code 715, section 6.3.24 */ + { + 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); + }; + + /* Note: Name conflict with 3GPP TS 29.140 Sequence-Number (1107) */ + /* and 3GPP TS 29.283 Sequence-Number (4512). */ + /* 3GPP TS 29.140 V6.1.0 (2005-06) allocated Sequence-Number (1107). */ + /* 3GPP TS 29.329 V10.0.0 (2010-09) CR 0163 added Sequence-Number (716). */ + /* 3GPP TS 29.283 V13.1.0 (2016-06) allocated Sequence-Number (4512). */ + /* Sequence-Number, Unsigned32, code 716, section 6.3.25 */ + { + 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); + }; + + /* Pre-paging-Supported, Enumerated, code 717, section 6.3.26 */ + { + struct dict_avp_data data = { + 717, /* Code */ + 10415, /* Vendor */ + "Pre-paging-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, "Enumerated(3GPP/Pre-paging-Supported)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Local-Time-Zone-Indication, Enumerated, code 718, section 6.3.27 */ + { + struct dict_avp_data data = { + 718, /* Code */ + 10415, /* Vendor */ + "Local-Time-Zone-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, "Enumerated(3GPP/Local-Time-Zone-Indication)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* UDR-Flags, Unsigned32, code 719, section 6.3.28 */ + { + 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); + }; + + /* Call-Reference-Info, Grouped, code 720, section 6.3.29 */ + { + struct dict_avp_data data = { + 720, /* Code */ + 10415, /* Vendor */ + "Call-Reference-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); + }; + + /* Call-Reference-Number, OctetString, code 721, section 6.3.30 */ + { + struct dict_avp_data data = { + 721, /* Code */ + 10415, /* Vendor */ + "Call-Reference-Number", /* 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); + }; + + /* AS-Number, OctetString, code 722, section 6.3.31 */ + { + struct dict_avp_data data = { + 722, /* Code */ + 10415, /* Vendor */ + "AS-Number", /* 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 TS 29.336 V15.7.0 (2019-09) */ + /* Home Subscriber Server (HSS) diameter interfaces for */ + /* interworking with packet data networks and applications */ + /* */ + /* From 3GPP 29336-f70.docx */ + /*==================================================================*/ + + /*==================================================================*/ + /* 3GPP TS 29.336 Table 6.4.1/1: S6m/S6n specific Diameter AVPs */ + /*==================================================================*/ + + /* IP-SM-GW-Number, OctetString, code 3100, section 6.4.14 */ + { + struct dict_avp_data data = { + 3100, /* Code */ + 10415, /* Vendor */ + "IP-SM-GW-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); + }; + + /* IP-SM-GW-Name, DiameterIdentity, code 3101, section 6.4.15 */ + { + struct dict_avp_data data = { + 3101, /* Code */ + 10415, /* Vendor */ + "IP-SM-GW-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); + }; + + /* User-Identifier, Grouped, code 3102, section 6.4.2 */ + { + struct dict_avp_data data = { + 3102, /* Code */ + 10415, /* Vendor */ + "User-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); + }; + + /* Service-ID, Enumerated, code 3103, section 6.4.3 */ + { + struct dict_avp_data data = { + 3103, /* 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_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(3GPP/Service-ID)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* SCS-Identity, OctetString, code 3104, section 6.4.4 */ + { + struct dict_avp_data data = { + 3104, /* Code */ + 10415, /* Vendor */ + "SCS-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); + }; + + /* Service-Parameters, Grouped, code 3105, section 6.4.5 */ + { + struct dict_avp_data data = { + 3105, /* Code */ + 10415, /* Vendor */ + "Service-Parameters", /* 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); + }; + + /* T4-Parameters, Grouped, code 3106, section 6.4.6 */ + { + struct dict_avp_data data = { + 3106, /* Code */ + 10415, /* Vendor */ + "T4-Parameters", /* 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-Data, Grouped, code 3107, section 6.4.7 */ + { + struct dict_avp_data data = { + 3107, /* Code */ + 10415, /* Vendor */ + "Service-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); + }; + + /* T4-Data, Grouped, code 3108, section 6.4.8 */ + { + struct dict_avp_data data = { + 3108, /* Code */ + 10415, /* Vendor */ + "T4-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); + }; + + /* HSS-Cause, Unsigned32, code 3109, section 6.4.9 */ + { + struct dict_avp_data data = { + 3109, /* Code */ + 10415, /* Vendor */ + "HSS-Cause", /* 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); + }; + + /* SIR-Flags, Unsigned32, code 3110, section 6.4.10 */ + { + struct dict_avp_data data = { + 3110, /* Code */ + 10415, /* Vendor */ + "SIR-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); + }; + + /* Note: 3GPP TS 29.061 External-Identifier (28) OctetString replaced by */ + /* 3GPP TS 29.336 External-Identifier (3111) UTF8String. */ + /* */ + /* Change-1.4.0: External-Identifier (28) OctetString replaced by External-Identifier (3111) UTF8String. */ + /* External-Identifier, UTF8String, code 3111, section 6.4.11 */ + { + struct dict_avp_data data = { + 3111, /* Code */ + 10415, /* Vendor */ + "External-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); + }; + + /* IP-SM-GW-Realm, DiameterIdentity, code 3112, section 6.4.18 */ + { + struct dict_avp_data data = { + 3112, /* Code */ + 10415, /* Vendor */ + "IP-SM-GW-Realm", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); + }; + + /*==================================================================*/ + /* 3GPP TS 29.336 Table 8.4.1-1: S6t specific Diameter AVPs */ + /*==================================================================*/ + + /* AESE-Communication-Pattern, Grouped, code 3113, section 8.4.25 */ + { + struct dict_avp_data data = { + 3113, /* Code */ + 10415, /* Vendor */ + "AESE-Communication-Pattern", /* 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); + }; + + /* Communication-Pattern-Set, Grouped, code 3114, section 8.4.26 */ + { + struct dict_avp_data data = { + 3114, /* Code */ + 10415, /* Vendor */ + "Communication-Pattern-Set", /* 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); + }; + + /* Periodic-Communication-Indicator, Unsigned32, code 3115, section 8.4.27 */ + { + struct dict_avp_data data = { + 3115, /* Code */ + 10415, /* Vendor */ + "Periodic-Communication-Indicator", /* 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); + }; + + /* Communication-Duration-Time, Unsigned32, code 3116, section 8.4.28 */ + { + struct dict_avp_data data = { + 3116, /* Code */ + 10415, /* Vendor */ + "Communication-Duration-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); + }; + + /* Note: 3GPP TS 29.336 Table 8.4.1-1 row Periodic-time (3117) has */ + /* incorrect name and should be "Periodic-Time" per majority use. */ + /* */ + /* Fix: Periodic-time (3117) renamed to Periodic-Time (931). */ + /* Periodic-Time, Unsigned32, code 3117, section 8.4.29 */ + { + struct dict_avp_data data = { + 3117, /* Code */ + 10415, /* Vendor */ + "Periodic-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); + }; + + /* Scheduled-Communication-Time, Grouped, code 3118, section 8.4.30 */ + { + struct dict_avp_data data = { + 3118, /* Code */ + 10415, /* Vendor */ + "Scheduled-Communication-Time", /* 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); + }; + + /* Stationary-Indication, Unsigned32, code 3119, section 8.4.31 */ + { + struct dict_avp_data data = { + 3119, /* Code */ + 10415, /* Vendor */ + "Stationary-Indication", /* 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); + }; + + /* AESE-Communication-Pattern-Config-Status, Grouped, code 3120, section 8.4.32 */ + { + struct dict_avp_data data = { + 3120, /* Code */ + 10415, /* Vendor */ + "AESE-Communication-Pattern-Config-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); + }; + + /* AESE-Error-Report, Grouped, code 3121, section 8.4.33 */ + { + struct dict_avp_data data = { + 3121, /* Code */ + 10415, /* Vendor */ + "AESE-Error-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); + }; + + /* Monitoring-Event-Configuration, Grouped, code 3122, section 8.4.2 */ + { + struct dict_avp_data data = { + 3122, /* Code */ + 10415, /* Vendor */ + "Monitoring-Event-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); + }; + + /* Monitoring-Event-Report, Grouped, code 3123, section 8.4.3 */ + { + struct dict_avp_data data = { + 3123, /* Code */ + 10415, /* Vendor */ + "Monitoring-Event-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); + }; + + /* SCEF-Reference-ID, Unsigned32, code 3124, section 8.4.4 */ + { + struct dict_avp_data data = { + 3124, /* Code */ + 10415, /* Vendor */ + "SCEF-Reference-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); + }; + + /* SCEF-ID, DiameterIdentity, code 3125, section 8.4.5 */ + { + struct dict_avp_data data = { + 3125, /* Code */ + 10415, /* Vendor */ + "SCEF-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, DiameterIdentity_type, NULL); + }; + + /* SCEF-Reference-ID-for-Deletion, Unsigned32, code 3126, section 8.4.6 */ + { + struct dict_avp_data data = { + 3126, /* Code */ + 10415, /* Vendor */ + "SCEF-Reference-ID-for-Deletion", /* 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); + }; + + /* Monitoring-Type, Unsigned32, code 3127, section 8.4.7 */ + { + struct dict_avp_data data = { + 3127, /* Code */ + 10415, /* Vendor */ + "Monitoring-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); + }; + + /* Maximum-Number-of-Reports, Unsigned32, code 3128, section 8.4.8 */ + { + struct dict_avp_data data = { + 3128, /* Code */ + 10415, /* Vendor */ + "Maximum-Number-of-Reports", /* 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); + }; + + /* UE-Reachability-Configuration, Grouped, code 3129, section 8.4.9 */ + { + struct dict_avp_data data = { + 3129, /* Code */ + 10415, /* Vendor */ + "UE-Reachability-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); + }; + + /* Monitoring-Duration, Time, code 3130, section 8.4.10 */ + { + struct dict_avp_data data = { + 3130, /* Code */ + 10415, /* Vendor */ + "Monitoring-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, Time_type, NULL); + }; + + /* Maximum-Detection-Time, Unsigned32, code 3131, section 8.4.11 */ + { + struct dict_avp_data data = { + 3131, /* Code */ + 10415, /* Vendor */ + "Maximum-Detection-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); + }; + + /* Reachability-Type, Unsigned32, code 3132, section 8.4.12 */ + { + struct dict_avp_data data = { + 3132, /* Code */ + 10415, /* Vendor */ + "Reachability-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); + }; + + /* Maximum-Latency, Unsigned32, code 3133, section 8.4.13 */ + { + struct dict_avp_data data = { + 3133, /* Code */ + 10415, /* Vendor */ + "Maximum-Latency", /* 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); + }; + + /* Maximum-Response-Time, Unsigned32, code 3134, section 8.4.14 */ + { + struct dict_avp_data data = { + 3134, /* Code */ + 10415, /* Vendor */ + "Maximum-Response-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); + }; + + /* Location-Information-Configuration, Grouped, code 3135, section 8.4.15 */ + { + struct dict_avp_data data = { + 3135, /* Code */ + 10415, /* Vendor */ + "Location-Information-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); + }; + + /* MONTE-Location-Type, Unsigned32, code 3136, section 8.4.16 */ + { + struct dict_avp_data data = { + 3136, /* Code */ + 10415, /* Vendor */ + "MONTE-Location-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); + }; + + /* Accuracy, Unsigned32, code 3137, section 8.4.17 */ + { + struct dict_avp_data data = { + 3137, /* Code */ + 10415, /* Vendor */ + "Accuracy", /* 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); + }; + + /* Association-Type, Unsigned32, code 3138, section 8.4.18 */ + { + struct dict_avp_data data = { + 3138, /* Code */ + 10415, /* Vendor */ + "Association-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); + }; + + /* Roaming-Information, Unsigned32, code 3139, section 8.4.19 */ + { + struct dict_avp_data data = { + 3139, /* Code */ + 10415, /* Vendor */ + "Roaming-Information", /* 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); + }; + + /* Reachability-Information, Unsigned32, code 3140, section 8.4.20 */ + { + struct dict_avp_data data = { + 3140, /* Code */ + 10415, /* Vendor */ + "Reachability-Information", /* 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); + }; + + /* IMEI-Change, Unsigned32, code 3141, section 8.4.22 */ + { + struct dict_avp_data data = { + 3141, /* Code */ + 10415, /* Vendor */ + "IMEI-Change", /* 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); + }; + + /* Monitoring-Event-Config-Status, Grouped, code 3142, section 8.4.24 */ + { + struct dict_avp_data data = { + 3142, /* Code */ + 10415, /* Vendor */ + "Monitoring-Event-Config-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); + }; + + /* Supported-Services, Grouped, code 3143, section 8.4.40 */ + { + struct dict_avp_data data = { + 3143, /* Code */ + 10415, /* Vendor */ + "Supported-Services", /* 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); + }; + + /* Supported-Monitoring-Events, Unsigned64, code 3144, section 8.4.41 */ + { + struct dict_avp_data data = { + 3144, /* Code */ + 10415, /* Vendor */ + "Supported-Monitoring-Events", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flag values */ + AVP_TYPE_UNSIGNED64 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* CIR-Flags, Unsigned32, code 3145, section 8.4.39 */ + { + struct dict_avp_data data = { + 3145, /* Code */ + 10415, /* Vendor */ + "CIR-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); + }; + + /* Service-Result, Grouped, code 3146, section 8.4.37 */ + { + struct dict_avp_data data = { + 3146, /* Code */ + 10415, /* Vendor */ + "Service-Result", /* 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-Result-Code, Unsigned32, code 3147, section 8.4.38 */ + { + struct dict_avp_data data = { + 3147, /* Code */ + 10415, /* Vendor */ + "Service-Result-Code", /* 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); + }; + + /* Reference-ID-Validity-Time, Time, code 3148, section 8.4.42 */ + { + struct dict_avp_data data = { + 3148, /* Code */ + 10415, /* Vendor */ + "Reference-ID-Validity-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-Handling, Unsigned32, code 3149, section 8.4.43 */ + { + struct dict_avp_data data = { + 3149, /* Code */ + 10415, /* Vendor */ + "Event-Handling", /* 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); + }; + + /* NIDD-Authorization-Request, Grouped, code 3150, section 8.4.44 */ + { + struct dict_avp_data data = { + 3150, /* Code */ + 10415, /* Vendor */ + "NIDD-Authorization-Request", /* 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); + }; + + /* NIDD-Authorization-Response, Grouped, code 3151, section 8.4.45 */ + { + struct dict_avp_data data = { + 3151, /* Code */ + 10415, /* Vendor */ + "NIDD-Authorization-Response", /* 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-Report, Grouped, code 3152, section 8.4.47 */ + { + struct dict_avp_data data = { + 3152, /* Code */ + 10415, /* Vendor */ + "Service-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); + }; + + /* Node-Type, Unsigned32, code 3153, section 8.4.48 */ + { + struct dict_avp_data data = { + 3153, /* Code */ + 10415, /* Vendor */ + "Node-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); + }; + + /* S6t-HSS-Cause, Unsigned32, code 3154, section 8.4.50 */ + { + struct dict_avp_data data = { + 3154, /* Code */ + 10415, /* Vendor */ + "S6t-HSS-Cause", /* 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); + }; + + /* Enhanced-Coverage-Restriction, Grouped, code 3155, section 8.4.51 */ + { + struct dict_avp_data data = { + 3155, /* Code */ + 10415, /* Vendor */ + "Enhanced-Coverage-Restriction", /* 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); + }; + + /* Enhanced-Coverage-Restriction-Data, Grouped, code 3156, section 8.4.52 */ + { + struct dict_avp_data data = { + 3156, /* Code */ + 10415, /* Vendor */ + "Enhanced-Coverage-Restriction-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); + }; + + /* Restricted-PLMN-List, Grouped, code 3157, section 8.4.53 */ + { + struct dict_avp_data data = { + 3157, /* Code */ + 10415, /* Vendor */ + "Restricted-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); + }; + + /* Allowed-PLMN-List, Grouped, code 3158, section 8.4.54 */ + { + struct dict_avp_data data = { + 3158, /* Code */ + 10415, /* Vendor */ + "Allowed-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); + }; + + /* Requested-Validity-Time, Time, code 3159, section 8.4.55 */ + { + struct dict_avp_data data = { + 3159, /* Code */ + 10415, /* Vendor */ + "Requested-Validity-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); + }; + + /* Granted-Validity-Time, Time, code 3160, section 8.4.56 */ + { + struct dict_avp_data data = { + 3160, /* Code */ + 10415, /* Vendor */ + "Granted-Validity-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); + }; + + /* NIDD-Authorization-Update, Grouped, code 3161, section 8.4.57 */ + { + struct dict_avp_data data = { + 3161, /* Code */ + 10415, /* Vendor */ + "NIDD-Authorization-Update", /* 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); + }; + + /* Loss-Of-Connectivity-Reason, Unsigned32, code 3162, section 8.4.58 */ + { + struct dict_avp_data data = { + 3162, /* Code */ + 10415, /* Vendor */ + "Loss-Of-Connectivity-Reason", /* 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); + }; + + /* Group-Reporting-Guard-Timer, Unsigned32, code 3163, section 8.4.59 */ + { + struct dict_avp_data data = { + 3163, /* Code */ + 10415, /* Vendor */ + "Group-Reporting-Guard-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); + }; + + /* CIA-Flags, Unsigned32, code 3164, section 8.4.60 */ + { + struct dict_avp_data data = { + 3164, /* Code */ + 10415, /* Vendor */ + "CIA-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); + }; + + /* Group-Monitoring-Event-Report, Grouped, code 3165, section 8.4.61 */ + { + struct dict_avp_data data = { + 3165, /* Code */ + 10415, /* Vendor */ + "Group-Monitoring-Event-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); + }; + + /* Group-Monitoring-Event-Report-Item, Grouped, code 3166, section 8.4.62 */ + { + struct dict_avp_data data = { + 3166, /* Code */ + 10415, /* Vendor */ + "Group-Monitoring-Event-Report-Item", /* 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); + }; + + /* RIR-Flags, Unsigned32, code 3167, section 8.4.63 */ + { + struct dict_avp_data data = { + 3167, /* Code */ + 10415, /* Vendor */ + "RIR-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); + }; + + /* Type-Of-External-Identifier, Unsigned32, code 3168, section 8.4.64 */ + { + struct dict_avp_data data = { + 3168, /* Code */ + 10415, /* Vendor */ + "Type-Of-External-Identifier", /* 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-Validity-Time, Grouped, code 3169, section 8.4.65 */ + { + struct dict_avp_data data = { + 3169, /* Code */ + 10415, /* Vendor */ + "APN-Validity-Time", /* 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); + }; + + /* Suggested-Network-Configuration, Grouped, code 3170, section 8.4.66 */ + { + struct dict_avp_data data = { + 3170, /* Code */ + 10415, /* Vendor */ + "Suggested-Network-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); + }; + + /* Monitoring-Event-Report-Status, Grouped, code 3171, section 8.4.67 */ + { + struct dict_avp_data data = { + 3171, /* Code */ + 10415, /* Vendor */ + "Monitoring-Event-Report-Status", /* 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); + }; + + /* PLMN-ID-Requested, Enumerated, code 3172, section 8.4.68 */ + { + struct dict_avp_data data = { + 3172, /* Code */ + 10415, /* Vendor */ + "PLMN-ID-Requested", /* 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, "Enumerated(3GPP/PLMN-ID-Requested)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* AdditionalIdentifiers, Grouped, code 3173, section 8.4.69 */ + { + struct dict_avp_data data = { + 3173, /* Code */ + 10415, /* Vendor */ + "AdditionalIdentifiers", /* 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); + }; + + /* NIR-Flags, Unsigned32, code 3174, section 8.4.70 */ + { + struct dict_avp_data data = { + 3174, /* Code */ + 10415, /* Vendor */ + "NIR-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); + }; + + /* Reporting-Time-Stamp, Time, code 3175, section 8.4.71 */ + { + struct dict_avp_data data = { + 3175, /* Code */ + 10415, /* Vendor */ + "Reporting-Time-Stamp", /* 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); + }; + + /* NIA-Flags, Unsigned32, code 3176, section 8.4.72 */ + { + struct dict_avp_data data = { + 3176, /* Code */ + 10415, /* Vendor */ + "NIA-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); + }; + + /* Group-User-Identifier, Grouped, code 3177, section 8.4.73 */ + { + struct dict_avp_data data = { + 3177, /* Code */ + 10415, /* Vendor */ + "Group-User-Identifier", /* 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); + }; + + /* MTC-Provider-Info, Grouped, code 3178, section 8.4.74 */ + { + struct dict_avp_data data = { + 3178, /* Code */ + 10415, /* Vendor */ + "MTC-Provider-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); + }; + + /* MTC-Provider-ID, UTF8String, code 3179, section 8.4.75 */ + { + struct dict_avp_data data = { + 3179, /* Code */ + 10415, /* Vendor */ + "MTC-Provider-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); + }; + + /*==================================================================*/ + /* 3GPP TS 29.337 V15.0.0 (2018-06) */ + /* Diameter-based T4 interface for communications with packet */ + /* data networks and applications */ + /* */ + /* From 3GPP 29337-f00.doc */ + /*==================================================================*/ + + /*==================================================================*/ + /* 3GPP TS 29.337 Table 6.3.1/1: T4 specific Diameter AVPs */ + /*==================================================================*/ + + /* SM-Delivery-Outcome-T4, Enumerated, code 3200, section 6.3.1 */ + { + struct dict_avp_data data = { + 3200, /* Code */ + 10415, /* Vendor */ + "SM-Delivery-Outcome-T4", /* 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, "Enumerated(3GPP/SM-Delivery-Outcome-T4)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Absent-Subscriber-Diagnostic-T4, Enumerated, code 3201, section 6.3.2 */ + { + struct dict_avp_data data = { + 3201, /* Code */ + 10415, /* Vendor */ + "Absent-Subscriber-Diagnostic-T4", /* 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, "Enumerated(3GPP/Absent-Subscriber-Diagnostic-T4)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Trigger-Action, Unsigned32, code 3202, section 6.3.6 */ + { + struct dict_avp_data data = { + 3202, /* Code */ + 10415, /* Vendor */ + "Trigger-Action", /* 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); + }; + + /* MTC-Error-Diagnostic, Unsigned32, code 3203, section 6.3.7 */ + { + struct dict_avp_data data = { + 3203, /* Code */ + 10415, /* Vendor */ + "MTC-Error-Diagnostic", /* 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); + }; + + /*==================================================================*/ + /* 3GPP TS 29.338 V15.1.0 (2018-12) */ + /* Diameter based protocols to support */ + /* Short Message Service (SMS) capable */ + /* Mobile Management Entities (MMEs) */ + /* */ + /* From 3GPP 29338-f10.doc */ + /*==================================================================*/ + + /*==================================================================*/ + /* 3GPP TS 29.338 Table 5.3.3.1/1: S6c specific Diameter AVPs */ + /*==================================================================*/ + + /* SM-RP-MTI, Enumerated, code 3308, section 5.3.3.2 */ + { + struct dict_avp_data data = { + 3308, /* Code */ + 10415, /* Vendor */ + "SM-RP-MTI", /* 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, "Enumerated(3GPP/SM-RP-MTI)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* SM-RP-SMEA, OctetString, code 3309, section 5.3.3.3 */ + { + struct dict_avp_data data = { + 3309, /* Code */ + 10415, /* Vendor */ + "SM-RP-SMEA", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); + }; + + /* SRR-Flags, Unsigned32, code 3310, section 5.3.3.4 */ + { + struct dict_avp_data data = { + 3310, /* Code */ + 10415, /* Vendor */ + "SRR-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); + }; + + /* SM-Delivery-Not-Intended, Enumerated, code 3311, section 5.3.3.5 */ + { + struct dict_avp_data data = { + 3311, /* Code */ + 10415, /* Vendor */ + "SM-Delivery-Not-Intended", /* 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, "Enumerated(3GPP/SM-Delivery-Not-Intended)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* MWD-Status, Unsigned32, code 3312, section 5.3.3.8 */ + { + struct dict_avp_data data = { + 3312, /* Code */ + 10415, /* Vendor */ + "MWD-Status", /* 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); + }; + + /* MME-Absent-User-Diagnostic-SM, Unsigned32, code 3313, section 5.3.3.9 */ + { + struct dict_avp_data data = { + 3313, /* Code */ + 10415, /* Vendor */ + "MME-Absent-User-Diagnostic-SM", /* 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); + }; + + /* MSC-Absent-User-Diagnostic-SM, Unsigned32, code 3314, section 5.3.3.10 */ + { + struct dict_avp_data data = { + 3314, /* Code */ + 10415, /* Vendor */ + "MSC-Absent-User-Diagnostic-SM", /* 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); + }; + + /* SGSN-Absent-User-Diagnostic-SM, Unsigned32, code 3315, section 5.3.3.11 */ + { + struct dict_avp_data data = { + 3315, /* Code */ + 10415, /* Vendor */ + "SGSN-Absent-User-Diagnostic-SM", /* 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-Delivery-Outcome, Grouped, code 3316, section 5.3.3.14 */ + { + struct dict_avp_data data = { + 3316, /* Code */ + 10415, /* Vendor */ + "SM-Delivery-Outcome", /* 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-SM-Delivery-Outcome, Grouped, code 3317, section 5.3.3.15 */ + { + struct dict_avp_data data = { + 3317, /* Code */ + 10415, /* Vendor */ + "MME-SM-Delivery-Outcome", /* 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); + }; + + /* MSC-SM-Delivery-Outcome, Grouped, code 3318, section 5.3.3.16 */ + { + struct dict_avp_data data = { + 3318, /* Code */ + 10415, /* Vendor */ + "MSC-SM-Delivery-Outcome", /* 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-SM-Delivery-Outcome, Grouped, code 3319, section 5.3.3.17 */ + { + struct dict_avp_data data = { + 3319, /* Code */ + 10415, /* Vendor */ + "SGSN-SM-Delivery-Outcome", /* 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); + }; + + /* IP-SM-GW-SM-Delivery-Outcome, Grouped, code 3320, section 5.3.3.18 */ + { + struct dict_avp_data data = { + 3320, /* Code */ + 10415, /* Vendor */ + "IP-SM-GW-SM-Delivery-Outcome", /* 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); + }; + + /* SM-Delivery-Cause, Enumerated, code 3321, section 5.3.3.19 */ + { + struct dict_avp_data data = { + 3321, /* Code */ + 10415, /* Vendor */ + "SM-Delivery-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, "Enumerated(3GPP/SM-Delivery-Cause)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Absent-User-Diagnostic-SM, Unsigned32, code 3322, section 5.3.3.20 */ + { + struct dict_avp_data data = { + 3322, /* Code */ + 10415, /* Vendor */ + "Absent-User-Diagnostic-SM", /* 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); + }; + + /* RDR-Flags, Unsigned32, code 3323, section 5.3.3.21 */ + { + struct dict_avp_data data = { + 3323, /* Code */ + 10415, /* Vendor */ + "RDR-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); + }; + + /* Maximum-UE-Availability-Time, Time, code 3329, section 5.3.3.22 */ + { + struct dict_avp_data data = { + 3329, /* Code */ + 10415, /* Vendor */ + "Maximum-UE-Availability-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); + }; + + /* SMS-GMSC-Alert-Event, Unsigned32, code 3333, section 5.3.3.23 */ + { + struct dict_avp_data data = { + 3333, /* Code */ + 10415, /* Vendor */ + "SMS-GMSC-Alert-Event", /* 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); + }; + + /*==================================================================*/ + /* 3GPP TS 29.338 Table 6.3.3.1/1: SGd/Gdd specific Diameter AVPs */ + /*==================================================================*/ + + /* SC-Address, OctetString, code 3300, section 6.3.3.2 */ + { + struct dict_avp_data data = { + 3300, /* Code */ + 10415, /* Vendor */ + "SC-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); + }; + + /* SM-RP-UI, OctetString, code 3301, section 6.3.3.3 */ + { + struct dict_avp_data data = { + 3301, /* Code */ + 10415, /* Vendor */ + "SM-RP-UI", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); + }; + + /* TFR-Flags, Unsigned32, code 3302, section 6.3.3.4 */ + { + struct dict_avp_data data = { + 3302, /* Code */ + 10415, /* Vendor */ + "TFR-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); + }; + + /* SM-Delivery-Failure-Cause, Grouped, code 3303, section 6.3.3.5 */ + { + struct dict_avp_data data = { + 3303, /* Code */ + 10415, /* Vendor */ + "SM-Delivery-Failure-Cause", /* 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); + }; + + /* SM-Enumerated-Delivery-Failure-Cause, Enumerated, code 3304, section 6.3.3.6 */ + { + struct dict_avp_data data = { + 3304, /* Code */ + 10415, /* Vendor */ + "SM-Enumerated-Delivery-Failure-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, "Enumerated(3GPP/SM-Enumerated-Delivery-Failure-Cause)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* SM-Diagnostic-Info, OctetString, code 3305, section 6.3.3.7 */ + { + struct dict_avp_data data = { + 3305, /* Code */ + 10415, /* Vendor */ + "SM-Diagnostic-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); + }; + + /* SM-Delivery-Timer, Unsigned32, code 3306, section 6.3.3.10 */ + { + struct dict_avp_data data = { + 3306, /* Code */ + 10415, /* Vendor */ + "SM-Delivery-Timer", /* 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-Delivery-Start-Time, Time, code 3307, section 6.3.3.11 */ + { + struct dict_avp_data data = { + 3307, /* Code */ + 10415, /* Vendor */ + "SM-Delivery-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); + }; + + /* SMSMI-Correlation-ID, Grouped, code 3324, section 6.3.3.13 */ + { + struct dict_avp_data data = { + 3324, /* Code */ + 10415, /* Vendor */ + "SMSMI-Correlation-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); + }; + + /* Note: 3GPP TS 29.338 Table 6.3.3.1/1 row HSS-ID (3325) */ + /* incorrectly lists type as OctetString instead of UTF8String. */ + /* 3GPP TS 29.338 clause 6.3.3.14 uses UTF8String. */ + /* */ + /* Fix: HSS-ID (3325) type changed from OctetString to UTF8String. */ + /* HSS-ID, UTF8String, code 3325, section 6.3.3.14 */ + { + struct dict_avp_data data = { + 3325, /* Code */ + 10415, /* Vendor */ + "HSS-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); + }; + + /* Originating-SIP-URI, UTF8String, code 3326, section 6.3.3.15 */ + { + struct dict_avp_data data = { + 3326, /* Code */ + 10415, /* Vendor */ + "Originating-SIP-URI", /* 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); + }; + + /* Destination-SIP-URI, UTF8String, code 3327, section 6.3.3.16 */ + { + struct dict_avp_data data = { + 3327, /* Code */ + 10415, /* Vendor */ + "Destination-SIP-URI", /* 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); + }; + + /* OFR-Flags, Unsigned32, code 3328, section 6.3.3.12 */ + { + struct dict_avp_data data = { + 3328, /* Code */ + 10415, /* Vendor */ + "OFR-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); + }; + + /* Maximum-Retransmission-Time, Time, code 3330, section 6.3.3.17 */ + { + struct dict_avp_data data = { + 3330, /* Code */ + 10415, /* Vendor */ + "Maximum-Retransmission-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); + }; + + /* Requested-Retransmission-Time, Time, code 3331, section 6.3.3.18 */ + { + struct dict_avp_data data = { + 3331, /* Code */ + 10415, /* Vendor */ + "Requested-Retransmission-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); + }; + + /* SMS-GMSC-Address, OctetString, code 3332, section 6.3.3.19 */ + { + struct dict_avp_data data = { + 3332, /* Code */ + 10415, /* Vendor */ + "SMS-GMSC-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 TS 29.343 V15.1.0 (2019-09) */ + /* Proximity-services (ProSe) function to */ + /* ProSe application server aspects (PC2); */ + /* Stage 3 */ + /* */ + /* From 3GPP 29343-f10.doc */ + /*==================================================================*/ + + /*==================================================================*/ + /* 3GPP TS 29.343 Table 6.4.1-1: PC2 specific Diameter AVPs */ + /*==================================================================*/ + + /* Origin-App-Layer-User-Id, UTF8String, code 3600, section 6.4.2 */ + { + struct dict_avp_data data = { + 3600, /* Code */ + 10415, /* Vendor */ + "Origin-App-Layer-User-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); + }; + + /* Target-App-Layer-User-Id, UTF8String, code 3601, section 6.4.3 */ + { + struct dict_avp_data data = { + 3601, /* Code */ + 10415, /* Vendor */ + "Target-App-Layer-User-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); + }; + + /* ProSe-Function-ID, OctetString, code 3602, section 6.4.4 */ + { + struct dict_avp_data data = { + 3602, /* Code */ + 10415, /* Vendor */ + "ProSe-Function-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); + }; + + /* ProSe-Request-Type, Unsigned32, code 3603, section 6.4.5 */ + { + struct dict_avp_data data = { + 3603, /* Code */ + 10415, /* Vendor */ + "ProSe-Request-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); + }; + + /* PDUID, OctetString, code 3604, section 6.4.6 */ + { + struct dict_avp_data data = { + 3604, /* Code */ + 10415, /* Vendor */ + "PDUID", /* 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); + }; + + /* Application-Data, UTF8String, code 3605, section 6.4.7 */ + { + struct dict_avp_data data = { + 3605, /* Code */ + 10415, /* Vendor */ + "Application-Data", /* 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); + }; + + /* Allowed-Suffixes-Number, Unsigned32, code 3606, section 6.4.8 */ + { + struct dict_avp_data data = { + 3606, /* Code */ + 10415, /* Vendor */ + "Allowed-Suffixes-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); + }; + + /* Monitor-Target, Grouped, code 3607, section 6.4.9 */ + { + struct dict_avp_data data = { + 3607, /* Code */ + 10415, /* Vendor */ + "Monitor-Target", /* 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); + }; + + /* ProSe-Code-Suffix-Mask, Grouped, code 3608, section 6.4.10 */ + { + struct dict_avp_data data = { + 3608, /* Code */ + 10415, /* Vendor */ + "ProSe-Code-Suffix-Mask", /* 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); + }; + + /* Suffix-Code, OctetString, code 3609, section 6.4.11 */ + { + struct dict_avp_data data = { + 3609, /* Code */ + 10415, /* Vendor */ + "Suffix-Code", /* 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); + }; + + /* Suffix-Mask, OctetString, code 3610, section 6.4.12 */ + { + struct dict_avp_data data = { + 3610, /* Code */ + 10415, /* Vendor */ + "Suffix-Mask", /* 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); + }; + + /* Banned-User-Target, Grouped, code 3611, section 6.4.17 */ + { + struct dict_avp_data data = { + 3611, /* Code */ + 10415, /* Vendor */ + "Banned-User-Target", /* 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); + }; + + /* Metadata-Indicator, Unsigned32, code 3612, section 6.4.18 */ + { + struct dict_avp_data data = { + 3612, /* Code */ + 10415, /* Vendor */ + "Metadata-Indicator", /* 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); + }; + + /*==================================================================*/ + /* 3GPP TS 29.344 V15.1.0 (2019-09) */ + /* Proximity-services (ProSe) Function to Home Subscriber */ + /* Server (HSS) aspects; */ + /* Stage 3 */ + /* */ + /* From 3GPP 29344-f10.doc */ + /*==================================================================*/ + + /*==================================================================*/ + /* 3GPP TS 29.344 Table 6.3.1-1: PC4a specific Diameter AVPs */ + /*==================================================================*/ + + /* ProSe-Subscription-Data, Grouped, code 3701, section 6.3.2 */ + { + struct dict_avp_data data = { + 3701, /* Code */ + 10415, /* Vendor */ + "ProSe-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); + }; + + /* ProSe-Permission, Unsigned32, code 3702, section 6.3.3 */ + { + struct dict_avp_data data = { + 3702, /* Code */ + 10415, /* Vendor */ + "ProSe-Permission", /* 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); + }; + + /* ProSe-Allowed-PLMN, Grouped, code 3703, section 6.3.4 */ + { + struct dict_avp_data data = { + 3703, /* Code */ + 10415, /* Vendor */ + "ProSe-Allowed-PLMN", /* 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); + }; + + /* ProSe-Direct-Allowed, Unsigned32, code 3704, section 6.3.5 */ + { + struct dict_avp_data data = { + 3704, /* Code */ + 10415, /* Vendor */ + "ProSe-Direct-Allowed", /* 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); + }; + + /* UPR-Flags, Unsigned32, code 3705, section 6.3.6 */ + { + struct dict_avp_data data = { + 3705, /* Code */ + 10415, /* Vendor */ + "UPR-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); + }; + + /* PNR-Flags, Unsigned32, code 3706, section 6.3.7 */ + { + struct dict_avp_data data = { + 3706, /* Code */ + 10415, /* Vendor */ + "PNR-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); + }; + + /* ProSe-Initial-Location-Information, Grouped, code 3707, section 6.3.9 */ + { + struct dict_avp_data data = { + 3707, /* Code */ + 10415, /* Vendor */ + "ProSe-Initial-Location-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); + }; + + /* Note: 3GPP TS 29.344 Table 6.3.1-1 missing Authorized-Discovery-Range. */ + /* Present in 3GPP TS 29.344 clause 6.3.13 and 3GPP TS 29.230 Table 7.1. */ + /* */ + /* Fix: Add Authorized-Discovery-Range (3708) Unsigned32. */ + /* Authorized-Discovery-Range, Unsigned32, code 3708, section 6.3.13 */ + { + struct dict_avp_data data = { + 3708, /* Code */ + 10415, /* Vendor */ + "Authorized-Discovery-Range", /* 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); + }; + + /*==================================================================*/ + /* 3GPP TS 29.345 V15.1.0 (2019-09) */ + /* Inter-Proximity-services (ProSe) Function signalling aspects; */ + /* Stage 3 */ + /* */ + /* From 3GPP 29345-f10.doc */ + /*==================================================================*/ + + /*==================================================================*/ + /* 3GPP TS 29.345 Table 6.3.1-1: PC6/PC7 specific Diameter AVPs */ + /*==================================================================*/ + + /* App-Layer-User-Id, UTF8String, code 3801, section 6.3.2 */ + { + struct dict_avp_data data = { + 3801, /* Code */ + 10415, /* Vendor */ + "App-Layer-User-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); + }; + + /* Note: 3GPP TS 29.345 Table 6.3.1-1 row Assistance-info (3802) has */ + /* incorrect name and should be "Assistance-Info" per clause 6.3.3. */ + /* */ + /* Fix: Assistance-info (3802) renamed to Assistance-Info (3802). */ + /* Assistance-Info, Grouped, code 3802, section 6.3.3 */ + { + struct dict_avp_data data = { + 3802, /* Code */ + 10415, /* Vendor */ + "Assistance-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); + }; + + /* Assistance-Info-Validity-Timer, Unsigned32, code 3803, section 6.3.4 */ + { + struct dict_avp_data data = { + 3803, /* Code */ + 10415, /* Vendor */ + "Assistance-Info-Validity-Timer", /* 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); + }; + + /* Discovery-Type, Unsigned32, code 3804, section 6.3.5 */ + { + struct dict_avp_data data = { + 3804, /* Code */ + 10415, /* Vendor */ + "Discovery-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); + }; + + /* Filter-Id, OctetString, code 3805, section 6.3.9 */ + { + struct dict_avp_data data = { + 3805, /* Code */ + 10415, /* Vendor */ + "Filter-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); + }; + + /* MAC-Address, UTF8String, code 3806, section 6.3.11 */ + { + struct dict_avp_data data = { + 3806, /* Code */ + 10415, /* Vendor */ + "MAC-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); + }; + + /* Match-Report, Grouped, code 3807, section 6.3.12 */ + { + struct dict_avp_data data = { + 3807, /* Code */ + 10415, /* Vendor */ + "Match-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); + }; + + /* Operating-Channel, Unsigned32, code 3808, section 6.3.14 */ + { + struct dict_avp_data data = { + 3808, /* Code */ + 10415, /* Vendor */ + "Operating-Channel", /* 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); + }; + + /* P2P-Features, Unsigned32, code 3809, section 6.3.15 */ + { + struct dict_avp_data data = { + 3809, /* Code */ + 10415, /* Vendor */ + "P2P-Features", /* 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); + }; + + /* ProSe-App-Code, OctetString, code 3810, section 6.3.16 */ + { + struct dict_avp_data data = { + 3810, /* Code */ + 10415, /* Vendor */ + "ProSe-App-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); + }; + + /* ProSe-App-Id, UTF8String, code 3811, section 6.3.17 */ + { + struct dict_avp_data data = { + 3811, /* Code */ + 10415, /* Vendor */ + "ProSe-App-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); + }; + + /* ProSe-App-Mask, OctetString, code 3812, section 6.3.18 */ + { + struct dict_avp_data data = { + 3812, /* Code */ + 10415, /* Vendor */ + "ProSe-App-Mask", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); + }; + + /* ProSe-Discovery-Filter, Grouped, code 3813, section 6.3.20 */ + { + struct dict_avp_data data = { + 3813, /* Code */ + 10415, /* Vendor */ + "ProSe-Discovery-Filter", /* 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); + }; + + /* PRR-Flags, Unsigned32, code 3814, section 6.3.21 */ + { + struct dict_avp_data data = { + 3814, /* Code */ + 10415, /* Vendor */ + "PRR-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); + }; + + /* ProSe-Validity-Timer, Unsigned32, code 3815, section 6.3.22 */ + { + struct dict_avp_data data = { + 3815, /* Code */ + 10415, /* Vendor */ + "ProSe-Validity-Timer", /* 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); + }; + + /* Requesting-EPUID, UTF8String, code 3816, section 6.3.23 */ + { + struct dict_avp_data data = { + 3816, /* Code */ + 10415, /* Vendor */ + "Requesting-EPUID", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); + }; + + /* Targeted-EPUID, UTF8String, code 3817, section 6.3.26 */ + { + struct dict_avp_data data = { + 3817, /* Code */ + 10415, /* Vendor */ + "Targeted-EPUID", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); + }; + + /* Note: Name conflict with 3GPP TS 29.154 Time-Window (4204). */ + /* Time-Window (3818) in 3GPP TS 29.345 V12.1.0 (2014-12) predates */ + /* Time-Window (4204) in 3GPP TS 29.154 V13.1.0 (2016-03). */ + /* Time-Window, Unsigned32, code 3818, section 6.3.27 */ + { + struct dict_avp_data data = { + 3818, /* Code */ + 10415, /* Vendor */ + "Time-Window", /* 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); + }; + + /* WiFi-P2P-Assistance-Info, Grouped, code 3819, section 6.3.30 */ + { + struct dict_avp_data data = { + 3819, /* Code */ + 10415, /* Vendor */ + "WiFi-P2P-Assistance-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); + }; + + /* WLAN-Assistance-Info, Grouped, code 3820, section 6.3.31 */ + { + struct dict_avp_data data = { + 3820, /* Code */ + 10415, /* Vendor */ + "WLAN-Assistance-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); + }; + + /* WLAN-Link-Layer-Id, OctetString, code 3821, section 6.3.32 */ + { + struct dict_avp_data data = { + 3821, /* Code */ + 10415, /* Vendor */ + "WLAN-Link-Layer-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-Link-Layer-Id-List, Grouped, code 3822, section 6.3.33 */ + { + struct dict_avp_data data = { + 3822, /* Code */ + 10415, /* Vendor */ + "WLAN-Link-Layer-Id-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); + }; + + /* Location-Update-Trigger, Grouped, code 3823, section 6.3.42 */ + { + struct dict_avp_data data = { + 3823, /* Code */ + 10415, /* Vendor */ + "Location-Update-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); + }; + + /* Location-Update-Event-Type, Unsigned32, code 3824, section 6.3.43 */ + { + struct dict_avp_data data = { + 3824, /* Code */ + 10415, /* Vendor */ + "Location-Update-Event-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); + }; + + /* Change-Of-Area-Type, Grouped, code 3825, section 6.3.44 */ + { + struct dict_avp_data data = { + 3825, /* Code */ + 10415, /* Vendor */ + "Change-Of-Area-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); + }; + + /* Location-Update-Event-Trigger, Unsigned32, code 3826, section 6.3.45 */ + { + struct dict_avp_data data = { + 3826, /* Code */ + 10415, /* Vendor */ + "Location-Update-Event-Trigger", /* 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); + }; + + /* Report-Cardinality, Enumerated, code 3827, section 6.3.46 */ + { + struct dict_avp_data data = { + 3827, /* Code */ + 10415, /* Vendor */ + "Report-Cardinality", /* 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, "Enumerated(3GPP/Report-Cardinality)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Minimum-Interval-Time, Unsigned32, code 3828, section 6.3.47 */ + { + struct dict_avp_data data = { + 3828, /* Code */ + 10415, /* Vendor */ + "Minimum-Interval-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); + }; + + /* Periodic-Location-Type, Grouped, code 3829, section 6.3.48 */ + { + struct dict_avp_data data = { + 3829, /* Code */ + 10415, /* Vendor */ + "Periodic-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); + }; + + /* Location-Report-Interval-Time, Unsigned32, code 3830, section 6.3.49 */ + { + struct dict_avp_data data = { + 3830, /* Code */ + 10415, /* Vendor */ + "Location-Report-Interval-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); + }; + + /* Total-Number-Of-Reports, Unsigned32, code 3831, section 6.3.50 */ + { + struct dict_avp_data data = { + 3831, /* Code */ + 10415, /* Vendor */ + "Total-Number-Of-Reports", /* 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); + }; + + /* Validity-Time-Announce, Unsigned32, code 3832, section 6.3.36 */ + { + struct dict_avp_data data = { + 3832, /* Code */ + 10415, /* Vendor */ + "Validity-Time-Announce", /* 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); + }; + + /* Validity-Time-Monitor, Unsigned32, code 3833, section 6.3.37 */ + { + struct dict_avp_data data = { + 3833, /* Code */ + 10415, /* Vendor */ + "Validity-Time-Monitor", /* 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); + }; + + /* Validity-Time-Communication, Unsigned32, code 3834, section 6.3.38 */ + { + struct dict_avp_data data = { + 3834, /* Code */ + 10415, /* Vendor */ + "Validity-Time-Communication", /* 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); + }; + + /* ProSe-App-Code-Info, Grouped, code 3835, section 6.3.39 */ + { + struct dict_avp_data data = { + 3835, /* Code */ + 10415, /* Vendor */ + "ProSe-App-Code-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); + }; + + /* MIC, OctetString, code 3836, section 6.3.40 */ + { + struct dict_avp_data data = { + 3836, /* Code */ + 10415, /* Vendor */ + "MIC", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); + }; + + /* UTC-based-Counter, Unsigned32, code 3837, section 6.3.41 */ + { + struct dict_avp_data data = { + 3837, /* Code */ + 10415, /* Vendor */ + "UTC-based-Counter", /* 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); + }; + + /* ProSe-Match-Refresh-Timer, Unsigned32, code 3838, section 6.3.52 */ + { + struct dict_avp_data data = { + 3838, /* Code */ + 10415, /* Vendor */ + "ProSe-Match-Refresh-Timer", /* 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); + }; + + /* ProSe-Metadata-Index-Mask, OctetString, code 3839, section 6.3.60 */ + { + struct dict_avp_data data = { + 3839, /* Code */ + 10415, /* Vendor */ + "ProSe-Metadata-Index-Mask", /* 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); + }; + + /* App-Identifier, Grouped, code 3840, section 6.3.61 */ + { + struct dict_avp_data data = { + 3840, /* Code */ + 10415, /* Vendor */ + "App-Identifier", /* 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); + }; + + /* OS-ID, OctetString, code 3841, section 6.3.62 */ + { + struct dict_avp_data data = { + 3841, /* Code */ + 10415, /* Vendor */ + "OS-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); + }; + + /* OS-App-ID, UTF8String, code 3842, section 6.3.63 */ + { + struct dict_avp_data data = { + 3842, /* Code */ + 10415, /* Vendor */ + "OS-App-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); + }; + + /* Requesting-RPAUID, UTF8String, code 3843, section 6.3.64 */ + { + struct dict_avp_data data = { + 3843, /* Code */ + 10415, /* Vendor */ + "Requesting-RPAUID", /* 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); + }; + + /* Target-RPAUID, UTF8String, code 3844, section 6.3.65 */ + { + struct dict_avp_data data = { + 3844, /* Code */ + 10415, /* Vendor */ + "Target-RPAUID", /* 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); + }; + + /* Target-PDUID, OctetString, code 3845, section 6.3.66 */ + { + struct dict_avp_data data = { + 3845, /* Code */ + 10415, /* Vendor */ + "Target-PDUID", /* 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); + }; + + /* ProSe-Restricted-Code, OctetString, code 3846, section 6.3.67 */ + { + struct dict_avp_data data = { + 3846, /* Code */ + 10415, /* Vendor */ + "ProSe-Restricted-Code", /* 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); + }; + + /* ProSe-Restricted-Code-Suffix-Range, OctetString, code 3847, section 6.3.68 */ + { + struct dict_avp_data data = { + 3847, /* Code */ + 10415, /* Vendor */ + "ProSe-Restricted-Code-Suffix-Range", /* 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); + }; + + /* Beginning-Suffix, OctetString, code 3848, section 6.3.69 */ + { + struct dict_avp_data data = { + 3848, /* Code */ + 10415, /* Vendor */ + "Beginning-Suffix", /* 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); + }; + + /* Ending-Suffix, OctetString, code 3849, section 6.3.70 */ + { + struct dict_avp_data data = { + 3849, /* Code */ + 10415, /* Vendor */ + "Ending-Suffix", /* 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); + }; + + /* Discovery-Entry-ID, Unsigned32, code 3850, section 6.3.59 */ + { + struct dict_avp_data data = { + 3850, /* Code */ + 10415, /* Vendor */ + "Discovery-Entry-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); + }; + + /* Match-Timestamp, Time, code 3851, section 6.3.71 */ + { + struct dict_avp_data data = { + 3851, /* Code */ + 10415, /* Vendor */ + "Match-Timestamp", /* 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); + }; + + /* PMR-Flags, Unsigned32, code 3852, section 6.3.57 */ + { + struct dict_avp_data data = { + 3852, /* Code */ + 10415, /* Vendor */ + "PMR-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); + }; + + /* ProSe-Application-Metadata, UTF8String, code 3853, section 6.3.58 */ + { + struct dict_avp_data data = { + 3853, /* Code */ + 10415, /* Vendor */ + "ProSe-Application-Metadata", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); + }; + + /* Discovery-Auth-Request, Grouped, code 3854, section 6.3.53 */ + { + struct dict_avp_data data = { + 3854, /* Code */ + 10415, /* Vendor */ + "Discovery-Auth-Request", /* 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); + }; + + /* Discovery-Auth-Response, Grouped, code 3855, section 6.3.54 */ + { + struct dict_avp_data data = { + 3855, /* Code */ + 10415, /* Vendor */ + "Discovery-Auth-Response", /* 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); + }; + + /* Match-Request, Grouped, code 3856, section 6.3.55 */ + { + struct dict_avp_data data = { + 3856, /* Code */ + 10415, /* Vendor */ + "Match-Request", /* 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); + }; + + /* Match-Report-Info, Grouped, code 3857, section 6.3.56 */ + { + struct dict_avp_data data = { + 3857, /* Code */ + 10415, /* Vendor */ + "Match-Report-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); + }; + + /* Banned-RPAUID, UTF8String, code 3858, section 6.3.73 */ + { + struct dict_avp_data data = { + 3858, /* Code */ + 10415, /* Vendor */ + "Banned-RPAUID", /* 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); + }; + + /* Banned-PDUID, OctetString, code 3859, section 6.3.74 */ + { + struct dict_avp_data data = { + 3859, /* Code */ + 10415, /* Vendor */ + "Banned-PDUID", /* 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); + }; + + /* Code-Receiving-Security-Material, Grouped, code 3860, section 6.3.75 */ + { + struct dict_avp_data data = { + 3860, /* Code */ + 10415, /* Vendor */ + "Code-Receiving-Security-Material", /* 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); + }; + + /* Code-Sending-Security-Material, Grouped, code 3861, section 6.3.76 */ + { + struct dict_avp_data data = { + 3861, /* Code */ + 10415, /* Vendor */ + "Code-Sending-Security-Material", /* 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); + }; + + /* DUSK, OctetString, code 3862, section 6.3.77 */ + { + struct dict_avp_data data = { + 3862, /* Code */ + 10415, /* Vendor */ + "DUSK", /* 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); + }; + + /* DUIK, OctetString, code 3863, section 6.3.78 */ + { + struct dict_avp_data data = { + 3863, /* Code */ + 10415, /* Vendor */ + "DUIK", /* 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); + }; + + /* DUCK, OctetString, code 3864, section 6.3.79 */ + { + struct dict_avp_data data = { + 3864, /* Code */ + 10415, /* Vendor */ + "DUCK", /* 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); + }; + + /* Note: 3GPP TS 29.345 Table 6.3.1-1 row MIC-Check-indicator (3865) has */ + /* incorrect name and should be "MIC-Check-Indicator" per clause 6.3.80. */ + /* */ + /* Fix: MIC-Check-indicator (3865) renamed to MIC-Check-Indicator (3865). */ + /* MIC-Check-Indicator, Unsigned32, code 3865, section 6.3.80 */ + { + struct dict_avp_data data = { + 3865, /* Code */ + 10415, /* Vendor */ + "MIC-Check-Indicator", /* 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); + }; + + /* Encrypted-Bitmask, OctetString, code 3866, section 6.3.81 */ + { + struct dict_avp_data data = { + 3866, /* Code */ + 10415, /* Vendor */ + "Encrypted-Bitmask", /* 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); + }; + + /* ProSe-App-Code-Suffix-Range, OctetString, code 3867, section 6.3.82 */ + { + struct dict_avp_data data = { + 3867, /* Code */ + 10415, /* Vendor */ + "ProSe-App-Code-Suffix-Range", /* 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); + }; + + /* PC5-tech, OctetString, code 3868, section 6.3.84 */ + { + struct dict_avp_data data = { + 3868, /* Code */ + 10415, /* Vendor */ + "PC5-tech", /* 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 TS 29.368 V15.1.0 (2019-09) */ + /* Tsp interface protocol between the MTC Interworking Function */ + /* (MTC-IWF) and Service Capability Server (SCS) */ + /* */ + /* From 3GPP 29368-f10.doc */ + /*==================================================================*/ + + /*==================================================================*/ + /* 3GPP TS 29.368 Table 6.4.1.1: Tsp specific Diameter AVPs */ + /*==================================================================*/ + + /* Device-Action, Grouped, code 3001, section 6. 4.2 */ + { + struct dict_avp_data data = { + 3001, /* Code */ + 10415, /* Vendor */ + "Device-Action", /* 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); + }; + + /* Device-Notification, Grouped, code 3002, section 6.4.3 */ + { + struct dict_avp_data data = { + 3002, /* Code */ + 10415, /* Vendor */ + "Device-Notification", /* 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-Data, Grouped, code 3003, section 6.4.4 */ + { + struct dict_avp_data data = { + 3003, /* Code */ + 10415, /* Vendor */ + "Trigger-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); + }; + + /* Payload, OctetString, code 3004, section 6.4.5 */ + { + struct dict_avp_data data = { + 3004, /* Code */ + 10415, /* Vendor */ + "Payload", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); + }; + + /* Action-Type, Enumerated, code 3005, section 6.4.6 */ + { + struct dict_avp_data data = { + 3005, /* Code */ + 10415, /* Vendor */ + "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, "Enumerated(3GPP/Action-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Priority-Indication, Enumerated, code 3006, section 6.4.7 */ + { + struct dict_avp_data data = { + 3006, /* Code */ + 10415, /* Vendor */ + "Priority-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, "Enumerated(3GPP/Priority-Indication)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Reference-Number, Unsigned32, code 3007, section 6.4.8 */ + { + struct dict_avp_data data = { + 3007, /* Code */ + 10415, /* Vendor */ + "Reference-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); + }; + + /* Request-Status, Enumerated, code 3008, section 6.4.9 */ + { + struct dict_avp_data data = { + 3008, /* Code */ + 10415, /* Vendor */ + "Request-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, "Enumerated(3GPP/Request-Status)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Delivery-Outcome, Enumerated, code 3009, section 6.4.10 */ + { + struct dict_avp_data data = { + 3009, /* Code */ + 10415, /* Vendor */ + "Delivery-Outcome", /* 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, "Enumerated(3GPP/Delivery-Outcome)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Application-Port-Identifier, Unsigned32, code 3010, section 6.4.11 */ + { + struct dict_avp_data data = { + 3010, /* Code */ + 10415, /* Vendor */ + "Application-Port-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); + }; + + /* Old-Reference-Number, Unsigned32, code 3011, section 6.4.12 */ + { + struct dict_avp_data data = { + 3011, /* Code */ + 10415, /* Vendor */ + "Old-Reference-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); + }; + + /* Feature-Supported-In-Final-Target, Unsigned32, code 3012, section 6.4.13 */ + { + struct dict_avp_data data = { + 3012, /* Code */ + 10415, /* Vendor */ + "Feature-Supported-In-Final-Target", /* 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); + }; + + /*==================================================================*/ + /* 3GPP TS 29.388 V15.1.0 (2019-09) */ + /* V2X Control Function to Home Subscriber Server (HSS) */ + /* aspects (V4); */ + /* Stage 3 */ + /* */ + /* From 3GPP 29388-f10.doc */ + /*==================================================================*/ + + /*==================================================================*/ + /* 3GPP TS 29.388 Table 6.3.1-1: V4 specific Diameter AVPs */ + /*==================================================================*/ + + /* V2X-PC5-Allowed-PLMN, Grouped, code 4600, section 6.3.3 */ + { + struct dict_avp_data data = { + 4600, /* Code */ + 10415, /* Vendor */ + "V2X-PC5-Allowed-PLMN", /* 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); + }; + + /* V2X-Update-Flags, Unsigned32, code 4601, section 6.3.4 */ + { + struct dict_avp_data data = { + 4601, /* Code */ + 10415, /* Vendor */ + "V2X-Update-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); + }; + + /* V2X-Notify-Flags, Unsigned32, code 4602, section 6.3.5 */ + { + struct dict_avp_data data = { + 4602, /* Code */ + 10415, /* Vendor */ + "V2X-Notify-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); + }; + + /*==================================================================*/ + /* 3GPP TS 29.389 V15.1.0 (2019-09) */ + /* Inter-V2X Control Function Signalling aspects (V6); */ + /* Stage 3 */ + /* */ + /* From 3GPP 29389-f10.doc */ + /*==================================================================*/ + + /*==================================================================*/ + /* 3GPP TS 29.389 Table 6.3.1-1: V6 specific Diameter AVPs */ + /* */ + /* Fix: All AVPs were missing M and V; assume MUST for both. */ + /*==================================================================*/ + + /* V2X-Authorization-Data, Grouped, code 4700, section 6.3.2 */ + { + struct dict_avp_data data = { + 4700, /* Code */ + 10415, /* Vendor */ + "V2X-Authorization-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); + }; + + /* V2X-Permission-in-VPLMN, Unsigned32, code 4701, section 6.3.3 */ + { + struct dict_avp_data data = { + 4701, /* Code */ + 10415, /* Vendor */ + "V2X-Permission-in-VPLMN", /* 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); + }; + + /* V2X-Application-Server, Grouped, code 4702, section 6.3.4 */ + { + struct dict_avp_data data = { + 4702, /* Code */ + 10415, /* Vendor */ + "V2X-Application-Server", /* 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); + }; + + /*==================================================================*/ + /* 3GPP TS 29.468 V15.8.0 (2019-12) */ + /* Group Communication System Enablers for LTE (GCSE_LTE); */ + /* MB2 Reference Point; */ + /* Stage 3 */ + /* */ + /* From 3GPP 29468-f80.doc */ + /*==================================================================*/ + + /*==================================================================*/ + /* 3GPP TS 29.468 Table 6.4.1 1: MB2 C specific Diameter AVPs */ + /*==================================================================*/ + + /* BMSC-Address, Address, code 3500, section 6.4.2 */ + { + struct dict_avp_data data = { + 3500, /* Code */ + 10415, /* Vendor */ + "BMSC-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); + }; + + /* BMSC-Port, Unsigned32, code 3501, section 6.4.3 */ + { + struct dict_avp_data data = { + 3501, /* Code */ + 10415, /* Vendor */ + "BMSC-Port", /* 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); + }; + + /* Common-Tunnel-Endpoint-Identifier, OctetString, code 3524, section 6.4.26 */ + { + struct dict_avp_data data = { + 3524, /* Code */ + 10415, /* Vendor */ + "Common-Tunnel-Endpoint-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); + }; + + /* FEC-Request, OctetString, code 3525, section 6.4.27 */ + { + struct dict_avp_data data = { + 3525, /* Code */ + 10415, /* Vendor */ + "FEC-Request", /* 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); + }; + + /* FEC-Result, Unsigned32, code 3531, section 6.4.33 */ + { + struct dict_avp_data data = { + 3531, /* Code */ + 10415, /* Vendor */ + "FEC-Result", /* 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); + }; + + /* Local-M1-Information, Grouped, code 3518, section 6.4.20 */ + { + struct dict_avp_data data = { + 3518, /* Code */ + 10415, /* Vendor */ + "Local-M1-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); + }; + + /* Local-MB2-U-Information, Grouped, code 3519, section 6.4.21 */ + { + struct dict_avp_data data = { + 3519, /* Code */ + 10415, /* Vendor */ + "Local-MB2-U-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); + }; + + /* MB2U-Security, Unsigned32, code 3517, section 6.4.19 */ + { + struct dict_avp_data data = { + 3517, /* Code */ + 10415, /* Vendor */ + "MB2U-Security", /* 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); + }; + + /* MBMS-Bearer-Event, Unsigned32, code 3502, section 6.4.4 */ + { + struct dict_avp_data data = { + 3502, /* Code */ + 10415, /* Vendor */ + "MBMS-Bearer-Event", /* 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); + }; + + /* MBMS-Bearer-Event-Notification, Grouped, code 3503, section 6.4.5 */ + { + struct dict_avp_data data = { + 3503, /* Code */ + 10415, /* Vendor */ + "MBMS-Bearer-Event-Notification", /* 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-Bearer-Request, Grouped, code 3504, section 6.4.6 */ + { + struct dict_avp_data data = { + 3504, /* Code */ + 10415, /* Vendor */ + "MBMS-Bearer-Request", /* 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-Bearer-Response, Grouped, code 3505, section 6.4.7 */ + { + struct dict_avp_data data = { + 3505, /* Code */ + 10415, /* Vendor */ + "MBMS-Bearer-Response", /* 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-Bearer-Result, Unsigned32, code 3506, section 6.4.8 */ + { + struct dict_avp_data data = { + 3506, /* Code */ + 10415, /* Vendor */ + "MBMS-Bearer-Result", /* 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); + }; + + /* MBMS-eNB-IP-Multicast-Address, Address, code 3520, section 6.4.22 */ + { + struct dict_avp_data data = { + 3520, /* Code */ + 10415, /* Vendor */ + "MBMS-eNB-IP-Multicast-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); + }; + + /* MBMS-eNB-IPv6-Multicast-Address, Address, code 3521, section 6.4.23 */ + { + struct dict_avp_data data = { + 3521, /* Code */ + 10415, /* Vendor */ + "MBMS-eNB-IPv6-Multicast-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); + }; + + /* Note: Name conflict with 3GPP TS 29.061 MBMS-GW-SSM-IP-Address (924). */ + /* 3GPP TS 29.061 V10.4.0 (2011-09) CR 0355 added MBMS-GW-SSM-IP-Address (924). */ + /* 3GPP TS 29.468 V14.0.0 (2016-12) CR 0021 added MBMS-GW-SSM-IP-Address (3522). */ + /* */ + /* Fix: MBMS-GW-SSM-IP-Address (3522) renamed to MBMS-GW-SSM-IP-Address-29.468 (3522). */ + /* MBMS-GW-SSM-IP-Address-29.468, Address, code 3522, section 6.4.24 */ + { + struct dict_avp_data data = { + 3522, /* Code */ + 10415, /* Vendor */ + "MBMS-GW-SSM-IP-Address-29.468", /* 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); + }; + + /* Note: Name conflict with 3GPP TS 29.061 MBMS-GW-SSM-IPv6-Address (925). */ + /* 3GPP TS 29.061 V10.4.0 (2011-09) CR 0355 added MBMS-GW-SSM-IPv6-Address (925). */ + /* 3GPP TS 29.061 V12.6.0 (2014-06) renamed */ + /* MBMS-GW-SSM-IPv6-Address (925) to MBMS-GW-SSM-Ipv6-Address. */ + /* 3GPP TS 29.468 V14.0.0 (2016-12) CR 0021 added MBMS-GW-SSM-IPv6-Address (3523). */ + /* */ + /* Fix: MBMS-GW-SSM-IPv6-Address (3523) renamed to MBMS-GW-SSM-IPv6-Address-29.468 (3523). */ + /* MBMS-GW-SSM-IPv6-Address-29.468, Address, code 3523, section 6.4.25 */ + { + struct dict_avp_data data = { + 3523, /* Code */ + 10415, /* Vendor */ + "MBMS-GW-SSM-IPv6-Address-29.468", /* 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); + }; + + /* MBMS-Start-Time, Time, code 3507, section 6.4.9 */ + { + struct dict_avp_data data = { + 3507, /* Code */ + 10415, /* Vendor */ + "MBMS-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); + }; + + /* Note: Name conflict with 3GPP TS 32.299 Radio-Frequency (3462). */ + /* 3GPP TS 29.468 V12.0.0 (2014-09) added Radio-Frequency (3508). */ + /* 3GPP TS 32.299 V13.1.0 (2015-06) CR 0638 added Radio-Frequency (3462). */ + /* */ + /* Fix: Radio-Frequency (3508) renamed to Radio-Frequency-29.468 (3508). */ + /* Radio-Frequency-29.468, Unsigned32, code 3508, section 6.4.10 */ + { + struct dict_avp_data data = { + 3508, /* Code */ + 10415, /* Vendor */ + "Radio-Frequency-29.468", /* 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); + }; + + /* ROHC-Full-Header-Periodicity, Float32, code 3527, section 6.4.29 */ + { + struct dict_avp_data data = { + 3527, /* Code */ + 10415, /* Vendor */ + "ROHC-Full-Header-Periodicity", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_FLOAT32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* ROHC-Max-CID, Unsigned32, code 3532, section 6.4.34 */ + { + struct dict_avp_data data = { + 3532, /* Code */ + 10415, /* Vendor */ + "ROHC-Max-CID", /* 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); + }; + + /* ROHC-Profile, Unsigned32, code 3528, section 6.4.30 */ + { + struct dict_avp_data data = { + 3528, /* Code */ + 10415, /* Vendor */ + "ROHC-Profile", /* 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); + }; + + /* ROHC-Request, Grouped, code 3526, section 6.4.28 */ + { + struct dict_avp_data data = { + 3526, /* Code */ + 10415, /* Vendor */ + "ROHC-Request", /* 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); + }; + + /* ROHC-Result, Unsigned32, code 3530, section 6.4.32 */ + { + struct dict_avp_data data = { + 3530, /* Code */ + 10415, /* Vendor */ + "ROHC-Result", /* 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); + }; + + /* TMGI-Allocation-Request, Grouped, code 3509, section 6.4.11 */ + { + struct dict_avp_data data = { + 3509, /* Code */ + 10415, /* Vendor */ + "TMGI-Allocation-Request", /* 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); + }; + + /* TMGI-Allocation-Response, Grouped, code 3510, section 6.4.12 */ + { + struct dict_avp_data data = { + 3510, /* Code */ + 10415, /* Vendor */ + "TMGI-Allocation-Response", /* 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); + }; + + /* TMGI-Allocation-Result, Unsigned32, code 3511, section 6.4.13 */ + { + struct dict_avp_data data = { + 3511, /* Code */ + 10415, /* Vendor */ + "TMGI-Allocation-Result", /* 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); + }; + + /* TMGI-Deallocation-Request, Grouped, code 3512, section 6.4.14 */ + { + struct dict_avp_data data = { + 3512, /* Code */ + 10415, /* Vendor */ + "TMGI-Deallocation-Request", /* 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); + }; + + /* TMGI-Deallocation-Response, Grouped, code 3513, section 6.4.15 */ + { + struct dict_avp_data data = { + 3513, /* Code */ + 10415, /* Vendor */ + "TMGI-Deallocation-Response", /* 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); + }; + + /* TMGI-Deallocation-Result, Unsigned32, code 3514, section 6.4.16 */ + { + struct dict_avp_data data = { + 3514, /* Code */ + 10415, /* Vendor */ + "TMGI-Deallocation-Result", /* 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); + }; + + /* TMGI-Expiry, Grouped, code 3515, section 6.4.17 */ + { + struct dict_avp_data data = { + 3515, /* Code */ + 10415, /* Vendor */ + "TMGI-Expiry", /* 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); + }; + + /* TMGI-Number, Unsigned32, code 3516, section 6.4.18 */ + { + struct dict_avp_data data = { + 3516, /* Code */ + 10415, /* Vendor */ + "TMGI-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); + }; + + /* Userplane-Protocol-Result, Grouped, code 3529, section 6.4.31 */ + { + struct dict_avp_data data = { + 3529, /* Code */ + 10415, /* Vendor */ + "Userplane-Protocol-Result", /* 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); + }; + + /*==================================================================*/ + /* 3GPP TS 29.561 V16.3.0 (2020-03) */ + /* 5G System; Interworking between 5G Network and external */ + /* Data Networks; */ + /* Stage 3 */ + /* */ + /* From 3GPP 29561-g30.doc */ + /*==================================================================*/ + + /*==================================================================*/ + /* Table 12.4-1: N6 re-used Diameter AVPs */ + + /* Note: Only AVPs defined in 3GPP TS 29.561. */ + /*==================================================================*/ + + /* 3GPP-Notification, OctetString, code 110, section 11.3.1 */ + { + struct dict_avp_data data = { + 110, /* Code */ + 10415, /* Vendor */ + "3GPP-Notification", /* 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-UE-MAC-Address, OctetString, code 111, section 11.3.1 */ + { + struct dict_avp_data data = { + 111, /* Code */ + 10415, /* Vendor */ + "3GPP-UE-MAC-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-Authorization-Reference, OctetString, code 112, section 11.3.1 */ + { + struct dict_avp_data data = { + 112, /* Code */ + 10415, /* Vendor */ + "3GPP-Authorization-Reference", /* 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-Policy-Reference, OctetString, code 113, section 11.3.1 */ + { + struct dict_avp_data data = { + 113, /* Code */ + 10415, /* Vendor */ + "3GPP-Policy-Reference", /* 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-Session-AMBR, OctetString, code 114, section 11.3.1 */ + { + struct dict_avp_data data = { + 114, /* Code */ + 10415, /* Vendor */ + "3GPP-Session-AMBR", /* 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-NAI, OctetString, code 115, section 11.3.1 */ + { + struct dict_avp_data data = { + 115, /* Code */ + 10415, /* Vendor */ + "3GPP-NAI", /* 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-Session-AMBR-v2, OctetString, code 116, section 11.3.1 */ + { + struct dict_avp_data data = { + 116, /* Code */ + 10415, /* Vendor */ + "3GPP-Session-AMBR-v2", /* 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-IP-Address-Pool-Id, OctetString, code 118, section 11.3.1 */ + { + struct dict_avp_data data = { + 118, /* Code */ + 10415, /* Vendor */ + "3GPP-IP-Address-Pool-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); + }; + + /*==================================================================*/ + /* Table 17.4-1: Additional information needed for network slice specific authentication */ + /*==================================================================*/ + + /* 3GPP-S-NSSAI, UTF8String, code 200, section 16.3.1 */ + { + struct dict_avp_data data = { + 200, /* Code */ + 10415, /* Vendor */ + "3GPP-S-NSSAI", /* 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 TS 32.299 V15.7.0 (2019-06) */ + /* Charging management; */ + /* Diameter charging applications */ + /* */ + /* From 3GPP 32299-f70.doc */ + /*==================================================================*/ + + /*==================================================================*/ + /* 3GPP TS 32.299 Table 7.2.0.1: 3GPP specific AVPs */ + /*==================================================================*/ + + /* 3GPP-OC-Specific-Reduction, Grouped, code 1320 */ + { + struct dict_avp_data data = { + 1320, /* Code */ + 10415, /* Vendor */ + "3GPP-OC-Specific-Reduction", /* 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); + }; + + /* 3GPP-OC-Rating-Group, Unsigned32, code 1321 */ + { + struct dict_avp_data data = { + 1321, /* Code */ + 10415, /* Vendor */ + "3GPP-OC-Rating-Group", /* 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); + }; + + /* 3GPP-OC-Request-Type, Enumerated, code 1322 */ + { + struct dict_avp_data data = { + 1322, /* Code */ + 10415, /* Vendor */ + "3GPP-OC-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, "Enumerated(3GPP/3GPP-OC-Request-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Note: Name conflict with 3GPP TS 29.212 3GPP-PS-Data-Off-Status (2847). */ + /* 3GPP TS 29.212 V14.3.0 (2017-03) CR 1559 added 3GPP-PS-Data-Off-Status (2847). */ + /* 3GPP TS 32.299 V14.3.0 (2017-03) CR 0760 added 3GPP-PS-Data-Off-Status (4406). */ + /* */ + /* Fix: 3GPP-PS-Data-Off-Status (4406) renamed to 3GPP-PS-Data-Off-Status-32.299 (4406). */ + /* 3GPP-PS-Data-Off-Status-32.299, Enumerated, code 4406 */ + { + struct dict_avp_data data = { + 4406, /* Code */ + 10415, /* Vendor */ + "3GPP-PS-Data-Off-Status-32.299", /* 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, "Enumerated(3GPP/3GPP-PS-Data-Off-Status-32.299)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Access-Network-Info-Change, Grouped, code 4401 */ + { + struct dict_avp_data data = { + 4401, /* Code */ + 10415, /* Vendor */ + "Access-Network-Info-Change", /* 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, OctetString, code 1263 */ + { + 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, Grouped, code 2709 */ + { + 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, Enumerated, code 2710 */ + { + 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, "Enumerated(3GPP/Access-Transfer-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Account-Expiration, Time, code 2309 */ + { + 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, Grouped, code 2052 */ + { + 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, Enumerated, code 1217 */ + { + 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, "Enumerated(3GPP/Adaptations)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Additional-Content-Information, Grouped, code 1207 */ + { + 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-Exception-Reports, Enumerated, code 3936 */ + { + struct dict_avp_data data = { + 3936, /* Code */ + 10415, /* Vendor */ + "Additional-Exception-Reports", /* 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, "Enumerated(3GPP/Additional-Exception-Reports)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Additional-Type-Information, UTF8String, code 1205 */ + { + 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, UTF8String, code 897 */ + { + 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, Grouped, code 898 */ + { + 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); + }; + + /* Addressee-Type, Enumerated, code 1208 */ + { + 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, "Enumerated(3GPP/Addressee-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Address-Type, Enumerated, code 899 */ + { + 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, "Enumerated(3GPP/Address-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* AF-Correlation-Information, Grouped, code 1276 */ + { + 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); + }; + + /* Alternate-Charged-Party-Address, UTF8String, code 1280 */ + { + 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); + }; + + /* Announcement-Identifier, Unsigned32, code 3905 */ + { + struct dict_avp_data data = { + 3905, /* Code */ + 10415, /* Vendor */ + "Announcement-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); + }; + + /* Announcement-Information, Grouped, code 3904 */ + { + struct dict_avp_data data = { + 3904, /* Code */ + 10415, /* Vendor */ + "Announcement-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); + }; + + /* Announcement-Order, Unsigned32, code 3906 */ + { + struct dict_avp_data data = { + 3906, /* Code */ + 10415, /* Vendor */ + "Announcement-Order", /* 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); + }; + + /* Announcing-PLMN-ID, UTF8String, code 4408 */ + { + struct dict_avp_data data = { + 4408, /* Code */ + 10415, /* Vendor */ + "Announcing-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, UTF8String_type, NULL); + }; + + /* Announcing-UE-HPLMN-Identifier, UTF8String, code 3426 */ + { + struct dict_avp_data data = { + 3426, /* Code */ + 10415, /* Vendor */ + "Announcing-UE-HPLMN-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); + }; + + /* Announcing-UE-VPLMN-Identifier, UTF8String, code 3427 */ + { + struct dict_avp_data data = { + 3427, /* Code */ + 10415, /* Vendor */ + "Announcing-UE-VPLMN-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); + }; + + /* AoC-Cost-Information, Grouped, code 2053 */ + { + 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, Enumerated, code 2310 */ + { + 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, "Enumerated(3GPP/AoC-Format)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* AoC-Information, Grouped, code 2054 */ + { + 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, Enumerated, code 2055 */ + { + 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, "Enumerated(3GPP/AoC-Request-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* AoC-Service, Grouped, code 2311 */ + { + 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, Enumerated, code 2312 */ + { + 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, "Enumerated(3GPP/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, Enumerated, code 2313 */ + { + 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, "Enumerated(3GPP/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, Grouped, code 2314 */ + { + 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); + }; + + /* API-Content, UTF8String, code 1309 */ + { + struct dict_avp_data data = { + 1309, /* Code */ + 10415, /* Vendor */ + "API-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, UTF8String_type, NULL); + }; + + /* API-Direction, Enumerated, code 1310 */ + { + struct dict_avp_data data = { + 1310, /* Code */ + 10415, /* Vendor */ + "API-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, "Enumerated(3GPP/API-Direction)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* API-Identifier, OctetString, code 1311 */ + { + struct dict_avp_data data = { + 1311, /* Code */ + 10415, /* Vendor */ + "API-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); + }; + + /* API-Invocation-Timestamp, Time, code 1312 */ + { + struct dict_avp_data data = { + 1312, /* Code */ + 10415, /* Vendor */ + "API-Invocation-Timestamp", /* 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); + }; + + /* API-Network-Service-Node, Enumerated, code 1315 */ + { + struct dict_avp_data data = { + 1315, /* Code */ + 10415, /* Vendor */ + "API-Network-Service-Node", /* 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, "Enumerated(3GPP/API-Network-Service-Node)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* API-Result-Code, Unsigned32, code 1313 */ + { + struct dict_avp_data data = { + 1313, /* Code */ + 10415, /* Vendor */ + "API-Result-Code", /* 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); + }; + + /* API-Size, Unsigned64, code 1314 */ + { + struct dict_avp_data data = { + 1314, /* Code */ + 10415, /* Vendor */ + "API-Size", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_UNSIGNED64 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* APN-Rate-Control, Grouped, code 3933 */ + { + struct dict_avp_data data = { + 3933, /* Code */ + 10415, /* Vendor */ + "APN-Rate-Control", /* 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-Rate-Control-Downlink, Grouped, code 3934 */ + { + struct dict_avp_data data = { + 3934, /* Code */ + 10415, /* Vendor */ + "APN-Rate-Control-Downlink", /* 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-Rate-Control-Uplink, Grouped, code 3935 */ + { + struct dict_avp_data data = { + 3935, /* Code */ + 10415, /* Vendor */ + "APN-Rate-Control-Uplink", /* 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, UTF8String, code 1218 */ + { + 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-Provided-Called-Party-Address, UTF8String, code 837 */ + { + 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); + }; + + /* Application-Server, UTF8String, code 836 */ + { + 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, Grouped, code 850 */ + { + 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-Specific-Data, OctetString, code 3458 */ + { + struct dict_avp_data data = { + 3458, /* Code */ + 10415, /* Vendor */ + "Application-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, NULL, NULL); + }; + + /* Associated-Party-Address, UTF8String, code 2035 */ + { + 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, UTF8String, code 856 */ + { + 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); + }; + + /* Authorised-QoS, UTF8String, code 849 */ + { + struct dict_avp_data data = { + 849, /* Code */ + 10415, /* Vendor */ + "Authorised-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); + }; + + /* Aux-Applic-Info, UTF8String, code 1219 */ + { + 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, Unsigned32, code 1265 */ + { + 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); + }; + + /* Basic-Service-Code, Grouped, code 3411 */ + { + struct dict_avp_data data = { + 3411, /* Code */ + 10415, /* Vendor */ + "Basic-Service-Code", /* 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); + }; + + /* Bearer-Capability, OctetString, code 3412 */ + { + struct dict_avp_data data = { + 3412, /* Code */ + 10415, /* Vendor */ + "Bearer-Capability", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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-Service, OctetString, code 854 */ + { + 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); + }; + + /* BSSID, UTF8String, code 2716 */ + { + struct dict_avp_data data = { + 2716, /* Code */ + 10415, /* Vendor */ + "BSSID", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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-Asserted-Identity, UTF8String, code 1250 */ + { + 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-Identity, UTF8String, code 3916 */ + { + struct dict_avp_data data = { + 3916, /* Code */ + 10415, /* Vendor */ + "Called-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-Identity-Change, Grouped, code 3917 */ + { + struct dict_avp_data data = { + 3917, /* Code */ + 10415, /* Vendor */ + "Called-Identity-Change", /* 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); + }; + + /* Called-Party-Address, UTF8String, code 832 */ + { + 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, UTF8String, code 831 */ + { + 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, UTF8String, code 2023 */ + { + 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, Integer32, code 861 */ + { + 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); + }; + + /* Cellular-Network-Information, OctetString, code 3924 */ + { + struct dict_avp_data data = { + 3924, /* Code */ + 10415, /* Vendor */ + "Cellular-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); + }; + + /* CG-Address, Address, code 846 */ + { + 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); + }; + + /* Change-Condition, Integer32, code 2037 */ + { + 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, Time, code 2038 */ + { + 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, Enumerated, code 2118 */ + { + 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, "Enumerated(3GPP/Charge-Reason-Code)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Charged-Party, UTF8String, code 857 */ + { + 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, Enumerated, code 2066 */ + { + 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, "Enumerated(3GPP/Charging-Characteristics-Selection-Mode)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Charging-Per-IP-CAN-Session-Indicator, Enumerated, code 4400 */ + { + struct dict_avp_data data = { + 4400, /* Code */ + 10415, /* Vendor */ + "Charging-Per-IP-CAN-Session-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, "Enumerated(3GPP/Charging-Per-IP-CAN-Session-Indicator)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Civic-Address-Information, UTF8String, code 1305 */ + { + struct dict_avp_data data = { + 1305, /* Code */ + 10415, /* Vendor */ + "Civic-Address-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, UTF8String_type, NULL); + }; + + /* Class-Identifier, Enumerated, code 1214 */ + { + 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, "Enumerated(3GPP/Class-Identifier)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Client-Address, Address, code 2018 */ + { + 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); + }; + + /* CN-Operator-Selection-Entity, Enumerated, code 3421 */ + { + struct dict_avp_data data = { + 3421, /* Code */ + 10415, /* Vendor */ + "CN-Operator-Selection-Entity", /* 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, "Enumerated(3GPP/CN-Operator-Selection-Entity)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Content-Class, Enumerated, code 1220 */ + { + 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, "Enumerated(3GPP/Content-Class)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Content-Disposition, UTF8String, code 828 */ + { + 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, Unsigned32, code 827 */ + { + 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, Unsigned32, code 1206 */ + { + 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, UTF8String, code 826 */ + { + 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); + }; + + /* Coverage-Info, Grouped, code 3459 */ + { + struct dict_avp_data data = { + 3459, /* Code */ + 10415, /* Vendor */ + "Coverage-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); + }; + + /* Coverage-Status, Enumerated, code 3428 */ + { + struct dict_avp_data data = { + 3428, /* Code */ + 10415, /* Vendor */ + "Coverage-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, "Enumerated(3GPP/Coverage-Status)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* CP-CIoT-EPS-Optimisation-Indicator, Enumerated, code 3930 */ + { + struct dict_avp_data data = { + 3930, /* Code */ + 10415, /* Vendor */ + "CP-CIoT-EPS-Optimisation-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, "Enumerated(3GPP/CP-CIoT-EPS-Optimisation-Indicator)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* CPDT-Information, Grouped, code 3927 */ + { + struct dict_avp_data data = { + 3927, /* Code */ + 10415, /* Vendor */ + "CPDT-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); + }; + + /* CSG-Access-Mode, Enumerated, code 2317 */ + { + 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, "Enumerated(3GPP/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, Enumerated, code 2318 */ + { + 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, "Enumerated(3GPP/CSG-Membership-Indication)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* CUG-Information, OctetString, code 2304 */ + { + 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); + }; + + /* Current-Tariff, Grouped, code 2056 */ + { + 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); + }; + + /* Data-Coding-Scheme, Integer32, code 2001 */ + { + 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, UTF8String, code 1230 */ + { + 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, Enumerated, code 1216 */ + { + 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, "Enumerated(3GPP/Delivery-Report-Requested)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Destination-Interface, Grouped, code 2002 */ + { + 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, Integer32, code 2039 */ + { + 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); + }; + + /* Discoveree-UE-HPLMN-Identifier, UTF8String, code 4402 */ + { + struct dict_avp_data data = { + 4402, /* Code */ + 10415, /* Vendor */ + "Discoveree-UE-HPLMN-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); + }; + + /* Discoveree-UE-VPLMN-Identifier, UTF8String, code 4403 */ + { + struct dict_avp_data data = { + 4403, /* Code */ + 10415, /* Vendor */ + "Discoveree-UE-VPLMN-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); + }; + + /* Discoverer-UE-HPLMN-Identifier, UTF8String, code 4404 */ + { + struct dict_avp_data data = { + 4404, /* Code */ + 10415, /* Vendor */ + "Discoverer-UE-HPLMN-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); + }; + + /* Discoverer-UE-VPLMN-Identifier, UTF8String, code 4405 */ + { + struct dict_avp_data data = { + 4405, /* Code */ + 10415, /* Vendor */ + "Discoverer-UE-VPLMN-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); + }; + + /* Domain-Name, UTF8String, code 1200 */ + { + 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); + }; + + /* DRM-Content, Enumerated, code 1221 */ + { + 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, "Enumerated(3GPP/DRM-Content)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Dynamic-Address-Flag, Enumerated, code 2051 */ + { + 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, "Enumerated(3GPP/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, Enumerated, code 2068 */ + { + 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, "Enumerated(3GPP/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, Grouped, code 1272 */ + { + 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); + }; + + /* Enhanced-Diagnostics, Grouped, code 3901 */ + { + struct dict_avp_data data = { + 3901, /* Code */ + 10415, /* Vendor */ + "Enhanced-Diagnostics", /* 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, Grouped, code 1266 */ + { + 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, Time, code 1267 */ + { + 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, Enumerated, code 1268 */ + { + 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, "Enumerated(3GPP/Envelope-Reporting)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Envelope-Start-Time, Time, code 1269 */ + { + 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); + }; + + /* EPDG-Address, Address, code 3425 */ + { + struct dict_avp_data data = { + 3425, /* Code */ + 10415, /* Vendor */ + "EPDG-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); + }; + + /* Event, UTF8String, code 825 */ + { + 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, Time, code 1258 */ + { + 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, Grouped, code 823 */ + { + 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, Unsigned32, code 888 */ + { + 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); + }; + + /* Exposure-Function-API-Information, Grouped, code 1316 */ + { + struct dict_avp_data data = { + 1316, /* Code */ + 10415, /* Vendor */ + "Exposure-Function-API-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); + }; + + /* FE-Identifier-List, UTF8String, code 4413 */ + { + struct dict_avp_data data = { + 4413, /* Code */ + 10415, /* Vendor */ + "FE-Identifier-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); + }; + + /* File-Repair-Supported, Enumerated, code 1224 */ + { + 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, "Enumerated(3GPP/File-Repair-Supported)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Forwarding-Pending, Enumerated, code 3415 */ + { + struct dict_avp_data data = { + 3415, /* Code */ + 10415, /* Vendor */ + "Forwarding-Pending", /* 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, "Enumerated(3GPP/Forwarding-Pending)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* From-Address, UTF8String, code 2708 */ + { + 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, Address, code 847 */ + { + 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, UTF8String, code 2601 */ + { + 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, UTF8String, code 841 */ + { + 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, UTF8String, code 1281 */ + { + 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, Enumerated, code 2322 */ + { + 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, "Enumerated(3GPP/IMS-Emergency-Indicator)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* IMS-Information, Grouped, code 876 */ + { + 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); + }; + + /* IMS-Visited-Network-Identifier, UTF8String, code 2713 */ + { + 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); + }; + + /* IMSI-Unauthenticated-Flag, Enumerated, code 2308 */ + { + 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, "Enumerated(3GPP/IMSI-Unauthenticated-Flag)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Incoming-Trunk-Group-Id, UTF8String, code 852 */ + { + 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, Grouped, code 2062 */ + { + 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, UTF8String, code 2321 */ + { + 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); + }; + + /* Instance-Id, UTF8String, code 3402 */ + { + 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); + }; + + /* Interface-Id, UTF8String, code 2003 */ + { + 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, UTF8String, code 2004 */ + { + 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, UTF8String, code 2005 */ + { + 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, Enumerated, code 2006 */ + { + 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, "Enumerated(3GPP/Interface-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Inter-Operator-Identifier, Grouped, code 838 */ + { + 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); + }; + + /* Inter-UE-Transfer, Enumerated, code 3902 */ + { + struct dict_avp_data data = { + 3902, /* Code */ + 10415, /* Vendor */ + "Inter-UE-Transfer", /* 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, "Enumerated(3GPP/Inter-UE-Transfer)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* IP-Realm-Default-Indication, Enumerated, code 2603 */ + { + 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, "Enumerated(3GPP/IP-Realm-Default-Indication)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* ISUP-Cause, Grouped, code 3416 */ + { + struct dict_avp_data data = { + 3416, /* Code */ + 10415, /* Vendor */ + "ISUP-Cause", /* 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); + }; + + /* ISUP-Cause-Diagnostics, OctetString, code 3422 */ + { + struct dict_avp_data data = { + 3422, /* Code */ + 10415, /* Vendor */ + "ISUP-Cause-Diagnostics", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); + }; + + /* ISUP-Cause-Location, Unsigned32, code 3423 */ + { + struct dict_avp_data data = { + 3423, /* Code */ + 10415, /* Vendor */ + "ISUP-Cause-Location", /* 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); + }; + + /* ISUP-Cause-Value, Unsigned32, code 3424 */ + { + struct dict_avp_data data = { + 3424, /* Code */ + 10415, /* Vendor */ + "ISUP-Cause-Value", /* 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); + }; + + /* ISUP-Location-Number, OctetString, code 3414 */ + { + struct dict_avp_data data = { + 3414, /* Code */ + 10415, /* Vendor */ + "ISUP-Location-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); + }; + + /* Language, UTF8String, code 3914 */ + { + struct dict_avp_data data = { + 3914, /* Code */ + 10415, /* Vendor */ + "Language", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); + }; + + /* Layer-2-Group-ID, OctetString, code 3429 */ + { + struct dict_avp_data data = { + 3429, /* Code */ + 10415, /* Vendor */ + "Layer-2-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, NULL, NULL); + }; + + /* LCS-APN, UTF8String, code 1231 */ + { + 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, UTF8String, code 1233 */ + { + 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, UTF8String, code 1234 */ + { + 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, Grouped, code 1232 */ + { + 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, Grouped, code 1235 */ + { + 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, Enumerated, code 1241 */ + { + 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, "Enumerated(3GPP/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, UTF8String, code 1236 */ + { + 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, Enumerated, code 1237 */ + { + 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, "Enumerated(3GPP/LCS-Format-Indicator)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* LCS-Information, Grouped, code 878 */ + { + 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, UTF8String, code 1238 */ + { + 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); + }; + + /* Note: 3GPP TS 32.299 V11.8.0 (2013-07) renamed */ + /* LCS-Requestor-Id (1239) to LCS-Requestor-ID (1239). */ + /* */ + /* Change-1.4.0: LCS-Requestor-Id (1239) renamed to LCS-Requestor-ID (1239). */ + /* LCS-Requestor-ID, Grouped, code 1239 */ + { + 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); + }; + + /* Note: 3GPP TS 32.299 V11.8.0 (2013-07) renamed */ + /* LCS-Requestor-Id-String (1240) to LCS-Requestor-ID-String (1240). */ + /* */ + /* Change-1.4.0: LCS-Requestor-Id-String (1240) renamed to LCS-Requestor-ID-String (1240). */ + /* LCS-Requestor-ID-String, UTF8String, code 1240 */ + { + 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, Enumerated, code 2604 */ + { + 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, "Enumerated(3GPP/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, Unsigned32, code 2063 */ + { + 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, OctetString, code 1242 */ + { + 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, Enumerated, code 1243 */ + { + 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, "Enumerated(3GPP/Location-Estimate-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Location-Info, Grouped, code 3460 */ + { + struct dict_avp_data data = { + 3460, /* Code */ + 10415, /* Vendor */ + "Location-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); + }; + + /* Location-Type, Grouped, code 1244 */ + { + 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, Enumerated, code 2020 */ + { + 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, "Enumerated(3GPP/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, Enumerated, code 2602 */ + { + 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, "Enumerated(3GPP/Low-Priority-Indicator)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* MBMS-Charged-Party, Enumerated, code 2323 */ + { + struct dict_avp_data data = { + 2323, /* Code */ + 10415, /* Vendor */ + "MBMS-Charged-Party", /* 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, "Enumerated(3GPP/MBMS-Charged-Party)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Note: 3GPP TS 32.299 V11.8.0 (2013-07) Table 7.2 changed */ + /* row MBMS-GW-Address (2307) to have a hyphen instead of space. */ + /* */ + /* Change-1.4.0: MBMSGW-Address (2307) renamed to MBMS-GW-Address (2307). */ + /* MBMS-GW-Address, Address, code 2307 */ + { + struct dict_avp_data data = { + 2307, /* Code */ + 10415, /* Vendor */ + "MBMS-GW-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, Grouped, code 880 */ + { + 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, Enumerated, code 1225 */ + { + 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, "Enumerated(3GPP/MBMS-User-Service-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Media-Initiator-Flag, Enumerated, code 882 */ + { + 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, "Enumerated(3GPP/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, UTF8String, code 1288 */ + { + 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, Grouped, code 889 */ + { + 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, Grouped, code 1213 */ + { + 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, UTF8String, code 1210 */ + { + 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, Unsigned32, code 1212 */ + { + 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, Enumerated, code 1211 */ + { + 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, "Enumerated(3GPP/Message-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* MMBox-Storage-Requested, Enumerated, code 1248 */ + { + 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, "Enumerated(3GPP/MMBox-Storage-Requested)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* MM-Content-Type, Grouped, code 1203 */ + { + 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); + }; + + /* MMS-Information, Grouped, code 877 */ + { + 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, Grouped, code 2030 */ + { + 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, Unsigned32, code 2031 */ + { + 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); + }; + + /* Monitored-PLMN-Identifier, UTF8String, code 3430 */ + { + struct dict_avp_data data = { + 3430, /* Code */ + 10415, /* Vendor */ + "Monitored-PLMN-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); + }; + + /* Monitoring-Event-Configuration-Activity, Integer32, code 3919 */ + { + struct dict_avp_data data = { + 3919, /* Code */ + 10415, /* Vendor */ + "Monitoring-Event-Configuration-Activity", /* 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); + }; + + /* Monitoring-Event-Functionality, Integer32, code 3922 */ + { + struct dict_avp_data data = { + 3922, /* Code */ + 10415, /* Vendor */ + "Monitoring-Event-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 */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Monitoring-Event-Information, Grouped, code 3921 */ + { + struct dict_avp_data data = { + 3921, /* Code */ + 10415, /* Vendor */ + "Monitoring-Event-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); + }; + + /* Monitoring-Event-Report-Data, Grouped, code 3920 */ + { + struct dict_avp_data data = { + 3920, /* Code */ + 10415, /* Vendor */ + "Monitoring-Event-Report-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); + }; + + /* Monitoring-Event-Report-Number, Unsigned32, code 3923 */ + { + struct dict_avp_data data = { + 3923, /* Code */ + 10415, /* Vendor */ + "Monitoring-Event-Report-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); + }; + + /* Monitoring-UE-HPLMN-Identifier, UTF8String, code 3431 */ + { + struct dict_avp_data data = { + 3431, /* Code */ + 10415, /* Vendor */ + "Monitoring-UE-HPLMN-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); + }; + + /* Monitoring-UE-Identifier, UTF8String, code 3432 */ + { + struct dict_avp_data data = { + 3432, /* Code */ + 10415, /* Vendor */ + "Monitoring-UE-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); + }; + + /* Monitoring-UE-VPLMN-Identifier, UTF8String, code 3433 */ + { + struct dict_avp_data data = { + 3433, /* Code */ + 10415, /* Vendor */ + "Monitoring-UE-VPLMN-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); + }; + + /* MSC-Address, OctetString, code 3417 */ + { + struct dict_avp_data data = { + 3417, /* Code */ + 10415, /* Vendor */ + "MSC-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); + }; + + /* MTC-IWF-Address, Address, code 3406 */ + { + struct dict_avp_data data = { + 3406, /* Code */ + 10415, /* Vendor */ + "MTC-IWF-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); + }; + + /* Neighbour-Node-Address, Address, code 2705 */ + { + 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); + }; + + /* Network-Call-Reference-Number, OctetString, code 3418 */ + { + struct dict_avp_data data = { + 3418, /* Code */ + 10415, /* Vendor */ + "Network-Call-Reference-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); + }; + + /* Next-Tariff, Grouped, code 2057 */ + { + 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); + }; + + /* NIDD-Submission, Grouped, code 3928 */ + { + struct dict_avp_data data = { + 3928, /* Code */ + 10415, /* Vendor */ + "NIDD-Submission", /* 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-Information, Grouped, code 2703 */ + { + 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, Enumerated, code 2704 */ + { + 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, "Enumerated(3GPP/NNI-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Node-Functionality, Enumerated, code 862 */ + { + 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, "Enumerated(3GPP/Node-Functionality)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Node-Id, UTF8String, code 2064 */ + { + 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, Unsigned32, code 2034 */ + { + 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, Unsigned32, code 2019 */ + { + 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, Unsigned32, code 885 */ + { + 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, Unsigned32, code 1282 */ + { + 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, Unsigned32, code 1283 */ + { + 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, UTF8String, code 2024 */ + { + 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, Grouped, code 1278 */ + { + 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, Enumerated, code 2303 */ + { + 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, "Enumerated(3GPP/Online-Charging-Flag)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Originating-IOI, UTF8String, code 839 */ + { + 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, Enumerated, code 864 */ + { + 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, "Enumerated(3GPP/Originator)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Originator-Address, Grouped, code 886 */ + { + 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, Grouped, code 2009 */ + { + 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, Grouped, code 2027 */ + { + 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, Address, code 2008 */ + { + 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, UTF8String, code 2320 */ + { + 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, UTF8String, code 853 */ + { + 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); + }; + + /* Participant-Access-Priority, Enumerated, code 1259 */ + { + 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, "Enumerated(3GPP/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, Enumerated, code 2049 */ + { + 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, "Enumerated(3GPP/Participant-Action-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Participant-Group, Grouped, code 1260 */ + { + 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, UTF8String, code 887 */ + { + 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); + }; + + /* PC3-Control-Protocol-Cause, Integer32, code 3434 */ + { + struct dict_avp_data data = { + 3434, /* Code */ + 10415, /* Vendor */ + "PC3-Control-Protocol-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 */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* PC3-EPC-Control-Protocol-Cause, Integer32, code 3435 */ + { + struct dict_avp_data data = { + 3435, /* Code */ + 10415, /* Vendor */ + "PC3-EPC-Control-Protocol-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 */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* PC5-Radio-Technology, Enumerated, code 1300 */ + { + struct dict_avp_data data = { + 1300, /* Code */ + 10415, /* Vendor */ + "PC5-Radio-Technology", /* 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, "Enumerated(3GPP/PC5-Radio-Technology)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* PDN-Connection-Charging-ID, Unsigned32, code 2050 */ + { + 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, Address, code 1227 */ + { + 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, Unsigned32, code 2606 */ + { + 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, Enumerated, code 1247 */ + { + 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, "Enumerated(3GPP/PDP-Context-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Change-1.4.0: PDG-Address (895) Address removed in 3GPP TS 32.299 V12.6.0 (2014-09). */ + + /* Change-1.4.0: PDG-Charging-Id (896) Unsigned32 removed in 3GPP TS 32.299 V12.6.0 (2014-09). */ + + /* Play-Alternative, Enumerated, code 3913 */ + { + struct dict_avp_data data = { + 3913, /* Code */ + 10415, /* Vendor */ + "Play-Alternative", /* 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, "Enumerated(3GPP/Play-Alternative)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* PoC-Change-Condition, Enumerated, code 1261 */ + { + 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, "Enumerated(3GPP/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, Time, code 1262 */ + { + 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, UTF8String, code 858 */ + { + 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, Enumerated, code 2025 */ + { + 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, "Enumerated(3GPP/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, UTF8String, code 859 */ + { + 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, Grouped, code 879 */ + { + 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, Enumerated, code 883 */ + { + 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, "Enumerated(3GPP/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, UTF8String, code 1229 */ + { + 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, Enumerated, code 1277 */ + { + 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, "Enumerated(3GPP/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, Enumerated, code 884 */ + { + 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, "Enumerated(3GPP/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, Grouped, code 1252 */ + { + 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, UTF8String, code 1253 */ + { + 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); + }; + + /* Note: 3GPP TS 32.299 V13.1.0 (2015-06) renamed */ + /* PoC-User-Role-info-Units (1254) to PoC-User-Role-Info-Units (1254). */ + /* */ + /* Change-1.4.0: PoC-User-Role-info-Units (1254) renamed to PoC-User-Role-Info-Units (1254). */ + /* PoC-User-Role-Info-Units, Enumerated, code 1254 */ + { + 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, "Enumerated(3GPP/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, UTF8String, code 1245 */ + { + 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, Unsigned32, code 2315 */ + { + 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, Enumerated, code 1209 */ + { + 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, "Enumerated(3GPP/Priority)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Privacy-Indicator, Enumerated, code 3915 */ + { + struct dict_avp_data data = { + 3915, /* Code */ + 10415, /* Vendor */ + "Privacy-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, "Enumerated(3GPP/Privacy-Indicator)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* ProSe-3rd-Party-Application-ID, UTF8String, code 3440 */ + { + struct dict_avp_data data = { + 3440, /* Code */ + 10415, /* Vendor */ + "ProSe-3rd-Party-Application-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); + }; + + /* ProSe-Direct-Communication-Reception-Data-Container, Grouped, code 3461 */ + { + struct dict_avp_data data = { + 3461, /* Code */ + 10415, /* Vendor */ + "ProSe-Direct-Communication-Reception-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); + }; + + /* ProSe-Direct-Communication-Transmission-Data-Container, Grouped, code 3441 */ + { + struct dict_avp_data data = { + 3441, /* Code */ + 10415, /* Vendor */ + "ProSe-Direct-Communication-Transmission-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); + }; + + /* ProSe-Direct-Discovery-Model, Enumerated, code 3442 */ + { + struct dict_avp_data data = { + 3442, /* Code */ + 10415, /* Vendor */ + "ProSe-Direct-Discovery-Model", /* 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, "Enumerated(3GPP/ProSe-Direct-Discovery-Model)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* ProSe-Event-Type, Enumerated, code 3443 */ + { + struct dict_avp_data data = { + 3443, /* Code */ + 10415, /* Vendor */ + "ProSe-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, "Enumerated(3GPP/ProSe-Event-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* ProSe-Function-IP-Address, Address, code 3444 */ + { + struct dict_avp_data data = { + 3444, /* Code */ + 10415, /* Vendor */ + "ProSe-Function-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); + }; + + /* ProSe-Function-PLMN-Identifier, UTF8String, code 3457 */ + { + struct dict_avp_data data = { + 3457, /* Code */ + 10415, /* Vendor */ + "ProSe-Function-PLMN-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); + }; + + /* ProSe-Functionality, Enumerated, code 3445 */ + { + struct dict_avp_data data = { + 3445, /* Code */ + 10415, /* Vendor */ + "ProSe-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, "Enumerated(3GPP/ProSe-Functionality)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* ProSe-Group-IP-Multicast-Address, Address, code 3446 */ + { + struct dict_avp_data data = { + 3446, /* Code */ + 10415, /* Vendor */ + "ProSe-Group-IP-Multicast-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); + }; + + /* ProSe-Information, Grouped, code 3447 */ + { + struct dict_avp_data data = { + 3447, /* Code */ + 10415, /* Vendor */ + "ProSe-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); + }; + + /* ProSe-Range-Class, Enumerated, code 3448 */ + { + struct dict_avp_data data = { + 3448, /* Code */ + 10415, /* Vendor */ + "ProSe-Range-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, "Enumerated(3GPP/ProSe-Range-Class)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* ProSe-Reason-For-Cancellation, Enumerated, code 3449 */ + { + struct dict_avp_data data = { + 3449, /* Code */ + 10415, /* Vendor */ + "ProSe-Reason-For-Cancellation", /* 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, "Enumerated(3GPP/ProSe-Reason-For-Cancellation)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* ProSe-Request-Timestamp, Time, code 3450 */ + { + struct dict_avp_data data = { + 3450, /* Code */ + 10415, /* Vendor */ + "ProSe-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); + }; + + /* ProSe-Role-Of-UE, Enumerated, code 3451 */ + { + struct dict_avp_data data = { + 3451, /* Code */ + 10415, /* Vendor */ + "ProSe-Role-Of-UE", /* 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, "Enumerated(3GPP/ProSe-Role-Of-UE)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* ProSe-Source-IP-Address, Address, code 3452 */ + { + struct dict_avp_data data = { + 3452, /* Code */ + 10415, /* Vendor */ + "ProSe-Source-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); + }; + + /* ProSe-Target-Layer-2-ID, OctetString, code 4410 */ + { + struct dict_avp_data data = { + 4410, /* Code */ + 10415, /* Vendor */ + "ProSe-Target-Layer-2-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); + }; + + /* ProSe-UE-ID, OctetString, code 3453 */ + { + struct dict_avp_data data = { + 3453, /* Code */ + 10415, /* Vendor */ + "ProSe-UE-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); + }; + + /* ProSe-UE-to-Network-Relay-UE-ID, OctetString, code 4409 */ + { + struct dict_avp_data data = { + 4409, /* Code */ + 10415, /* Vendor */ + "ProSe-UE-to-Network-Relay-UE-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); + }; + + /* Proximity-Alert-Indication, Enumerated, code 3454 */ + { + struct dict_avp_data data = { + 3454, /* Code */ + 10415, /* Vendor */ + "Proximity-Alert-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, "Enumerated(3GPP/Proximity-Alert-Indication)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Proximity-Alert-Timestamp, Time, code 3455 */ + { + struct dict_avp_data data = { + 3455, /* Code */ + 10415, /* Vendor */ + "Proximity-Alert-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); + }; + + /* Proximity-Cancellation-Timestamp, Time, code 3456 */ + { + struct dict_avp_data data = { + 3456, /* Code */ + 10415, /* Vendor */ + "Proximity-Cancellation-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); + }; + + /* PS-Append-Free-Format-Data, Enumerated, code 867 */ + { + 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, "Enumerated(3GPP/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, OctetString, code 866 */ + { + 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, Grouped, code 865 */ + { + 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, Grouped, code 874 */ + { + 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); + }; + + /* Quota-Consumption-Time, Unsigned32, code 881 */ + { + 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, Unsigned32, code 871 */ + { + 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); + }; + + /* Quota-Indicator, Enumerated, code 3912 */ + { + struct dict_avp_data data = { + 3912, /* Code */ + 10415, /* Vendor */ + "Quota-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, "Enumerated(3GPP/Quota-Indicator)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Note: Name conflict with 3GPP TS 32.299 Radio-Frequency (3508) */ + /* 3GPP TS 29.468 V12.0.0 (2014-09) added Radio-Frequency (3508). */ + /* 3GPP TS 32.299 V13.1.0 (2015-06) CR 0638 added Radio-Frequency (3462). */ + /* Radio-Frequency, OctetString, code 3462 */ + { + struct dict_avp_data data = { + 3462, /* Code */ + 10415, /* Vendor */ + "Radio-Frequency", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); + }; + + /* Radio-Parameter-Set-Info, Grouped, code 3463 */ + { + struct dict_avp_data data = { + 3463, /* Code */ + 10415, /* Vendor */ + "Radio-Parameter-Set-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); + }; + + /* Radio-Parameter-Set-Values, OctetString, code 3464 */ + { + struct dict_avp_data data = { + 3464, /* Code */ + 10415, /* Vendor */ + "Radio-Parameter-Set-Values", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); + }; + + /* Radio-Resources-Indicator, Integer32, code 3465 */ + { + struct dict_avp_data data = { + 3465, /* Code */ + 10415, /* Vendor */ + "Radio-Resources-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 */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* RAN-End-Time, Time, code 1301 */ + { + struct dict_avp_data data = { + 1301, /* Code */ + 10415, /* Vendor */ + "RAN-End-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); + }; + + /* RAN-Secondary-RAT-Usage-Report, Grouped, code 1302 */ + { + struct dict_avp_data data = { + 1302, /* Code */ + 10415, /* Vendor */ + "RAN-Secondary-RAT-Usage-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); + }; + + /* RAN-Start-Time, Time, code 1303 */ + { + struct dict_avp_data data = { + 1303, /* Code */ + 10415, /* Vendor */ + "RAN-Start-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); + }; + + /* Rate-Control-Max-Message-Size, Unsigned32, code 3937 */ + { + struct dict_avp_data data = { + 3937, /* Code */ + 10415, /* Vendor */ + "Rate-Control-Max-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); + }; + + /* Rate-Control-Max-Rate, Unsigned32, code 3938 */ + { + struct dict_avp_data data = { + 3938, /* Code */ + 10415, /* Vendor */ + "Rate-Control-Max-Rate", /* 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-Control-Time-Unit, Unsigned32, code 3939 */ + { + struct dict_avp_data data = { + 3939, /* Code */ + 10415, /* Vendor */ + "Rate-Control-Time-Unit", /* 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, Grouped, code 2058 */ + { + 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, Enumerated, code 1222 */ + { + 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, "Enumerated(3GPP/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, Grouped, code 2305 */ + { + 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); + }; + + /* Reason-Header, UTF8String, code 3401 */ + { + struct dict_avp_data data = { + 3401, /* Code */ + 10415, /* Vendor */ + "Reason-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, UTF8String_type, NULL); + }; + + /* Received-Talk-Burst-Time, Unsigned32, code 1284 */ + { + 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, Unsigned32, code 1285 */ + { + 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); + }; + + /* Note: Name conflict with 3GPP TS 32.299 Recipient-Address (1201); */ + /* 3GPP TS 29.140 V6.1.0 (2005-06) allocated Recipient-Address (1108). */ + /* 3GPP TS 32.299 V6.4.0 (2005-09) CR 0028 added Recipient-Address (1201). */ + /* Recipient-Address, Grouped, code 1201 */ + { + 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, Grouped, code 2026 */ + { + 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, Grouped, code 2028 */ + { + 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, Address, code 2010 */ + { + 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, OctetString, code 2022 */ + { + 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); + }; + + /* Related-Change-Condition-Information, Grouped, code 3925 */ + { + struct dict_avp_data data = { + 3925, /* Code */ + 10415, /* Vendor */ + "Related-Change-Condition-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); + }; + + /* Related-Trigger, Grouped, code 3926 */ + { + struct dict_avp_data data = { + 3926, /* Code */ + 10415, /* Vendor */ + "Related-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); + }; + + /* Related-IMS-Charging-Identifier, UTF8String, code 2711 */ + { + struct dict_avp_data data = { + 2711, /* Code */ + 10415, /* Vendor */ + "Related-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); + }; + + /* Related-IMS-Charging-Identifier-Node, Address, code 2712 */ + { + struct dict_avp_data data = { + 2712, /* Code */ + 10415, /* Vendor */ + "Related-IMS-Charging-Identifier-Node", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); + }; + + /* Relationship-Mode, Enumerated, code 2706 */ + { + 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, "Enumerated(3GPP/Relationship-Mode)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Relay-IP-address, Address, code 4411 */ + { + struct dict_avp_data data = { + 4411, /* Code */ + 10415, /* Vendor */ + "Relay-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); + }; + + /* Remaining-Balance, Grouped, code 2021 */ + { + 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, UTF8String, code 1223 */ + { + 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, Enumerated, code 2011 */ + { + 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, "Enumerated(3GPP/Reply-Path-Requested)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Reporting-Reason, Enumerated, code 872 */ + { + 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, "Enumerated(3GPP/Reporting-Reason)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Requested-Party-Address, UTF8String, code 1251 */ + { + 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); + }; + + /* Requested-PLMN-Identifier, UTF8String, code 3436 */ + { + struct dict_avp_data data = { + 3436, /* Code */ + 10415, /* Vendor */ + "Requested-PLMN-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); + }; + + /* Requestor-PLMN-Identifier, UTF8String, code 3437 */ + { + struct dict_avp_data data = { + 3437, /* Code */ + 10415, /* Vendor */ + "Requestor-PLMN-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); + }; + + /* Role-Of-Node, Enumerated, code 829 */ + { + 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, "Enumerated(3GPP/Role-Of-Node)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Role-Of-ProSe-Function, Enumerated, code 3438 */ + { + struct dict_avp_data data = { + 3438, /* Code */ + 10415, /* Vendor */ + "Role-Of-ProSe-Function", /* 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, "Enumerated(3GPP/Role-Of-ProSe-Function)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Route-Header-Received, UTF8String, code 3403 */ + { + 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, UTF8String, code 3404 */ + { + 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); + }; + + /* Scale-Factor, Grouped, code 2059 */ + { + 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); + }; + + /* SCEF-Address, Address, code 1317 */ + { + struct dict_avp_data data = { + 1317, /* Code */ + 10415, /* Vendor */ + "SCEF-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); + }; + + /* SCS-Address, Address, code 3941 */ + { + struct dict_avp_data data = { + 3941, /* Code */ + 10415, /* Vendor */ + "SCS-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); + }; + + /* SCS-AS-Address, Grouped, code 3940 */ + { + struct dict_avp_data data = { + 3940, /* Code */ + 10415, /* Vendor */ + "SCS-AS-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); + }; + + /* SCS-Realm, DiameterIdentity, code 3942 */ + { + struct dict_avp_data data = { + 3942, /* Code */ + 10415, /* Vendor */ + "SCS-Realm", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); + }; + + /* SDP-Answer-Timestamp, Time, code 1275 */ + { + 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, Grouped, code 843 */ + { + 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, UTF8String, code 845 */ + { + 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, UTF8String, code 844 */ + { + 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, Time, code 1274 */ + { + 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, UTF8String, code 842 */ + { + 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, Grouped, code 1273 */ + { + 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, Enumerated, code 2036 */ + { + 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, "Enumerated(3GPP/SDP-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Secondary-RAT-Type, OctetString, code 1304 */ + { + struct dict_avp_data data = { + 1304, /* Code */ + 10415, /* Vendor */ + "Secondary-RAT-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); + }; + + /* Serving-Node-Identity, DiameterIdentity, code 3929 */ + { + struct dict_avp_data data = { + 3929, /* Code */ + 10415, /* Vendor */ + "Serving-Node-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, DiameterIdentity_type, NULL); + }; + + /* Served-Party-IP-Address, Address, code 848 */ + { + 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, Grouped, code 2040 */ + { + 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, UTF8String, code 855 */ + { + 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, Grouped, code 873 */ + { + 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, Unsigned32, code 2032 */ + { + 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, UTF8String, code 863 */ + { + 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, Grouped, code 1249 */ + { + 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, Unsigned32, code 1257 */ + { + 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, Enumerated, code 2047 */ + { + 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, "Enumerated(3GPP/Serving-Node-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Session-Direction, Enumerated, code 2707 */ + { + 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, "Enumerated(3GPP/Session-Direction)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* SGi-PtP-Tunnelling-Method, Enumerated, code 3931 */ + { + struct dict_avp_data data = { + 3931, /* Code */ + 10415, /* Vendor */ + "SGi-PtP-Tunnelling-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, "Enumerated(3GPP/SGi-PtP-Tunnelling-Method)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* SGSN-Address, Address, code 1228 */ + { + 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, Address, code 2067 */ + { + 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, Enumerated, code 2065 */ + { + 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, "Enumerated(3GPP/SGW-Change)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* SIP-Method, UTF8String, code 824 */ + { + 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, Time, code 834 */ + { + 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, Unsigned32, code 2301 */ + { + 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, Time, code 835 */ + { + 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, Unsigned32, code 2302 */ + { + 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-Device-Trigger-Indicator, Enumerated, code 3407 */ + { + struct dict_avp_data data = { + 3407, /* Code */ + 10415, /* Vendor */ + "SM-Device-Trigger-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, "Enumerated(3GPP/SM-Device-Trigger-Indicator)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* SM-Device-Trigger-Information, Grouped, code 3405 */ + { + struct dict_avp_data data = { + 3405, /* Code */ + 10415, /* Vendor */ + "SM-Device-Trigger-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); + }; + + /* SM-Discharge-Time, Time, code 2012 */ + { + 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, Enumerated, code 2007 */ + { + 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, "Enumerated(3GPP/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, OctetString, code 2013 */ + { + 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-Sequence-Number, Unsigned32, code 3408 */ + { + struct dict_avp_data data = { + 3408, /* Code */ + 10415, /* Vendor */ + "SM-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); + }; + + /* SM-Service-Type, Enumerated, code 2029 */ + { + 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, "Enumerated(3GPP/SM-Service-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* SM-Status, OctetString, code 2014 */ + { + 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, OctetString, code 2015 */ + { + 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, Grouped, code 2000 */ + { + 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, Enumerated, code 2016 */ + { + 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, "Enumerated(3GPP/SMS-Node)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* SMS-Result, Unsigned32, code 3409 */ + { + struct dict_avp_data data = { + 3409, /* Code */ + 10415, /* Vendor */ + "SMS-Result", /* 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); + }; + + /* SMSC-Address, Address, code 2017 */ + { + 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); + }; + + /* Start-of-Charging, Time, code 3419 */ + { + struct dict_avp_data data = { + 3419, /* Code */ + 10415, /* Vendor */ + "Start-of-Charging", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); + }; + + /* Start-Time, Time, code 2041 */ + { + 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); + }; + + /* Note: 3GPP TS 32.299 V11.10.0 (2013-12) CR 0566 renamed */ + /* Status (2702) to Status-Code (2702). */ + /* 3GPP TS 32.299 V11.14.0 (2014-12) CR 0617 renamed */ + /* Status-Code (2702) to Status-AS-Code (2702). */ + /* */ + /* Change-1.4.0: Status (2702) renamed to Status-AS-Code (2702). */ + /* Status-AS-Code, Enumerated, code 2702 */ + { + struct dict_avp_data data = { + 2702, /* Code */ + 10415, /* Vendor */ + "Status-AS-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, "Enumerated(3GPP/Status-AS-Code)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Stop-Time, Time, code 2042 */ + { + 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, Time, code 1202 */ + { + 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, Enumerated, code 2033 */ + { + 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, "Enumerated(3GPP/Subscriber-Role)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Supplementary-Service, Grouped, code 2048 */ + { + 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); + }; + + /* TAD-Identifier, Enumerated, code 2717 */ + { + struct dict_avp_data data = { + 2717, /* Code */ + 10415, /* Vendor */ + "TAD-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, "Enumerated(3GPP/TAD-Identifier)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Talk-Burst-Exchange, Grouped, code 1255 */ + { + 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, Unsigned32, code 1286 */ + { + 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, Unsigned32, code 1287 */ + { + 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); + }; + + /* Target-IP-Address, Address, code 4412 */ + { + struct dict_avp_data data = { + 4412, /* Code */ + 10415, /* Vendor */ + "Target-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); + }; + + /* Tariff-Information, Grouped, code 2060 */ + { + 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, UTF8String, code 2306 */ + { + 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); + }; + + /* Teleservice, OctetString, code 3413 */ + { + struct dict_avp_data data = { + 3413, /* Code */ + 10415, /* Vendor */ + "Teleservice", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); + }; + + /* Terminating-IOI, UTF8String, code 840 */ + { + 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-Reception, Time, code 3466 */ + { + struct dict_avp_data data = { + 3466, /* Code */ + 10415, /* Vendor */ + "Time-First-Reception", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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-First-Transmission, Time, code 3467 */ + { + struct dict_avp_data data = { + 3467, /* Code */ + 10415, /* Vendor */ + "Time-First-Transmission", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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-First-Usage, Time, code 2043 */ + { + 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-Indicator, Unsigned32, code 3911 */ + { + struct dict_avp_data data = { + 3911, /* Code */ + 10415, /* Vendor */ + "Time-Indicator", /* 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-Last-Usage, Time, code 2044 */ + { + 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, Grouped, code 1270 */ + { + 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, Unsigned32, code 868 */ + { + 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, Enumerated, code 1271 */ + { + 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, "Enumerated(3GPP/Time-Quota-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Time-Stamps, Grouped, code 833 */ + { + 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, Unsigned32, code 2045 */ + { + 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); + }; + + /* TLTRI, Unsigned32, code 1318 */ + { + struct dict_avp_data data = { + 1318, /* Code */ + 10415, /* Vendor */ + "TLTRI", /* 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); + }; + + /* Token-Text, UTF8String, code 1215 */ + { + 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, Grouped, code 2046 */ + { + 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, Enumerated, code 2605 */ + { + 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, "Enumerated(3GPP/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, UTF8String, code 2701 */ + { + 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); + }; + + /* Transmitter-Info, Grouped, code 3468 */ + { + struct dict_avp_data data = { + 3468, /* Code */ + 10415, /* Vendor */ + "Transmitter-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); + }; + + /* Trigger, Grouped, code 1264 */ + { + 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, Enumerated, code 870 */ + { + 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, "Enumerated(3GPP/Trigger-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Trunk-Group-Id, Grouped, code 851 */ + { + 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); + }; + + /* TWAG-Address, Address, code 3903 */ + { + struct dict_avp_data data = { + 3903, /* Code */ + 10415, /* Vendor */ + "TWAG-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); + }; + + /* TWAN-User-Location-Info, Grouped, code 2714 */ + { + struct dict_avp_data data = { + 2714, /* Code */ + 10415, /* Vendor */ + "TWAN-User-Location-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); + }; + + /* Type-Number, Enumerated, code 1204 */ + { + 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, "Enumerated(3GPP/Type-Number)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* UNI-PDU-CP-Only-Flag, Enumerated, code 3932 */ + { + struct dict_avp_data data = { + 3932, /* Code */ + 10415, /* Vendor */ + "UNI-PDU-CP-Only-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, "Enumerated(3GPP/UNI-PDU-CP-Only-Flag)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Unit-Cost, Grouped, code 2061 */ + { + 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, Unsigned32, code 1226 */ + { + 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); + }; + + /* Unused-Quota-Timer, Unsigned32, code 4407 */ + { + struct dict_avp_data data = { + 4407, /* Code */ + 10415, /* Vendor */ + "Unused-Quota-Timer", /* 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); + }; + + /* Usage-Information-Report-Sequence-Number, Integer32, code 3439 */ + { + struct dict_avp_data data = { + 3439, /* Code */ + 10415, /* Vendor */ + "Usage-Information-Report-Sequence-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 */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* User-CSG-Information, Grouped, code 2319 */ + { + 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, Enumerated, code 1279 */ + { + 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, "Enumerated(3GPP/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, UTF8String, code 830 */ + { + 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); + }; + + /* UWAN-User-Location-Info, Grouped, code 3918 */ + { + struct dict_avp_data data = { + 3918, /* Code */ + 10415, /* Vendor */ + "UWAN-User-Location-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); + }; + + /* Variable-Part, Grouped, code 3907 */ + { + struct dict_avp_data data = { + 3907, /* Code */ + 10415, /* Vendor */ + "Variable-Part", /* 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); + }; + + /* Variable-Part-Order, Unsigned32, code 3908 */ + { + struct dict_avp_data data = { + 3908, /* Code */ + 10415, /* Vendor */ + "Variable-Part-Order", /* 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); + }; + + /* Variable-Part-Type, Unsigned32, code 3909 */ + { + struct dict_avp_data data = { + 3909, /* Code */ + 10415, /* Vendor */ + "Variable-Part-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); + }; + + /* Variable-Part-Value, UTF8String, code 3910 */ + { + struct dict_avp_data data = { + 3910, /* Code */ + 10415, /* Vendor */ + "Variable-Part-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, UTF8String_type, NULL); + }; + + /* VCS-Information, Grouped, code 3410 */ + { + struct dict_avp_data data = { + 3410, /* Code */ + 10415, /* Vendor */ + "VCS-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); + }; + + /* VLR-Number, OctetString, code 3420 */ + { + struct dict_avp_data data = { + 3420, /* Code */ + 10415, /* Vendor */ + "VLR-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); + }; + + /* Volume-Quota-Threshold, Unsigned32, code 869 */ + { + 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); + }; + + /* Change-1.4.0: WAG-Address (890) Address removed in 3GPP TS 32.299 V12.6.0 (2014-09). */ + + /* Change-1.4.0: WAG-PLMN-Id (891) OctetString removed in 3GPP TS 32.299 V12.6.0 (2014-09). */ + + /* Change-1.4.0: WLAN-Information (875) Grouped removed in 3GPP TS 32.299 V12.6.0 (2014-09). */ + + /* WLAN-Operator-Id, Grouped, code 1306 */ + { + struct dict_avp_data data = { + 1306, /* Code */ + 10415, /* Vendor */ + "WLAN-Operator-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); + }; + + /* WLAN-Operator-Name, UTF8String, code 1307 */ + { + struct dict_avp_data data = { + 1307, /* Code */ + 10415, /* Vendor */ + "WLAN-Operator-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); + }; + + /* WLAN-PLMN-Id, UTF8String, code 1308 */ + { + struct dict_avp_data data = { + 1308, /* Code */ + 10415, /* Vendor */ + "WLAN-PLMN-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); + }; + + /* Change-1.4.0: WLAN-Radio-Container (892) Grouped removed in 3GPP TS 32.299 V12.6.0 (2014-09). */ + + /* Change-1.4.0: WLAN-Session-Id (1246) UTF8String removed in 3GPP TS 32.299 V12.6.0 (2014-09). */ + + /* Change-1.4.0: WLAN-Technology (893) Unsigned32 removed in 3GPP TS 32.299 V12.6.0 (2014-09). */ + + /* Change-1.4.0: WLAN-UE-Local-IPAddress (894) Address removed in 3GPP TS 32.299 V12.6.0 (2014-09). */ + + /*==================================================================*/ + /* OMA DDS Charging_Data V1.0 20110201-A */ + /* Charging Data */ + /* */ + /* From OMA OMA-DDS-Charging_Data-V1_0-20110201-A.pdf */ + /*==================================================================*/ + + /* Application-Server-Id, UTF8String, code 2101, section 8.4 */ + { + 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); + }; + + /* Change-1.4.0: Application-Service-Type (2102) type changed from UTF8String to Enumerated. */ + /* Application-Service-Type, Enumerated, code 2102, section 8.4 */ + { + 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_INTEGER32 /* base type of data */ + }; + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(3GPP/Application-Service-Type)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* Change-1.4.0: Application–Session–Id (2103) type changed from UTF8String to Unsigned32. */ + /* Application-Session-Id, Unsigned32, code 2103, section 8.4 */ + { + 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_UNSIGNED32 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* Content-ID, UTF8String, code 2116, section 8.4 */ + { + 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, UTF8String, code 2117, section 8.4 */ + { + 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, Grouped, code 2115, section 8.5.5 */ + { + 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, UTF8String, code 2104, section 8.4 */ + { + 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, Grouped, code 2110, section 8.5.6 */ + { + 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, Unsigned32, code 2111, section 8.4 */ + { + 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, Unsigned32, code 2112, section 8.4 */ + { + 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, Grouped, code 1256, section 8.5.10 */ + { + 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, Unsigned32, code 2113, section 8.4 */ + { + 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, Unsigned32, code 2114, section 8.4 */ + { + 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); + }; + + /*==================================================================*/ + /* 3GPP2 X.S0057-0 v2.0 */ + /* E-UTRAN - eHRPD Connectivity and Interworking: */ + /* Core Network Aspects */ + /* */ + /* From 3GPP2 X.S0057-0_v2.0_091215.pdf */ + /*==================================================================*/ + + /* */ + /* Change-1.4.0: 3GPP2-BSID (9010) type changed from OctetString to UTF8String. */ + /* Change-1.4.0: 3GPP2-BSID (9010) flag M MUST. */ + /* 3GPP2-BSID, UTF8String, code 9010, section 5.6.2.1.1 */ + { + struct dict_avp_data data = { + 9010, /* Code */ + 5535, /* Vendor */ + "3GPP2-BSID", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); + }; + + return 0; +} /* add_avps() */ diff -r 6a35c5470ef4 -r 19ab8ac08a36 extensions/dict_dcca_3gpp/dict_dcca_3gpp.c --- a/extensions/dict_dcca_3gpp/dict_dcca_3gpp.c Tue Jul 07 01:24:48 2020 +0800 +++ b/extensions/dict_dcca_3gpp/dict_dcca_3gpp.c Tue Jul 07 01:41:54 2020 +0800 @@ -72,10 +72,9 @@ * 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 + * extension (the one that existed before 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. + * other. * * 2. 29.140 has conflicting AVP names with other documents: * - Sequence-Number is also in 32.329 @@ -98,7 +97,8 @@ 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; + vendor_id_t vendor; + char * name; enum rule_position position; int min; int max; @@ -110,6 +110,10 @@ #define PARSE_loc_rules( _rulearray, _parent) { \ int __ar; \ for (__ar=0; __ar < sizeof(_rulearray) / sizeof((_rulearray)[0]); __ar++) { \ + struct dict_avp_request __avp = { \ + .avp_vendor = (_rulearray)[__ar].vendor, \ + .avp_name = (_rulearray)[__ar].name, \ + }; \ struct dict_rule_data __data = { NULL, \ (_rulearray)[__ar].position, \ 0, \ @@ -120,16 +124,15 @@ fd_g_config->cnf_dict, \ DICT_AVP, \ AVP_BY_NAME_AND_VENDOR, \ - &(_rulearray)[__ar].avp_vendor_plus_name, \ + &__avp, \ &__data.rule_avp, 0 ) ); \ if ( !__data.rule_avp ) { \ - TRACE_DEBUG(INFO, "AVP Not found: '%s'", (_rulearray)[__ar].avp_vendor_plus_name.avp_name); \ + LOG_E( "AVP Not found: '%s'", __avp.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); \ + LOG_E( "Error on rule with AVP '%s'", __avp.avp_name); \ return EINVAL; \ } ); \ } \ @@ -144,7 +147,10 @@ static int dict_dcca_3gpp_entry(char * conffile) { - /* Applications section */ + /*==================================================================*/ + /* Applications section */ + /*==================================================================*/ + { /* Create the vendors */ { @@ -158,10115 +164,198 @@ } - - 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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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); - }; - - /* 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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/Role-Of-Node)", NULL, NULL, NULL }; - CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); - CHECK_dict_new(DICT_AVP, &data, 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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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, "Enumerated(3GPP/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); - }; + /*==================================================================*/ + /* AVPs section */ + /*==================================================================*/ - - - - /*****************************************************/ - /* end of generated data, rules below added manually */ - /*****************************************************/ - - - - /* 3GPP2-BSID */ + /* 3GPP Experimental-Result-Code ENUMVAL Unsigned32 */ + /* 3GPP TS 29.230 V15.7.0 (2019-12) section 8.1 */ { - 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 */ + struct dict_object *type; + struct dict_type_data tdata = { AVP_TYPE_UNSIGNED32, "Enumerated(3GPP/Experimental-Result-Code)", NULL, NULL}; + struct dict_enumval_data tvals[] = { + enumval_def_u32(2001, "DIAMETER_FIRST_REGISTRATION"), + enumval_def_u32(2002, "DIAMETER_SUBSEQUENT_REGISTRATION"), + enumval_def_u32(2003, "DIAMETER_UNREGISTERED_SERVICE"), + /* + * 3GPP TS 29.229 V5.3.0 (2003-03) renamed 2004 from DIAMETER_SUCCESS_NOT SUPPORTED_USER_DATA. + */ + enumval_def_u32(2004, "DIAMETER_SUCCESS_SERVER_NAME_NOT_STORED"), + /* + * 3GPP TS 29.229 V5.3.0 (2003-03) renamed 2005 from DIAMETER_SUCCESS_SERVER_NAME_NOT_STORED. + * 3GPP TS 29.229 V7.2.0 (2006-06) deprecated 2005 DIAMETER_SERVER_SELECTION. + */ + enumval_def_u32(2005, "DIAMETER_SERVER_SELECTION"), + enumval_def_u32(2021, "DIAMETER_PDP_CONTEXT_DELETION_INDICATION"), + enumval_def_u32(2421, "DIAMETER_QOS_FLOW_DELETION_INDICATION"), + enumval_def_u32(4100, "DIAMETER_USER_DATA_NOT_AVAILABLE"), + enumval_def_u32(4101, "DIAMETER_PRIOR_UPDATE_IN_PROGRESS"), + enumval_def_u32(4121, "DIAMETER_ERROR_OUT_OF_RESOURCES"), + enumval_def_u32(4141, "DIAMETER_PCC_BEARER_EVENT"), + enumval_def_u32(4142, "DIAMETER_BEARER_EVENT"), + enumval_def_u32(4143, "DIAMETER_AN_GW_FAILED"), + enumval_def_u32(4144, "DIAMETER_PENDING_TRANSACTION"), + enumval_def_u32(4145, "DIAMETER_UE_STATUS_SUSPEND"), + enumval_def_u32(4181, "DIAMETER_AUTHENTICATION_DATA_UNAVAILABLE"), + enumval_def_u32(4182, "DIAMETER_ERROR_CAMEL_SUBSCRIPTION_PRESENT"), + /* + * DIAMETER_ERROR_ABSENT_USER name conflict between: + * - 3GPP TS 29.173 § 6.3.4.1 DIAMETER_ERROR_ABSENT_USER (4201). (For SLh). + * - 3GPP TS 29.338 § 7.3.3 DIAMETER_ERROR_ABSENT_USER (5550). (For S6c, SGd). + * Rename 4201 from 3GPP TS 29.173 to DIAMETER_ERROR_ABSENT_USER-29.173. + */ + enumval_def_u32(4201, "DIAMETER_ERROR_ABSENT_USER-29.173"), + enumval_def_u32(4221, "DIAMETER_ERROR_UNREACHABLE_USER"), + enumval_def_u32(4222, "DIAMETER_ERROR_SUSPENDED_USER"), + enumval_def_u32(4223, "DIAMETER_ERROR_DETACHED_USER"), + enumval_def_u32(4224, "DIAMETER_ERROR_POSITIONING_DENIED"), + enumval_def_u32(4225, "DIAMETER_ERROR_POSITIONING_FAILED"), + enumval_def_u32(4226, "DIAMETER_ERROR_UNKNOWN_UNREACHABLE LCS_CLIENT"), + enumval_def_u32(4241, "DIAMETER_ERROR_NO_AVAILABLE_POLICY_COUNTERS"), + enumval_def_u32(4261, "REQUESTED_SERVICE_TEMPORARILY_NOT_AUTHORIZED"), + enumval_def_u32(5001, "DIAMETER_ERROR_USER_UNKNOWN"), + enumval_def_u32(5002, "DIAMETER_ERROR_IDENTITIES_DONT_MATCH"), + enumval_def_u32(5003, "DIAMETER_ERROR_IDENTITY_NOT_REGISTERED"), + enumval_def_u32(5004, "DIAMETER_ERROR_ROAMING_NOT_ALLOWED"), + enumval_def_u32(5005, "DIAMETER_ERROR_IDENTITY_ALREADY_REGISTERED"), + enumval_def_u32(5006, "DIAMETER_ERROR_AUTH_SCHEME_NOT_SUPPORTED"), + enumval_def_u32(5007, "DIAMETER_ERROR_IN_ASSIGNMENT_TYPE"), + enumval_def_u32(5008, "DIAMETER_ERROR_TOO_MUCH_DATA"), + enumval_def_u32(5009, "DIAMETER_ERROR_NOT_SUPPORTED_USER_DATA"), + enumval_def_u32(5011, "DIAMETER_ERROR_FEATURE_UNSUPPORTED"), + enumval_def_u32(5012, "DIAMETER_ERROR_SERVING_NODE_FEATURE_UNSUPPORTED"), + enumval_def_u32(5041, "DIAMETER_ERROR_USER_NO_WLAN_SUBSCRIPTION"), + enumval_def_u32(5042, "DIAMETER_ERROR_W-APN_UNUSED_BY_USER"), + enumval_def_u32(5043, "DIAMETER_ERROR_NO_ACCESS_INDEPENDENT_SUBSCRIPTION"), + enumval_def_u32(5044, "DIAMETER_ERROR_USER_NO_W-APN_SUBSCRIPTION"), + enumval_def_u32(5045, "DIAMETER_ERROR_UNSUITABLE_NETWORK"), + enumval_def_u32(5061, "INVALID_SERVICE_INFORMATION"), + enumval_def_u32(5062, "FILTER_RESTRICTIONS"), + enumval_def_u32(5063, "REQUESTED_SERVICE_NOT_AUTHORIZED"), + enumval_def_u32(5064, "DUPLICATED_AF_SESSION"), + enumval_def_u32(5065, "IP-CAN_SESSION_NOT_AVAILABLE"), + enumval_def_u32(5066, "UNAUTHORIZED_NON_EMERGENCY_SESSION"), + enumval_def_u32(5067, "UNAUTHORIZED_SPONSORED_DATA_CONNECTIVITY"), + enumval_def_u32(5068, "TEMPORARY_NETWORK_FAILURE"), + enumval_def_u32(5100, "DIAMETER_ERROR_USER_DATA_NOT_RECOGNIZED"), + enumval_def_u32(5101, "DIAMETER_ERROR_OPERATION_NOT_ALLOWED"), + enumval_def_u32(5102, "DIAMETER_ERROR_USER_DATA_CANNOT_BE_READ"), + enumval_def_u32(5103, "DIAMETER_ERROR_USER_DATA_CANNOT_BE_MODIFIED"), + enumval_def_u32(5104, "DIAMETER_ERROR_USER_DATA_CANNOT_BE_NOTIFIED"), + enumval_def_u32(5105, "DIAMETER_ERROR_TRANSPARENT_DATA OUT_OF_SYNC"), + enumval_def_u32(5106, "DIAMETER_ERROR_SUBS_DATA_ABSENT"), + enumval_def_u32(5107, "DIAMETER_ERROR_NO_SUBSCRIPTION_TO_DATA"), + enumval_def_u32(5108, "DIAMETER_ERROR_DSAI_NOT_AVAILABLE"), + enumval_def_u32(5120, "DIAMETER_ERROR_START_INDICATION"), + enumval_def_u32(5121, "DIAMETER_ERROR_STOP_INDICATION"), + enumval_def_u32(5122, "DIAMETER_ERROR_UNKNOWN_MBMS_BEARER_SERVICE"), + enumval_def_u32(5123, "DIAMETER_ERROR_SERVICE_AREA"), + enumval_def_u32(5140, "DIAMETER_ERROR_INITIAL_PARAMETERS"), + enumval_def_u32(5141, "DIAMETER_ERROR_TRIGGER_EVENT"), + enumval_def_u32(5142, "DIAMETER_PCC_RULE_EVENT"), + enumval_def_u32(5143, "DIAMETER_ERROR_BEARER_NOT_AUTHORIZED"), + enumval_def_u32(5144, "DIAMETER_ERROR_TRAFFIC_MAPPING_INFO_REJECTED"), + enumval_def_u32(5145, "DIAMETER_QOS_RULE_EVENT"), + enumval_def_u32(5147, "DIAMETER_ERROR_CONFLICTING_REQUEST"), + enumval_def_u32(5148, "DIAMETER_ADC_RULE_EVENT"), + enumval_def_u32(5149, "DIAMETER_ERROR_NBIFOM_NOT_AUTHORIZED"), + enumval_def_u32(5401, "DIAMETER_ERROR_IMPI_UNKNOWN"), + enumval_def_u32(5402, "DIAMETER_ERROR_NOT_AUTHORIZED"), + enumval_def_u32(5403, "DIAMETER_ERROR_TRANSACTION_IDENTIFIER_INVALID"), + enumval_def_u32(5420, "DIAMETER_ERROR_UNKNOWN_EPS_SUBSCRIPTION"), + enumval_def_u32(5421, "DIAMETER_ERROR_RAT_NOT_ALLOWED"), + enumval_def_u32(5422, "DIAMETER_ERROR_EQUIPMENT_UNKNOWN"), + enumval_def_u32(5423, "DIAMETER_ERROR_UNKNOWN_SERVING_NODE"), + enumval_def_u32(5450, "DIAMETER_ERROR_USER_NO_NON_3GPP_SUBSCRIPTION"), + enumval_def_u32(5451, "DIAMETER_ERROR_USER_NO_APN_SUBSCRIPTION"), + enumval_def_u32(5452, "DIAMETER_ERROR_RAT_TYPE_NOT_ALLOWED"), + enumval_def_u32(5453, "DIAMETER_ERROR_LATE_OVERLAPPING_REQUEST"), + enumval_def_u32(5454, "DIAMETER_ERROR_TIMED_OUT_REQUEST"), + enumval_def_u32(5470, "DIAMETER_ERROR_SUBSESSION"), + enumval_def_u32(5471, "DIAMETER_ERROR_ONGOING_SESSION_ESTABLISHMENT"), + enumval_def_u32(5490, "DIAMETER_ERROR_UNAUTHORIZED_REQUESTING_NETWORK"), + enumval_def_u32(5510, "DIAMETER_ERROR_UNAUTHORIZED_REQUESTING_ENTITY"), + enumval_def_u32(5511, "DIAMETER_ERROR_UNAUTHORIZED_SERVICE"), + enumval_def_u32(5512, "DIAMETER_ERROR_REQUESTED_RANGE_IS_NOT ALLOWED"), + enumval_def_u32(5513, "DIAMETER_ERROR_CONFIGURATION_EVENT_STORAGE_NOT_SUCCESSFUL"), + enumval_def_u32(5514, "DIAMETER_ERROR_CONFIGURATION_EVENT_NON_EXISTANT"), + enumval_def_u32(5515, "DIAMETER_ERROR_SCEF_REFERENCE_ID_UNKNOWN"), + enumval_def_u32(5530, "DIAMETER_ERROR_INVALID_SME_ADDRESS"), + enumval_def_u32(5531, "DIAMETER_ERROR_SC_CONGESTION"), + enumval_def_u32(5532, "DIAMETER_ERROR_SM_PROTOCOL"), + enumval_def_u32(5533, "DIAMETER_ERROR_TRIGGER_REPLACE_FAILURE"), + enumval_def_u32(5534, "DIAMETER_ERROR_TRIGGER_RECALL_FAILURE"), + enumval_def_u32(5535, "DIAMETER_ERROR_ORIGINAL_MESSAGE_NOT_PENDING"), + enumval_def_u32(5550, "DIAMETER_ERROR_ABSENT_USER"), + enumval_def_u32(5551, "DIAMETER_ERROR_USER_BUSY_FOR_MT_SMS"), + enumval_def_u32(5552, "DIAMETER_ERROR_FACILITY_NOT_SUPPORTED"), + enumval_def_u32(5553, "DIAMETER_ERROR_ILLEGAL_USER"), + enumval_def_u32(5554, "DIAMETER_ERROR_ILLEGAL_EQUIPMENT"), + enumval_def_u32(5555, "DIAMETER_ERROR_SM_DELIVERY_FAILURE"), + enumval_def_u32(5556, "DIAMETER_ERROR_SERVICE_NOT_SUBSCRIBED"), + enumval_def_u32(5557, "DIAMETER_ERROR_SERVICE_BARRED"), + enumval_def_u32(5558, "DIAMETER_ERROR_MWD_LIST_FULL"), + enumval_def_u32(5570, "DIAMETER_ERROR_UNKNOWN_POLICY_COUNTERS"), + enumval_def_u32(5590, "DIAMETER_ERROR_ORIGIN_ALUID_UNKNOWN"), + enumval_def_u32(5591, "DIAMETER_ERROR_TARGET_ALUID_UNKNOWN"), + enumval_def_u32(5592, "DIAMETER_ERROR_PFID_UNKNOWN"), + enumval_def_u32(5593, "DIAMETER_ERROR_APP_REGISTER_REJECT"), + enumval_def_u32(5594, "DIAMETER_ERROR_PROSE_MAP_REQUEST_DISALLOWED"), + enumval_def_u32(5595, "DIAMETER_ERROR_MAP_REQUEST_REJECT"), + enumval_def_u32(5596, "DIAMETER_ERROR_REQUESTING_RPAUID_UNKNOWN"), + enumval_def_u32(5597, "DIAMETER_ERROR_UNKNOWN_OR_INVALID_TARGET_SET"), + enumval_def_u32(5598, "DIAMETER_ERROR_MISSING_APPLICATION_DATA"), + enumval_def_u32(5599, "DIAMETER_ERROR_AUTHORIZATION_REJECT"), + enumval_def_u32(5600, "DIAMETER_ERROR_DISCOVERY_NOT_PERMITTED"), + enumval_def_u32(5601, "DIAMETER_ERROR_TARGET_RPAUID_UNKNOWN"), + enumval_def_u32(5602, "DIAMETER_ERROR_INVALID_APPLICATION_DATA"), + enumval_def_u32(5610, "DIAMETER_ERROR_UNKNOWN_PROSE_SUBSCRIPTION"), + enumval_def_u32(5611, "DIAMETER_ERROR_PROSE_NOT_ALLOWED"), + enumval_def_u32(5612, "DIAMETER_ERROR_UE_LOCATION_UNKNOWN"), + enumval_def_u32(5630, "DIAMETER_ERROR_NO_ASSOCIATED_DISCOVERY_FILTER"), + enumval_def_u32(5631, "DIAMETER_ERROR_ANNOUNCING_UNAUTHORIZED_IN_PLMN"), + enumval_def_u32(5632, "DIAMETER_ERROR_INVALID_APPLICATION_CODE"), + enumval_def_u32(5633, "DIAMETER_ERROR_PROXIMITY_UNAUTHORIZED"), + enumval_def_u32(5634, "DIAMETER_ERROR_PROXIMITY_REJECTED"), + enumval_def_u32(5635, "DIAMETER_ERROR_NO_PROXIMITY_REQUEST"), + enumval_def_u32(5636, "DIAMETER_ERROR_UNAUTHORIZED_SERVICE_IN_THIS_PLMN"), + enumval_def_u32(5637, "DIAMETER_ERROR_PROXIMITY_CANCELLED"), + enumval_def_u32(5638, "DIAMETER_ERROR_INVALID_TARGET_PDUID"), + enumval_def_u32(5639, "DIAMETER_ERROR_INVALID_TARGET_RPAUID"), + enumval_def_u32(5640, "DIAMETER_ERROR_NO_ASSOCIATED_RESTRICTED_CODE"), + enumval_def_u32(5641, "DIAMETER_ERROR_INVALID_DISCOVERY_TYPE"), + enumval_def_u32(5650, "DIAMETER_ERROR_REQUESTED_LOCATION_NOT_SERVED"), + enumval_def_u32(5651, "DIAMETER_ERROR_INVALID_EPS_BEARER"), + enumval_def_u32(5652, "DIAMETER_ERROR_NIDD_CONFIGURATION_NOT_AVAILABLE"), + enumval_def_u32(5653, "DIAMETER_ERROR_USER_TEMPORARILY_UNREACHABLE"), + enumval_def_u32(5670, "DIAMETER_ERROR_UNKNKOWN_DATA"), + enumval_def_u32(5671, "DIAMETER_ERROR_REQUIRED_KEY_NOT_PROVIDED"), + enumval_def_u32(5690, "DIAMETER_ERROR_UNKNOWN_V2X_SUBSCRIPTION"), + enumval_def_u32(5691, "DIAMETER_ERROR_V2X_NOT_ALLOWED"), }; - CHECK_dict_new(DICT_AVP, &data, NULL, NULL); - }; + int i; + /* Create the Enumerated type and enumerated values */ + 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); + } + } - /* 29.212 */ + /*==================================================================*/ + /* Create AVPs via generated add_avps() */ + /*==================================================================*/ + + extern int add_avps(); + CHECK_FCT( add_avps() ); + + /*==================================================================*/ + /* Rules section */ + /*==================================================================*/ + + /*==================================================================*/ + /* 3GPP TS 29.212 V15.9.0 (2019-12) */ + /*==================================================================*/ { struct dict_object *rule_avp; @@ -10276,9 +365,9 @@ 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 }, + { 10415, "Priority-Level", RULE_REQUIRED, -1, 1 }, + { 10415, "Pre-emption-Capability", RULE_OPTIONAL, -1, 1 }, + { 10415, "Pre-emption-Vulnerability", RULE_OPTIONAL, -1, 1 }, }; PARSE_loc_rules(rules, rule_avp); } @@ -10291,20 +380,29 @@ 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 }, + { 10415, "QoS-Class-Identifier", RULE_OPTIONAL, -1, 1 }, + { 10415, "Max-Requested-Bandwidth-UL", RULE_OPTIONAL, -1, 1 }, + { 10415, "Max-Requested-Bandwidth-DL", RULE_OPTIONAL, -1, 1 }, + { 10415, "Extended-Max-Requested-BW-UL", RULE_OPTIONAL, -1, 1 }, + { 10415, "Extended-Max-Requested-BW-DL", RULE_OPTIONAL, -1, 1 }, + { 10415, "Guaranteed-Bitrate-UL", RULE_OPTIONAL, -1, 1 }, + { 10415, "Guaranteed-Bitrate-DL", RULE_OPTIONAL, -1, 1 }, + { 10415, "Extended-GBR-UL", RULE_OPTIONAL, -1, 1 }, + { 10415, "Extended-GBR-DL", RULE_OPTIONAL, -1, 1 }, + { 10415, "Bearer-Identifier", RULE_OPTIONAL, -1, 1 }, + { 10415, "Allocation-Retention-Priority", RULE_OPTIONAL, -1, 1 }, + { 10415, "APN-Aggregate-Max-Bitrate-UL", RULE_OPTIONAL, -1, 1 }, + { 10415, "APN-Aggregate-Max-Bitrate-DL", RULE_OPTIONAL, -1, 1 }, + { 10415, "Extended-APN-AMBR-UL", RULE_OPTIONAL, -1, 1 }, + { 10415, "Extended-APN-AMBR-DL", RULE_OPTIONAL, -1, 1 }, + { 10415, "Conditional-APN-Aggregate-Max-Bitrate", RULE_OPTIONAL, -1, -1 }, }; PARSE_loc_rules(rules, rule_avp); } - /* 32.299 */ + /*==================================================================*/ + /* 3GPP TS 32.299 V15.7.0 (2019-06) */ + /*==================================================================*/ { /* additional allowed AVPs */ @@ -10312,8 +410,8 @@ 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 }, + { 10415, "AoC-Request-Type", RULE_OPTIONAL, -1, 1 }, + { 10415, "Service-Information", RULE_OPTIONAL, -1, 1 }, }; PARSE_loc_rules(rules, ccr); } @@ -10324,9 +422,9 @@ 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 }, + { 10415, "Low-Balance-Indication", RULE_OPTIONAL, -1, 1 }, + { 10415, "Remaining-Balance", RULE_OPTIONAL, -1, 1 }, + { 10415, "Service-Information", RULE_OPTIONAL, -1, 1 }, }; PARSE_loc_rules(rules, ccr); } @@ -10339,8 +437,8 @@ CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); struct local_rules_definition rules[] = { - { { .avp_vendor = 10415, .avp_name = "Domain-Name" }, RULE_OPTIONAL, -1, 1 }, - { { .avp_vendor = 10415, .avp_name = "3GPP-IMSI-MCC-MNC" }, RULE_OPTIONAL, -1, 1 }, + { 10415, "Domain-Name", RULE_OPTIONAL, -1, 1 }, + { 10415, "3GPP-IMSI-MCC-MNC", RULE_OPTIONAL, -1, 1 }, }; PARSE_loc_rules(rules, rule_avp); } @@ -10353,8 +451,9 @@ 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 }, + { 10415, "Application-Server", RULE_OPTIONAL, -1, 1 }, + { 10415, "Application-Provided-Called-Party-Address", RULE_OPTIONAL, -1, -1 }, + { 10415, "Status-AS-Code", RULE_OPTIONAL, -1, 1 }, }; PARSE_loc_rules(rules, rule_avp); } @@ -10367,10 +466,10 @@ CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); struct local_rules_definition rules[] = { - { { .avp_vendor = 10415, .avp_name = "Interface-Id" }, RULE_OPTIONAL, -1, 1 }, - { { .avp_vendor = 10415, .avp_name = "Interface-Text" }, RULE_OPTIONAL, -1, 1 }, - { { .avp_vendor = 10415, .avp_name = "Interface-Port" }, RULE_OPTIONAL, -1, 1 }, - { { .avp_vendor = 10415, .avp_name = "Interface-Type" }, RULE_OPTIONAL, -1, 1 }, + { 10415, "Interface-Id", RULE_OPTIONAL, -1, 1 }, + { 10415, "Interface-Text", RULE_OPTIONAL, -1, 1 }, + { 10415, "Interface-Port", RULE_OPTIONAL, -1, 1 }, + { 10415, "Interface-Type", RULE_OPTIONAL, -1, 1 }, }; PARSE_loc_rules(rules, rule_avp); } @@ -10383,12 +482,12 @@ 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 }, + { 10415, "Envelope-Start-Time", RULE_REQUIRED, -1, 1 }, + { 10415, "Envelope-End-Time", RULE_OPTIONAL, -1, 1 }, + { 0, "CC-Total-Octets", RULE_REQUIRED, -1, 1 }, + { 0, "CC-Input-Octets", RULE_OPTIONAL, -1, 1 }, + { 0, "CC-Output-Octets", RULE_OPTIONAL, -1, 1 }, + { 0, "CC-Service-Specific-Units", RULE_OPTIONAL, -1, 1 }, }; PARSE_loc_rules(rules, rule_avp); } @@ -10401,9 +500,9 @@ 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 }, + { 10415, "SIP-Method", RULE_OPTIONAL, -1, 1 }, + { 10415, "Event", RULE_OPTIONAL, -1, 1 }, + { 10415, "Expires", RULE_OPTIONAL, -1, 1 }, }; PARSE_loc_rules(rules, rule_avp); } @@ -10416,47 +515,58 @@ 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 }, + { 10415, "Event-Type", RULE_OPTIONAL, -1, 1 }, + { 10415, "Role-Of-Node", RULE_OPTIONAL, -1, 1 }, + { 10415, "Node-Functionality", RULE_REQUIRED, -1, 1 }, + { 10415, "User-Session-Id", RULE_OPTIONAL, -1, 1 }, + { 10415, "Outgoing-Session-Id", RULE_OPTIONAL, -1, 1 }, + { 10415, "Session-Priority", RULE_OPTIONAL, -1, 1 }, + { 10415, "Calling-Party-Address", RULE_OPTIONAL, -1, -1 }, + { 10415, "Called-Party-Address", RULE_OPTIONAL, -1, 1 }, + { 10415, "Called-Asserted-Identity", RULE_OPTIONAL, -1, -1 }, + { 10415, "Number-Portability-Routing-Information", RULE_OPTIONAL, -1, 1 }, + { 10415, "Carrier-Select-Routing-Information", RULE_OPTIONAL, -1, 1 }, + { 10415, "Alternate-Charged-Party-Address", RULE_OPTIONAL, -1, 1 }, + { 10415, "Requested-Party-Address", RULE_OPTIONAL, -1, -1 }, + { 10415, "Associated-URI", RULE_OPTIONAL, -1, -1 }, + { 10415, "Time-Stamps", RULE_OPTIONAL, -1, 1 }, + { 10415, "Application-Server-Information", RULE_OPTIONAL, -1, -1 }, + { 10415, "Inter-Operator-Identifier", RULE_OPTIONAL, -1, -1 }, + { 10415, "Transit-IOI-List", RULE_OPTIONAL, -1, 1 }, + { 10415, "IMS-Charging-Identifier", RULE_OPTIONAL, -1, 1 }, + { 10415, "SDP-Session-Description", RULE_OPTIONAL, -1, -1 }, + { 10415, "SDP-Media-Component", RULE_OPTIONAL, -1, -1 }, + { 10415, "Served-Party-IP-Address", RULE_OPTIONAL, -1, 1 }, + { 10415, "Server-Capabilities", RULE_OPTIONAL, -1, 1 }, + { 10415, "Trunk-Group-Id", RULE_OPTIONAL, -1, 1 }, + { 10415, "Bearer-Service", RULE_OPTIONAL, -1, 1 }, + { 10415, "Service-Id", RULE_OPTIONAL, -1, 1 }, + { 10415, "Service-Specific-Info", RULE_OPTIONAL, -1, -1 }, + { 10415, "Message-Body", RULE_OPTIONAL, -1, -1 }, + { 10415, "Cause-Code", RULE_OPTIONAL, -1, 1 }, + { 10415, "Reason-Header", RULE_OPTIONAL, -1, -1 }, + { 10415, "Access-Network-Information", RULE_OPTIONAL, -1, -1 }, + { 10415, "Cellular-Network-Information", RULE_OPTIONAL, -1, 1 }, + { 10415, "Early-Media-Description", RULE_OPTIONAL, -1, -1 }, + { 10415, "IMS-Communication-Service-Identifier",RULE_OPTIONAL, -1, 1 }, + { 10415, "IMS-Application-Reference-Identifier",RULE_OPTIONAL, -1, 1 }, + { 10415, "Online-Charging-Flag", RULE_OPTIONAL, -1, 1 }, + { 10415, "Real-Time-Tariff-Information", RULE_OPTIONAL, -1, 1 }, + { 10415, "Account-Expiration", RULE_OPTIONAL, -1, 1 }, + { 10415, "Initial-IMS-Charging-Identifier", RULE_OPTIONAL, -1, 1 }, + { 10415, "NNI-Information", RULE_OPTIONAL, -1, -1 }, + { 10415, "From-Address", RULE_OPTIONAL, -1, 1 }, + { 10415, "IMS-Emergency-Indicator", RULE_OPTIONAL, -1, 1 }, + { 10415, "IMS-Visited-Network-Identifier", RULE_OPTIONAL, -1, 1 }, + { 10415, "Access-Network-Info-Change", RULE_OPTIONAL, -1, -1 }, + { 10415, "Access-Transfer-Information", RULE_OPTIONAL, -1, -1 }, + { 10415, "Related-IMS-Charging-Identifier", RULE_OPTIONAL, -1, 1 }, + { 10415, "Related-IMS-Charging-Identifier-Node",RULE_OPTIONAL, -1, 1 }, + { 10415, "Route-Header-Received", RULE_OPTIONAL, -1, 1 }, + { 10415, "Route-Header-Transmitted", RULE_OPTIONAL, -1, 1 }, + { 10415, "Instance-Id", RULE_OPTIONAL, -1, 1 }, + { 10415, "TAD-Identifier", RULE_OPTIONAL, -1, 1 }, + { 10415, "FE-Identifier-List", RULE_OPTIONAL, -1, 1 }, }; PARSE_loc_rules(rules, rule_avp); } @@ -10469,8 +579,8 @@ CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); struct local_rules_definition rules[] = { - { { .avp_vendor = 10415, .avp_name = "Class-Identifier" }, RULE_OPTIONAL, -1, 1 }, - { { .avp_vendor = 10415, .avp_name = "Token-Text" }, RULE_OPTIONAL, -1, 1 }, + { 10415, "Class-Identifier", RULE_OPTIONAL, -1, 1 }, + { 10415, "Token-Text", RULE_OPTIONAL, -1, 1 }, }; PARSE_loc_rules(rules, rule_avp); } @@ -10483,26 +593,26 @@ 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 }, + { 10415, "Originator-Address", RULE_OPTIONAL, -1, 1 }, + { 10415, "Recipient-Address", RULE_OPTIONAL, -1, -1 }, + { 10415, "Submission-Time", RULE_OPTIONAL, -1, 1 }, + { 10415, "MM-Content-Type", RULE_OPTIONAL, -1, 1 }, + { 10415, "Priority", RULE_OPTIONAL, -1, 1 }, + { 10415, "Message-ID", RULE_OPTIONAL, -1, 1 }, + { 10415, "Message-Type", RULE_OPTIONAL, -1, 1 }, + { 10415, "Message-Size", RULE_OPTIONAL, -1, 1 }, + { 10415, "Message-Class", RULE_OPTIONAL, -1, 1 }, + { 10415, "Delivery-Report-Requested", RULE_OPTIONAL, -1, 1 }, + { 10415, "Read-Reply-Report-Requested", RULE_OPTIONAL, -1, 1 }, + { 10415, "MMBox-Storage-Requested", RULE_OPTIONAL, -1, 1 }, + { 10415, "Applic-ID", RULE_OPTIONAL, -1, 1 }, + { 10415, "Reply-Applic-ID", RULE_OPTIONAL, -1, 1 }, + { 10415, "Aux-Applic-Info", RULE_OPTIONAL, -1, 1 }, + { 10415, "Content-Class", RULE_OPTIONAL, -1, 1 }, + { 10415, "DRM-Content", RULE_OPTIONAL, -1, 1 }, + { 10415, "Adaptations", RULE_OPTIONAL, -1, 1 }, + { 10415, "VASP-ID", RULE_OPTIONAL, -1, 1 }, + { 10415, "VAS-ID", RULE_OPTIONAL, -1, 1 }, }; PARSE_loc_rules(rules, rule_avp); } @@ -10517,21 +627,21 @@ 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 }, + { 10415, "Time-Quota-Threshold", RULE_OPTIONAL, -1, 1 }, + { 10415, "Volume-Quota-Threshold", RULE_OPTIONAL, -1, 1 }, + { 10415, "Unit-Quota-Threshold", RULE_OPTIONAL, -1, 1 }, + { 10415, "Quota-Holding-Time", RULE_OPTIONAL, -1, 1 }, + { 10415, "Quota-Consumption-Time", RULE_OPTIONAL, -1, 1 }, + { 10415, "Reporting-Reason", RULE_OPTIONAL, -1, -1 }, + { 10415, "Trigger", RULE_OPTIONAL, -1, 1 }, + { 10415, "PS-Furnish-Charging-Information", RULE_OPTIONAL, -1, 1 }, + { 10415, "Refund-Information", RULE_OPTIONAL, -1, 1 }, + { 10415, "AF-Correlation-Information", RULE_OPTIONAL, -1, -1 }, + { 10415, "Envelope", RULE_OPTIONAL, -1, -1 }, + { 10415, "Envelope-Reporting", RULE_OPTIONAL, -1, 1 }, + { 10415, "Time-Quota-Mechanism", RULE_OPTIONAL, -1, 1 }, + { 10415, "Service-Specific-Info", RULE_OPTIONAL, -1, -1 }, + { 10415, "QoS-Information", RULE_OPTIONAL, -1, 1 }, }; PARSE_loc_rules(rules, rule_avp); } @@ -10544,10 +654,10 @@ 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 }, + { 10415, "Quota-Consumption-Time", RULE_OPTIONAL, -1, 1 }, + { 10415, "Time-Quota-Mechanism", RULE_OPTIONAL, -1, 1 }, + { 10415, "Envelope-Reporting", RULE_OPTIONAL, -1, 1 }, + { 0, "Multiple-Services-Credit-Control", RULE_OPTIONAL, -1, -1 }, }; PARSE_loc_rules(rules, rule_avp); } @@ -10560,9 +670,9 @@ 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 }, + { 10415, "Address-Type", RULE_OPTIONAL, -1, 1 }, + { 10415, "Address-Data", RULE_OPTIONAL, -1, 1 }, + { 10415, "Address-Domain", RULE_OPTIONAL, -1, 1 }, }; PARSE_loc_rules(rules, rule_avp); } @@ -10575,10 +685,10 @@ CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); struct local_rules_definition rules[] = { - { { .avp_vendor = 10415, .avp_name = "Interface-Id" }, RULE_OPTIONAL, -1, 1 }, - { { .avp_vendor = 10415, .avp_name = "Interface-Text" }, RULE_OPTIONAL, -1, 1 }, - { { .avp_vendor = 10415, .avp_name = "Interface-Port" }, RULE_OPTIONAL, -1, 1 }, - { { .avp_vendor = 10415, .avp_name = "Interface-Type" }, RULE_OPTIONAL, -1, 1 }, + { 10415, "Interface-Id", RULE_OPTIONAL, -1, 1 }, + { 10415, "Interface-Text", RULE_OPTIONAL, -1, 1 }, + { 10415, "Interface-Port", RULE_OPTIONAL, -1, 1 }, + { 10415, "Interface-Type", RULE_OPTIONAL, -1, 1 }, }; PARSE_loc_rules(rules, rule_avp); } @@ -10591,9 +701,9 @@ 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 }, + { 10415, "Address-Type", RULE_OPTIONAL, -1, 1 }, + { 10415, "Address-Data", RULE_OPTIONAL, -1, 1 }, + { 10415, "Address-Domain", RULE_OPTIONAL, -1, 1 }, }; PARSE_loc_rules(rules, rule_avp); } @@ -10606,9 +716,9 @@ 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 }, + { 10415, "3GPP-Charging-Id", RULE_REQUIRED, -1, 1 }, + { 10415, "PS-Free-Format-Data", RULE_REQUIRED, -1, 1 }, + { 10415, "PS-Append-Free-Format-Data", RULE_OPTIONAL, -1, 1 }, }; PARSE_loc_rules(rules, rule_avp); } @@ -10621,52 +731,80 @@ 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 }, + { 10415, "Supported-Features", RULE_OPTIONAL, -1, -1 }, + { 10415, "3GPP-Charging-Id", RULE_OPTIONAL, -1, 1 }, + { 10415, "PDN-Connection-Charging-ID", RULE_OPTIONAL, -1, 1 }, + { 10415, "Node-Id", RULE_OPTIONAL, -1, 1 }, + { 10415, "3GPP-PDP-Type", RULE_OPTIONAL, -1, 1 }, + { 10415, "PDP-Address", RULE_OPTIONAL, -1, -1 }, + { 10415, "PDP-Address-Prefix-Length", RULE_OPTIONAL, -1, 1 }, + { 10415, "Dynamic-Address-Flag", RULE_OPTIONAL, -1, 1 }, + { 10415, "Dynamic-Address-Flag-Extension", RULE_OPTIONAL, -1, 1 }, + { 10415, "QoS-Information", RULE_OPTIONAL, -1, 1 }, + { 10415, "SGSN-Address", RULE_OPTIONAL, -1, -1 }, + { 10415, "GGSN-Address", RULE_OPTIONAL, -1, -1 }, + { 10415, "TDF-IP-Address", RULE_OPTIONAL, -1, -1 }, + { 10415, "SGW-Address", RULE_OPTIONAL, -1, -1 }, + { 10415, "EPDG-Address", RULE_OPTIONAL, -1, -1 }, + { 10415, "CG-Address", RULE_OPTIONAL, -1, 1 }, + { 10415, "Serving-Node-Type", RULE_OPTIONAL, -1, 1 }, + { 10415, "SGW-Change", RULE_OPTIONAL, -1, 1 }, + { 10415, "3GPP-IMSI-MCC-MNC", RULE_OPTIONAL, -1, 1 }, + { 10415, "IMSI-Unauthenticated-Flag", RULE_OPTIONAL, -1, 1 }, + { 10415, "3GPP-GGSN-MCC-MNC", RULE_OPTIONAL, -1, 1 }, + { 10415, "3GPP-NSAPI", RULE_OPTIONAL, -1, 1 }, + { 0, "Called-Station-Id", RULE_OPTIONAL, -1, 1 }, + { 10415, "3GPP-Session-Stop-Indicator", RULE_OPTIONAL, -1, 1 }, + { 10415, "3GPP-Selection-Mode", RULE_OPTIONAL, -1, 1 }, + { 10415, "3GPP-Charging-Characteristics", RULE_OPTIONAL, -1, 1 }, + { 10415, "Charging-Characteristics-Selection-Mode", RULE_OPTIONAL, -1, 1 }, + { 10415, "3GPP-SGSN-MCC-MNC", RULE_OPTIONAL, -1, 1 }, + { 10415, "3GPP-MS-TimeZone", RULE_OPTIONAL, -1, 1 }, + { 10415, "Charging-Rule-Base-Name", RULE_OPTIONAL, -1, 1 }, + { 10415, "ADC-Rule-Base-Name", RULE_OPTIONAL, -1, 1 }, + { 10415, "3GPP-User-Location-Info", RULE_OPTIONAL, -1, 1 }, + { 10415, "User-Location-Info-Time", RULE_OPTIONAL, -1, 1 }, + { 10415, "User-CSG-Information", RULE_OPTIONAL, -1, 1 }, + { 10415, "Presence-Reporting-Area-Information", RULE_OPTIONAL, -1, -1 }, + { 5535, "3GPP2-BSID", RULE_OPTIONAL, -1, 1 }, + { 10415, "TWAN-User-Location-Info", RULE_OPTIONAL, -1, 1 }, + { 10415, "UWAN-User-Location-Info", RULE_OPTIONAL, -1, 1 }, + { 10415, "3GPP-RAT-Type", RULE_OPTIONAL, -1, 1 }, + { 10415, "PS-Furnish-Charging-Information", RULE_OPTIONAL, -1, 1 }, + { 10415, "PDP-Context-Type", RULE_OPTIONAL, -1, 1 }, + { 10415, "Offline-Charging", RULE_OPTIONAL, -1, 1 }, + { 10415, "Traffic-Data-Volumes", RULE_OPTIONAL, -1, -1 }, + { 10415, "Service-Data-Container", RULE_OPTIONAL, -1, -1 }, + { 0, "User-Equipment-Info", RULE_OPTIONAL, -1, 1 }, + { 10415, "Terminal-Information", RULE_OPTIONAL, -1, 1 }, + { 10415, "Start-Time", RULE_OPTIONAL, -1, 1 }, + { 10415, "Stop-Time", RULE_OPTIONAL, -1, 1 }, + { 10415, "Change-Condition", RULE_OPTIONAL, -1, 1 }, + { 10415, "Diagnostics", RULE_OPTIONAL, -1, 1 }, + { 10415, "Low-Priority-Indicator", RULE_OPTIONAL, -1, 1 }, + { 10415, "NBIFOM-Mode", RULE_OPTIONAL, -1, 1 }, + { 10415, "NBIFOM-Support", RULE_OPTIONAL, -1, 1 }, + { 10415, "MME-Number-for-MT-SMS", RULE_OPTIONAL, -1, 1 }, + { 10415, "MME-Name", RULE_OPTIONAL, -1, 1 }, + { 10415, "MME-Realm", RULE_OPTIONAL, -1, 1 }, +#if 0 /* TODO: ETSI ES 283 034 */ + { 13019, "Logical-Access-ID", RULE_OPTIONAL, -1, 1 }, + { 13019, "Physical-Access-ID", RULE_OPTIONAL, -1, 1 }, +#endif + { 10415, "Fixed-User-Location-Info", RULE_OPTIONAL, -1, 1 }, + { 10415, "CN-Operator-Selection-Entity", RULE_OPTIONAL, -1, 1 }, + { 10415, "Enhanced-Diagnostics", RULE_OPTIONAL, -1, 1 }, + { 10415, "SGi-PtP-Tunnelling-Method", RULE_OPTIONAL, -1, 1 }, + { 10415, "CP-CIoT-EPS-Optimisation-Indicator", RULE_OPTIONAL, -1, 1 }, + { 10415, "UNI-PDU-CP-Only-Flag", RULE_OPTIONAL, -1, 1 }, + { 10415, "Serving-PLMN-Rate-Control", RULE_OPTIONAL, -1, 1 }, + { 10415, "APN-Rate-Control", RULE_OPTIONAL, -1, 1 }, + { 10415, "Charging-Per-IP-CAN-Session-Indicator", RULE_OPTIONAL, -1, 1 }, + { 10415, "RRC-Cause-Counter", RULE_OPTIONAL, -1, 1 }, + { 10415, "3GPP-PS-Data-Off-Status", RULE_OPTIONAL, -1, 1 }, + { 10415, "SCS-AS-Address", RULE_OPTIONAL, -1, 1 }, + { 10415, "Unused-Quota-Timer", RULE_OPTIONAL, -1, 1 }, + { 10415, "RAN-Secondary-RAT-Usage-Report", RULE_OPTIONAL, -1, -1 }, }; PARSE_loc_rules(rules, rule_avp); } @@ -10679,10 +817,10 @@ 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 }, + { 10415, "Address-Type", RULE_OPTIONAL, -1, 1 }, + { 10415, "Address-Data", RULE_OPTIONAL, -1, 1 }, + { 10415, "Address-Domain", RULE_OPTIONAL, -1, 1 }, + { 10415, "Addressee-Type", RULE_OPTIONAL, -1, 1 }, }; PARSE_loc_rules(rules, rule_avp); } @@ -10695,11 +833,11 @@ CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); struct local_rules_definition rules[] = { - { { .avp_vendor = 10415, .avp_name = "Destination-Interface" }, RULE_OPTIONAL, -1, 1 }, - { { .avp_vendor = 10415, .avp_name = "Recipient-Address" }, RULE_OPTIONAL, -1, -1 }, - { { .avp_vendor = 10415, .avp_name = "Recipient-Received-Address" }, RULE_OPTIONAL, -1, -1 }, - { { .avp_vendor = 10415, .avp_name = "Recipient-SCCP-Address" }, RULE_OPTIONAL, -1, 1 }, - { { .avp_vendor = 10415, .avp_name = "SM-Protocol-ID" }, RULE_OPTIONAL, -1, 1 }, + { 10415, "Destination-Interface", RULE_OPTIONAL, -1, 1 }, + { 10415, "Recipient-Address", RULE_OPTIONAL, -1, -1 }, + { 10415, "Recipient-Received-Address", RULE_OPTIONAL, -1, -1 }, + { 10415, "Recipient-SCCP-Address", RULE_OPTIONAL, -1, 1 }, + { 10415, "SM-Protocol-ID", RULE_OPTIONAL, -1, 1 }, }; PARSE_loc_rules(rules, rule_avp); } @@ -10712,9 +850,9 @@ 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 }, + { 10415, "Address-Type", RULE_OPTIONAL, -1, 1 }, + { 10415, "Address-Data", RULE_OPTIONAL, -1, 1 }, + { 10415, "Address-Domain", RULE_OPTIONAL, -1, 1 }, }; PARSE_loc_rules(rules, rule_avp); } @@ -10727,16 +865,16 @@ 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 }, + { 10415, "SDP-Media-Name", RULE_OPTIONAL, -1, 1 }, + { 10415, "SDP-Media-Description", RULE_OPTIONAL, -1, -1 }, + { 10415, "Local-GW-Inserted-Indication", RULE_OPTIONAL, -1, 1 }, + { 10415, "IP-Realm-Default-Indication", RULE_OPTIONAL, -1, 1 }, + { 10415, "Transcoder-Inserted-Indication", RULE_OPTIONAL, -1, 1 }, + { 10415, "Media-Initiator-Flag", RULE_OPTIONAL, -1, 1 }, + { 10415, "Media-Initiator-Party", RULE_OPTIONAL, -1, 1 }, + { 10415, "3GPP-Charging-Id", RULE_OPTIONAL, -1, 1 }, + { 10415, "Access-Network-Charging-Identifier-Value", RULE_OPTIONAL, -1, 1 }, + { 10415, "SDP-Type", RULE_OPTIONAL, -1, 1 }, }; PARSE_loc_rules(rules, rule_avp); } @@ -10749,20 +887,25 @@ 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 }, + { 0, "Subscription-Id", RULE_OPTIONAL, -1, -1 }, + { 10415, "AoC-Information", RULE_OPTIONAL, -1, 1 }, + { 10415, "PS-Information", RULE_OPTIONAL, -1, 1 }, + { 10415, "IMS-Information", RULE_OPTIONAL, -1, 1 }, + { 10415, "MMS-Information", RULE_OPTIONAL, -1, 1 }, + { 10415, "LCS-Information", RULE_OPTIONAL, -1, 1 }, + { 10415, "PoC-Information", RULE_OPTIONAL, -1, 1 }, + { 10415, "MBMS-Information", RULE_OPTIONAL, -1, 1 }, + { 10415, "SMS-Information", RULE_OPTIONAL, -1, 1 }, + { 10415, "VCS-Information", RULE_OPTIONAL, -1, 1 }, + { 10415, "MMTel-Information", RULE_OPTIONAL, -1, 1 }, + { 10415, "ProSe-Information", RULE_OPTIONAL, -1, 1 }, + { 10415, "Service-Generic-Information", RULE_OPTIONAL, -1, 1 }, + { 10415, "IM-Information", RULE_OPTIONAL, -1, 1 }, + { 10415, "DCD-Information", RULE_OPTIONAL, -1, 1 }, +#if 0 /* TODO: oneM2M TS-0004 */ + { 45687, "M2M-Information", RULE_OPTIONAL, -1, 1 }, +#endif + { 10415, "CPDT-Information", RULE_OPTIONAL, -1, 1 }, }; PARSE_loc_rules(rules, rule_avp); } @@ -10775,22 +918,27 @@ 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 }, + { 10415, "SMS-Node", RULE_OPTIONAL, -1, 1 }, + { 10415, "Client-Address", RULE_OPTIONAL, -1, 1 }, + { 10415, "Originator-SCCP-Address", RULE_OPTIONAL, -1, 1 }, + { 10415, "SMSC-Address", RULE_OPTIONAL, -1, 1 }, + { 10415, "Data-Coding-Scheme", RULE_OPTIONAL, -1, 1 }, + { 10415, "SM-Discharge-Time", RULE_OPTIONAL, -1, 1 }, + { 10415, "SM-Message-Type", RULE_OPTIONAL, -1, 1 }, + { 10415, "Originator-Interface", RULE_OPTIONAL, -1, 1 }, + { 10415, "SM-Protocol-ID", RULE_OPTIONAL, -1, 1 }, + { 10415, "Reply-Path-Requested", RULE_OPTIONAL, -1, 1 }, + { 10415, "SM-Status", RULE_OPTIONAL, -1, 1 }, + { 10415, "SM-User-Data-Header", RULE_OPTIONAL, -1, 1 }, + { 10415, "Number-Of-Messages-Sent", RULE_OPTIONAL, -1, 1 }, + { 10415, "Recipient-Info", RULE_OPTIONAL, -1, -1 }, + { 10415, "Originator-Received-Address", RULE_OPTIONAL, -1, 1 }, + { 10415, "SM-Service-Type", RULE_OPTIONAL, -1, 1 }, + { 10415, "SMS-Result", RULE_OPTIONAL, -1, 1 }, + { 10415, "SM-Device-Trigger-Indicator", RULE_OPTIONAL, -1, 1 }, + { 10415, "MTC-IWF-Address", RULE_OPTIONAL, -1, 1 }, + { 10415, "Application-Port-Identifier", RULE_OPTIONAL, -1, 1 }, + { 10415, "External-Identifier", RULE_OPTIONAL, -1, 1 }, }; PARSE_loc_rules(rules, rule_avp); } @@ -10803,8 +951,8 @@ 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 }, + { 10415, "Time-Quota-Type", RULE_REQUIRED, -1, 1 }, + { 10415, "Base-Time-Interval", RULE_REQUIRED, -1, 1 }, }; PARSE_loc_rules(rules, rule_avp); } @@ -10817,10 +965,10 @@ 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 }, + { 10415, "SIP-Request-Timestamp", RULE_OPTIONAL, -1, 1 }, + { 10415, "SIP-Response-Timestamp", RULE_OPTIONAL, -1, 1 }, + { 10415, "SIP-Request-Timestamp-Fraction", RULE_OPTIONAL, -1, 1 }, + { 10415, "SIP-Response-Timestamp-Fraction", RULE_OPTIONAL, -1, 1 }, }; PARSE_loc_rules(rules, rule_avp); } @@ -10835,13 +983,16 @@ 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 }, + { 10415, "Reporting-Reason", RULE_OPTIONAL, -1, 1 }, + { 10415, "Event-Charging-TimeStamp", RULE_OPTIONAL, -1, -1 }, }; PARSE_loc_rules(rules, rule_avp); } - /* OMA */ + /*==================================================================*/ + /* OMA DDS Charging_Data V1.0 20110201-A */ + /*==================================================================*/ + { struct dict_object *rule_avp; struct dict_avp_request vpa; @@ -10850,8 +1001,8 @@ 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 }, + { 10415, "Content-ID", RULE_OPTIONAL, -1, 1 }, + { 10415, "Content-provider-ID", RULE_OPTIONAL, -1, 1 }, }; PARSE_loc_rules(rules, rule_avp); } @@ -10863,10 +1014,10 @@ 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 }, + { 10415, "Total-Number-Of-Messages-Sent", RULE_OPTIONAL, -1, 1 }, + { 10415, "Total-Number-Of-Messages-Exploded", RULE_OPTIONAL, -1, 1 }, + { 10415, "Number-Of-Messages-Successfully-Sent", RULE_OPTIONAL, -1, 1 }, + { 10415, "Number-Of-Messages-Successfully-Exploded", RULE_OPTIONAL, -1, 1 }, }; PARSE_loc_rules(rules, rule_avp); } @@ -10878,14 +1029,14 @@ 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 }, + { 10415, "Application-Server-Id", RULE_OPTIONAL, -1, 1 }, + { 10415, "Application-Service-Type", RULE_OPTIONAL, -1, 1 }, + { 10415, "Application-Session-Id", RULE_OPTIONAL, -1, 1 }, + { 10415, "Delivery-Status", RULE_OPTIONAL, -1, 1 }, }; PARSE_loc_rules(rules, rule_avp); } - + LOG_D( "Extension 'Dictionary definitions for DCCA 3GPP' initialized"); return 0; } diff -r 6a35c5470ef4 -r 19ab8ac08a36 extensions/dict_dcca_3gpp/dict_dcca_3gpp.csv --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/extensions/dict_dcca_3gpp/dict_dcca_3gpp.csv Tue Jul 07 01:41:54 2020 +0800 @@ -0,0 +1,2421 @@ +Attribute Name,AVP Code,Section defined,Value Type,MUST,MAY,SHOULD NOT,MUST NOT +@vendor,10415,,,,,, +,,,,,,, +@standard,3GPP TS 29.061,,,,,, +#=,,,,,,, +# 3GPP TS 29.061 V15.5.0 (2018-12),,,,,,, +# Interworking between the Public Land Mobile Network (PLMN),,,,,,, +# supporting packet based services and,,,,,,, +# Packet Data Networks (PDN),,,,,,, +# ,,,,,,, +# From 3GPP 29061-f50.doc,,,,,,, +#=,,,,,,, +#,,,,,,, +#=,,,,,,, +# 3GPP TS 29.061 Table 9a: Gi/Sgi specific AVPs,,,,,,, +#,,,,,,, +# Note: 3GPP TS 29.061 is unclear and inconsistent about M.,,,,,,, +"# For this reason, other sources are assumed more trustworthy.",,,,,,, +#=,,,,,,, +#,,,,,,, +# Fix: 3GPP-IMSI (1) changed to Must M.,,,,,,, +3GPP-IMSI,1,16.4.7,UTF8String,"M,V",P,, +"# Fix: 3GPP-Charging-Id (2) type changed from OctetString to Unsigned32,",,,,,,, +# per 3GPP TS 29.061 clause 16.4.7.2/2 and packet dumps.,,,,,,, +3GPP-Charging-Id,2,16.4.7,Unsigned32,"M,V",P,, +# Fix: 3GPP-PDP-Type (3) changed to Must M.,,,,,,, +3GPP-PDP-Type,3,16.4.7,Enumerated,"M,V",P,, +3GPP-CG-Address,4,16.4.7,OctetString,V,P,,M +# Fix: 3GPP-GPRS-Negotiated-QoS-Profile (5) changed to Must M per contrib/3gpp.,,,,,,, +3GPP-GPRS-Negotiated-QoS-Profile,5,16.4.7,UTF8String,"M,V",P,, +3GPP-SGSN-Address,6,16.4.7,OctetString,V,P,,M +3GPP-GGSN-Address,7,16.4.7,OctetString,V,P,,M +# Fix: 3GPP-IMSI-MCC-MNC (8) changed to Must M per packet dumps.,,,,,,, +3GPP-IMSI-MCC-MNC,8,16.4.7,UTF8String,"M,V",P,, +# Fix: 3GPP-GGSN-MCC-MNC (9) changed to Must M per contrib/3gpp.,,,,,,, +3GPP-GGSN-MCC-MNC,9,16.4.7,UTF8String,"M,V",P,, +# Fix: 3GPP-NSAPI (10) changed to Must M per contrib/3gpp.,,,,,,, +3GPP-NSAPI,10,16.4.7,OctetString,"M,V",P,, +# Note: 3GPP TS 29.061 Table 9a does not define,,,,,,, +# 3GPP-Session-Stop-Indicator (11) even when it is referenced,,,,,,, +# by other 3GPP Diameter AVPs including PS-Information (874).,,,,,,, +# ,,,,,,, +# Fix: Add 3GPP-Session-Stop-Indicator (11) OctetString.,,,,,,, +3GPP-Session-Stop-Indicator,11,16.4.7,OctetString,V,P,,M +# Fix: 3GPP-Selection-Mode (12) changed to Must M per contrib/3gpp.,,,,,,, +3GPP-Selection-Mode,12,16.4.7,UTF8String,"M,V",P,, +# Fix: 3GPP-Charging-Characteristics (13) changed to Must M per contrib/3gpp.,,,,,,, +3GPP-Charging-Characteristics,13,16.4.7,UTF8String,"M,V",P,, +# Note: 3GPP TS 29.061 V12.6.0 (2014-06) renamed,,,,,,, +# 3GPP-CG-IPv6-Address (14) to 3GPP-CG-Ipv6-Address.,,,,,,, +# ,,,,,,, +# Fix: 3GPP-CG-Ipv6-Address (14) changed to Must M per contrib/3gpp.,,,,,,, +# Change-1.4.0: 3GPP-CG-IPv6-Address (14) renamed to 3GPP-CG-Ipv6-Address (14).,,,,,,, +3GPP-CG-Ipv6-Address,14,16.4.7,OctetString,"M,V",P,, +# Note: 3GPP TS 29.061 V12.6.0 (2014-06) renamed,,,,,,, +# 3GPP-SGSN-IPv6-Address (15) to 3GPP-SGSN-Ipv6-Address.,,,,,,, +# ,,,,,,, +# Fix: 3GPP-SGSN-Ipv6-Address (15) changed to Must M per contrib/3gpp.,,,,,,, +# Change-1.4.0: 3GPP-SGSN-IPv6-Address (15) renamed to 3GPP-SGSN-Ipv6-Address (15).,,,,,,, +3GPP-SGSN-Ipv6-Address,15,16.4.7,OctetString,"M,V",P,, +# Note: 3GPP TS 29.061 V12.6.0 (2014-06) renamed,,,,,,, +# 3GPP-GGSN-IPv6-Address (16) to 3GPP-GGSN-Ipv6-Address.,,,,,,, +# ,,,,,,, +# Fix: 3GPP-GGSN-Ipv6-Address (16) changed to Must M per contrib/3gpp.,,,,,,, +# Change-1.4.0: 3GPP-GGSN-IPv6-Address (16) renamed to 3GPP-GGSN-Ipv6-Address (16).,,,,,,, +3GPP-GGSN-Ipv6-Address,16,16.4.7,OctetString,"M,V",P,, +# Note: 3GPP TS 29.061 V12.6.0 (2014-06) renamed,,,,,,, +# 3GPP-IPv6-DNS-Servers (17) to 3GPP-Ipv6-DNS-Servers.,,,,,,, +# ,,,,,,, +# Fix: 3GPP-Ipv6-DNS-Servers (17) changed to Must M per contrib/3gpp.,,,,,,, +# Change-1.4.0: 3GPP-IPv6-DNS-Servers (17) renamed to 3GPP-Ipv6-DNS-Servers (17).,,,,,,, +3GPP-Ipv6-DNS-Servers,17,16.4.7,OctetString,"M,V",P,, +# Fix: 3GPP-SGSN-MCC-MNC (18) changed to Must M per contrib/3gpp.,,,,,,, +3GPP-SGSN-MCC-MNC,18,16.4.7,UTF8String,"M,V",P,, +# Fix: 3GPP-IMEISV (20) changed to Must M.,,,,,,, +3GPP-IMEISV,20,16.4.7,OctetString,"M,V",P,, +# Fix: 3GPP-RAT-Type (21) changed to Must M.,,,,,,, +3GPP-RAT-Type,21,16.4.7,OctetString,"M,V",P,, +# Fix: 3GPP-User-Location-Info (22) changed to Must M.,,,,,,, +3GPP-User-Location-Info,22,16.4.7,OctetString,"M,V",P,, +# Fix: 3GPP-MS-TimeZone (23) changed to Must M.,,,,,,, +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 +# Note: 3GPP TS 29.061 Table 9a does not define,,,,,,, +# External-Identifier (28) for Diameter; it is RADIUS only.,,,,,,, +# 3GPP TS 29.061 Table 9b refers to 3GPP TS 29.336,,,,,,, +# for External-Identifier (3111).,,,,,,, +# ,,,,,,, +# Change-1.4.0: External-Identifier (28) OctetString replaced by External-Identifier (3111) UTF8String.,,,,,,, +#,,,,,,, +TWAN-Identifier,29,16.4.7,OctetString,V,P,,M +3GPP-User-Location-Info-Time,30,16.4.7,OctetString,V,P,,M +3GPP-Secondary-RAT-Usage,31,16.4.7,OctetString,V,P,,M +#=,,,,,,, +# 3GPP TS 29.061 Table 10: Gmb specific AVPs,,,,,,, +#=,,,,,,, +#,,,,,,, +TMGI,900,17.7.2,OctetString,"M,V",P,, +Required-MBMS-Bearer-Capabilities,901,17.7.3,UTF8String,"M,V",P,, +MBMS-StartStop-Indication,902,17.7.5,Enumerated,"M,V",P,, +MBMS-Service-Area,903,17.7.6,OctetString,"M,V",P,, +MBMS-Session-Duration,904,17.7.7,OctetString,"M,V",P,, +Alternative-APN,905,17.7.8,UTF8String,"M,V",P,, +MBMS-Service-Type,906,17.7.9,Enumerated,"M,V",P,, +MBMS-2G-3G-Indicator,907,17.7.10,Enumerated,"M, V",P,, +MBMS-Session-Identity,908,17.7.11,OctetString,"M,V",P,, +RAI,909,17.7.12,UTF8String,"M, V",P,, +Additional-MBMS-Trace-Info,910,17.7.13,OctetString,"M,V",P,, +MBMS-Time-To-Data-Transfer,911,17.7.14,OctetString,"M,V",P,, +MBMS-Session-Repetition-Number,912,17.7.15,OctetString,"M,V",P,, +MBMS-Required-QoS,913,17.7.16,UTF8String,"M,V",P,, +MBMS-Counting-Information,914,17.7.17,Enumerated,"M,V",P,, +MBMS-User-Data-Mode-Indication,915,17.7.18,Enumerated,"M,V",P,, +MBMS-GGSN-Address,916,17.7.19,OctetString,"M,V",P,, +# Note: 3GPP TS 29.061 V12.6.0 (2014-06) renamed,,,,,,, +# MBMS-GGSN-IPv6-Address (917) to MBMS-GGSN-Ipv6-Address.,,,,,,, +# ,,,,,,, +# Change-1.4.0: MBMS-GGSN-IPv6-Address (917) renamed to MBMS-GGSN-Ipv6-Address (917).,,,,,,, +MBMS-GGSN-Ipv6-Address,917,17.7.20,OctetString,"M,V",P,, +MBMS-BMSC-SSM-IP-Address,918,17.7.21,OctetString,"M,V",P,, +# Note: 3GPP TS 29.061 V12.6.0 (2014-06) renamed,,,,,,, +# MBMS-BMSC-SSM-IPv6-Address (919) to MBMS-BMSC-SSM-Ipv6-Address.,,,,,,, +# ,,,,,,, +# Change-1.4.0: MBMS-BMSC-SSM-IPv6-Address (919) renamed to MBMS-BMSC-SSM-Ipv6-Address (919).,,,,,,, +MBMS-BMSC-SSM-Ipv6-Address,919,17.7.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 TS 29.061 Table 20.5a.1: SGmb specific AVPs,,,,,,, +#=,,,,,,, +#,,,,,,, +MBMS-Access-Indicator,923,20.5a.1,Enumerated,"M,V",P,, +# Note: Name conflict with 3GPP TS 29.061 MBMS-GW-SSM-IP-Address (3522).,,,,,,, +# 3GPP TS 29.061 V10.4.0 (2011-09) CR 0355 added MBMS-GW-SSM-IP-Address (924).,,,,,,, +# 3GPP TS 29.468 V14.0.0 (2016-12) CR 0021 added MBMS-GW-SSM-IP-Address (3522).,,,,,,, +MBMS-GW-SSM-IP-Address,924,20.5a.2,OctetString,V,P,,M +# Note: 3GPP TS 29.061 V12.6.0 (2014-06) renamed,,,,,,, +# MBMS-GW-SSM-IPv6-Address (925) to MBMS-GW-SSM-Ipv6-Address.,,,,,,, +# Note: Name conflict with 3GPP TS 29.061 MBMS-GW-SSM-IPv6-Address (3523).,,,,,,, +# 3GPP TS 29.061 V10.4.0 (2011-09) CR 0355 added MBMS-GW-SSM-IPv6-Address (925).,,,,,,, +# 3GPP TS 29.061 V12.6.0 (2014-06) renamed,,,,,,, +# MBMS-GW-SSM-IPv6-Address (925) to MBMS-GW-SSM-Ipv6-Address.,,,,,,, +# 3GPP TS 29.468 V14.0.0 (2016-12) CR 0021 added MBMS-GW-SSM-IPv6-Address (3523).,,,,,,, +MBMS-GW-SSM-IPv6-Address,925,20.5a.3,OctetString,V,P,,M +MBMS-BMSC-SSM-UDP-Port,926,20.5a.4,OctetString,V,P,,M +MBMS-GW-UDP-Port,927,20.5a.5,OctetString,V,P,,M +MBMS-GW-UDP-Port-Indicator,928,20.5a.6,Enumerated,V,P,,M +MBMS-Data-Transfer-Start,929,20.5a.7,Unsigned64,V,P,,M +MBMS-Data-Transfer-Stop,930,20.5a.8,Unsigned64,V,P,,M +# Note: 3GPP TS 29.061 Table 20.5a.1 row MBMS-Flag (931) has,,,,,,, +"# incorrect name and should be ""MBMS-Flags"" per clause 20.5a.9.",,,,,,, +# ,,,,,,, +# Fix: MBMS-Flag (931) renamed to MBMS-Flags (931).,,,,,,, +MBMS-Flags,931,20.5a.9,Unsigned32,V,P,,M +Restart-Counter,932,20.5a.10,Unsigned32,V,P,,M +Diagnostic-Info,933,20.5a.11,Unsigned32,V,P,,M +MBMS-Cell-List,934,20.5a.12,OctetString,V,P,,M +,,,,,,, +@standard,3GPP TS 29.109,,,,,, +#=,,,,,,, +# 3GPP TS 29.109 V15.0.0 (2017-06),,,,,,, +# Generic Authentication Architecture (GAA);,,,,,,, +# Zh and Zn Interfaces based on the Diameter protocol;,,,,,,, +# Stage 3,,,,,,, +# ,,,,,,, +# From 3GPP 29109-f00.doc,,,,,,, +#=,,,,,,, +#,,,,,,, +#=,,,,,,, +# 3GPP TS 29.109 Table 6.1: New Diameter Multimedia Application AVPs,,,,,,, +#=,,,,,,, +#,,,,,,, +GBA-UserSecSettings,400,6.3.1.1,OctetString,"M, V",,, +Transaction-Identifier,401,6.3.1.2,OctetString,"M, V",,, +NAF-Id,402,6.3.1.3,OctetString,"M, V",,, +GAA-Service-Identifier,403,6.3.1.4,OctetString,"M, V",,, +Key-ExpiryTime,404,6.3.1.5,Time,"M, V",,, +ME-Key-Material,405,6.3.1.6,OctetString,"M, V",,, +UICC-Key-Material,406,6.3.1.7,OctetString,"M, V",,, +# Note: 3GPP TS 29.109 Table 6.1 row GBA_U-Awareness-Indicator (407),,,,,,, +# has an underscore in the name (contrary to RFC 6733 section 4.1).,,,,,,, +# ,,,,,,, +# Fix: GBA_U-Awareness-Indicator (407) renamed to GBA-U-Awareness-Indicator (407).,,,,,,, +GBA-U-Awareness-Indicator,407,6.3.1.8,Enumerated,"M, V",,, +BootstrapInfoCreationTime,408,6.3.1.9,Time,"M, V",,, +GUSS-Timestamp,409,6.3.1.10,Time,V,,,M +GBA-Type,410,6.3.1.11,Enumerated,"M, V",,, +UE-Id,411,6.3.1.12,OctetString,"M, V",,, +UE-Id-Type,412,6.3.1.13,Enumerated,"M, V",,, +UICC-App-Label,413,6.3.1.14,OctetString,"M, V",,, +UICC-ME,414,6.3.1.15,Enumerated,"M, V",,, +Requested-Key-Lifetime,415,6.3.1.16,Time,"M, V",,, +Private-Identity-Request,416,6.3.1.17,Enumerated,"M, V",,, +GBA-Push-Info,417,6.3.1.18,OctetString,"M, V",,, +NAF-SA-Identifier,418,6.3.1.19,OctetString,"M, V",,, +Security-Feature-Request,419,6.3.1.20,OctetString,"M,V",,, +Security-Feature-Response,420,6.3.1.21,OctetString,"M,V",,, +,,,,,,, +@standard,3GPP TS 29.128,,,,,, +#=,,,,,,, +# 3GPP TS 29.128 V15.6.0 (2019-09),,,,,,, +# Mobility Management Entity (MME) and Serving GPRS Support,,,,,,, +# Node (SGSN) interfaces for interworking with packet data,,,,,,, +# networks and applications,,,,,,, +# ,,,,,,, +# From 3GPP 29128-f60.docx,,,,,,, +#=,,,,,,, +#,,,,,,, +#=,,,,,,, +# 3GPP TS 29.128 Table 6.4.1-1: T6a/T6b specific Diameter AVPs,,,,,,, +#=,,,,,,, +#,,,,,,, +Communication-Failure-Information,4300,6.4.4,Grouped,"M,V",,, +Cause-Type,4301,6.4.5,Unsigned32,"M,V",,, +S1AP-Cause,4302,6.4.6,Unsigned32,"M,V",,, +RANAP-Cause,4303,6.4.7,Unsigned32,"M,V",,, +BSSGP-Cause,4309,6.4.8,Unsigned32,"M,V",,, +GMM-Cause,4304,6.4.9,Unsigned32,"M,V",,, +SM-Cause,4305,6.4.10,Unsigned32,"M,V",,, +Number-Of-UE-Per-Location-Configuration,4306,6.4.11,Grouped,"M,V",,, +Number-Of-UE-Per-Location-Report,4307,6.4.12,Grouped,"M,V",,, +UE-Count,4308,6.4.13,Unsigned32,"M,V",,, +Connection-Action,4314,6.4.18,Unsigned32,"M,V",,, +Non-IP-Data,4315,6.4.19,OctetString,"M,V",,, +Serving-PLMN-Rate-Control,4310,6.4.21,Grouped,"M,V",,, +Uplink-Rate-Limit,4311,6.4.23,Unsigned32,"M,V",,, +Downlink-Rate-Limit,4312,6.4.22,Unsigned32,"M,V",,, +Extended-PCO,4313,6.4.26,OctetString,"M,V",,, +SCEF-Wait-Time,4316,6.4.24,Time,"M,V",,, +CMR-Flags,4317,6.4.25,Unsigned32,"M,V",,, +RRC-Cause-Counter,4318,6.4.27,Grouped,"M,V",,, +Counter-Value,4319,6.4.28,Unsigned32,"M,V",,, +RRC-Counter-Timestamp,4320,6.4.29,Time,"M,V",,, +TDA-Flags,4321,6.4.31,Unsigned32,V,,,M +Idle-Status-Indication,4322,6.4.32,Grouped,V,,,M +Idle-Status-Timestamp,4323,6.4.33,Time,V,,,M +Active-Time,4324,6.4.34,Unsigned32,V,,,M +,,,,,,, +@standard,3GPP TS 29.140,,,,,, +#=,,,,,,, +# 3GPP TS 29.140 V7.0.0 (2007-06),,,,,,, +# MM10 interface based on Diameter protocol;,,,,,,, +# Stage 3,,,,,,, +# ,,,,,,, +# From 3GPP 29140-700.doc,,,,,,, +#=,,,,,,, +#,,,,,,, +#=,,,,,,, +# 3GPP TS 29.140 Table 6.3.1: Diameter MM10 Application AVPs,,,,,,, +# ,,,,,,, +# Note: AVPs referenced from other sources are not added here.,,,,,,, +#=,,,,,,, +#,,,,,,, +Served-User-Identity,1100,6.3.1,Grouped,"M,V",,, +VASP-ID,1101,6.3.3,UTF8String,"M,V",,, +VAS-ID,1102,6.3.4,UTF8String,"M,V",,, +Trigger-Event,1103,6.3.5,Enumerated,"M,V",,, +Sender-Address,1104,6.3.7,UTF8String,"M,V",,, +Initial-Recipient-Address,1105,6.3.8,Grouped,"M,V",,, +Result-Recipient-Address,1106,6.3.9,Grouped,"M,V",,, +# Note: Name conflict with 3GPP TS 29.329 Sequence-Number (716),,,,,,, +# and 3GPP TS 29.283 Sequence-Number (4512).,,,,,,, +# 3GPP TS 29.140 V6.1.0 (2005-06) allocated Sequence-Number (1107).,,,,,,, +# 3GPP TS 29.329 V10.0.0 (2010-09) CR 0163 added Sequence-Number (716).,,,,,,, +# 3GPP TS 29.283 V13.1.0 (2016-06) allocated Sequence-Number (4512).,,,,,,, +# ,,,,,,, +# Fix: Sequence-Number (1107) renamed to Sequence-Number-29.140 (1107).,,,,,,, +Sequence-Number-29.140,1107,6.3.10,Unsigned32,"M,V",,, +# Note: Name conflict with 3GPP TS 32.299 Recipient-Address (1201);,,,,,,, +# 3GPP TS 29.140 V6.1.0 (2005-06) allocated Recipient-Address (1108).,,,,,,, +# 3GPP TS 32.299 V6.4.0 (2005-09) CR 0028 added Recipient-Address (1201).,,,,,,, +# ,,,,,,, +# Fix: Recipient-Address (1108) renamed to Recipient-Address-29.140 (1108).,,,,,,, +Recipient-Address-29.140,1108,6.3.11,UTF8String,"M,V",,, +Routeing-Address,1109,6.3.12,UTF8String,"M,V",,, +Originating-Interface,1110,6.3.13,Enumerated,"M,V",,, +Delivery-Report,1111,6.3.14,Enumerated,"M,V",,, +Read-Reply,1112,6.3.15,Enumerated,"M,V",,, +Sender-Visibility,1113,6.3.16,Enumerated,"M,V",,, +Service-Key,1114,6.3.17,UTF8String,"M,V",,, +Billing-Information,1115,6.3.18,UTF8String,"M,V",,, +# Note: Name conflict with 3GPP TS 32.299 V11.6.0 Status (2702).,,,,,,, +# 3GPP TS 32.299 V11.10.0 (2013-12) CR 0566 renamed,,,,,,, +# Status (2702) to Status-Code (2702).,,,,,,, +# 3GPP TS 32.299 V11.14.0 (2014-12) CR 0617 renamed,,,,,,, +# Status-Code (2702) to Status-AS-Code (2702).,,,,,,, +# ,,,,,,, +# TODO: rename back to Status ?,,,,,,, +# Fix: Status (1116) renamed to Status-29.140 (1116).,,,,,,, +Status-29.140,1116,6.3.19,Grouped,"M,V",,, +Status-Code,1117,6.3.20,UTF8String,"M,V",,, +Status-Text,1118,6.3.21,UTF8String,"M,V",,, +Routeing-Address-Resolution,1119,6.3.22,Enumerated,"M,V",,, +,,,,,,, +@standard,3GPP TS 29.153,,,,,, +#=,,,,,,, +# 3GPP TS 29.153 V15.1.0 (2019-09),,,,,,, +# Service capability exposure functionality over Ns,,,,,,, +# reference point,,,,,,, +# ,,,,,,, +# From 3GPP 29153-f10.doc,,,,,,, +#=,,,,,,, +#,,,,,,, +#=,,,,,,, +# 3GPP TS 29.153 Table 5.3.1.1: Ns specific Diameter AVPs ,,,,,,, +#=,,,,,,, +#,,,,,,, +Network-Congestion-Area-Report,4101,5.3.2,Grouped,"M,V",P,, +Ns-Request-Type,4102,5.3.3,Unsigned32,"M,V",P,, +,,,,,,, +@standard,3GPP TS 29.154,,,,,, +#=,,,,,,, +# 3GPP TS 29.154 V15.3.0 (2019-09),,,,,,, +# Service capability exposure functionality over,,,,,,, +# Nt reference point,,,,,,, +# ,,,,,,, +# From 3GPP 29154-f30.doc,,,,,,, +#=,,,,,,, +#,,,,,,, +#=,,,,,,, +# 3GPP TS 29.154 Table 5.3.1.1: Nt specific Diameter AVPs,,,,,,, +#=,,,,,,, +#,,,,,,, +Network-Area-Info-List,4201,5.3.2,OctetString,"M,V",P,, +Number-Of-UEs,4209,5.3.10,Unsigned32,"M,V",P,, +Reference-Id,4202,5.3.3,OctetString,"M,V",P,, +Transfer-Request-Type,4203,5.3.4,Unsigned32,"M,V",P,, +# Note: Name conflict with 3GPP TS 29.345 Time-Window (3818).,,,,,,, +# Time-Window (3818) in 3GPP TS 29.345 V12.1.0 (2014-12) predates,,,,,,, +# Time-Window (4204) in 3GPP TS 29.154 V13.1.0 (2016-03).,,,,,,, +# ,,,,,,, +# Fix: Time-Window (4204) renamed to Time-Window-29.154 (4204).,,,,,,, +Time-Window-29.154,4204,5.3.5,Grouped,"M,V",P,, +Transfer-End-Time,4205,5.3.6,Time,"M,V",P,, +Transfer-Policy,4207,5.3.8,Grouped,"M,V",P,, +Transfer-Policy-Id,4208,5.3.9,Unsigned32,"M,V",P,, +Transfer-Start-Time,4206,5.3.7,Time,"M,V",P,, +#=,,,,,,, +# 3GPP TS 29.154 Table A.6.3.1-1: Nta specific Diameter AVPs,,,,,,, +#=,,,,,,, +#,,,,,,, +Access-Network-Reports,4210,A.6.3.2,Grouped,"M,V",P,, +Event-Configuration,4211,A.6.3.3,Grouped,"M,V",P,, +Event-Configuration-State,4212,A.6.3.4,Unsigned32,"M,V",P,, +Event-Configuration-Status,4213,A.6.3.5,Grouped,"M,V",P,, +Event-Reporting-Results,4214,A.6.3.6,Unsigned32,"M,V",P,, +Event-Reports,4215,A.6.3.7,Grouped,"M,V",P,, +Extended-SCEF-Reference-ID,4216,A.6.3.8,Unsigned64,"M,V",P,, +,,,,,,, +@standard,3GPP TS 29.172,,,,,, +#=,,,,,,, +# 3GPP TS 29.172 V15.2.0 (2019-12),,,,,,, +# Location Services (LCS);,,,,,,, +# Evolved Packet Core (EPC) LCS Protocol (ELP) between the,,,,,,, +# Gateway Mobile Location Centre (GMLC) and the,,,,,,, +# Mobile Management Entity (MME);,,,,,,, +# SLg interface,,,,,,, +# ,,,,,,, +# From 3GPP 29172-f20.docx,,,,,,, +#=,,,,,,, +#,,,,,,, +#=,,,,,,, +# 3GPP TS 29.172 Table 7.4.1-1: Diameter ELP Application AVPs,,,,,,, +#=,,,,,,, +#,,,,,,, +SLg-Location-Type,2500,7.4.2,Enumerated,"M, V",,, +LCS-EPS-Client-Name,2501,7.4.3,Grouped,"M, V",,, +LCS-Requestor-Name,2502,7.4.4,Grouped,"M, V",,, +LCS-Priority,2503,7.4.5,Unsigned32,"M, V",,, +LCS-QoS,2504,7.4.6,Grouped,"M, V",,, +Horizontal-Accuracy,2505,7.4.7,Unsigned32,"M, V",,, +Vertical-Accuracy,2506,7.4.8,Unsigned32,"M, V",,, +Vertical-Requested,2507,7.4.9,Enumerated,"M, V",,, +Velocity-Requested,2508,7.4.10,Enumerated,"M, V",,, +Response-Time,2509,7.4.11,Enumerated,"M, V",,, +Supported-GAD-Shapes,2510,7.4.12,Unsigned32,"M, V",,, +LCS-Codeword,2511,7.4.13,UTF8String,"M, V",,, +LCS-Privacy-Check,2512,7.4.14,Enumerated,"M, V",,, +Accuracy-Fulfilment-Indicator,2513,7.4.15,Enumerated,"M, V",,, +Age-Of-Location-Estimate,2514,7.4.16,Unsigned32,"M, V",,, +Velocity-Estimate,2515,7.4.17,OctetString,"M, V",,, +EUTRAN-Positioning-Data,2516,7.4.18,OctetString,"M, V",,, +ECGI,2517,7.4.19,OctetString,"M, V",,, +Location-Event,2518,7.4.20,Enumerated,"M, V",,, +Pseudonym-Indicator,2519,7.4.21,Enumerated,"M, V",,, +LCS-Service-Type-ID,2520,7.4.22,Unsigned32,"M, V",,, +LCS-Privacy-Check-Non-Session,2521,7.4.23,Grouped,"M, V",,, +LCS-Privacy-Check-Session,2522,7.4.24,Grouped,"M, V",,, +LCS-QoS-Class,2523,7.4.27,Enumerated,"M, V",,, +GERAN-Positioning-Info,2524,7.4.29,Grouped,V,,,M +GERAN-Positioning-Data,2525,7.4.30,OctetString,V,,,M +GERAN-GANSS-Positioning-Data,2526,7.4.31,OctetString,V,,,M +UTRAN-Positioning-Info,2527,7.4.32,Grouped,V,,,M +UTRAN-Positioning-Data,2528,7.4.33,OctetString,V,,,M +UTRAN-GANSS-Positioning-Data,2529,7.4.34,OctetString,V,,,M +LRR-Flags,2530,7.4.35,Unsigned32,V,,,M +LCS-Reference-Number,2531,7.4.37,OctetString,V,,,M +Deferred-Location-Type,2532,7.4.36,Unsigned32,V,,,M +Area-Event-Info,2533,7.4.38,Grouped,V,,,M +Area-Definition,2534,7.4.39,Grouped,V,,,M +Area,2535,7.4.40,Grouped,V,,,M +Area-Type,2536,7.4.41,Unsigned32,V,,,M +Area-Identification,2537,7.4.42,Grouped,V,,,M +Occurrence-Info,2538,7.4.43,Enumerated,V,,,M +Interval-Time,2539,7.4.44,Unsigned32,V,,,M +Periodic-LDR-Information,2540,7.4.45,Grouped,V,,,M +Reporting-Amount,2541,7.4.46,Unsigned32,V,,,M +Reporting-Interval,2542,7.4.47,Unsigned32,V,,,M +Reporting-PLMN-List,2543,7.4.48,Grouped,V,,,M +PLMN-ID-List,2544,7.4.49,Grouped,V,,,M +PLR-Flags,2545,7.4.52,Unsigned32,V,,,M +PLA-Flags,2546,7.4.53,Unsigned32,V,,,M +Deferred-MT-LR-Data,2547,7.4.54,Grouped,V,,,M +Termination-Cause,2548,7.4.55,Unsigned32,V,,,M +LRA-Flags,2549,7.4.56,Unsigned32,V,,,M +Periodic-Location-Support-Indicator,2550,7.4.50,Enumerated,V,,,M +Prioritized-List-Indicator,2551,7.4.51,Enumerated,V,,,M +ESMLC-Cell-Info,2552,7.4.57,Grouped,V,,,M +Cell-Portion-ID,2553,7.4.58,Unsigned32,V,,,M +1xRTT-RCID,2554,7.4.59,OctetString,V,,,M +Delayed-Location-Reporting-Data,2555,7.4.60,Grouped,V,,,M +Civic-Address,2556,7.4.61,UTF8String,V,,,M +Barometric-Pressure,2557,7.4.62,Unsigned32,V,,,M +UTRAN-Additional-Positioning-Data,2558,7.4.63,OctetString,V,,,M +Motion-Event-Info,2559,7.4.64,Grouped,V,,,M +Linear-Distance,2560,7.4.65,Unsigned32,V,,,M +Maximum-Interval,2561,7.4.66,Unsigned32,V,,,M +Sampling-Interval,2562,7.4.67,Unsigned32,V,,,M +Reporting-Duration,2563,7.4.68,Unsigned32,V,,,M +Reporting-Location-Requirements,2564,7.4.69,Unsigned32,V,,,M +Additional-Area,2565,7.4.70,Grouped,V,,,M +,,,,,,, +@standard,3GPP TS 29.173,,,,,, +#=,,,,,,, +# 3GPP TS 29.173 V15.0.0 (2018-06),,,,,,, +# Location Services (LCS);,,,,,,, +# Diameter-based SLh interface for Control Plane LCS,,,,,,, +# ,,,,,,, +# From 3GPP 29173-f00.doc,,,,,,, +#=,,,,,,, +#,,,,,,, +#=,,,,,,, +# 3GPP TS 29.173 Table 6.4.1/1: SLh specific Diameter AVPs,,,,,,, +#=,,,,,,, +#,,,,,,, +LMSI,2400,6.4.2,OctetString,"M,V",,, +Serving-Node,2401,6.4.3,Grouped,"M,V",,, +MME-Name,2402,6.4.4,DiameterIdentity,"M,V",,, +MSC-Number,2403,6.4.5,OctetString,"M,V",,, +LCS-Capabilities-Sets,2404,6.4.6,Unsigned32,"M,V",,, +GMLC-Address,2405,6.4.7,Address,"M,V",,, +Additional-Serving-Node,2406,6.4.8,Grouped,"M,V",,, +PPR-Address,2407,6.4.9,Address,"M,V",,, +MME-Realm,2408,6.4.12,DiameterIdentity,V,,,M +SGSN-Name,2409,6.4.13,DiameterIdentity,V,,,M +SGSN-Realm,2410,6.4.14,DiameterIdentity,V,,,M +RIA-Flags,2411,6.4.15,Unsigned32,V,,,M +,,,,,,, +@standard,3GPP TS 29.209,,,,,, +#=,,,,,,, +# 3GPP TS 29.209 V6.8.0 (2011-09),,,,,,, +# Policy control over Gq interface,,,,,,, +# ,,,,,,, +# From 3GPP 29209-680.doc,,,,,,, +# ,,,,,,, +# Replaced by 3GPP TS 29.214.,,,,,,, +#=,,,,,,, +#,,,,,,, +#=,,,,,,, +# 3GPP TS 29.209 Table 6.5.1: Gq specific Diameter AVPs,,,,,,, +# Note: Only AVPs not provided by 3GPP TS 29.214.,,,,,,, +#=,,,,,,, +#,,,,,,, +Authorization-Token,506,6.5.7,OctetString,"M,V",P,, +Flow-Grouping,508,6.5.9,Grouped,"M,V",P,, +,,,,,,, +@standard,3GPP TS 29.210,,,,,, +#=,,,,,,, +# 3GPP TS 29.210 V6.7.0 (2006-12),,,,,,, +# Charging rule provisioning over Gx interface,,,,,,, +# ,,,,,,, +# From 3GPP 29210-670.doc,,,,,,, +# ,,,,,,, +# Replaced by 3GPP TS 29.212.,,,,,,, +#=,,,,,,, +#,,,,,,, +#=,,,,,,, +# 3GPP TS 29.210 Table 5.2: Gx specific Diameter AVPs,,,,,,, +# Note: Only AVPs not provided by 3GPP TS 29.212.,,,,,,, +#=,,,,,,, +#,,,,,,, +PDP-Session-Operation,1015,5.2.21,Enumerated,"M,V",P,, +,,,,,,, +@standard,3GPP TS 29.212,,,,,, +#=,,,,,,, +# 3GPP TS 29.212 V15.9.0 (2019-12),,,,,,, +# Policy and Charging Control (PCC); Reference points,,,,,,, +# ,,,,,,, +# From 3GPP 29212-f90.doc,,,,,,, +#=,,,,,,, +#,,,,,,, +#=,,,,,,, +# 3GPP TS 29.212 Table 5.3.0.1: Gx specific Diameter AVPs,,,,,,, +#=,,,,,,, +#,,,,,,, +# Change-1.4.0: ADC-Revalidation-Time (2801) Time removed in 3GPP TS 29.212 V12.1.0 (2013-06).,,,,,,, +#,,,,,,, +# Note: Name conflict with 3GPP TS 32.299 3GPP-PS-Data-Off-Status (4406).,,,,,,, +# 3GPP TS 29.212 V14.3.0 (2017-03) CR 1559 added 3GPP-PS-Data-Off-Status (2847).,,,,,,, +# 3GPP TS 32.299 V14.3.0 (2017-03) CR 0760 added 3GPP-PS-Data-Off-Status (4406).,,,,,,, +3GPP-PS-Data-Off-Status,2847,5.3.133,Enumerated,V,P,,M +Access-Availability-Change-Reason,2833,5.3.121,Unsigned32,V,P,,M +Access-Network-Charging-Identifier-Gx,1022,5.3.22,Grouped,"M,V",P,, +Allocation-Retention-Priority,1034,5.3.32,Grouped,V,P,,M +AN-GW-Address,1050,5.3.49,Address,V,P,,M +AN-GW-Status,2811,5.3.100,Enumerated,V,P,,M +APN-Aggregate-Max-Bitrate-DL,1040,5.3.39,Unsigned32,V,P,,M +APN-Aggregate-Max-Bitrate-UL,1041,5.3.40,Unsigned32,V,P,,M +Application-Detection-Information,1098,5.3.91,Grouped,V,P,,M +Bearer-Control-Mode,1023,5.3.23,Enumerated,"M,V",P,, +Bearer-Identifier,1020,5.3.20,OctetString,"M,V",P,, +Bearer-Operation,1021,5.3.21,Enumerated,"M,V",P,, +Bearer-Usage,1000,5.3.1,Enumerated,"M,V",P,, +Charging-Correlation-Indicator,1073,5.3.67,Enumerated,V,P,,M +Charging-Rule-Base-Name,1004,5.3.5,UTF8String,"M,V",P,, +Charging-Rule-Definition,1003,5.3.4,Grouped,"M,V",P,, +Charging-Rule-Install,1001,5.3.2,Grouped,"M,V",P,, +Charging-Rule-Name,1005,5.3.6,OctetString,"M,V",P,, +Charging-Rule-Remove,1002,5.3.3,Grouped,"M,V",P,, +Charging-Rule-Report,1018,5.3.18,Grouped,"M,V",P,, +CoA-Information,1039,5.3.37,Grouped,V,P,,M +CoA-IP-Address,1035,5.3.33,Address,V,P,,M +Conditional-APN-Aggregate-Max-Bitrate,2818,5.3.105,Grouped,V,P,,M +Conditional-Policy-Information,2840,5.3.128,Grouped,V,P,,M +Credit-Management-Status,1082,5.3.102,Unsigned32,V,P,,M +CSG-Information-Reporting,1071,5.3.64,Enumerated,V,P,,M +Default-Access,2829,5.3.120,Enumerated,V,P,,M +Default-Bearer-Indication,2844,5.3.132,Enumerated,V,P,,M +Default-EPS-Bearer-QoS,1049,5.3.48,Grouped,V,P,,M +Default-QoS-Information,2816,5.3.103,Grouped,V,P,,M +Default-QoS-Name,2817,5.3.104,UTF8String,V,P,,M +Event-Report-Indication,1033,5.3.30,Grouped,V,P,,M +Event-Trigger,1006,5.3.7,Enumerated,"M,V",P,, +Execution-Time,2839,5.3.127,Time,V,P,,M +Extended-APN-AMBR-DL,2848,5.3.134,Unsigned32,V,P,,M +Extended-APN-AMBR-UL,2849,5.3.135,Unsigned32,V,P,,M +Extended-GBR-DL,2850,5.3.136,Unsigned32,V,P,,M +Extended-GBR-UL,2851,5.3.137,Unsigned32,V,P,,M +Flow-Direction,1080,5.3.65,Enumerated,V,P,,M +Flow-Information,1058,5.3.53,Grouped,V,P,,M +Flow-Label,1057,5.3.52,OctetString,V,P,,M +Fixed-User-Location-Info,2825,5.3.112,Grouped,V,P,,M +Guaranteed-Bitrate-DL,1025,5.3.25,Unsigned32,"M,V",P,, +Guaranteed-Bitrate-UL,1026,5.3.26,Unsigned32,"M,V",P,, +# Note: HeNB-BBF-FQDN (2803) UTF8String removed in 3GPP TS 29.212 V11.8.0 (2013-03).,,,,,,, +#,,,,,,, +HeNB-Local-IP-Address,2804,5.3.95,Address,V,P,,M +IP-CAN-Session-Charging-Scope,2827,5.3.114,Enumerated,V,P,,M +IP-CAN-Type,1027,5.3.27,Enumerated,"M,V",P,, +# Note: 3GPP TS 29.212 Table 5.3.0.1 row Max-PLR-DL (2852),,,,,,, +# incorrectly lists type as Unsigned32 instead of Float32.,,,,,,, +# 3GPP TS 29.212 clause 5.3.138 uses Float32.,,,,,,, +# ,,,,,,, +# Fix: Max-PLR-DL (2852) type changed from Float32 to Unsigned32.,,,,,,, +Max-PLR-DL,2852,5.3.138,Unsigned32,V,P,,M +# Note: 3GPP TS 29.212 Table 5.3.0.1 row Max-PLR-UL (2853),,,,,,, +# incorrectly lists type as Unsigned32 instead of Float32.,,,,,,, +# 3GPP TS 29.212 clause 5.3.139 uses Float32.,,,,,,, +# ,,,,,,, +# Fix: Max-PLR-UL (2853) type changed from Float32 to Unsigned32.,,,,,,, +Max-PLR-UL,2853,5.3.139,Unsigned32,V,P,,M +Metering-Method,1007,5.3.8,Enumerated,"M,V",P,, +Monitoring-Flags,2828,5.3.115,Unsigned32,V,,,M +Monitoring-Key,1066,5.3.59,OctetString,V,P,,M +Mute-Notification,2809,5.3.98,Enumerated,V,P,,M +Monitoring-Time,2810,5.3.99,Time,V,P,,M +NBIFOM-Mode,2830,5.3.117,Enumerated,V,P,,M +NBIFOM-Support,2831,5.3.116,Enumerated,V,P,,M +NetLoc-Access-Support,2824,5.3.111,Unsigned32,V,P,,M +Network-Request-Support,1024,5.3.24,Enumerated,"M,V",P,, +Offline,1008,5.3.9,Enumerated,"M,V",P,, +Online,1009,5.3.10,Enumerated,"M,V",P,, +Packet-Filter-Content,1059,5.3.54,IPFilterRule,V,P,,M +Packet-Filter-Identifier,1060,5.3.55,OctetString,V,P,,M +Packet-Filter-Information,1061,5.3.56,Grouped,V,P,,M +Packet-Filter-Operation,1062,5.3.57,Enumerated,V,P,,M +Packet-Filter-Usage,1072,5.3.66,Enumerated,V,P,,M +PCC-Rule-Status,1019,5.3.19,Enumerated,"M,V",P,, +# Note: 3GPP TS 29.212 Table 5.3.0.1 row PDN-Connection-ID (1065),,,,,,, +"# missing M, assume MUST NOT.",,,,,,, +# ,,,,,,, +# Change-1.4.0: PDN-Connection-ID (1065) flag M MUST NOT.,,,,,,, +PDN-Connection-ID,1065,5.3.58,OctetString,V,P,,M +PRA-Install,2845,5.3.130,Grouped,V,P,,M +PRA-Remove,2846,5.3.131,Grouped,V,P,,M +Precedence,1010,5.3.11,Unsigned32,"M,V",P,, +Pre-emption-Capability,1047,5.3.46,Enumerated,V,P,,M +Pre-emption-Vulnerability,1048,5.3.47,Enumerated,V,P,,M +Presence-Reporting-Area-Elements-List,2820,5.3.107,OctetString,V,P,,M +Presence-Reporting-Area-Identifier,2821,5.3.108,OctetString,V,P,,M +Presence-Reporting-Area-Information,2822,5.3.109,Grouped,V,P,,M +Presence-Reporting-Area-Node,2855,5.3.141,Unsigned32,V,P,,M +Presence-Reporting-Area-Status,2823,5.3.110,Unsigned32,V,P,,M +Priority-Level,1046,5.3.45,Unsigned32,V,P,,M +# Note: 3GPP TS 29.212 Table 5.3.0.1 row PS-to-CS-Session-Continuity (1099),,,,,,, +"# missing M, assume MUST NOT.",,,,,,, +# ,,,,,,, +# Change-1.4.0: PS-to-CS-Session-Continuity (1099) flag M MUST NOT.,,,,,,, +PS-to-CS-Session-Continuity,1099,5.3.84,Enumerated,V,P,,M +QoS-Class-Identifier,1028,5.3.17,Enumerated,"M,V",P,, +QoS-Information,1016,5.3.16,Grouped,"M,V",P,, +QoS-Negotiation,1029,5.3.28,Enumerated,"M,V",P,, +QoS-Upgrade,1030,5.3.29,Enumerated,"M,V",P,, +RAN-NAS-Release-Cause,2819,5.3.106,OctetString,V,P,,M +RAN-Rule-Support,2832,5.3.122,Unsigned32,V,P,,M +RAT-Type,1032,5.3.31,Enumerated,V,P,,M +Redirect-Information,1085,5.3.82,Grouped,V,P,,M +Redirect-Support,1086,5.3.83,Enumerated,V,P,,M +Removal-Of-Access,2842,5.3.126,Enumerated,V,P,,M +Reporting-Level,1011,5.3.12,Enumerated,"M,V",P,, +Resource-Allocation-Notification,1063,5.3.50,Enumerated,V,P,,M +Resource-Release-Notification,2841,5.3.125,Enumerated,V,P,,M +Revalidation-Time,1042,5.3.41,Time,"M,V",P,, +Routing-Filter,1078,5.3.72,Grouped,V,P,,M +Routing-IP-Address,1079,5.3.73,Address,V,P,,M +Routing-Rule-Definition,1076,5.3.70,Grouped,V,P,,M +Routing-Rule-Identifier,1077,5.3.71,OctetString,V,P,,M +Routing-Rule-Install,1081,5.3.68,Grouped,V,P,,M +Routing-Rule-Remove,1075,5.3.69,Grouped,V,P,,M +Routing-Rule-Failure-Code,2834,5.3.119,Unsigned32,V,P,,M +Routing-Rule-Report,2835,5.3.118,Grouped,V,P,,M +Rule-Activation-Time,1043,5.3.42,Time,"M,V",P,, +Rule-Deactivation-Time,1044,5.3.43,Time,"M,V",P,, +Rule-Failure-Code,1031,5.3.38,Enumerated,"M,V",P,, +Security-Parameter-Index,1056,5.3.51,OctetString,V,P,,M +Session-Release-Cause,1045,5.3.44,Enumerated,"M,V",P,, +TCP-Source-Port,2843,5.3.129,Unsigned32,V,P,,M +TDF-Information,1087,5.3.78,Grouped,V,P,,M +TDF-Application-Identifier,1088,5.3.77,OctetString,V,P,,M +TDF-Application-Instance-Identifier,2802,5.3.92,OctetString,V,P,,M +TDF-Destination-Host,1089,5.3.80,DiameterIdentity,V,P,,M +TDF-Destination-Realm,1090,5.3.79,DiameterIdentity,V,P,,M +TDF-IP-Address,1091,5.3.81,Address,V,P,,M +TFT-Filter,1012,5.3.13,IPFilterRule,"M,V",P,, +TFT-Packet-Filter-Information,1013,5.3.14,Grouped,"M,V",P,, +Traffic-Steering-Policy-Identifier-DL,2836,5.3.123,OctetString,V,P,,M +Traffic-Steering-Policy-Identifier-UL,2837,5.3.124,OctetString,V,P,,M +ToS-Traffic-Class,1014,5.3.15,OctetString,"M,V",P,, +Tunnel-Header-Filter,1036,5.3.34,IPFilterRule,V,P,,M +Tunnel-Header-Length,1037,5.3.35,Unsigned32,V,P,,M +Tunnel-Information,1038,5.3.36,Grouped,V,P,,M +UDP-Source-Port,2806,5.3.97,Unsigned32,V,P,,M +UE-Local-IP-Address,2805,5.3.96,Address,V,P,,M +UE-Status,2854,5.3.140,Unsigned32,V,P,,M +Usage-Monitoring-Information,1067,5.3.60,Grouped,V,P,,M +Usage-Monitoring-Level,1068,5.3.61,Enumerated,V,P,,M +Usage-Monitoring-Report,1069,5.3.62,Enumerated,V,P,,M +Usage-Monitoring-Support,1070,5.3.63,Enumerated,V,P,,M +User-Location-Info-Time,2812,5.3.101,Time,V,P,,M +PCSCF-Restoration-Indication,2826,5.3.113,Unsigned32,V,P,,M +#=,,,,,,, +# 3GPP TS 29.212 Table 5a.3.0.1: Gxx specific Diameter AVPs,,,,,,, +#=,,,,,,, +#,,,,,,, +QoS-Rule-Install,1051,5a.3.1,Grouped,"M,V",P,, +QoS-Rule-Remove,1052,5a.3.2,Grouped,"M,V",P,, +QoS-Rule-Definition,1053,5a.3.3,Grouped,"M,V",P,, +QoS-Rule-Name,1054,5a.3.4,OctetString,"M,V",P,, +QoS-Rule-Base-Name,1074,5a.3.7,UTF8String,V,P,,M +QoS-Rule-Report,1055,5a.3.5,Grouped,"M,V",P,, +Session-Linking-Indicator,1064,5a.3.6,Enumerated,"M,V",P,, +#=,,,,,,, +# 3GPP TS 29.212 Table 5b.3.0.1: Sd specific Diameter AVPs,,,,,,, +#=,,,,,,, +#,,,,,,, +# Change-1.4.0: ADC-Rule-Base-Name (1095) flag M MUST.,,,,,,, +ADC-Rule-Base-Name,1095,5b.3.4,UTF8String,"M,V",P,, +# Change-1.4.0: ADC-Rule-Definition (1094) flag M MUST.,,,,,,, +ADC-Rule-Definition,1094,5b.3.3,Grouped,"M,V",P,, +# Change-1.4.0: ADC-Rule-Install (1092) flag M MUST.,,,,,,, +ADC-Rule-Install,1092,5b.3.1,Grouped,"M,V",P,, +# Change-1.4.0: ADC-Rule-Name (1096) flag M MUST.,,,,,,, +ADC-Rule-Name,1096,5b.3.5,OctetString,"M,V",P,, +# Change-1.4.0: ADC-Rule-Remove (1093) flag M MUST.,,,,,,, +ADC-Rule-Remove,1093,5b.3.2,Grouped,"M,V",P,, +# Change-1.4.0: ADC-Rule-Report (1097) flag M MUST.,,,,,,, +ADC-Rule-Report,1097,5b.3.6,Grouped,"M,V",P,, +#=,,,,,,, +# 3GPP TS 29.212 Table 5c.3.1.1: St specific Diameter AVPs,,,,,,, +#=,,,,,,, +#,,,,,,, +Request-Type,2838,5c.3.2,Unsigned32,"M,V",P,, +#=,,,,,,, +# 3GPP TS 29.212 Table E.6.3.1.1: S15 specific Diameter AVPs,,,,,,, +#=,,,,,,, +#,,,,,,, +CS-Service-Qos-Request-Identifier,2807,E.6.3.2,OctetString,"M, V",P,, +CS-Service-QoS-Request-Operation,2808,E.6.3.3,Enumerated,"M, V",P,, +CS-Service-Resource-Report,2813,E.6.3.6,Grouped,"M, V",P,, +CS-Service-Resource-Failure-Cause,2814,E.6.3.5,Enumerated,"M, V",P,, +CS-Service-Resource-Result-Operation,2815,E.6.3.4,Enumerated,"M, V",P,, +,,,,,,, +@standard,3GPP TS 29.214,,,,,, +#=,,,,,,, +# 3GPP TS 29.214 V15.7.0 (2019-09),,,,,,, +# Policy and Charging Control over Rx reference point,,,,,,, +# ,,,,,,, +# From 3GPP 29214-f70.doc,,,,,,, +#=,,,,,,, +#,,,,,,, +#=,,,,,,, +# 3GPP TS 29.214 Table 5.3.0.1: Rx specific Diameter AVPs,,,,,,, +#=,,,,,,, +#,,,,,,, +Abort-Cause,500,5.3.1,Enumerated,"M,V",P,, +Access-Network-Charging-Address,501,5.3.2,Address,"M,V",P,, +Access-Network-Charging-Identifier,502,5.3.3,Grouped,"M,V",P,, +Access-Network-Charging-Identifier-Value,503,5.3.4,OctetString,"M,V",P,, +Acceptable-Service-Info,526,5.3.24,Grouped,"M,V",P,, +AF-Application-Identifier,504,5.3.5,OctetString,"M,V",P,, +AF-Charging-Identifier,505,5.3.6,OctetString,"M,V",P,, +AF-Requested-Data,551,5.3.50,Unsigned32,V,P,,M +AF-Signalling-Protocol,529,5.3.26,Enumerated,V,P,,M +Application-Service-Provider-Identity,532,5.3.29,UTF8String,V,P,,M +Codec-Data,524,5.3.7,OctetString,"M,V",P,, +Content-Version,552,5.3.49,Unsigned64,V,P,,M +Extended-Max-Requested-BW-DL,554,5.3.52,Unsigned32,V,P,,M +Extended-Max-Requested-BW-UL,555,5.3.53,Unsigned32,V,P,,M +Extended-Max-Supported-BW-DL,556,5.3.54,Unsigned32,V,P,,M +Extended-Max-Supported-BW-UL,557,5.3.55,Unsigned32,V,P,,M +Extended-Min-Desired-BW-DL,558,5.3.56,Unsigned32,V,P,,M +Extended-Min-Desired-BW-UL,559,5.3.57,Unsigned32,V,P,,M +Extended-Min-Requested-BW-DL,560,5.3.58,Unsigned32,V,P,,M +Extended-Min-Requested-BW-UL,561,5.3.59,Unsigned32,V,P,,M +Flow-Description,507,5.3.8,IPFilterRule,"M,V",P,, +Flow-Number,509,5.3.9,Unsigned32,"M,V",P,, +Flows,510,5.3.10,Grouped,"M,V",P,, +Flow-Status,511,5.3.11,Enumerated,"M,V",P,, +Flow-Usage,512,5.3.12,Enumerated,"M,V",P,, +GCS-Identifier,538,5.3.36,OctetString,V,P,,M +# Note: 3GPP TS 29.214 Table 5.3.0.1 row IMS-Content-Identifier (563),,,,,,, +"# missing M, assume MUST NOT.",,,,,,, +# ,,,,,,, +# Fix: IMS-Content-Identifier (563) flag M MUST NOT.,,,,,,, +IMS-Content-Identifier,563,5.3.60,OctetString,V,P,,M +# Note: 3GPP TS 29.214 Table 5.3.0.1 row IMS-Content (564),,,,,,, +"# missing M, assume MUST NOT.",,,,,,, +# ,,,,,,, +# Fix: IMS-Content (564) flag M MUST NOT.,,,,,,, +IMS-Content-Type,564,5.3.61,Enumerated,V,P,,M +IP-Domain-Id,537,5.3.35,OctetString,V,P,,M +Max-Requested-Bandwidth-DL,515,5.3.14,Unsigned32,"M,V",P,, +Max-Requested-Bandwidth-UL,516,5.3.15,Unsigned32,"M,V",P,, +Max-Supported-Bandwidth-DL,543,5.3.41,Unsigned32,V,P,,M +Max-Supported-Bandwidth-UL,544,5.3.42,Unsigned32,V,P,,M +MCPTT-Identifier,547,5.3.45,OctetString,V,P,,M +MCVideo-Identifier,562,5.3.45a,OctetString,V,P,,M +Media-Component-Description,517,5.3.16,Grouped,"M,V",P,, +Media-Component-Number,518,5.3.17,Unsigned32,"M,V",P,, +Media-Component-Status,549,5.3.48,Unsigned32,V,P,,M +Media-Sub-Component,519,5.3.18,Grouped,"M,V",P,, +Media-Type,520,5.3.19,Enumerated,"M,V",P,, +MPS-Identifier,528,5.3.30,OctetString,V,P,,M +Min-Desired-Bandwidth-DL,545,5.3.43,Unsigned32,V,P,,M +Min-Desired-Bandwidth-UL,546,5.3.44,Unsigned32,V,P,,M +Min-Requested-Bandwidth-DL,534,5.3.32,Unsigned32,V,P,,M +Min-Requested-Bandwidth-UL,535,5.3.33,Unsigned32,V,P,,M +Priority-Sharing-Indicator,550,5.3.47,Enumerated,V,P,,M +Pre-emption-Control-Info,553,5.3.51,Unsigned32,V,P,,M +Required-Access-Info,536,5.3.34,Enumerated,V,P,,M +Retry-Interval,541,5.3.39,Unsigned32,V,P,,M +Rx-Request-Type,533,5.3.31,Enumerated,V,P,,M +RR-Bandwidth,521,5.3.20,Unsigned32,"M,V",P,, +RS-Bandwidth,522,5.3.21,Unsigned32,"M,V",P,, +Service-Authorization-Info,548,5.3.46,Unsigned32,V,P,,M +Service-URN,525,5.3.23,OctetString,"M,V",P,, +Service-Info-Status,527,5.3.25,Enumerated,"M,V",P,, +Sharing-Key-DL,539,5.3.37,Unsigned32,V,P,,M +Sharing-Key-UL,540,5.3.38,Unsigned32,V,P,,M +Specific-Action,513,5.3.13,Enumerated,"M,V",P,, +SIP-Forking-Indication,523,5.3.22,Enumerated,"M,V",P,, +Sponsor-Identity,531,5.3.28,UTF8String,V,P,,M +Sponsored-Connectivity-Data,530,5.3.27,Grouped,V,P,,M +Sponsoring-Action,542,5.3.40,Enumerated,V,P,,M +,,,,,,, +@standard,3GPP TS 29.215,,,,,, +#=,,,,,,, +# 3GPP TS 29.215 V15.2.0 (2019-09),,,,,,, +# Policy and Charging Control (PCC) over S9 reference point;,,,,,,, +# Stage 3,,,,,,, +# ,,,,,,, +# From 3GPP 29215-f20.doc,,,,,,, +#=,,,,,,, +#,,,,,,, +#=,,,,,,, +# 3GPP TS 29.215 Table 5.3.0.1: S9 specific Diameter AVPs,,,,,,, +#=,,,,,,, +#,,,,,,, +DRA-Deployment,2206,5.3.7,Enumerated,V,P,,M +Multiple-BBERF-Action,2204,5.3.6,Enumerated,"M,V",P,, +Subsession-Decision-Info,2200,5.3.1,Grouped,"M,V",P,, +Subsession-Enforcement-Info,2201,5.3.2,Grouped,"M,V",P,, +Subsession-Id,2202,5.3.3,Unsigned32,"M,V",P,, +Subsession-Operation,2203,5.3.4,Enumerated,"M,V",P,, +DRA-Binding,2208,5.3.x,Enumerated,V,P,,M +#=,,,,,,, +# 3GPP TS 29.215 Table A.7.3.1.1: S9a specific Diameter AVPs,,,,,,, +#=,,,,,,, +#,,,,,,, +PCRF-Address,2207,A.7.3.1.1,DiameterIdentity,"V,M",P,, +#=,,,,,,, +# 3GPP TS 29.215 Table A.8.3.1.1: S9a* specific Diameter AVPs,,,,,,, +#=,,,,,,, +#,,,,,,, +UE-Local-IPv6-Prefix,2205,A.8.3.1,OctetString,"V,M",P,, +,,,,,,, +@standard,3GPP TS 29.217,,,,,, +#=,,,,,,, +# 3GPP TS 29.217 V15.1.0 (2019-09),,,,,,, +# Policy and Charging Control (PCC);,,,,,,, +# Congestion reporting over Np reference point,,,,,,, +# ,,,,,,, +# From 3GPP 29217-f10.doc,,,,,,, +#=,,,,,,, +#,,,,,,, +#=,,,,,,, +# 3GPP TS 29.217 Table 5.3.1.1: Np specific Diameter AVPs,,,,,,, +#=,,,,,,, +#,,,,,,, +Aggregated-Congestion-Info,4000,5.3.2,Grouped,"V, M",P,, +Aggregated-RUCI-Report,4001,5.3.3,Grouped,"V, M",P,, +Congestion-Level-Definition,4002,5.3.4,Grouped,V,P,,M +Congestion-Level-Range,4003,5.3.5,Unsigned32,V,P,,M +Congestion-Level-Set-Id,4004,5.3.6,Unsigned32,V,P,,M +Congestion-Level-Value,4005,5.3.7,Unsigned32,"V, M",P,, +Congestion-Location-Id,4006,5.3.8,Grouped,V,P,,M +Conditional-Restriction,4007,5.3.9,Unsigned32,V,P,,M +eNodeB-Id,4008,5.3.10,OctetString,"V, M",P,, +IMSI-List,4009,5.3.11,OctetString,"V, M",P,, +RCAF-Id,4010,5.3.12,DiameterIdentity,"V, M",P,, +Reporting-Restriction,4011,5.3.13,Unsigned32,V,P,,M +RUCI-Action,4012,5.3.14,Unsigned32,V,P,,M +Extended-eNodeB-Id,4013,5.3.15,OctetString,"V, ",P,,M +,,,,,,, +@standard,3GPP TS 29.219,,,,,, +#=,,,,,,, +# 3GPP TS 29.219 V15.3.0 (2019-09),,,,,,, +# Policy and Charging Control: Spending Limit Reporting over,,,,,,, +# Sy reference point,,,,,,, +# ,,,,,,, +# From 3GPP 29219-f30.doc,,,,,,, +#=,,,,,,, +#,,,,,,, +#=,,,,,,, +# 3GPP TS 29.219 Table 5.3.0.1: Sy specific Diameter AVPs,,,,,,, +#=,,,,,,, +#,,,,,,, +Pending-Policy-Counter-Information,2905,5.3.5,Grouped,"M,V",P,, +Pending-Policy-Counter-Change-Time,2906,5.3.6,Time,"M,V",P,, +Policy-Counter-Identifier,2901,5.3.1,UTF8String,"M,V",P,, +Policy-Counter-Status,2902,5.3.2,UTF8String,"M,V",P,, +Policy-Counter-Status-Report,2903,5.3.3,Grouped,"M,V",P,, +SL-Request-Type,2904,5.3.4,Enumerated,"M,V",P,, +SN-Request-Type,2907,5.3.7,Unsigned32,V,P,,M +,,,,,,, +@standard,3GPP TS 29.229,,,,,, +#=,,,,,,, +# 3GPP TS 29.229 V15.2.0 (2019-09),,,,,,, +# Cx and Dx interfaces based on the Diameter protocol;,,,,,,, +# Protocol details,,,,,,, +# ,,,,,,, +# From 3GPP 29229-f20.doc,,,,,,, +#=,,,,,,, +#,,,,,,, +#=,,,,,,, +# 3GPP TS 29.229 Table 6.3.1: Diameter Multimedia Application AVPs,,,,,,, +# ,,,,,,, +# Note: AVPs referenced from other sources are not added here.,,,,,,, +#=,,,,,,, +#,,,,,,, +Visited-Network-Identifier,600,6.3.1,OctetString,"M, V",,, +Public-Identity,601,6.3.2,UTF8String,"M, V",,, +Server-Name,602,6.3.3,UTF8String,"M, V",,, +Server-Capabilities,603,6.3.4,Grouped,"M, V",,, +Mandatory-Capability,604,6.3.5,Unsigned32,"M, V",,, +Optional-Capability,605,6.3.6,Unsigned32,"M, V",,, +# Note: Name conflict with 3GPP TS 29.329 User-Data (702).,,,,,,, +# 3GPP TS 29.229 V6.2.0 (2004-09) allocated User-Data (606).,,,,,,, +# 3GPP TS 29.329 V6.2.0 (2004-09) allocated User-Data (702).,,,,,,, +User-Data,606,6.3.7,OctetString,"M, V",,, +SIP-Number-Auth-Items,607,6.3.8,Unsigned32,"M, V",,, +SIP-Authentication-Scheme,608,6.3.9,UTF8String,"M, V",,, +SIP-Authenticate,609,6.3.10,OctetString,"M, V",,, +SIP-Authorization,610,6.3.11,OctetString,"M, V",,, +SIP-Authentication-Context,611,6.3.12,OctetString,"M, V",,, +SIP-Auth-Data-Item,612,6.3.13,Grouped,"M, V",,, +SIP-Item-Number,613,6.3.14,Unsigned32,"M, V",,, +Server-Assignment-Type,614,6.3.15,Enumerated,"M, V",,, +Deregistration-Reason,615,6.3.16,Grouped,"M, V",,, +Reason-Code,616,6.3.17,Enumerated,"M, V",,, +Reason-Info,617,6.3.18,UTF8String,"M, V",,, +Charging-Information,618,6.3.19,Grouped,"M, V",,, +Primary-Event-Charging-Function-Name,619,6.3.20,DiameterURI,"M, V",,, +Secondary-Event-Charging-Function-Name,620,6.3.21,DiameterURI,"M, V",,, +Primary-Charging-Collection-Function-Name,621,6.3.22,DiameterURI,"M, V",,, +Secondary-Charging-Collection-Function-Name,622,6.3.23,DiameterURI,"M, V",,, +User-Authorization-Type,623,6.3.24,Enumerated,"M, V",,, +User-Data-Already-Available,624,6.3.26,Enumerated,"M, V",,, +Confidentiality-Key,625,6.3.27,OctetString,"M, V",,, +Integrity-Key,626,6.3.28,OctetString,"M, V",,, +# Note: User-Data-Request-Type (627) removed in 3GPP TS 29.229 V6.5.0 (2005-06).,,,,,,, +#,,,,,,, +Supported-Features,628,6.3.29,Grouped,V,M,, +Feature-List-ID,629,6.3.30,Unsigned32,V,,,M +Feature-List,630,6.3.31,Unsigned32,V,,,M +Supported-Applications,631,6.3.32,Grouped,V,,,M +Associated-Identities,632,6.3.33,Grouped,V,,,M +Originating-Request,633,6.3.34,Enumerated,"M,V",,, +Wildcarded-Public-Identity,634,6.3.35,UTF8String,V,,,M +SIP-Digest-Authenticate,635,6.3.36,Grouped,V,,,M +Wildcarded-IMPU,636,6.3.43,UTF8String,V,,,M +UAR-Flags,637,6.3.44,Unsigned32,V,,,M +Loose-Route-Indication,638,6.3.45,Enumerated,V,,,M +SCSCF-Restoration-Info,639,6.3.46,Grouped,V,,,M +Path,640,6.3.47,OctetString,V,,,M +Contact,641,6.3.48,OctetString,V,,,M +Subscription-Info,642,6.3.49,Grouped,V,,,M +Call-ID-SIP-Header,643,6.3.49.1,OctetString,V,,,M +From-SIP-Header,644,6.3.49.2,OctetString,V,,,M +To-SIP-Header,645,6.3.49.3,OctetString,V,,,M +Record-Route,646,6.3.49.4,OctetString,V,,,M +Associated-Registered-Identities,647,6.3.50,Grouped,V,,,M +Multiple-Registration-Indication,648,6.3.51,Enumerated,V,,,M +Restoration-Info,649,6.3.52,Grouped,V,,,M +Session-Priority,650,6.3.56,Enumerated,V,,,M +Identity-with-Emergency-Registration,651,6.3.57,Grouped,V,,,M +Priviledged-Sender-Indication,652,6.3.58,Enumerated,V,,,M +LIA-Flags,653,6.3.59,Unsigned32,V,,,M +Initial-CSeq-Sequence-Number,654,6.3.62,Unsigned32,V,,,M +SAR-Flags,655,6.3.63,Unsigned32,V,,,M +Allowed-WAF-WWSF-Identities,656,6.3.64,Grouped,V,,,M +WebRTC-Authentication-Function-Name,657,6.3.65,UTF8String,V,,,M +WebRTC-Web-Server-Function-Name,658,6.3.66,UTF8String,V,,,M +RTR-Flags,659,6.3.69,Unsigned32,V,,,M +,,,,,,, +@standard,3GPP TS 29.234,,,,,, +#=,,,,,,, +# 3GPP TS 29.234 V11.2.0 (2013-06),,,,,,, +# 3GPP system to Wireless Local Area Network (WLAN),,,,,,, +# interworking;,,,,,,, +# Stage 3,,,,,,, +# ,,,,,,, +# From 3GPP 29234-b20.doc,,,,,,, +#=,,,,,,, +#,,,,,,, +#=,,,,,,, +# 3GPP TS 29.234 Table 10.1.1: Diameter Multimedia Application AVPs,,,,,,, +#=,,,,,,, +#,,,,,,, +3GPP-WLAN-APN-Id,100,10.1.15,OctetString,"M, V",,, +Authentication-Method,300,10.1.5,Enumerated,"M, V",,, +Authentication-Information-SIM,301,10.1.6,OctetString,"M, V",,, +Authorization-Information-SIM,302,10.1.7,OctetString,"M,V",,, +WLAN-User-Data,303,10.1.8,Grouped,"M, V",,, +Charging-Data,304,10.1.10,Grouped,"M, V",,, +WLAN-Access,305,10.1.11,Enumerated,"M, V",,, +WLAN-3GPP-IP-Access,306,10.1.12,Enumerated,"M, V",,, +APN-Authorized,307,10.1.14,Grouped,"M, V",,, +# Note: APN-Id (308) OctetString removed in 3GPP TS 29.234 V6.5.0 (2005-12).,,,,,,, +#,,,,,,, +APN-Barring-Type,309,10.1.16,Enumerated,"M, V",,, +WLAN-Direct-IP-Access,310,10.1.17,Enumerated,"M, V",,, +Session-Request-Type,311,10.1.23,Enumerated,"M, V",,, +Routing-Policy,312,10.1.24,IPFilterRule,"M, V",,, +Max-Requested-Bandwidth,313,10.1.26,OctetString,"M, V",,, +Charging-Characteristics,314,10.1.27,Integer32,"M, V",,, +Charging-Nodes,315,10.1.28,Grouped,"M, V",,, +Primary-OCS-Charging-Function-Name,316,10.1.29,DiameterIdentity,"M, V",,, +Secondary-OCS-Charging-Function-Name,317,10.1.30,DiameterIdentity,"M, V",,, +# Note: 3GPP TS 29.273 from Release 12 now defines 3GPP-AAA-Server-Name (318).,,,,,,, +# ,,,,,,, +Maximum-Number-Accesses,319,10.1.38,Unsigned32,"M, V",,, +,,,,,,, +@standard,3GPP TS 29.272,,,,,, +#=,,,,,,, +# 3GPP TS 29.272 V15.10.0 (2019-12),,,,,,, +# Mobility Management Entity (MME),,,,,,, +# and Serving GPRS Support Node (SGSN) related interfaces,,,,,,, +# based on Diameter protocol,,,,,,, +# ,,,,,,, +# From 3GPP 29272-fa0.docx,,,,,,, +#=,,,,,,, +#,,,,,,, +#=,,,,,,, +"# 3GPP TS 29.272 Table 7.3.1/1: S6a/S6d, S7a/S7d and S13/S13' specific DiameterAVPs",,,,,,, +#=,,,,,,, +#,,,,,,, +Subscription-Data,1400,7.3.2,Grouped,"M,V",,, +Terminal-Information,1401,7.3.3,Grouped,"M,V",,, +IMEI,1402,7.3.4,UTF8String,"M,V",,, +Software-Version,1403,7.3.5,UTF8String,"M,V",,, +QoS-Subscribed,1404,7.3.77,OctetString,"M,V",,, +ULR-Flags,1405,7.3.7,Unsigned32,"M,V",,, +ULA-Flags,1406,7.3.8,Unsigned32,"M,V",,, +Visited-PLMN-Id,1407,7.3.9,OctetString,"M,V",,, +Requested-EUTRAN-Authentication-Info,1408,7.3.11,Grouped,"M,V",,, +Requested-UTRAN-GERAN-Authentication-Info,1409,7.3.12,Grouped,"M,V",,, +Number-Of-Requested-Vectors,1410,7.3.14,Unsigned32,"M,V",,, +Re-Synchronization-Info,1411,7.3.15,OctetString,"M,V",,, +Immediate-Response-Preferred,1412,7.3.16,Unsigned32,"M,V",,, +Authentication-Info,1413,7.3.17,Grouped,"M,V",,, +E-UTRAN-Vector,1414,7.3.18,Grouped,"M,V",,, +UTRAN-Vector,1415,7.3.19,Grouped,"M,V",,, +GERAN-Vector,1416,7.3.20,Grouped,"M,V",,, +Network-Access-Mode,1417,7.3.21,Enumerated,"M,V",,, +HPLMN-ODB,1418,7.3.22,Unsigned32,"M,V",,, +Item-Number,1419,7.3.23,Unsigned32,"M,V",,, +Cancellation-Type,1420,7.3.24,Enumerated,"M,V",,, +DSR-Flags,1421,7.3.25,Unsigned32,"M,V",,, +DSA-Flags,1422,7.3.26,Unsigned32,"M,V",,, +Context-Identifier,1423,7.3.27,Unsigned32,"M,V",,, +Subscriber-Status,1424,7.3.29,Enumerated,"M,V",,, +Operator-Determined-Barring,1425,7.3.30,Unsigned32,"M,V",,, +Access-Restriction-Data,1426,7.3.31,Unsigned32,"M,V",,, +APN-OI-Replacement,1427,7.3.32,UTF8String,"M,V",,, +All-APN-Configurations-Included-Indicator,1428,7.3.33,Enumerated,"M,V",,, +APN-Configuration-Profile,1429,7.3.34,Grouped,"M,V",,, +APN-Configuration,1430,7.3.35,Grouped,"M,V",,, +EPS-Subscribed-QoS-Profile,1431,7.3.37,Grouped,"M,V",,, +VPLMN-Dynamic-Address-Allowed,1432,7.3.38,Enumerated,"M,V",,, +STN-SR,1433,7.3.39,OctetString,"M,V",,, +Alert-Reason,1434,7.3.83,Enumerated,"M,V",,, +AMBR,1435,7.3.41,Grouped,"M,V",,, +CSG-Subscription-Data,1436,7.3.78,Grouped,"M,V",,, +CSG-Id,1437,7.3.79,Unsigned32,"M,V",,, +PDN-GW-Allocation-Type,1438,7.3.44,Enumerated,"M,V",,, +Expiration-Date,1439,7.3.80,Time,"M,V",,, +RAT-Frequency-Selection-Priority-ID,1440,7.3.46,Unsigned32,"M,V",,, +IDA-Flags,1441,7.3.47,Unsigned32,"M,V",,, +PUA-Flags,1442,7.3.48,Unsigned32,"M,V",,, +NOR-Flags,1443,7.3.49,Unsigned32,"M,V",,, +User-Id,1444,7.3.50,UTF8String,V,,,M +Equipment-Status,1445,7.3.51,Enumerated,"M,V",,, +Regional-Subscription-Zone-Code,1446,7.3.52,OctetString,"M,V",,, +RAND,1447,7.3.53,OctetString,"M,V",,, +XRES,1448,7.3.54,OctetString,"M,V",,, +AUTN,1449,7.3.55,OctetString,"M,V",,, +KASME,1450,7.3.56,OctetString,"M,V",,, +Trace-Collection-Entity,1452,7.3.98,Address,"M,V",,, +Kc,1453,7.3.59,OctetString,"M,V",,, +SRES,1454,7.3.60,OctetString,"M,V",,, +PDN-Type,1456,7.3.62,Enumerated,"M,V",,, +Roaming-Restricted-Due-To-Unsupported-Feature,1457,7.3.81,Enumerated,"M,V",,, +Trace-Data,1458,7.3.63,Grouped,"M,V",,, +Trace-Reference,1459,7.3.64,OctetString,"M,V",,, +Trace-Depth,1462,7.3.67,Enumerated,"M,V",,, +Trace-NE-Type-List,1463,7.3.68,OctetString,"M,V",,, +Trace-Interface-List,1464,7.3.69,OctetString,"M,V",,, +Trace-Event-List,1465,7.3.70,OctetString,"M,V",,, +OMC-Id,1466,7.3.71,OctetString,"M,V",,, +GPRS-Subscription-Data,1467,7.3.72,Grouped,"M,V",,, +Complete-Data-List-Included-Indicator,1468,7.3.73,Enumerated,"M,V",,, +PDP-Context,1469,7.3.74,Grouped,"M,V",,, +PDP-Type,1470,7.3.75,OctetString,"M,V",,, +3GPP2-MEID,1471,7.3.6,OctetString,"M,V",,, +Specific-APN-Info,1472,7.3.82,Grouped,"M,V",,, +LCS-Info,1473,7.3.84,Grouped,"M,V",,, +GMLC-Number,1474,7.3.85,OctetString,"M,V",,, +LCS-PrivacyException,1475,7.3.86,Grouped,"M,V",,, +SS-Code,1476,7.3.87,OctetString,"M,V",,, +# Note: 3GPP TS 29.272 V12.5.0 (2014-06) Table 7.3.1/1,,,,,,, +# changed row SS-Status (1477) to be OctetString instead of Grouped.,,,,,,, +# Clause 7.3.88 already described SS-Status (1147) as OctetString.,,,,,,, +# ,,,,,,, +# Change-1.4.0: SS-Status (1477) type changed from Grouped to OctetString.,,,,,,, +SS-Status,1477,7.3.88,OctetString,"M,V",,, +Notification-To-UE-User,1478,7.3.89,Enumerated,"M,V",,, +External-Client,1479,7.3.90,Grouped,"M,V",,, +Client-Identity,1480,7.3.91,OctetString,"M,V",,, +GMLC-Restriction,1481,7.3.92,Enumerated,"M,V",,, +PLMN-Client,1482,7.3.93,Enumerated,"M,V",,, +Service-Type,1483,7.3.94,Grouped,"M,V",,, +ServiceTypeIdentity,1484,7.3.95,Unsigned32,"M,V",,, +MO-LR,1485,7.3.96,Grouped,"M,V",,, +Teleservice-List,1486,7.3.99,Grouped,"M,V",,, +TS-Code,1487,7.3.100,OctetString,"M,V",,, +# Note: 3GPP TS 29.272 V12.4.0 (2014-03) renamed,,,,,,, +# Call-Barring-Infor-List (1488) to Call-Barring-Info (1488).,,,,,,, +# ,,,,,,, +# Change-1.4.0: Call-Barring-Infor-List (1488) renamed to Call-Barring-Info (1488).,,,,,,, +Call-Barring-Info,1488,7.3.101,Grouped,"M,V",,, +SGSN-Number,1489,7.3.102,OctetString,"M,V",,, +IDR-Flags,1490,7.3.103,Unsigned32,"M,V",,, +ICS-Indicator,1491,7.3.104,Enumerated,V,,,M +IMS-Voice-Over-PS-Sessions-Supported,1492,7.3.106,Enumerated,V,,,M +Homogeneous-Support-of-IMS-Voice-Over-PS-Sessions,1493,7.3.107,Enumerated,V,,,M +Last-UE-Activity-Time,1494,7.3.108,Time,V,,,M +EPS-User-State,1495,7.3.110,Grouped,V,,,M +EPS-Location-Information,1496,7.3.111,Grouped,V,,,M +MME-User-State,1497,7.3.112,Grouped,V,,,M +SGSN-User-State,1498,7.3.113,Grouped,V,,,M +User-State,1499,7.3.114,Enumerated,V,,,M +# Note: 3GPP TS 29.272 Table 7.3.1/1 row MME-Location-Information (1600),,,,,,, +# incorrectly has a space instead of hyphen in the name.,,,,,,, +# ,,,,,,, +# Change-1.4.0: MME-LocationInformation (1600) renamed to MME-Location-Information(1600).,,,,,,, +MME-Location-Information,1600,7.3.115,Grouped,V,,,M +SGSN-Location-Information,1601,7.3.116,Grouped,V,,,M +E-UTRAN-Cell-Global-Identity,1602,7.3.117,OctetString,V,,,M +Tracking-Area-Identity,1603,7.3.118,OctetString,V,,,M +Cell-Global-Identity,1604,7.3.119,OctetString,V,,,M +Routing-Area-Identity,1605,7.3.120,OctetString,V,,,M +Location-Area-Identity,1606,7.3.121,OctetString,V,,,M +Service-Area-Identity,1607,7.3.122,OctetString,V,,,M +Geographical-Information,1608,7.3.123,OctetString,V,,,M +Geodetic-Information,1609,7.3.124,OctetString,V,,,M +Current-Location-Retrieved,1610,7.3.125,Enumerated,V,,,M +Age-Of-Location-Information,1611,7.3.126,Unsigned32,V,,,M +Active-APN,1612,7.3.127,Grouped,V,,,M +Error-Diagnostic,1614,7.3.128,Enumerated,V,,,M +Ext-PDP-Address,1621,7.3.129,Address,V,,,M +UE-SRVCC-Capability,1615,7.3.130,Enumerated,V,,,M +MPS-Priority,1616,7.3.131,Unsigned32,V,,,M +VPLMN-LIPA-Allowed,1617,7.3.132,Enumerated,V,,,M +LIPA-Permission,1618,7.3.133,Enumerated,V,,,M +Subscribed-Periodic-RAU-TAU-Timer,1619,7.3.134,Unsigned32,V,,,M +Ext-PDP-Type,1620,7.3.75A,OctetString,V,,,M +SIPTO-Permission,1613,7.3.135,Enumerated,V,,,M +MDT-Configuration,1622,7.3.136,Grouped,V,,,M +Job-Type,1623,7.3.137,Enumerated,V,,,M +Area-Scope,1624,7.3.138,Grouped,V,,,M +List-Of-Measurements,1625,7.3.139,Unsigned32,V,,,M +Reporting-Trigger,1626,7.3.140,Unsigned32,V,,,M +Report-Interval,1627,7.3.141,Enumerated,V,,,M +Report-Amount,1628,7.3.142,Enumerated,V,,,M +Event-Threshold-RSRP,1629,7.3.143,Unsigned32,V,,,M +Event-Threshold-RSRQ,1630,7.3.144,Unsigned32,V,,,M +Logging-Interval,1631,7.3.145,Enumerated,V,,,M +Logging-Duration,1632,7.3.146,Enumerated,V,,,M +Relay-Node-Indicator,1633,7.3.147,Enumerated,V,,,M +MDT-User-Consent,1634,7.3.148,Enumerated,V,,,M +PUR-Flags,1635,7.3.149,Unsigned32,V,,,M +Subscribed-VSRVCC,1636,7.3.150,Enumerated,V,,,M +Equivalent-PLMN-List,1637,7.3.151,Grouped,V,,,M +CLR-Flags,1638,7.3.152,Unsigned32,V,,,M +UVR-Flags,1639,7.3.153,Unsigned32,"M,V",,, +UVA-Flags,1640,7.3.154,Unsigned32,"M,V",,, +VPLMN-CSG-Subscription-Data,1641,7.3.155,Grouped,"M,V",,, +Time-Zone,1642,7.3.163,UTF8String,V,,,M +A-MSISDN,1643,7.3.157,OctetString,V,,,M +MME-Number-for-MT-SMS,1645,7.3.159,OctetString,V,,,M +SMS-Register-Request,1648,7.3.162,Enumerated,V,,,M +Local-Time-Zone,1649,7.3.156,Grouped,V,,,M +Daylight-Saving-Time,1650,7.3.164,Enumerated,V,,,M +Subscription-Data-Flags,1654,7.3.165,Unsigned32,V,,,M +# Note: 3GPP TS 29.272 V12.9.0 (2015-12) changed AVP code of,,,,,,, +# Measurement-Period-LTE (1655) from 1656.,,,,,,, +# ,,,,,,, +# Change-1.4.0: Measurement-Period-LTE (1656) code changed to Measurement-Period-LTE (1655).,,,,,,, +Measurement-Period-LTE,1655,7.3.166,Enumerated,V,,,M +# Note: 3GPP TS 29.272 V12.9.0 (2015-12) changed AVP code of,,,,,,, +# Measurement-Period-UMTS (1656) from 1655.,,,,,,, +# ,,,,,,, +# Change-1.4.0: Measurement-Period-UMTS (1655) code changed to Measurement-Period-UMTS (1656).,,,,,,, +Measurement-Period-UMTS,1656,7.3.167,Enumerated,V,,,M +Collection-Period-RRM-LTE,1657,7.3.168,Enumerated,V,,,M +Collection-Period-RRM-UMTS,1658,7.3.169,Enumerated,V,,,M +Positioning-Method,1659,7.3.170,OctetString,V,,,M +Measurement-Quantity,1660,7.3.171,OctetString,V,,,M +Event-Threshold-Event-1F,1661,7.3.172,Integer32,V,,,M +Event-Threshold-Event-1I,1662,7.3.173,Integer32,V,,,M +Restoration-Priority,1663,7.3.174,Unsigned32,V,,,M +SGs-MME-Identity,1664,7.3.175,UTF8String,V,,,M +SIPTO-Local-Network-Permission,1665,7.3.176,Unsigned32,V,,,M +Coupled-Node-Diameter-ID,1666,7.3.177,DiameterIdentity,V,,,M +WLAN-offloadability,1667,7.3.181,Grouped,V,,,M +WLAN-offloadability-EUTRAN,1668,7.3.182,Unsigned32,V,,,M +WLAN-offloadability-UTRAN,1669,7.3.183,Unsigned32,V,,,M +Reset-ID,1670,7.3.184,OctetString,V,,,M +MDT-Allowed-PLMN-Id,1671,7.3.185,OctetString,V,,,M +Adjacent-PLMNs,1672,7.3.186,Grouped,V,,,M +Adjacent-Access-Restriction-Data,1673,7.3.187,Grouped,V,,,M +DL-Buffering-Suggested-Packet-Count,1674,7.3.188,Integer32,V,,,M +IMSI-Group-Id,1675,7.3.189,Grouped,V,,,M +Group-Service-Id,1676,7.3.190,Unsigned32,V,,,M +Group-PLMN-Id,1677,7.3.191,OctetString,V,,,M +Local-Group-Id,1678,7.3.192,OctetString,V,,,M +AIR-Flags,1679,7.3.201,Unsigned32,V,,,M +UE-Usage-Type,1680,7.3.202,Unsigned32,V,,,M +Non-IP-PDN-Type-Indicator,1681,7.3.204,Enumerated,V,,,M +Non-IP-Data-Delivery-Mechanism,1682,7.3.205,Unsigned32,V,,,M +# Note: 3GPP TS 29.272 Table 7.3.1/1 row Additional-Context-ID (1683) has,,,,,,, +"# incorrect name and should be ""Additional-Context-Identifier"" per clause 7.3.206.",,,,,,, +# ,,,,,,, +# Fix: Additional-Context-ID (1683) renamed to Additional-Context-Identifier (1683).,,,,,,, +Additional-Context-Identifier,1683,7.3.206,Unsigned32,V,,,M +SCEF-Realm,1684,7.3.207,DiameterIdentity,V,,,M +Subscription-Data-Deletion,1685,7.3.208,Grouped,V,,,M +# Note: 3GPP TS 29.272 Table 7.3.1/1 row Preferred-Data-Mode (1686),,,,,,, +"# incorrectly has value type Grouped instead of Unsigned32,",,,,,,, +# conflicting with clause 7.3.209.,,,,,,, +# ,,,,,,, +# Fix: Preferred-Data-Mode (1686) type changed from Grouped to Unsigned32.,,,,,,, +Preferred-Data-Mode,1686,7.3.209,Unsigned32,V,,,M +Emergency-Info,1687,7.3.210,Grouped,V,,,M +V2X-Subscription-Data,1688,7.3.212,Grouped,V,,,M +V2X-Permission,1689,7.3.213,Unsigned32,V,,,M +PDN-Connection-Continuity,1690,7.3.214,Unsigned32,V,,,M +eDRX-Cycle-Length,1691,7.3.215,Grouped,V,,,M +eDRX-Cycle-Length-Value,1692,7.3.216,OctetString,V,,,M +UE-PC5-AMBR,1693,7.3.217,Unsigned32,V,,,M +MBSFN-Area,1694,7.3.219,Grouped,V,,,M +MBSFN-Area-ID,1695,7.3.220,Unsigned32,V,,,M +Carrier-Frequency,1696,7.3.221,Unsigned32,V,,,M +RDS-Indicator,1697,7.3.222,Enumerated,V,,,M +Service-Gap-Time,1698,7.3.223,Unsigned32,V,,,M +Aerial-UE-Subscription-Information,1699,7.3.224,Unsigned32,V,,,M +Broadcast-Location-Assistance-Data-Types,1700,7.3.225,Unsigned64,V,,,M +Paging-Time-Window,1701,7.3.226,Grouped,V,,,M +Operation-Mode,1702,7.3.227,Unsigned32,V,,,M +Paging-Time-Window-Length,1703,7.3.228,OctetString,V,,,M +Core-Network-Restrictions,1704,7.3.230,Unsigned32,V,,,M +eDRX-Related-RAT,1705,7.3.229,Grouped,V,,,M +Interworking-5GS-Indicator,1706,7.3.231,Enumerated,V,,,M +,,,,,,, +@standard,3GPP TS 29.273,,,,,, +#=,,,,,,, +# 3GPP TS 29.273 V15.4.0 (2019-09),,,,,,, +# Evolved Packet System (EPS);,,,,,,, +# 3GPP EPS AAA interfaces,,,,,,, +# ,,,,,,, +# From 3GPP 29273-f40.docx,,,,,,, +#=,,,,,,, +#,,,,,,, +#=,,,,,,, +# 3GPP TS 29.273 Table 5.2.3.1/1: Diameter STa AVPs,,,,,,, +# ,,,,,,, +# Note: AVPs referenced from other sources are not added here.,,,,,,, +#=,,,,,,, +#,,,,,,, +ANID,1504,5.2.3.7,UTF8String,"M,V",,,P +AN-Trusted,1503,5.2.3.9,Enumerated,"M,V",,,P +MIP-FA-RK,1506,5.2.3.12,OctetString,"M,V",,,P +MIP-FA-RK-SPI,1507,5.2.3.13,Unsigned32,"M,V",,,P +Full-Network-Name,1516,5.2.3.14,OctetString,V,,,"M,P" +Short-Network-Name,1517,5.2.3.15,OctetString,V,,,"M,P" +WLAN-Identifier,1509,5.2.3.18,Grouped,V,,,"M,P" +AAA-Failure-Indication,1518,8.2.3.21,Unsigned32,V,,,"M,P" +Transport-Access-Type,1519,5.2.3.19,Enumerated,V,,,"M,P" +DER-Flags,1520,5.2.3.20,Unsigned32,V,,,"M,P" +DEA-Flags,1521,5.2.3.21,Unsigned32,V,,,"M,P" +SSID,1524,5.2.3.22,UTF8String,V,,,"M,P" +HESSID,1525,5.2.3.23,UTF8String,V,,,"M,P" +Access-Network-Info,1526,5.2.3.24,Grouped,V,,,"M,P" +TWAN-Connection-Mode,1527,5.2.3.25,Unsigned32,V,,,"M,P" +TWAN-Connectivity-Parameters,1528,5.2.3.26,Grouped,V,,,"M,P" +Connectivity-Flags,1529,5.2.3.27,Unsigned32,V,,,"M,P" +TWAN-PCO,1530,5.2.3.28,OctetString,V,,,"M,P" +TWAG-CP-Address,1531,5.2.3.29,Address,V,,,"M,P" +TWAG-UP-Address,1532,5.2.3.30,UTF8String,V,,,"M,P" +TWAN-S2a-Failure-Cause,1533,5.2.3.31,Unsigned32,V,,,"M,P" +SM-Back-Off-Timer,1534,5.2.3.32,Unsigned32,V,,,"M,P" +WLCP-Key,1535,5.2.3.33,OctetString,V,,,"M,P" +Emergency-Services,1538,7.2.3.4,Unsigned32,V,,,"M,P" +IMEI-Check-In-VPLMN-Result,1540,5.2.3.35,Unsigned32,V,,,"M,P" +#,,,,,,, +#=,,,,,,, +# 3GPP TS 29.273 Table 6.2.3.1/1: Diameter SWd AVPs,,,,,,, +# ,,,,,,, +# Note: No AVPs are first defined in this table.,,,,,,, +#=,,,,,,, +#,,,,,,, +#=,,,,,,, +# 3GPP TS 29.273 Table 7.2.3.1/1: Diameter SWm AVPs,,,,,,, +# ,,,,,,, +# Note: AVPs referenced from other sources are not added here.,,,,,,, +#=,,,,,,, +#,,,,,,, +Trace-Info,1505,8.2.3.1.3,Grouped,V,,,"M,P" +AAR-Flags,1539,7.2.3.5,Unsigned32,V,,,"M,P" +#,,,,,,, +#=,,,,,,, +# 3GPP TS 29.273 Table 8.2.3.0/1: Diameter SWx AVPs,,,,,,, +# ,,,,,,, +# Note: AVPs referenced from other sources are not added here.,,,,,,, +#=,,,,,,, +#,,,,,,, +Non-3GPP-User-Data,1500,8.2.3.1,Grouped,"M,V",,,P +Non-3GPP-IP-Access,1501,8.2.3.3,Enumerated,"M,V",,,P +Non-3GPP-IP-Access-APN,1502,8.2.3.4,Enumerated,"M,V",,,P +PPR-Flags,1508,8.2.3.17,Unsigned32,V,,,"M,P" +TWAN-Default-APN-Context-Id,1512,8.2.3.18,Unsigned32,V,,,"M,P" +TWAN-Access-Info,1510,8.2.3.19,Grouped,V,,,"M,P" +Access-Authorization-Flags,1511,8.2.3.20,Unsigned32,V,,,"M,P" +3GPP-AAA-Server-Name,318,8.2.3.24,DiameterIdentity,"M, V",,,P +ERP-Authorization,1541,8.2.3.27,Unsigned32,V,,,"M,P" +#,,,,,,, +#=,,,,,,, +# 3GPP TS 29.273 Table 9.2.3.1.1/1: Diameter S6b AVPs for DSMIPv6,,,,,,, +# ,,,,,,, +# Note: AVPs referenced from other sources are not added here.,,,,,,, +#=,,,,,,, +#,,,,,,, +RAR-Flags,1522,9.2.3.1.5,Unsigned32,V,,,"M,P" +# Note: Trust-Relationship-Update (1515) Enumerated removed in 3GPP TS 29.273 V11.4.0 (2012-12).,,,,,,, +#,,,,,,, +DER-S6b-Flags,1523,9.2.3.7,Unsigned32,V,,,"M,P" +#,,,,,,, +#=,,,,,,, +# 3GPP TS 29.273 Table 9.2.3.2.1/1: Diameter S6b AVPs for PMIPv6 or GTPv2,,,,,,, +# ,,,,,,, +# Note: AVPs referenced from other sources are not added here.,,,,,,, +#=,,,,,,, +#,,,,,,, +Origination-Time-Stamp,1536,9.2.3.2.6,Unsigned64,V,,,"M,P" +Maximum-Wait-Time,1537,9.2.3.2.7,Unsigned32,V,,,"M,P" +#,,,,,,, +#=,,,,,,, +# 3GPP TS 29.273 Table 9.2.3.6.1/1: Diameter S6b AVPs for MIPv4 FACoA,,,,,,, +# ,,,,,,, +# Note: No AVPs are first defined in this table.,,,,,,, +#=,,,,,,, +#,,,,,,, +,,,,,,, +@standard,3GPP TS 29.283,,,,,, +#=,,,,,,, +# 3GPP TS 29.283 V15.1.0 (2019-09),,,,,,, +# Diameter Data Management Applications,,,,,,, +# ,,,,,,, +# From 3GPP 29283-f10.doc,,,,,,, +#=,,,,,,, +#,,,,,,, +#=,,,,,,, +"# 3GPP TS 29.283 Table 7.3.1-1: MCPTT-2, MCVideo-2, MCData-2 and CSC-13 specific Diameter AVPs",,,,,,, +#=,,,,,,, +#,,,,,,, +MCPTT-ID,4500,7.3.2,UTF8String,"M, V",,, +Data-Identification,4501,7.3.3,Grouped,"M, V",,, +Data-Identification-Prefix,4502,7.3.11,Unsigned32,"M,V",,, +Data-Identification-Flags,4503,7.3.12,Unsigned64,"M,V",,, +DPR-Flags,4504,7.3.13,Unsigned32,"M,V",,, +DPA-Flags,4505,7.3.14,Unsigned32,"M,V",,, +DUR-Flags,4506,7.3.15,Unsigned32,"M,V",,, +DUA-Flags,4507,7.3.16,Unsigned32,"M,V",,, +NDR-Flags,4508,7.3.17,Unsigned32,"M,V",,, +NDA-Flags,4509,7.3.18,Unsigned32,"M,V",,, +User-Data-Id,4510,7.3.19,Unsigned32,"M,V",,, +MC-Service-User-Profile-Data,4511,7.3.20,Grouped,"M,V",,, +# Note: Name conflict with 3GPP TS 29.140 Sequence-Number (1107).,,,,,,, +# and 3GPP TS 29.329 Sequence-Number (716).,,,,,,, +# 3GPP TS 29.140 V6.1.0 (2005-06) allocated Sequence-Number (1107).,,,,,,, +# 3GPP TS 29.329 V10.0.0 (2010-09) CR 0163 added Sequence-Number (716).,,,,,,, +# 3GPP TS 29.283 V13.1.0 (2016-06) allocated Sequence-Number (4512).,,,,,,, +# ,,,,,,, +# Fix: Sequence-Number (4512) renamed to Sequence-Number-29.283 (4512).,,,,,,, +Sequence-Number-29.283,4512,7.3.21,Unsigned32,"M,V",,, +Data,4513,7.3.22,Grouped,"M,V",,, +MCVideo-ID,4514,7.3.24,UTF8String,V,,,M +MCData-ID,4515,7.3.25,UTF8String,V,,,M +,,,,,,, +@standard,3GPP TS 29.329,,,,,, +#=,,,,,,, +# 3GPP TS 29.329 V15.2.0 (2019-09),,,,,,, +# Sh Interface based on the Diameter protocol;,,,,,,, +# Protocol details,,,,,,, +# ,,,,,,, +# From 3GPP 29329-f20.doc,,,,,,, +#=,,,,,,, +#,,,,,,, +#=,,,,,,, +# 3GPP TS 29.329 Table 6.3.1: Table 6.3.1: Diameter Multimedia Application AVPs,,,,,,, +# ,,,,,,, +# Note: AVPs referenced from other sources are not added here.,,,,,,, +#=,,,,,,, +#,,,,,,, +User-Identity,700,6.3.1,Grouped,"M, V",,, +MSISDN,701,6.3.2,OctetString,"M, V",,, +# Note: Name conflict with 3GPP TS 29.229 User-Data (606).,,,,,,, +# 3GPP TS 29.229 V6.2.0 (2004-09) allocated User-Data (606).,,,,,,, +# 3GPP TS 29.329 V6.2.0 (2004-09) allocated User-Data (702).,,,,,,, +# ,,,,,,, +# Fix: User-Data (702) renamed to User-Data-29.329 (702).,,,,,,, +User-Data-29.329,702,6.3.3,OctetString,"M, V",,, +Data-Reference,703,6.3.4,Enumerated,"M, V",,, +Service-Indication,704,6.3.5,OctetString,"M, V",,, +Subs-Req-Type,705,6.3.6,Enumerated,"M, V",,, +Requested-Domain,706,6.3.7,Enumerated,"M, V",,, +Current-Location,707,6.3.8,Enumerated,"M, V",,, +Identity-Set,708,6.3.10,Enumerated,V,,,M +Expiry-Time,709,6.3.16,Time,V,,,M +Send-Data-Indication,710,6.3.17,Enumerated,V,,,M +DSAI-Tag,711,6.3.18,OctetString,"M, V",,, +One-Time-Notification,712,6.3.22,Enumerated,V,,,M +Requested-Nodes,713,6.3.7A,Unsigned32,V,,,M +Serving-Node-Indication,714,6.3.23,Enumerated,V,,,M +Repository-Data-ID,715,6.3.24,Grouped,V,,,M +# Note: Name conflict with 3GPP TS 29.140 Sequence-Number (1107),,,,,,, +# and 3GPP TS 29.283 Sequence-Number (4512).,,,,,,, +# 3GPP TS 29.140 V6.1.0 (2005-06) allocated Sequence-Number (1107).,,,,,,, +# 3GPP TS 29.329 V10.0.0 (2010-09) CR 0163 added Sequence-Number (716).,,,,,,, +# 3GPP TS 29.283 V13.1.0 (2016-06) allocated Sequence-Number (4512).,,,,,,, +Sequence-Number,716,6.3.25,Unsigned32,V,,,M +Pre-paging-Supported,717,6.3.26,Enumerated,V,,,M +Local-Time-Zone-Indication,718,6.3.27,Enumerated,V,,,M +UDR-Flags,719,6.3.28,Unsigned32,V,,,M +Call-Reference-Info,720,6.3.29,Grouped,V,,,M +Call-Reference-Number,721,6.3.30,OctetString,V,,,M +AS-Number,722,6.3.31,OctetString,V,,,M +,,,,,,, +@standard,3GPP TS 29.336,,,,,, +#=,,,,,,, +# 3GPP TS 29.336 V15.7.0 (2019-09),,,,,,, +# Home Subscriber Server (HSS) diameter interfaces for,,,,,,, +# interworking with packet data networks and applications,,,,,,, +# ,,,,,,, +# From 3GPP 29336-f70.docx,,,,,,, +#=,,,,,,, +#,,,,,,, +#=,,,,,,, +# 3GPP TS 29.336 Table 6.4.1/1: S6m/S6n specific Diameter AVPs,,,,,,, +#=,,,,,,, +#,,,,,,, +IP-SM-GW-Number,3100,6.4.14,OctetString,"M,V",,, +IP-SM-GW-Name,3101,6.4.15,DiameterIdentity,"M,V",,, +User-Identifier,3102,6.4.2,Grouped,"M,V",,, +Service-ID,3103,6.4.3,Enumerated,"M,V",,, +SCS-Identity,3104,6.4.4,OctetString,"M,V",,, +Service-Parameters,3105,6.4.5,Grouped,"M,V",,, +T4-Parameters,3106,6.4.6,Grouped,"M,V",,, +Service-Data,3107,6.4.7,Grouped,"M,V",,, +T4-Data,3108,6.4.8,Grouped,"M,V",,, +HSS-Cause,3109,6.4.9,Unsigned32,"M,V",,, +SIR-Flags,3110,6.4.10,Unsigned32,"M,V",,, +# Note: 3GPP TS 29.061 External-Identifier (28) OctetString replaced by,,,,,,, +# 3GPP TS 29.336 External-Identifier (3111) UTF8String.,,,,,,, +# ,,,,,,, +# Change-1.4.0: External-Identifier (28) OctetString replaced by External-Identifier (3111) UTF8String.,,,,,,, +External-Identifier,3111,6.4.11,UTF8String,"M,V",,, +IP-SM-GW-Realm,3112,6.4.18,DiameterIdentity,"M,V",,, +#=,,,,,,, +# 3GPP TS 29.336 Table 8.4.1-1: S6t specific Diameter AVPs,,,,,,, +#=,,,,,,, +#,,,,,,, +AESE-Communication-Pattern,3113,8.4.25,Grouped,"M,V",,, +Communication-Pattern-Set,3114,8.4.26,Grouped,"M,V",,, +Periodic-Communication-Indicator,3115,8.4.27,Unsigned32,"M,V",,, +Communication-Duration-Time,3116,8.4.28,Unsigned32,"M,V",,, +# Note: 3GPP TS 29.336 Table 8.4.1-1 row Periodic-time (3117) has,,,,,,, +"# incorrect name and should be ""Periodic-Time"" per majority use.",,,,,,, +# ,,,,,,, +# Fix: Periodic-time (3117) renamed to Periodic-Time (931).,,,,,,, +Periodic-Time,3117,8.4.29,Unsigned32,"M,V",,, +Scheduled-Communication-Time,3118,8.4.30,Grouped,"M,V",,, +Stationary-Indication,3119,8.4.31,Unsigned32,"M,V",,, +AESE-Communication-Pattern-Config-Status,3120,8.4.32,Grouped,"M,V",,, +AESE-Error-Report,3121,8.4.33,Grouped,"M,V",,, +Monitoring-Event-Configuration,3122,8.4.2,Grouped,"M,V",,, +Monitoring-Event-Report,3123,8.4.3,Grouped,"M,V",,, +SCEF-Reference-ID,3124,8.4.4,Unsigned32,"M,V",,, +SCEF-ID,3125,8.4.5,DiameterIdentity,"M,V",,, +SCEF-Reference-ID-for-Deletion,3126,8.4.6,Unsigned32,"M,V",,, +Monitoring-Type,3127,8.4.7,Unsigned32,"M,V",,, +Maximum-Number-of-Reports,3128,8.4.8,Unsigned32,"M,V",,, +UE-Reachability-Configuration,3129,8.4.9,Grouped,"M,V",,, +Monitoring-Duration,3130,8.4.10,Time,"M,V",,, +Maximum-Detection-Time,3131,8.4.11,Unsigned32,"M,V",,, +Reachability-Type,3132,8.4.12,Unsigned32,"M,V",,, +Maximum-Latency,3133,8.4.13,Unsigned32,"M,V",,, +Maximum-Response-Time,3134,8.4.14,Unsigned32,"M,V",,, +Location-Information-Configuration,3135,8.4.15,Grouped,"M,V",,, +MONTE-Location-Type,3136,8.4.16,Unsigned32,"M,V",,, +Accuracy,3137,8.4.17,Unsigned32,"M,V",,, +Association-Type,3138,8.4.18,Unsigned32,"M,V",,, +Roaming-Information,3139,8.4.19,Unsigned32,"M,V",,, +Reachability-Information,3140,8.4.20,Unsigned32,"M,V",,, +IMEI-Change,3141,8.4.22,Unsigned32,"M,V",,, +Monitoring-Event-Config-Status,3142,8.4.24,Grouped,"M,V",,, +Supported-Services,3143,8.4.40,Grouped,"M,V",,, +Supported-Monitoring-Events,3144,8.4.41,Unsigned64,"M,V",,, +CIR-Flags,3145,8.4.39,Unsigned32,"M,V",,, +Service-Result,3146,8.4.37,Grouped,"M,V",,, +Service-Result-Code,3147,8.4.38,Unsigned32,"M,V",,, +Reference-ID-Validity-Time,3148,8.4.42,Time,"M,V",,, +Event-Handling,3149,8.4.43,Unsigned32,"M,V",,, +NIDD-Authorization-Request,3150,8.4.44,Grouped,"M,V",,, +NIDD-Authorization-Response,3151,8.4.45,Grouped,"M,V",,, +Service-Report,3152,8.4.47,Grouped,"M,V",,, +Node-Type,3153,8.4.48,Unsigned32,"M,V",,, +S6t-HSS-Cause,3154,8.4.50,Unsigned32,"M,V",,, +Enhanced-Coverage-Restriction,3155,8.4.51,Grouped,V,,,M +Enhanced-Coverage-Restriction-Data,3156,8.4.52,Grouped,V,,,M +Restricted-PLMN-List,3157,8.4.53,Grouped,V,,,M +Allowed-PLMN-List,3158,8.4.54,Grouped,V,,,M +Requested-Validity-Time,3159,8.4.55,Time,V,,,M +Granted-Validity-Time,3160,8.4.56,Time,V,,,M +NIDD-Authorization-Update,3161,8.4.57,Grouped,V,,,M +Loss-Of-Connectivity-Reason,3162,8.4.58,Unsigned32,V,,,M +Group-Reporting-Guard-Timer,3163,8.4.59,Unsigned32,V,,,M +CIA-Flags,3164,8.4.60,Unsigned32,V,,,M +Group-Monitoring-Event-Report,3165,8.4.61,Grouped,V,,,M +Group-Monitoring-Event-Report-Item,3166,8.4.62,Grouped,V,,,M +RIR-Flags,3167,8.4.63,Unsigned32,V,,,M +Type-Of-External-Identifier,3168,8.4.64,Unsigned32,V,,,M +APN-Validity-Time,3169,8.4.65,Grouped,V,,,M +Suggested-Network-Configuration,3170,8.4.66,Grouped,V,,,M +Monitoring-Event-Report-Status,3171,8.4.67,Grouped,V,,,M +PLMN-ID-Requested,3172,8.4.68,Enumerated,V,,,M +AdditionalIdentifiers,3173,8.4.69,Grouped,V,,,M +NIR-Flags,3174,8.4.70,Unsigned32,V,,,M +Reporting-Time-Stamp,3175,8.4.71,Time,V,,,M +NIA-Flags,3176,8.4.72,Unsigned32,V,,,M +Group-User-Identifier,3177,8.4.73,Grouped,V,,,M +MTC-Provider-Info,3178,8.4.74,Grouped,V,,,M +MTC-Provider-ID,3179,8.4.75,UTF8String,V,,,M +,,,,,,, +@standard,3GPP TS 29.337,,,,,, +#=,,,,,,, +# 3GPP TS 29.337 V15.0.0 (2018-06),,,,,,, +# Diameter-based T4 interface for communications with packet,,,,,,, +# data networks and applications,,,,,,, +# ,,,,,,, +# From 3GPP 29337-f00.doc,,,,,,, +#=,,,,,,, +#,,,,,,, +#=,,,,,,, +# 3GPP TS 29.337 Table 6.3.1/1: T4 specific Diameter AVPs,,,,,,, +#=,,,,,,, +#,,,,,,, +SM-Delivery-Outcome-T4,3200,6.3.1,Enumerated,"M, V",,, +Absent-Subscriber-Diagnostic-T4,3201,6.3.2,Enumerated,"M, V",,, +Trigger-Action,3202,6.3.6,Unsigned32,V,,,M +MTC-Error-Diagnostic,3203,6.3.7,Unsigned32,V,,,M +,,,,,,, +@standard,3GPP TS 29.338,,,,,, +#=,,,,,,, +# 3GPP TS 29.338 V15.1.0 (2018-12),,,,,,, +# Diameter based protocols to support,,,,,,, +# Short Message Service (SMS) capable,,,,,,, +# Mobile Management Entities (MMEs),,,,,,, +# ,,,,,,, +# From 3GPP 29338-f10.doc,,,,,,, +#=,,,,,,, +#,,,,,,, +#=,,,,,,, +# 3GPP TS 29.338 Table 5.3.3.1/1: S6c specific Diameter AVPs,,,,,,, +#=,,,,,,, +#,,,,,,, +SM-RP-MTI,3308,5.3.3.2,Enumerated,"M, V",,, +SM-RP-SMEA,3309,5.3.3.3,OctetString,"M, V",,, +SRR-Flags,3310,5.3.3.4,Unsigned32,"M, V",,, +SM-Delivery-Not-Intended,3311,5.3.3.5,Enumerated,"M, V",,, +MWD-Status,3312,5.3.3.8,Unsigned32,"M, V",,, +MME-Absent-User-Diagnostic-SM,3313,5.3.3.9,Unsigned32,"M, V",,, +MSC-Absent-User-Diagnostic-SM,3314,5.3.3.10,Unsigned32,"M, V",,, +SGSN-Absent-User-Diagnostic-SM,3315,5.3.3.11,Unsigned32,"M, V",,, +SM-Delivery-Outcome,3316,5.3.3.14,Grouped,"M, V",,, +MME-SM-Delivery-Outcome,3317,5.3.3.15,Grouped,"M, V",,, +MSC-SM-Delivery-Outcome,3318,5.3.3.16,Grouped,"M, V",,, +SGSN-SM-Delivery-Outcome,3319,5.3.3.17,Grouped,"M, V",,, +IP-SM-GW-SM-Delivery-Outcome,3320,5.3.3.18,Grouped,"M, V",,, +SM-Delivery-Cause,3321,5.3.3.19,Enumerated,"M, V",,, +Absent-User-Diagnostic-SM,3322,5.3.3.20,Unsigned32,"M, V",,, +RDR-Flags,3323,5.3.3.21,Unsigned32,V,,,M +Maximum-UE-Availability-Time,3329,5.3.3.22,Time,V,,,M +SMS-GMSC-Alert-Event,3333,5.3.3.23,Unsigned32,V,,,M +#=,,,,,,, +# 3GPP TS 29.338 Table 6.3.3.1/1: SGd/Gdd specific Diameter AVPs,,,,,,, +#=,,,,,,, +#,,,,,,, +SC-Address,3300,6.3.3.2,OctetString,"M, V",,, +SM-RP-UI,3301,6.3.3.3,OctetString,"M, V",,, +TFR-Flags,3302,6.3.3.4,Unsigned32,"M, V",,, +SM-Delivery-Failure-Cause,3303,6.3.3.5,Grouped,"M, V",,, +SM-Enumerated-Delivery-Failure-Cause,3304,6.3.3.6,Enumerated,"M, V",,, +SM-Diagnostic-Info,3305,6.3.3.7,OctetString,"M, V",,, +SM-Delivery-Timer,3306,6.3.3.10,Unsigned32,"M, V",,, +SM-Delivery-Start-Time,3307,6.3.3.11,Time,"M, V",,, +SMSMI-Correlation-ID,3324,6.3.3.13,Grouped,V,,,M +# Note: 3GPP TS 29.338 Table 6.3.3.1/1 row HSS-ID (3325),,,,,,, +# incorrectly lists type as OctetString instead of UTF8String.,,,,,,, +# 3GPP TS 29.338 clause 6.3.3.14 uses UTF8String.,,,,,,, +# ,,,,,,, +# Fix: HSS-ID (3325) type changed from OctetString to UTF8String.,,,,,,, +HSS-ID,3325,6.3.3.14,UTF8String,V,,,M +Originating-SIP-URI,3326,6.3.3.15,UTF8String,V,,,M +Destination-SIP-URI,3327,6.3.3.16,UTF8String,V,,,M +OFR-Flags,3328,6.3.3.12,Unsigned32,V,,,M +Maximum-Retransmission-Time,3330,6.3.3.17,Time,V,,,M +Requested-Retransmission-Time,3331,6.3.3.18,Time,V,,,M +SMS-GMSC-Address,3332,6.3.3.19,OctetString,V,,,M +,,,,,,, +@standard,3GPP TS 29.343,,,,,, +#=,,,,,,, +# 3GPP TS 29.343 V15.1.0 (2019-09),,,,,,, +# Proximity-services (ProSe) function to,,,,,,, +# ProSe application server aspects (PC2);,,,,,,, +# Stage 3,,,,,,, +# ,,,,,,, +# From 3GPP 29343-f10.doc,,,,,,, +#=,,,,,,, +#,,,,,,, +#=,,,,,,, +# 3GPP TS 29.343 Table 6.4.1-1: PC2 specific Diameter AVPs,,,,,,, +#=,,,,,,, +#,,,,,,, +Origin-App-Layer-User-Id,3600,6.4.2,UTF8String,"M,V",P,, +Target-App-Layer-User-Id,3601,6.4.3,UTF8String,"M,V",P,, +ProSe-Function-ID,3602,6.4.4,OctetString,"M,V",P,, +ProSe-Request-Type,3603,6.4.5,Unsigned32,"M,V",P,, +PDUID,3604,6.4.6,OctetString,V,P,,M +Application-Data,3605,6.4.7,UTF8String,V,P,,M +Allowed-Suffixes-Number,3606,6.4.8,Unsigned32,V,P,,M +Monitor-Target,3607,6.4.9,Grouped,V,P,,M +ProSe-Code-Suffix-Mask,3608,6.4.10,Grouped,V,P,,M +Suffix-Code,3609,6.4.11,OctetString,V,P,,M +Suffix-Mask,3610,6.4.12,OctetString,V,P,,M +Banned-User-Target,3611,6.4.17,Grouped,V,P,,M +Metadata-Indicator,3612,6.4.18,Unsigned32,V,P,,M +,,,,,,, +@standard,3GPP TS 29.344,,,,,, +#=,,,,,,, +# 3GPP TS 29.344 V15.1.0 (2019-09),,,,,,, +# Proximity-services (ProSe) Function to Home Subscriber,,,,,,, +# Server (HSS) aspects;,,,,,,, +# Stage 3,,,,,,, +# ,,,,,,, +# From 3GPP 29344-f10.doc,,,,,,, +#=,,,,,,, +#,,,,,,, +#=,,,,,,, +# 3GPP TS 29.344 Table 6.3.1-1: PC4a specific Diameter AVPs,,,,,,, +#=,,,,,,, +#,,,,,,, +ProSe-Subscription-Data,3701,6.3.2,Grouped,"M,V",,, +ProSe-Permission,3702,6.3.3,Unsigned32,"M,V",,, +ProSe-Allowed-PLMN,3703,6.3.4,Grouped,"M,V",,, +ProSe-Direct-Allowed,3704,6.3.5,Unsigned32,"M,V",,, +UPR-Flags,3705,6.3.6,Unsigned32,"M,V",,, +PNR-Flags,3706,6.3.7,Unsigned32,"M,V",,, +ProSe-Initial-Location-Information,3707,6.3.9,Grouped,"M,V",,, +# Note: 3GPP TS 29.344 Table 6.3.1-1 missing Authorized-Discovery-Range.,,,,,,, +# Present in 3GPP TS 29.344 clause 6.3.13 and 3GPP TS 29.230 Table 7.1.,,,,,,, +# ,,,,,,, +# Fix: Add Authorized-Discovery-Range (3708) Unsigned32.,,,,,,, +Authorized-Discovery-Range,3708,6.3.13,Unsigned32,V,,,M +,,,,,,, +@standard,3GPP TS 29.345,,,,,, +#=,,,,,,, +# 3GPP TS 29.345 V15.1.0 (2019-09),,,,,,, +# Inter-Proximity-services (ProSe) Function signalling aspects;,,,,,,, +# Stage 3,,,,,,, +# ,,,,,,, +# From 3GPP 29345-f10.doc,,,,,,, +#=,,,,,,, +#,,,,,,, +#=,,,,,,, +# 3GPP TS 29.345 Table 6.3.1-1: PC6/PC7 specific Diameter AVPs,,,,,,, +#=,,,,,,, +#,,,,,,, +App-Layer-User-Id,3801,6.3.2,UTF8String,"M, V",,, +# Note: 3GPP TS 29.345 Table 6.3.1-1 row Assistance-info (3802) has,,,,,,, +"# incorrect name and should be ""Assistance-Info"" per clause 6.3.3.",,,,,,, +# ,,,,,,, +# Fix: Assistance-info (3802) renamed to Assistance-Info (3802).,,,,,,, +Assistance-Info,3802,6.3.3,Grouped,"M, V",,, +Assistance-Info-Validity-Timer,3803,6.3.4,Unsigned32,"M, V",,, +Discovery-Type,3804,6.3.5,Unsigned32,"M, V",,, +Filter-Id,3805,6.3.9,OctetString,"M, V",,, +MAC-Address,3806,6.3.11,UTF8String,"M, V",,, +Match-Report,3807,6.3.12,Grouped,"M, V",,, +Operating-Channel,3808,6.3.14,Unsigned32,"M, V",,, +P2P-Features,3809,6.3.15,Unsigned32,"M, V",,, +ProSe-App-Code,3810,6.3.16,OctetString,"M, V",,, +ProSe-App-Id,3811,6.3.17,UTF8String,"M, V",,, +ProSe-App-Mask,3812,6.3.18,OctetString,"M, V",,, +ProSe-Discovery-Filter,3813,6.3.20,Grouped,"M, V",,, +PRR-Flags,3814,6.3.21,Unsigned32,"M, V",,, +ProSe-Validity-Timer,3815,6.3.22,Unsigned32,"M, V",,, +Requesting-EPUID,3816,6.3.23,UTF8String,"M, V",,, +Targeted-EPUID,3817,6.3.26,UTF8String,"M, V",,, +# Note: Name conflict with 3GPP TS 29.154 Time-Window (4204).,,,,,,, +# Time-Window (3818) in 3GPP TS 29.345 V12.1.0 (2014-12) predates,,,,,,, +# Time-Window (4204) in 3GPP TS 29.154 V13.1.0 (2016-03).,,,,,,, +Time-Window,3818,6.3.27,Unsigned32,"M, V",,, +WiFi-P2P-Assistance-Info,3819,6.3.30,Grouped,"M, V",,, +WLAN-Assistance-Info,3820,6.3.31,Grouped,"M, V",,, +WLAN-Link-Layer-Id,3821,6.3.32,OctetString,"M, V",,, +WLAN-Link-Layer-Id-List,3822,6.3.33,Grouped,"M, V",,, +Location-Update-Trigger,3823,6.3.42,Grouped,"M,V",,, +Location-Update-Event-Type,3824,6.3.43,Unsigned32,"M,V",,, +Change-Of-Area-Type,3825,6.3.44,Grouped,"M,V",,, +Location-Update-Event-Trigger,3826,6.3.45,Unsigned32,"M,V",,, +Report-Cardinality,3827,6.3.46,Enumerated,"M,V",,, +Minimum-Interval-Time,3828,6.3.47,Unsigned32,"M,V",,, +Periodic-Location-Type,3829,6.3.48,Grouped,"M,V",,, +Location-Report-Interval-Time,3830,6.3.49,Unsigned32,"M,V",,, +Total-Number-Of-Reports,3831,6.3.50,Unsigned32,"M,V",,, +Validity-Time-Announce,3832,6.3.36,Unsigned32,"M, V",,, +Validity-Time-Monitor,3833,6.3.37,Unsigned32,"M, V",,, +Validity-Time-Communication,3834,6.3.38,Unsigned32,"M, V",,, +ProSe-App-Code-Info,3835,6.3.39,Grouped,"M, V",,, +MIC,3836,6.3.40,OctetString,"M, V",,, +UTC-based-Counter,3837,6.3.41,Unsigned32,"M, V",,, +ProSe-Match-Refresh-Timer,3838,6.3.52,Unsigned32,"M, V",,, +ProSe-Metadata-Index-Mask,3839,6.3.60,OctetString,V,,,M +App-Identifier,3840,6.3.61,Grouped,V,,,M +OS-ID,3841,6.3.62,OctetString,V,,,M +OS-App-ID,3842,6.3.63,UTF8String,V,,,M +Requesting-RPAUID,3843,6.3.64,UTF8String,V,,,M +Target-RPAUID,3844,6.3.65,UTF8String,V,,,M +Target-PDUID,3845,6.3.66,OctetString,V,,,M +ProSe-Restricted-Code,3846,6.3.67,OctetString,V,,,M +ProSe-Restricted-Code-Suffix-Range,3847,6.3.68,OctetString,V,,,M +Beginning-Suffix,3848,6.3.69,OctetString,V,,,M +Ending-Suffix,3849,6.3.70,OctetString,V,,,M +Discovery-Entry-ID,3850,6.3.59,Unsigned32,V,,,M +Match-Timestamp,3851,6.3.71,Time,V,,,M +PMR-Flags,3852,6.3.57,Unsigned32,"M,V",,, +ProSe-Application-Metadata,3853,6.3.58,UTF8String,"M,V",,, +Discovery-Auth-Request,3854,6.3.53,Grouped,"M, V",,, +Discovery-Auth-Response,3855,6.3.54,Grouped,"M, V",,, +Match-Request,3856,6.3.55,Grouped,"M, V",,, +Match-Report-Info,3857,6.3.56,Grouped,"M, V",,, +Banned-RPAUID,3858,6.3.73,UTF8String,V,,,M +Banned-PDUID,3859,6.3.74,OctetString,V,,,M +Code-Receiving-Security-Material,3860,6.3.75,Grouped,V,,,M +Code-Sending-Security-Material,3861,6.3.76,Grouped,V,,,M +DUSK,3862,6.3.77,OctetString,V,,,M +DUIK,3863,6.3.78,OctetString,V,,,M +DUCK,3864,6.3.79,OctetString,V,,,M +# Note: 3GPP TS 29.345 Table 6.3.1-1 row MIC-Check-indicator (3865) has,,,,,,, +"# incorrect name and should be ""MIC-Check-Indicator"" per clause 6.3.80.",,,,,,, +# ,,,,,,, +# Fix: MIC-Check-indicator (3865) renamed to MIC-Check-Indicator (3865).,,,,,,, +MIC-Check-Indicator,3865,6.3.80,Unsigned32,V,,,M +Encrypted-Bitmask,3866,6.3.81,OctetString,V,,,M +ProSe-App-Code-Suffix-Range,3867,6.3.82,OctetString,V,,,M +PC5-tech,3868,6.3.84,OctetString,V,,,M +,,,,,,, +@standard,3GPP TS 29.368,,,,,, +#=,,,,,,, +# 3GPP TS 29.368 V15.1.0 (2019-09),,,,,,, +# Tsp interface protocol between the MTC Interworking Function,,,,,,, +# (MTC-IWF) and Service Capability Server (SCS),,,,,,, +# ,,,,,,, +# From 3GPP 29368-f10.doc,,,,,,, +#=,,,,,,, +#,,,,,,, +#=,,,,,,, +# 3GPP TS 29.368 Table 6.4.1.1: Tsp specific Diameter AVPs,,,,,,, +#=,,,,,,, +#,,,,,,, +Device-Action,3001,6. 4.2,Grouped,"M,V",P,, +Device-Notification,3002,6.4.3,Grouped,"M,V",P,, +Trigger-Data,3003,6.4.4,Grouped,"M,V",P,, +Payload,3004,6.4.5,OctetString,"M,V",P,, +Action-Type,3005,6.4.6,Enumerated,"M,V",P,, +Priority-Indication,3006,6.4.7,Enumerated,"M,V",P,, +Reference-Number,3007,6.4.8,Unsigned32,"M,V",P,, +Request-Status,3008,6.4.9,Enumerated,"M,V",P,, +Delivery-Outcome,3009,6.4.10,Enumerated,"M,V",P,, +Application-Port-Identifier,3010,6.4.11,Unsigned32,"M,V",P,, +Old-Reference-Number,3011,6.4.12,Unsigned32,V,P,,M +Feature-Supported-In-Final-Target,3012,6.4.13,Unsigned32,V,P,,M +,,,,,,, +@standard,3GPP TS 29.388,,,,,, +#=,,,,,,, +# 3GPP TS 29.388 V15.1.0 (2019-09),,,,,,, +# V2X Control Function to Home Subscriber Server (HSS),,,,,,, +# aspects (V4);,,,,,,, +# Stage 3,,,,,,, +# ,,,,,,, +# From 3GPP 29388-f10.doc,,,,,,, +#=,,,,,,, +#,,,,,,, +#=,,,,,,, +# 3GPP TS 29.388 Table 6.3.1-1: V4 specific Diameter AVPs,,,,,,, +#=,,,,,,, +#,,,,,,, +V2X-PC5-Allowed-PLMN,4600,6.3.3,Grouped,"M,V",,, +V2X-Update-Flags,4601,6.3.4,Unsigned32,"M,V",,, +V2X-Notify-Flags,4602,6.3.5,Unsigned32,"M,V",,, +,,,,,,, +@standard,3GPP TS 29.389,,,,,, +#=,,,,,,, +# 3GPP TS 29.389 V15.1.0 (2019-09),,,,,,, +# Inter-V2X Control Function Signalling aspects (V6);,,,,,,, +# Stage 3,,,,,,, +# ,,,,,,, +# From 3GPP 29389-f10.doc,,,,,,, +#=,,,,,,, +#,,,,,,, +#=,,,,,,, +# 3GPP TS 29.389 Table 6.3.1-1: V6 specific Diameter AVPs,,,,,,, +# ,,,,,,, +# Fix: All AVPs were missing M and V; assume MUST for both.,,,,,,, +#=,,,,,,, +#,,,,,,, +V2X-Authorization-Data,4700,6.3.2,Grouped,"M,V",,, +V2X-Permission-in-VPLMN,4701,6.3.3,Unsigned32,"M,V",,, +V2X-Application-Server,4702,6.3.4,Grouped,"M,V",,, +,,,,,,, +@standard,3GPP TS 29.468,,,,,, +#=,,,,,,, +# 3GPP TS 29.468 V15.8.0 (2019-12),,,,,,, +# Group Communication System Enablers for LTE (GCSE_LTE);,,,,,,, +# MB2 Reference Point;,,,,,,, +# Stage 3,,,,,,, +# ,,,,,,, +# From 3GPP 29468-f80.doc,,,,,,, +#=,,,,,,, +#,,,,,,, +#=,,,,,,, +# 3GPP TS 29.468 Table 6.4.1 1: MB2 C specific Diameter AVPs,,,,,,, +#=,,,,,,, +#,,,,,,, +BMSC-Address,3500,6.4.2,Address,"M,V",P,, +BMSC-Port,3501,6.4.3,Unsigned32,"M,V",P,, +Common-Tunnel-Endpoint-Identifier,3524,6.4.26,OctetString,V,P,,M +FEC-Request,3525,6.4.27,OctetString,V,P,,M +FEC-Result,3531,6.4.33,Unsigned32,V,P,,M +Local-M1-Information,3518,6.4.20,Grouped,V,P,,M +Local-MB2-U-Information,3519,6.4.21,Grouped,V,P,,M +MB2U-Security,3517,6.4.19,Unsigned32,"M,V",P,, +MBMS-Bearer-Event,3502,6.4.4,Unsigned32,"M,V",P,, +MBMS-Bearer-Event-Notification,3503,6.4.5,Grouped,"M,V",P,, +MBMS-Bearer-Request,3504,6.4.6,Grouped,"M,V",P,, +MBMS-Bearer-Response,3505,6.4.7,Grouped,"M,V",P,, +MBMS-Bearer-Result,3506,6.4.8,Unsigned32,"M,V",P,, +MBMS-eNB-IP-Multicast-Address,3520,6.4.22,Address,V,P,,M +MBMS-eNB-IPv6-Multicast-Address,3521,6.4.23,Address,V,P,,M +# Note: Name conflict with 3GPP TS 29.061 MBMS-GW-SSM-IP-Address (924).,,,,,,, +# 3GPP TS 29.061 V10.4.0 (2011-09) CR 0355 added MBMS-GW-SSM-IP-Address (924).,,,,,,, +# 3GPP TS 29.468 V14.0.0 (2016-12) CR 0021 added MBMS-GW-SSM-IP-Address (3522).,,,,,,, +# ,,,,,,, +# Fix: MBMS-GW-SSM-IP-Address (3522) renamed to MBMS-GW-SSM-IP-Address-29.468 (3522).,,,,,,, +MBMS-GW-SSM-IP-Address-29.468,3522,6.4.24,Address,V,P,,M +# Note: Name conflict with 3GPP TS 29.061 MBMS-GW-SSM-IPv6-Address (925).,,,,,,, +# 3GPP TS 29.061 V10.4.0 (2011-09) CR 0355 added MBMS-GW-SSM-IPv6-Address (925).,,,,,,, +# 3GPP TS 29.061 V12.6.0 (2014-06) renamed,,,,,,, +# MBMS-GW-SSM-IPv6-Address (925) to MBMS-GW-SSM-Ipv6-Address.,,,,,,, +# 3GPP TS 29.468 V14.0.0 (2016-12) CR 0021 added MBMS-GW-SSM-IPv6-Address (3523).,,,,,,, +# ,,,,,,, +# Fix: MBMS-GW-SSM-IPv6-Address (3523) renamed to MBMS-GW-SSM-IPv6-Address-29.468 (3523).,,,,,,, +MBMS-GW-SSM-IPv6-Address-29.468,3523,6.4.25,Address,V,P,,M +MBMS-Start-Time,3507,6.4.9,Time,"M,V",P,, +# Note: Name conflict with 3GPP TS 32.299 Radio-Frequency (3462).,,,,,,, +# 3GPP TS 29.468 V12.0.0 (2014-09) added Radio-Frequency (3508).,,,,,,, +# 3GPP TS 32.299 V13.1.0 (2015-06) CR 0638 added Radio-Frequency (3462).,,,,,,, +# ,,,,,,, +# Fix: Radio-Frequency (3508) renamed to Radio-Frequency-29.468 (3508).,,,,,,, +Radio-Frequency-29.468,3508,6.4.10,Unsigned32,"M,V",P,, +ROHC-Full-Header-Periodicity,3527,6.4.29,Float32,V,P,,M +ROHC-Max-CID,3532,6.4.34,Unsigned32,V,P,,M +ROHC-Profile,3528,6.4.30,Unsigned32,V,P,,M +ROHC-Request,3526,6.4.28,Grouped,V,P,,M +ROHC-Result,3530,6.4.32,Unsigned32,V,P,,M +TMGI-Allocation-Request,3509,6.4.11,Grouped,"M,V",P,, +TMGI-Allocation-Response,3510,6.4.12,Grouped,"M,V",P,, +TMGI-Allocation-Result,3511,6.4.13,Unsigned32,"M,V",P,, +TMGI-Deallocation-Request,3512,6.4.14,Grouped,"M,V",P,, +TMGI-Deallocation-Response,3513,6.4.15,Grouped,"M,V",P,, +TMGI-Deallocation-Result,3514,6.4.16,Unsigned32,"M,V",P,, +TMGI-Expiry,3515,6.4.17,Grouped,"M,V",P,, +TMGI-Number,3516,6.4.18,Unsigned32,"M,V",P,, +Userplane-Protocol-Result,3529,6.4.31,Grouped,V,P,,M +,,,,,,, +@standard,3GPP TS 29.561,,,,,, +#=,,,,,,, +# 3GPP TS 29.561 V16.3.0 (2020-03),,,,,,, +# 5G System; Interworking between 5G Network and external,,,,,,, +# Data Networks;,,,,,,, +# Stage 3,,,,,,, +# ,,,,,,, +# From 3GPP 29561-g30.doc,,,,,,, +#=,,,,,,, +#,,,,,,, +#=,,,,,,, +# Table 12.4-1: N6 re-used Diameter AVPs,,,,,,, +#,,,,,,, +# Note: Only AVPs defined in 3GPP TS 29.561.,,,,,,, +#=,,,,,,, +#,,,,,,, +3GPP-Notification,110,11.3.1,OctetString,V,P,,M +3GPP-UE-MAC-Address,111,11.3.1,OctetString,V,P,,M +3GPP-Authorization-Reference,112,11.3.1,OctetString,V,P,,M +3GPP-Policy-Reference,113,11.3.1,OctetString,V,P,,M +3GPP-Session-AMBR,114,11.3.1,OctetString,V,P,,M +3GPP-NAI,115,11.3.1,OctetString,V,P,,M +3GPP-Session-AMBR-v2,116,11.3.1,OctetString,V,P,,M +3GPP-IP-Address-Pool-Id,118,11.3.1,OctetString,V,P,,M +#=,,,,,,, +# Table 17.4-1: Additional information needed for network slice specific authentication,,,,,,, +#=,,,,,,, +#,,,,,,, +3GPP-S-NSSAI,200,16.3.1,UTF8String,V,P,,M +,,,,,,, +@standard,3GPP TS 32.299,,,,,, +#=,,,,,,, +# 3GPP TS 32.299 V15.7.0 (2019-06),,,,,,, +# Charging management;,,,,,,, +# Diameter charging applications,,,,,,, +# ,,,,,,, +# From 3GPP 32299-f70.doc,,,,,,, +#=,,,,,,, +#,,,,,,, +#=,,,,,,, +# 3GPP TS 32.299 Table 7.2.0.1: 3GPP specific AVPs,,,,,,, +#=,,,,,,, +#,,,,,,, +3GPP-OC-Specific-Reduction,1320,,Grouped,V,,,M +3GPP-OC-Rating-Group,1321,,Unsigned32,V,,,M +3GPP-OC-Request-Type,1322,,Enumerated,V,,,M +# Note: Name conflict with 3GPP TS 29.212 3GPP-PS-Data-Off-Status (2847).,,,,,,, +# 3GPP TS 29.212 V14.3.0 (2017-03) CR 1559 added 3GPP-PS-Data-Off-Status (2847).,,,,,,, +# 3GPP TS 32.299 V14.3.0 (2017-03) CR 0760 added 3GPP-PS-Data-Off-Status (4406).,,,,,,, +# ,,,,,,, +# Fix: 3GPP-PS-Data-Off-Status (4406) renamed to 3GPP-PS-Data-Off-Status-32.299 (4406).,,,,,,, +3GPP-PS-Data-Off-Status-32.299,4406,,Enumerated,"V,M",,, +Access-Network-Info-Change,4401,,Grouped,"V,M",,, +Access-Network-Information,1263,,OctetString,"V,M",,, +Access-Transfer-Information,2709,,Grouped,"V,M",,, +Access-Transfer-Type,2710,,Enumerated,"V,M",,, +Account-Expiration,2309,,Time,"V,M",,, +Accumulated-Cost,2052,,Grouped,"V,M",,, +Adaptations,1217,,Enumerated,"V,M",,, +Additional-Content-Information,1207,,Grouped,"V,M",,, +Additional-Exception-Reports,3936,,Enumerated,"V,M",,, +Additional-Type-Information,1205,,UTF8String,"V,M",,, +Address-Data,897,,UTF8String,"V,M",,, +Address-Domain,898,,Grouped,"V,M",,, +Addressee-Type,1208,,Enumerated,"V,M",,, +Address-Type,899,,Enumerated,"V,M",,, +AF-Correlation-Information,1276,,Grouped,"V,M",,, +Alternate-Charged-Party-Address,1280,,UTF8String,"V,M",,, +Announcement-Identifier,3905,,Unsigned32,"V,M",,, +Announcement-Information,3904,,Grouped,"V,M",,, +Announcement-Order,3906,,Unsigned32,"V,M",,, +Announcing-PLMN-ID,4408,,UTF8String,"V,M",,, +Announcing-UE-HPLMN-Identifier,3426,,UTF8String,"V,M",,, +Announcing-UE-VPLMN-Identifier,3427,,UTF8String,"V,M",,, +AoC-Cost-Information,2053,,Grouped,"V,M",,, +AoC-Format,2310,,Enumerated,"V,M",,, +AoC-Information,2054,,Grouped,"V,M",,, +AoC-Request-Type,2055,,Enumerated,"V,M",,, +AoC-Service,2311,,Grouped,"V,M",,, +AoC-Service-Obligatory-Type,2312,,Enumerated,"V,M",,, +AoC-Service-Type,2313,,Enumerated,"V,M",,, +AoC-Subscription-Information,2314,,Grouped,"V,M",,, +API-Content,1309,,UTF8String,V,,,M +API-Direction,1310,,Enumerated,V,,,M +API-Identifier,1311,,OctetString,V,,,M +API-Invocation-Timestamp,1312,,Time,V,,,M +API-Network-Service-Node,1315,,Enumerated,V,,,M +API-Result-Code,1313,,Unsigned32,V,,,M +API-Size,1314,,Unsigned64,V,,,M +APN-Rate-Control,3933,,Grouped,"V,M",,, +APN-Rate-Control-Downlink,3934,,Grouped,"V,M",,, +APN-Rate-Control-Uplink,3935,,Grouped,"V,M",,, +Applic-ID,1218,,UTF8String,"V,M",,, +Application-Provided-Called-Party-Address,837,,UTF8String,"V,M",,, +Application-Server,836,,UTF8String,"V,M",,, +Application-Server-Information,850,,Grouped,"V,M",,, +Application-Specific-Data,3458,,OctetString,"V,M",,, +Associated-Party-Address,2035,,UTF8String,"V,M",,, +Associated-URI,856,,UTF8String,"V,M",,, +Authorised-QoS,849,,UTF8String,"V,M",,, +Aux-Applic-Info,1219,,UTF8String,"V,M",,, +Base-Time-Interval,1265,,Unsigned32,"V,M",,, +Basic-Service-Code,3411,,Grouped,"V,M",,, +Bearer-Capability,3412,,OctetString,"V,M",,, +Bearer-Service,854,,OctetString,"V,M",,, +BSSID,2716,,UTF8String,"V,M",,, +Called-Asserted-Identity,1250,,UTF8String,"V,M",,, +Called-Identity,3916,,UTF8String,"V,M",,, +Called-Identity-Change,3917,,Grouped,"V,M",,, +Called-Party-Address,832,,UTF8String,"V,M",,, +Calling-Party-Address,831,,UTF8String,"V,M",,, +Carrier-Select-Routing-Information,2023,,UTF8String,"V,M",,, +Cause-Code,861,,Integer32,"V,M",,, +Cellular-Network-Information,3924,,OctetString,"V,M",,, +CG-Address,846,,Address,"V,M",,, +Change-Condition,2037,,Integer32,"V,M",,, +Change-Time,2038,,Time,"V,M",,, +Charge-Reason-Code,2118,,Enumerated,"V,M",,, +Charged-Party,857,,UTF8String,"V,M",,, +Charging-Characteristics-Selection-Mode,2066,,Enumerated,"V,M",,, +Charging-Per-IP-CAN-Session-Indicator,4400,,Enumerated,"V,M",,, +Civic-Address-Information,1305,,UTF8String,V,,,M +Class-Identifier,1214,,Enumerated,"V,M",,, +Client-Address,2018,,Address,"V,M",,, +CN-Operator-Selection-Entity,3421,,Enumerated,"V,M",,, +Content-Class,1220,,Enumerated,"V,M",,, +Content-Disposition,828,,UTF8String,"V,M",,, +Content-Length,827,,Unsigned32,"V,M",,, +Content-Size,1206,,Unsigned32,"V,M",,, +Content-Type,826,,UTF8String,"V,M",,, +Coverage-Info,3459,,Grouped,"V,M",,, +Coverage-Status,3428,,Enumerated,"V,M",,, +CP-CIoT-EPS-Optimisation-Indicator,3930,,Enumerated,"V,M",,, +CPDT-Information,3927,,Grouped,"V,M",,, +CSG-Access-Mode,2317,,Enumerated,"V,M",,, +CSG-Membership-Indication,2318,,Enumerated,"V,M",,, +CUG-Information,2304,,OctetString,"V,M",,, +Current-Tariff,2056,,Grouped,"V,M",,, +Data-Coding-Scheme,2001,,Integer32,"V,M",,, +Deferred-Location-Event-Type,1230,,UTF8String,"V,M",,, +Delivery-Report-Requested,1216,,Enumerated,"V,M",,, +Destination-Interface,2002,,Grouped,"V,M",,, +Diagnostics,2039,,Integer32,"V,M",,, +Discoveree-UE-HPLMN-Identifier,4402,,UTF8String,"V,M",,, +Discoveree-UE-VPLMN-Identifier,4403,,UTF8String,"V,M",,, +Discoverer-UE-HPLMN-Identifier,4404,,UTF8String,"V,M",,, +Discoverer-UE-VPLMN-Identifier,4405,,UTF8String,"V,M",,, +Domain-Name,1200,,UTF8String,"V,M",,, +DRM-Content,1221,,Enumerated,"V,M",,, +Dynamic-Address-Flag,2051,,Enumerated,"V,M",,, +Dynamic-Address-Flag-Extension,2068,,Enumerated,"V,M",,, +Early-Media-Description,1272,,Grouped,"V,M",,, +Enhanced-Diagnostics,3901,,Grouped,"V,M",,, +Envelope,1266,,Grouped,"V,M",,, +Envelope-End-Time,1267,,Time,"V,M",,, +Envelope-Reporting,1268,,Enumerated,"V,M",,, +Envelope-Start-Time,1269,,Time,"V,M",,, +EPDG-Address,3425,,Address,"V,M",,, +Event,825,,UTF8String,"V,M",,, +Event-Charging-TimeStamp,1258,,Time,"V,M",,, +Event-Type,823,,Grouped,"V,M",,, +Expires,888,,Unsigned32,"V,M",,, +Exposure-Function-API-Information,1316,,Grouped,V,,,M +FE-Identifier-List,4413,,UTF8String,"V,M",,, +File-Repair-Supported,1224,,Enumerated,"V,M",,, +Forwarding-Pending,3415,,Enumerated,"V,M",,, +From-Address,2708,,UTF8String,"V,M",,, +GGSN-Address,847,,Address,"V,M",,, +IMS-Application-Reference-Identifier,2601,,UTF8String,"V,M",,, +IMS-Charging-Identifier,841,,UTF8String,"V,M",,, +IMS-Communication-Service-Identifier,1281,,UTF8String,"V,M",,, +IMS-Emergency-Indicator,2322,,Enumerated,"V,M",,, +IMS-Information,876,,Grouped,"V,M",,, +IMS-Visited-Network-Identifier,2713,,UTF8String,"V,M",,, +IMSI-Unauthenticated-Flag,2308,,Enumerated,"V,M",,, +Incoming-Trunk-Group-Id,852,,UTF8String,"V,M",,, +Incremental-Cost,2062,,Grouped,"V,M",,, +Initial-IMS-Charging-Identifier,2321,,UTF8String,"V,M",,, +Instance-Id,3402,,UTF8String,"V,M",,, +Interface-Id,2003,,UTF8String,"V,M",,, +Interface-Port,2004,,UTF8String,"V,M",,, +Interface-Text,2005,,UTF8String,"V,M",,, +Interface-Type,2006,,Enumerated,"V,M",,, +Inter-Operator-Identifier,838,,Grouped,"V,M",,, +Inter-UE-Transfer,3902,,Enumerated,"V,M",,, +IP-Realm-Default-Indication,2603,,Enumerated,"V,M",,, +ISUP-Cause,3416,,Grouped,"V,M",,, +ISUP-Cause-Diagnostics,3422,,OctetString,"V,M",,, +ISUP-Cause-Location,3423,,Unsigned32,"V,M",,, +ISUP-Cause-Value,3424,,Unsigned32,"V,M",,, +ISUP-Location-Number,3414,,OctetString,"V,M",,, +Language,3914,,UTF8String,"V,M",,, +Layer-2-Group-ID,3429,,OctetString,"V,M",,, +LCS-APN,1231,,UTF8String,"V,M",,, +LCS-Client-Dialed-By-MS,1233,,UTF8String,"V,M",,, +LCS-Client-External-ID,1234,,UTF8String,"V,M",,, +LCS-Client-Id,1232,,Grouped,"V,M",,, +LCS-Client-Name,1235,,Grouped,"V,M",,, +LCS-Client-Type,1241,,Enumerated,"V,M",,, +LCS-Data-Coding-Scheme,1236,,UTF8String,"V,M",,, +LCS-Format-Indicator,1237,,Enumerated,"V,M",,, +LCS-Information,878,,Grouped,"V,M",,, +LCS-Name-String,1238,,UTF8String,"V,M",,, +# Note: 3GPP TS 32.299 V11.8.0 (2013-07) renamed,,,,,,, +# LCS-Requestor-Id (1239) to LCS-Requestor-ID (1239).,,,,,,, +# ,,,,,,, +# Change-1.4.0: LCS-Requestor-Id (1239) renamed to LCS-Requestor-ID (1239).,,,,,,, +LCS-Requestor-ID,1239,,Grouped,"V,M",,, +# Note: 3GPP TS 32.299 V11.8.0 (2013-07) renamed,,,,,,, +# LCS-Requestor-Id-String (1240) to LCS-Requestor-ID-String (1240).,,,,,,, +# ,,,,,,, +# Change-1.4.0: LCS-Requestor-Id-String (1240) renamed to LCS-Requestor-ID-String (1240).,,,,,,, +LCS-Requestor-ID-String,1240,,UTF8String,"V,M",,, +Local-GW-Inserted-Indication,2604,,Enumerated,"V,M",,, +Local-Sequence-Number,2063,,Unsigned32,"V,M",,, +Location-Estimate,1242,,OctetString,"V,M",,, +Location-Estimate-Type,1243,,Enumerated,"V,M",,, +Location-Info,3460,,Grouped,"V,M",,, +Location-Type,1244,,Grouped,"V,M",,, +Low-Balance-Indication,2020,,Enumerated,"V,M",,, +Low-Priority-Indicator,2602,,Enumerated,"V,M",,, +MBMS-Charged-Party,2323,,Enumerated,"V,M",,, +# Note: 3GPP TS 32.299 V11.8.0 (2013-07) Table 7.2 changed,,,,,,, +# row MBMS-GW-Address (2307) to have a hyphen instead of space.,,,,,,, +# ,,,,,,, +# Change-1.4.0: MBMSGW-Address (2307) renamed to MBMS-GW-Address (2307).,,,,,,, +MBMS-GW-Address,2307,,Address,"V,M",,, +MBMS-Information,880,,Grouped,"V,M",,, +MBMS-User-Service-Type,1225,,Enumerated,"V,M",,, +Media-Initiator-Flag,882,,Enumerated,"V,M",,, +Media-Initiator-Party,1288,,UTF8String,"V,M",,, +Message-Body,889,,Grouped,"V,M",,, +Message-Class,1213,,Grouped,"V,M",,, +Message-ID,1210,,UTF8String,"V,M",,, +Message-Size,1212,,Unsigned32,"V,M",,, +Message-Type,1211,,Enumerated,"V,M",,, +MMBox-Storage-Requested,1248,,Enumerated,"V,M",,, +MM-Content-Type,1203,,Grouped,"V,M",,, +MMS-Information,877,,Grouped,"V,M",,, +MMTel-Information,2030,,Grouped,"V,M",,, +MMTel-SService-Type,2031,,Unsigned32,"V,M",,, +Monitored-PLMN-Identifier,3430,,UTF8String,"V,M",,, +Monitoring-Event-Configuration-Activity,3919,,Integer32,"V,M",,, +Monitoring-Event-Functionality,3922,,Integer32,"V,M",,, +Monitoring-Event-Information,3921,,Grouped,"V,M",,, +Monitoring-Event-Report-Data,3920,,Grouped,"V,M",,, +Monitoring-Event-Report-Number,3923,,Unsigned32,"V,M",,, +Monitoring-UE-HPLMN-Identifier,3431,,UTF8String,"V,M",,, +Monitoring-UE-Identifier,3432,,UTF8String,"V,M",,, +Monitoring-UE-VPLMN-Identifier,3433,,UTF8String,"V,M",,, +MSC-Address,3417,,OctetString,"V,M",,, +MTC-IWF-Address,3406,,Address,"V,M",,, +Neighbour-Node-Address,2705,,Address,"V,M",,, +Network-Call-Reference-Number,3418,,OctetString,"V,M",,, +Next-Tariff,2057,,Grouped,"V,M",,, +NIDD-Submission,3928,,Grouped,"V,M",,, +NNI-Information,2703,,Grouped,"V,M",,, +NNI-Type,2704,,Enumerated,"V,M",,, +Node-Functionality,862,,Enumerated,"V,M",,, +Node-Id,2064,,UTF8String,"V,M",,, +Number-Of-Diversions,2034,,Unsigned32,"V,M",,, +Number-Of-Messages-Sent,2019,,Unsigned32,"V,M",,, +Number-Of-Participants,885,,Unsigned32,"V,M",,, +Number-Of-Received-Talk-Bursts,1282,,Unsigned32,"V,M",,, +Number-Of-Talk-Bursts,1283,,Unsigned32,"V,M",,, +Number-Portability-Routing-Information,2024,,UTF8String,"V,M",,, +Offline-Charging,1278,,Grouped,"V,M",,, +Online-Charging-Flag,2303,,Enumerated,"V,M",,, +Originating-IOI,839,,UTF8String,"V,M",,, +Originator,864,,Enumerated,"V,M",,, +Originator-Address,886,,Grouped,"V,M",,, +Originator-Interface,2009,,Grouped,"V,M",,, +Originator-Received-Address,2027,,Grouped,"V,M",,, +Originator-SCCP-Address,2008,,Address,"V,M",,, +Outgoing-Session-Id,2320,,UTF8String,"V,M",,, +Outgoing-Trunk-Group-Id,853,,UTF8String,"V,M",,, +Participant-Access-Priority,1259,,Enumerated,"V,M",,, +Participant-Action-Type,2049,,Enumerated,"V,M",,, +Participant-Group,1260,,Grouped,"V,M",,, +Participants-Involved,887,,UTF8String,"V,M",,, +PC3-Control-Protocol-Cause,3434,,Integer32,"V,M",,, +PC3-EPC-Control-Protocol-Cause,3435,,Integer32,"V,M",,, +PC5-Radio-Technology,1300,,Enumerated,V,,,M +PDN-Connection-Charging-ID,2050,,Unsigned32,"V,M",,, +PDP-Address,1227,,Address,"V,M",,, +PDP-Address-Prefix-Length,2606,,Unsigned32,"V,M",,, +PDP-Context-Type,1247,,Enumerated,"V,M",,, +# Change-1.4.0: PDG-Address (895) Address removed in 3GPP TS 32.299 V12.6.0 (2014-09).,,,,,,, +#,,,,,,, +# Change-1.4.0: PDG-Charging-Id (896) Unsigned32 removed in 3GPP TS 32.299 V12.6.0 (2014-09).,,,,,,, +#,,,,,,, +Play-Alternative,3913,,Enumerated,"V,M",,, +PoC-Change-Condition,1261,,Enumerated,"V,M",,, +PoC-Change-Time,1262,,Time,"V,M",,, +PoC-Controlling-Address,858,,UTF8String,"V,M",,, +PoC-Event-Type,2025,,Enumerated,"V,M",,, +PoC-Group-Name,859,,UTF8String,"V,M",,, +PoC-Information,879,,Grouped,"V,M",,, +PoC-Server-Role,883,,Enumerated,"V,M",,, +PoC-Session-Id,1229,,UTF8String,"V,M",,, +PoC-Session-Initiation-type,1277,,Enumerated,"V,M",,, +PoC-Session-Type,884,,Enumerated,"V,M",,, +PoC-User-Role,1252,,Grouped,"V,M",,, +PoC-User-Role-IDs,1253,,UTF8String,"V,M",,, +# Note: 3GPP TS 32.299 V13.1.0 (2015-06) renamed,,,,,,, +# PoC-User-Role-info-Units (1254) to PoC-User-Role-Info-Units (1254).,,,,,,, +# ,,,,,,, +# Change-1.4.0: PoC-User-Role-info-Units (1254) renamed to PoC-User-Role-Info-Units (1254).,,,,,,, +PoC-User-Role-Info-Units,1254,,Enumerated,"V,M",,, +Positioning-Data,1245,,UTF8String,"V,M",,, +Preferred-AoC-Currency,2315,,Unsigned32,"V,M",,, +Priority,1209,,Enumerated,"V,M",,, +Privacy-Indicator,3915,,Enumerated,"V,M",,, +ProSe-3rd-Party-Application-ID,3440,,UTF8String,"V,M",,, +ProSe-Direct-Communication-Reception-Data-Container,3461,,Grouped,"V,M",,, +ProSe-Direct-Communication-Transmission-Data-Container,3441,,Grouped,"V,M",,, +ProSe-Direct-Discovery-Model,3442,,Enumerated,"V,M",,, +ProSe-Event-Type,3443,,Enumerated,"V,M",,, +ProSe-Function-IP-Address,3444,,Address,"V,M",,, +ProSe-Function-PLMN-Identifier,3457,,UTF8String,"V,M",,, +ProSe-Functionality,3445,,Enumerated,"V,M",,, +ProSe-Group-IP-Multicast-Address,3446,,Address,"V,M",,, +ProSe-Information,3447,,Grouped,"V,M",,, +ProSe-Range-Class,3448,,Enumerated,"V,M",,, +ProSe-Reason-For-Cancellation,3449,,Enumerated,"V,M",,, +ProSe-Request-Timestamp,3450,,Time,"V,M",,, +ProSe-Role-Of-UE,3451,,Enumerated,"V,M",,, +ProSe-Source-IP-Address,3452,,Address,"V,M",,, +ProSe-Target-Layer-2-ID,4410,,OctetString,"V,M",,, +ProSe-UE-ID,3453,,OctetString,"V,M",,, +ProSe-UE-to-Network-Relay-UE-ID,4409,,OctetString,"V,M",,, +Proximity-Alert-Indication,3454,,Enumerated,"V,M",,, +Proximity-Alert-Timestamp,3455,,Time,"V,M",,, +Proximity-Cancellation-Timestamp,3456,,Time,"V,M",,, +PS-Append-Free-Format-Data,867,,Enumerated,"V,M",,, +PS-Free-Format-Data,866,,OctetString,"V,M",,, +PS-Furnish-Charging-Information,865,,Grouped,"V,M",,, +PS-Information,874,,Grouped,"V,M",,, +Quota-Consumption-Time,881,,Unsigned32,"V,M",,, +Quota-Holding-Time,871,,Unsigned32,"V,M",,, +Quota-Indicator,3912,,Enumerated,"V,M",,, +# Note: Name conflict with 3GPP TS 32.299 Radio-Frequency (3508),,,,,,, +# 3GPP TS 29.468 V12.0.0 (2014-09) added Radio-Frequency (3508).,,,,,,, +# 3GPP TS 32.299 V13.1.0 (2015-06) CR 0638 added Radio-Frequency (3462).,,,,,,, +Radio-Frequency,3462,,OctetString,"V,M",,, +Radio-Parameter-Set-Info,3463,,Grouped,"V,M",,, +Radio-Parameter-Set-Values,3464,,OctetString,"V,M",,, +Radio-Resources-Indicator,3465,,Integer32,"V,M",,, +RAN-End-Time,1301,,Time,V,,,M +RAN-Secondary-RAT-Usage-Report,1302,,Grouped,V,,,M +RAN-Start-Time,1303,,Time,V,,,M +Rate-Control-Max-Message-Size,3937,,Unsigned32,"V,M",,, +Rate-Control-Max-Rate,3938,,Unsigned32,"V,M",,, +Rate-Control-Time-Unit,3939,,Unsigned32,"V,M",,, +Rate-Element,2058,,Grouped,"V,M",,, +Read-Reply-Report-Requested,1222,,Enumerated,"V,M",,, +Real-Time-Tariff-Information,2305,,Grouped,"V,M",,, +Reason-Header,3401,,UTF8String,"V,M",,, +Received-Talk-Burst-Time,1284,,Unsigned32,"V,M",,, +Received-Talk-Burst-Volume,1285,,Unsigned32,"V,M",,, +# Note: Name conflict with 3GPP TS 32.299 Recipient-Address (1201);,,,,,,, +# 3GPP TS 29.140 V6.1.0 (2005-06) allocated Recipient-Address (1108).,,,,,,, +# 3GPP TS 32.299 V6.4.0 (2005-09) CR 0028 added Recipient-Address (1201).,,,,,,, +Recipient-Address,1201,,Grouped,"V,M",,, +Recipient-Info,2026,,Grouped,"V,M",,, +Recipient-Received-Address,2028,,Grouped,"V,M",,, +Recipient-SCCP-Address,2010,,Address,"V,M",,, +Refund-Information,2022,,OctetString,"V,M",,, +Related-Change-Condition-Information,3925,,Grouped,"V,M",,, +Related-Trigger,3926,,Grouped,"V,M",,, +Related-IMS-Charging-Identifier,2711,,UTF8String,"V,M",,, +Related-IMS-Charging-Identifier-Node,2712,,Address,"V,M",,, +Relationship-Mode,2706,,Enumerated,"V,M",,, +Relay-IP-address,4411,,Address,"V,M",,, +Remaining-Balance,2021,,Grouped,"V,M",,, +Reply-Applic-ID,1223,,UTF8String,"V,M",,, +Reply-Path-Requested,2011,,Enumerated,"V,M",,, +Reporting-Reason,872,,Enumerated,"V,M",,, +Requested-Party-Address,1251,,UTF8String,"V,M",,, +Requested-PLMN-Identifier,3436,,UTF8String,"V,M",,, +Requestor-PLMN-Identifier,3437,,UTF8String,"V,M",,, +Role-Of-Node,829,,Enumerated,"V,M",,, +Role-Of-ProSe-Function,3438,,Enumerated,"V,M",,, +Route-Header-Received,3403,,UTF8String,"V,M",,, +Route-Header-Transmitted,3404,,UTF8String,"V,M",,, +Scale-Factor,2059,,Grouped,"V,M",,, +SCEF-Address,1317,,Address,V,,,M +SCS-Address,3941,,Address,"V,M",,, +SCS-AS-Address,3940,,Grouped,"V,M",,, +SCS-Realm,3942,,DiameterIdentity,"V,M",,, +SDP-Answer-Timestamp,1275,,Time,"V,M",,, +SDP-Media-Component,843,,Grouped,"V,M",,, +SDP-Media-Description,845,,UTF8String,"V,M",,, +SDP-Media-Name,844,,UTF8String,"V,M",,, +SDP-Offer-Timestamp,1274,,Time,"V,M",,, +SDP-Session-Description,842,,UTF8String,"V,M",,, +SDP-TimeStamps,1273,,Grouped,"V,M",,, +SDP-Type,2036,,Enumerated,"V,M",,, +Secondary-RAT-Type,1304,,OctetString,V,,,M +Serving-Node-Identity,3929,,DiameterIdentity,"V,M",,, +Served-Party-IP-Address,848,,Address,"V,M",,, +Service-Data-Container,2040,,Grouped,"V,M",,, +Service-Id,855,,UTF8String,"V,M",,, +Service-Information,873,,Grouped,"V,M",,, +Service-Mode,2032,,Unsigned32,"V,M",,, +Service-Specific-Data,863,,UTF8String,"V,M",,, +Service-Specific-Info,1249,,Grouped,"V,M",,, +Service-Specific-Type,1257,,Unsigned32,"V,M",,, +Serving-Node-Type,2047,,Enumerated,"V,M",,, +Session-Direction,2707,,Enumerated,"V,M",,, +SGi-PtP-Tunnelling-Method,3931,,Enumerated,"V,M",,, +SGSN-Address,1228,,Address,"V,M",,, +SGW-Address,2067,,Address,"V,M",,, +SGW-Change,2065,,Enumerated,"V,M",,, +SIP-Method,824,,UTF8String,"V,M",,, +SIP-Request-Timestamp,834,,Time,"V,M",,, +SIP-Request-Timestamp-Fraction,2301,,Unsigned32,"V,M",,, +SIP-Response-Timestamp,835,,Time,"V,M",,, +SIP-Response-Timestamp-Fraction,2302,,Unsigned32,"V,M",,, +SM-Device-Trigger-Indicator,3407,,Enumerated,"V,M",,, +SM-Device-Trigger-Information,3405,,Grouped,"V,M",,, +SM-Discharge-Time,2012,,Time,"V,M",,, +SM-Message-Type,2007,,Enumerated,"V,M",,, +SM-Protocol-ID,2013,,OctetString,"V,M",,, +SM-Sequence-Number,3408,,Unsigned32,"V,M",,, +SM-Service-Type,2029,,Enumerated,"V,M",,, +SM-Status,2014,,OctetString,"V,M",,, +SM-User-Data-Header,2015,,OctetString,"V,M",,, +SMS-Information,2000,,Grouped,"V,M",,, +SMS-Node,2016,,Enumerated,"V,M",,, +SMS-Result,3409,,Unsigned32,"V,M",,, +SMSC-Address,2017,,Address,"V,M",,, +Start-of-Charging,3419,,Time,"V,M",,, +Start-Time,2041,,Time,"V,M",,, +# Note: 3GPP TS 32.299 V11.10.0 (2013-12) CR 0566 renamed,,,,,,, +# Status (2702) to Status-Code (2702).,,,,,,, +# 3GPP TS 32.299 V11.14.0 (2014-12) CR 0617 renamed,,,,,,, +# Status-Code (2702) to Status-AS-Code (2702).,,,,,,, +# ,,,,,,, +# Change-1.4.0: Status (2702) renamed to Status-AS-Code (2702).,,,,,,, +Status-AS-Code,2702,,Enumerated,"V,M",,, +Stop-Time,2042,,Time,"V,M",,, +Submission-Time,1202,,Time,"V,M",,, +Subscriber-Role,2033,,Enumerated,"V,M",,, +Supplementary-Service,2048,,Grouped,"V,M",,, +TAD-Identifier,2717,,Enumerated,"V,M",,, +Talk-Burst-Exchange,1255,,Grouped,"V,M",,, +Talk-Burst-Time,1286,,Unsigned32,"V,M",,, +Talk-Burst-Volume,1287,,Unsigned32,"V,M",,, +Target-IP-Address,4412,,Address,VM,,, +Tariff-Information,2060,,Grouped,"V,M",,, +Tariff-XML,2306,,UTF8String,"V,M",,, +Teleservice,3413,,OctetString,"V,M",,, +Terminating-IOI,840,,UTF8String,"V,M",,, +Time-First-Reception,3466,,Time,"V,M",,, +Time-First-Transmission,3467,,Time,"V,M",,, +Time-First-Usage,2043,,Time,"V,M",,, +Time-Indicator,3911,,Unsigned32,"V,M",,, +Time-Last-Usage,2044,,Time,"V,M",,, +Time-Quota-Mechanism,1270,,Grouped,"V,M",,, +Time-Quota-Threshold,868,,Unsigned32,"V,M",,, +Time-Quota-Type,1271,,Enumerated,"V,M",,, +Time-Stamps,833,,Grouped,"V,M",,, +Time-Usage,2045,,Unsigned32,"V,M",,, +TLTRI,1318,,Unsigned32,V,,,M +Token-Text,1215,,UTF8String,"V,M",,, +Traffic-Data-Volumes,2046,,Grouped,"V,M",,, +Transcoder-Inserted-Indication,2605,,Enumerated,"V,M",,, +Transit-IOI-List,2701,,UTF8String,"V,M",,, +Transmitter-Info,3468,,Grouped,"V,M",,, +Trigger,1264,,Grouped,"V,M",,, +Trigger-Type,870,,Enumerated,"V,M",,, +Trunk-Group-Id,851,,Grouped,"V,M",,, +TWAG-Address,3903,,Address,"V,M",,, +TWAN-User-Location-Info,2714,,Grouped,"V,M",,, +Type-Number,1204,,Enumerated,"V,M",,, +UNI-PDU-CP-Only-Flag,3932,,Enumerated,"V,M",,, +Unit-Cost,2061,,Grouped,"V,M",,, +Unit-Quota-Threshold,1226,,Unsigned32,"V,M",,, +Unused-Quota-Timer,4407,,Unsigned32,"V,M",,, +Usage-Information-Report-Sequence-Number,3439,,Integer32,"V,M",,, +User-CSG-Information,2319,,Grouped,"V,M",,, +User-Participating-Type,1279,,Enumerated,"V,M",,, +User-Session-Id,830,,UTF8String,"V,M",,, +UWAN-User-Location-Info,3918,,Grouped,"V,M",,, +Variable-Part,3907,,Grouped,"V,M",,, +Variable-Part-Order,3908,,Unsigned32,"V,M",,, +Variable-Part-Type,3909,,Unsigned32,"V,M",,, +Variable-Part-Value,3910,,UTF8String,"V,M",,, +VCS-Information,3410,,Grouped,"V,M",,, +VLR-Number,3420,,OctetString,"V,M",,, +Volume-Quota-Threshold,869,,Unsigned32,"V,M",,, +# Change-1.4.0: WAG-Address (890) Address removed in 3GPP TS 32.299 V12.6.0 (2014-09).,,,,,,, +#,,,,,,, +# Change-1.4.0: WAG-PLMN-Id (891) OctetString removed in 3GPP TS 32.299 V12.6.0 (2014-09).,,,,,,, +#,,,,,,, +# Change-1.4.0: WLAN-Information (875) Grouped removed in 3GPP TS 32.299 V12.6.0 (2014-09).,,,,,,, +#,,,,,,, +WLAN-Operator-Id,1306,,Grouped,V,,,M +WLAN-Operator-Name,1307,,UTF8String,V,,,M +WLAN-PLMN-Id,1308,,UTF8String,V,,,M +# Change-1.4.0: WLAN-Radio-Container (892) Grouped removed in 3GPP TS 32.299 V12.6.0 (2014-09).,,,,,,, +#,,,,,,, +# Change-1.4.0: WLAN-Session-Id (1246) UTF8String removed in 3GPP TS 32.299 V12.6.0 (2014-09).,,,,,,, +#,,,,,,, +# Change-1.4.0: WLAN-Technology (893) Unsigned32 removed in 3GPP TS 32.299 V12.6.0 (2014-09).,,,,,,, +#,,,,,,, +# Change-1.4.0: WLAN-UE-Local-IPAddress (894) Address removed in 3GPP TS 32.299 V12.6.0 (2014-09).,,,,,,, +#,,,,,,, +,,,,,,, +@standard,OMA DDS Charging Data,,,,,, +#=,,,,,,, +# OMA DDS Charging_Data V1.0 20110201-A,,,,,,, +# Charging Data,,,,,,, +# ,,,,,,, +# From OMA OMA-DDS-Charging_Data-V1_0-20110201-A.pdf,,,,,,, +#=,,,,,,, +#,,,,,,, +Application-Server-Id,2101,8.4,UTF8String,"M,V",,, +# Change-1.4.0: Application-Service-Type (2102) type changed from UTF8String to Enumerated.,,,,,,, +Application-Service-Type,2102,8.4,Enumerated,"M,V",,, +# Change-1.4.0: Application–Session–Id (2103) type changed from UTF8String to Unsigned32.,,,,,,, +Application-Session-Id,2103,8.4,Unsigned32,"M,V",,, +Content-ID,2116,8.4,UTF8String,"M,V",,, +Content-provider-ID,2117,8.4,UTF8String,"M,V",,, +DCD-Information,2115,8.5.5,Grouped,"M,V",,, +Delivery-Status,2104,8.4,UTF8String,"M,V",,, +IM-Information,2110,8.5.6,Grouped,"M,V",,, +Number-Of-Messages-Successfully-Exploded,2111,8.4,Unsigned32,"M,V",,, +Number-Of-Messages-Successfully-Sent,2112,8.4,Unsigned32,"M,V",,, +Service-Generic-Information,1256,8.5.10,Grouped,"M,V",,, +Total-Number-Of-Messages-Exploded,2113,8.4,Unsigned32,"M,V",,, +Total-Number-Of-Messages-Sent,2114,8.4,Unsigned32,"M,V",,, +,,,,,,, +,,,,,,, +@vendor,5535,,,,,, +,,,,,,, +@standard,X.S0057-0,,,,,, +#=,,,,,,, +# 3GPP2 X.S0057-0 v2.0,,,,,,, +# E-UTRAN - eHRPD Connectivity and Interworking:,,,,,,, +# Core Network Aspects,,,,,,, +# ,,,,,,, +# From 3GPP2 X.S0057-0_v2.0_091215.pdf,,,,,,, +#=,,,,,,, +#,,,,,,, +# ,,,,,,, +# Change-1.4.0: 3GPP2-BSID (9010) type changed from OctetString to UTF8String.,,,,,,, +# Change-1.4.0: 3GPP2-BSID (9010) flag M MUST.,,,,,,, +3GPP2-BSID,9010,5.6.2.1.1,UTF8String,"M,V",P,, diff -r 6a35c5470ef4 -r 19ab8ac08a36 extensions/dict_dcca_3gpp/dict_dcca_3gpp.org --- a/extensions/dict_dcca_3gpp/dict_dcca_3gpp.org Tue Jul 07 01:24:48 2020 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,785 +0,0 @@ -| 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 | -| 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 | M,V | P | | | N | -| AoC-Cost-Information | 2053 | | Grouped | M,V | P | | | N | -| AoC-Format | 2310 | | Enumerated | M,V | P | | | N | -| AoC-Information | 2054 | | Grouped | M,V | P | | | N | -| AoC-Request-Type | 2055 | | Enumerated | M,V | 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 | M,V | 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 -r 6a35c5470ef4 -r 19ab8ac08a36 extensions/dict_dcca_starent/CMakeLists.txt --- a/extensions/dict_dcca_starent/CMakeLists.txt Tue Jul 07 01:24:48 2020 +0800 +++ b/extensions/dict_dcca_starent/CMakeLists.txt Tue Jul 07 01:41:54 2020 +0800 @@ -2,7 +2,7 @@ PROJECT("Diameter DCCA (Diameter Credit Control Application) Starent dictionary definitions " C) # Compile as a module -FD_ADD_EXTENSION(dict_dcca_starent dict_dcca_starent.c) +FD_ADD_EXTENSION(dict_dcca_starent dict_dcca_starent.c add_avps.c) #### diff -r 6a35c5470ef4 -r 19ab8ac08a36 extensions/dict_dcca_starent/add_avps.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/extensions/dict_dcca_starent/add_avps.c Tue Jul 07 01:41:54 2020 +0800 @@ -0,0 +1,355 @@ +/* +Generated by: + csv_to_fd -p fdc dict_dcca_starent.csv + +Do not modify; modify the source .csv files instead. +*/ + +#include + +#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) ); + +int add_avps() +{ + struct dict_object * UTF8String_type = NULL; + CHECK_dict_search(DICT_TYPE, TYPE_BY_NAME, "UTF8String", &UTF8String_type); + + struct dict_object * Time_type = NULL; + CHECK_dict_search(DICT_TYPE, TYPE_BY_NAME, "Time", &Time_type); + + /*==================================================================*/ + /* Cisco ASR 5000 Series AAA Interface */ + /* Administration and Reference */ + /* Release 8.x and 9.0 */ + /* Last Updated June 30, 2010 */ + /* updated using v15 docs from Jan 2014 */ + /* www.cisco.com/c/dam/en/us/td/docs/wireless/asr_5000/15-0/15-0-AAA-Reference.pdf */ + /*==================================================================*/ + + /* SN-Volume-Quota-Threshold, Unsigned32, code 501 */ + { + struct dict_avp_data data = { + 501, /* Code */ + 8164, /* Vendor */ + "SN-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); + }; + + /* SN-Unit-Quota-Threshold, Unsigned32, code 502 */ + { + struct dict_avp_data data = { + 502, /* Code */ + 8164, /* Vendor */ + "SN-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); + }; + + /* SN-Time-Quota-Threshold, Unsigned32, code 503 */ + { + struct dict_avp_data data = { + 503, /* Code */ + 8164, /* Vendor */ + "SN-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); + }; + + /* SN-Total-Used-Service-Unit, Grouped, code 504 */ + { + struct dict_avp_data data = { + 504, /* Code */ + 8164, /* Vendor */ + "SN-Total-Used-Service-Unit", /* 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); + }; + + /* SN-Absolute-Validity-Time, Time, code 505 */ + { + struct dict_avp_data data = { + 505, /* Code */ + 8164, /* Vendor */ + "SN-Absolute-Validity-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); + }; + + /* SN-Bandwidth-Control, Enumerated, code 512 */ + { + struct dict_avp_data data = { + 512, /* Code */ + 8164, /* Vendor */ + "SN-Bandwidth-Control", /* 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, "Enumerated(Starent/SN-Bandwidth-Control)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* SN-Transparent-Data, OctetString, code 513 */ + { + struct dict_avp_data data = { + 513, /* Code */ + 8164, /* Vendor */ + "SN-Transparent-Data", /* 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); + }; + + /* SN-Traffic-Policy, UTF8String, code 514 */ + { + struct dict_avp_data data = { + 514, /* Code */ + 8164, /* Vendor */ + "SN-Traffic-Policy", /* 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); + }; + + /* SN-Firewall-Policy, UTF8String, code 515 */ + { + struct dict_avp_data data = { + 515, /* Code */ + 8164, /* Vendor */ + "SN-Firewall-Policy", /* 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); + }; + + /* SN-Usage-Monitoring-Control, Grouped, code 517 */ + { + struct dict_avp_data data = { + 517, /* Code */ + 8164, /* Vendor */ + "SN-Usage-Monitoring-Control", /* 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); + }; + + /* SN-Monitoring-Key, Unsigned32, code 518 */ + { + struct dict_avp_data data = { + 518, /* Code */ + 8164, /* Vendor */ + "SN-Monitoring-Key", /* 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); + }; + + /* SN-Usage-Volume, Unsigned64, code 519 */ + { + struct dict_avp_data data = { + 519, /* Code */ + 8164, /* Vendor */ + "SN-Usage-Volume", /* Name */ + AVP_FLAG_VENDOR, /* Fixed flags */ + AVP_FLAG_VENDOR, /* Fixed flag values */ + AVP_TYPE_UNSIGNED64 /* base type of data */ + }; + CHECK_dict_new(DICT_AVP, &data, NULL, NULL); + }; + + /* SN-Service-Flow-Detection, Enumerated, code 520 */ + { + struct dict_avp_data data = { + 520, /* Code */ + 8164, /* Vendor */ + "SN-Service-Flow-Detection", /* 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, "Enumerated(Starent/SN-Service-Flow-Detection)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* SN-Usage-Monitoring, Enumerated, code 521 */ + { + struct dict_avp_data data = { + 521, /* Code */ + 8164, /* Vendor */ + "SN-Usage-Monitoring", /* 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, "Enumerated(Starent/SN-Usage-Monitoring)", NULL, NULL, NULL }; + CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); + CHECK_dict_new(DICT_AVP, &data, type, NULL); + }; + + /* SN-Session-Start-Indicator, OctetString, code 522 */ + { + struct dict_avp_data data = { + 522, /* Code */ + 8164, /* Vendor */ + "SN-Session-Start-Indicator", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); + }; + + /* SN-Phase0-PSAPName, UTF8String, code 523 */ + { + struct dict_avp_data data = { + 523, /* Code */ + 8164, /* Vendor */ + "SN-Phase0-PSAPName", /* 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); + }; + + /* SN-Charging-Id, OctetString, code 525 */ + { + struct dict_avp_data data = { + 525, /* Code */ + 8164, /* Vendor */ + "SN-Charging-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); + }; + + /* SN-Remaining-Service-Unit, Grouped, code 526 */ + { + struct dict_avp_data data = { + 526, /* Code */ + 8164, /* Vendor */ + "SN-Remaining-Service-Unit", /* 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); + }; + + /* SN-Service-Start-Timestamp, Time, code 527 */ + { + struct dict_avp_data data = { + 527, /* Code */ + 8164, /* Vendor */ + "SN-Service-Start-Timestamp", /* 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); + }; + + /* SN-Rulebase-Id, UTF8String, code 528 */ + { + struct dict_avp_data data = { + 528, /* Code */ + 8164, /* Vendor */ + "SN-Rulebase-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); + }; + + /* SN-CF-Policy-ID, Unsigned32, code 529 */ + { + struct dict_avp_data data = { + 529, /* Code */ + 8164, /* Vendor */ + "SN-CF-Policy-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); + }; + + /* SN-Charging-Collection-Function-Name, UTF8String, code 530 */ + { + struct dict_avp_data data = { + 530, /* Code */ + 8164, /* Vendor */ + "SN-Charging-Collection-Function-Name", /* 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); + }; + + /* SN-Fast-Reauth-Username, OctetString, code 11010 */ + { + struct dict_avp_data data = { + 11010, /* Code */ + 8164, /* Vendor */ + "SN-Fast-Reauth-Username", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); + }; + + /* SN-Pseudonym-Username, OctetString, code 11011 */ + { + struct dict_avp_data data = { + 11011, /* Code */ + 8164, /* Vendor */ + "SN-Pseudonym-Username", /* Name */ + AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); + }; + + return 0; +} /* add_avps() */ diff -r 6a35c5470ef4 -r 19ab8ac08a36 extensions/dict_dcca_starent/dict_dcca_starent.c --- a/extensions/dict_dcca_starent/dict_dcca_starent.c Tue Jul 07 01:24:48 2020 +0800 +++ b/extensions/dict_dcca_starent/dict_dcca_starent.c Tue Jul 07 01:41:54 2020 +0800 @@ -6,9 +6,6 @@ /* 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) ); @@ -38,12 +35,12 @@ (_rulearray)[__ar].avp_name, \ &__data.rule_avp, 0 ) ); \ if ( !__data.rule_avp ) { \ - TRACE_DEBUG(INFO, "AVP Not found: '%s'", (_rulearray)[__ar].avp_name ); \ + LOG_E( "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'", \ + LOG_E( "Error on rule with AVP '%s'", \ (_rulearray)[__ar].avp_name ); \ return EINVAL; \ } ); \ @@ -69,352 +66,8 @@ } - - 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. */ - - /* Cisco ASR 5000 Series AAA Interface */ - /* Administration and Reference */ - /* Release 8.x and 9.0 */ - /* Last Updated June 30, 2010 */ - /* updated using v15 docs from Jan 2014 */ - /* www.cisco.com/c/dam/en/us/td/docs/wireless/asr_5000/15-0/15-0-AAA-Reference.pdf */ - /* SN-Volume-Quota-Threshold */ - { - struct dict_avp_data data = { - 501, /* Code */ - 8164, /* Vendor */ - "SN-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); - }; - - /* SN-Unit-Quota-Threshold */ - { - struct dict_avp_data data = { - 502, /* Code */ - 8164, /* Vendor */ - "SN-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); - }; - - /* SN-Time-Quota-Threshold */ - { - struct dict_avp_data data = { - 503, /* Code */ - 8164, /* Vendor */ - "SN-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); - }; - - /* SN-Total-Used-Service-Unit */ - { - struct dict_avp_data data = { - 504, /* Code */ - 8164, /* Vendor */ - "SN-Total-Used-Service-Unit", /* 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); - }; - - /* SN-Absolute-Validity-Time */ - { - struct dict_avp_data data = { - 505, /* Code */ - 8164, /* Vendor */ - "SN-Absolute-Validity-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); - }; - - /* SN-Bandwidth-Control */ - { - struct dict_avp_data data = { - 512, /* Code */ - 8164, /* Vendor */ - "SN-Bandwidth-Control", /* 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, "Enumerated(Starent/SN-Bandwidth-Control)", NULL, NULL, NULL }; - CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); - CHECK_dict_new(DICT_AVP, &data, type, NULL); - }; - - /* SN-Transparent-Data */ - { - struct dict_avp_data data = { - 513, /* Code */ - 8164, /* Vendor */ - "SN-Transparent-Data", /* 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); - }; - - /* SN-Traffic-Policy */ - { - struct dict_avp_data data = { - 514, /* Code */ - 8164, /* Vendor */ - "SN-Traffic-Policy", /* 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); - }; - - /* SN-Firewall-Policy */ - { - struct dict_avp_data data = { - 515, /* Code */ - 8164, /* Vendor */ - "SN-Firewall-Policy", /* 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); - }; - - /* SN-Usage-Monitoring-Control */ - { - struct dict_avp_data data = { - 517, /* Code */ - 8164, /* Vendor */ - "SN-Usage-Monitoring-Control", /* 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); - }; - - /* SN-Monitoring-Key */ - { - struct dict_avp_data data = { - 518, /* Code */ - 8164, /* Vendor */ - "SN-Monitoring-Key", /* 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); - }; - - /* SN-Usage-Volume */ - { - struct dict_avp_data data = { - 519, /* Code */ - 8164, /* Vendor */ - "SN-Usage-Volume", /* Name */ - AVP_FLAG_VENDOR, /* Fixed flags */ - AVP_FLAG_VENDOR, /* Fixed flag values */ - AVP_TYPE_UNSIGNED64 /* base type of data */ - }; - CHECK_dict_new(DICT_AVP, &data, NULL, NULL); - }; - - /* SN-Service-Flow-Detection */ - { - struct dict_avp_data data = { - 520, /* Code */ - 8164, /* Vendor */ - "SN-Service-Flow-Detection", /* 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, "Enumerated(Starent/SN-Service-Flow-Detection)", NULL, NULL, NULL }; - CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); - CHECK_dict_new(DICT_AVP, &data, type, NULL); - }; - - /* SN-Usage-Monitoring */ - { - struct dict_avp_data data = { - 521, /* Code */ - 8164, /* Vendor */ - "SN-Usage-Monitoring", /* 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, "Enumerated(Starent/SN-Usage-Monitoring)", NULL, NULL, NULL }; - CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type); - CHECK_dict_new(DICT_AVP, &data, type, NULL); - }; - - /* SN-Session-Start-Indicator */ - { - struct dict_avp_data data = { - 522, /* Code */ - 8164, /* Vendor */ - "SN-Session-Start-Indicator", /* Name */ - AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); - }; - - /* SN-Phase0-PSAPName */ - { - struct dict_avp_data data = { - 523, /* Code */ - 8164, /* Vendor */ - "SN-Phase0-PSAPName", /* 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); - }; - - /* SN-Charging-Id */ - { - struct dict_avp_data data = { - 525, /* Code */ - 8164, /* Vendor */ - "SN-Charging-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); - }; - - /* SN-Remaining-Service-Unit */ - { - struct dict_avp_data data = { - 526, /* Code */ - 8164, /* Vendor */ - "SN-Remaining-Service-Unit", /* 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); - }; - - /* SN-Service-Start-Timestamp */ - { - struct dict_avp_data data = { - 527, /* Code */ - 8164, /* Vendor */ - "SN-Service-Start-Timestamp", /* 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); - }; - - /* SN-Rulebase-Id */ - { - struct dict_avp_data data = { - 528, /* Code */ - 8164, /* Vendor */ - "SN-Rulebase-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); - }; - - /* SN-CF-Policy-ID */ - { - struct dict_avp_data data = { - 529, /* Code */ - 8164, /* Vendor */ - "SN-CF-Policy-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); - }; - - /* SN-Charging-Collection-Function-Name */ - { - struct dict_avp_data data = { - 530, /* Code */ - 8164, /* Vendor */ - "SN-Charging-Collection-Function-Name", /* 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); - }; - - /* SN-Fast-Reauth-Username */ - { - struct dict_avp_data data = { - 11010, /* Code */ - 8164, /* Vendor */ - "SN-Fast-Reauth-Username", /* Name */ - AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); - }; - - /* SN-Pseudonym-Username */ - { - struct dict_avp_data data = { - 11011, /* Code */ - 8164, /* Vendor */ - "SN-Pseudonym-Username", /* Name */ - AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY, /* 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); - }; - - + extern int add_avps(); + CHECK_FCT( add_avps() ); /* Rules section */ diff -r 6a35c5470ef4 -r 19ab8ac08a36 extensions/dict_dcca_starent/dict_dcca_starent.csv --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/extensions/dict_dcca_starent/dict_dcca_starent.csv Tue Jul 07 01:41:54 2020 +0800 @@ -0,0 +1,35 @@ +Attribute Name,AVP Code,Section defined,Value Type,MUST,MAY,SHOULD NOT,MUST NOT +@vendor,8164,,,,,, +#=,,,,,,, +# Cisco ASR 5000 Series AAA Interface,,,,,,, +# Administration and Reference,,,,,,, +# Release 8.x and 9.0,,,,,,, +"# Last Updated June 30, 2010",,,,,,, +# updated using v15 docs from Jan 2014,,,,,,, +# www.cisco.com/c/dam/en/us/td/docs/wireless/asr_5000/15-0/15-0-AAA-Reference.pdf,,,,,,, +#=,,,,,,, +#,,,,,,, +SN-Volume-Quota-Threshold,501,,Unsigned32,"M,V",,, +SN-Unit-Quota-Threshold,502,,Unsigned32,"M,V",,, +SN-Time-Quota-Threshold,503,,Unsigned32,"M,V",,, +SN-Total-Used-Service-Unit,504,,Grouped,V,,, +SN-Absolute-Validity-Time,505,,Time,V,,, +SN-Bandwidth-Control,512,,Enumerated,"M,V",,, +SN-Transparent-Data,513,,OctetString,V,,, +SN-Traffic-Policy,514,,UTF8String,V,,, +SN-Firewall-Policy,515,,UTF8String,V,,, +SN-Usage-Monitoring-Control,517,,Grouped,V,,, +SN-Monitoring-Key,518,,Unsigned32,V,,, +SN-Usage-Volume,519,,Unsigned64,V,,, +SN-Service-Flow-Detection,520,,Enumerated,V,,, +SN-Usage-Monitoring,521,,Enumerated,V,,, +SN-Session-Start-Indicator,522,,OctetString,"M,V",,, +SN-Phase0-PSAPName,523,,UTF8String,V,,, +SN-Charging-Id,525,,OctetString,V,,, +SN-Remaining-Service-Unit,526,,Grouped,V,,, +SN-Service-Start-Timestamp,527,,Time,V,,, +SN-Rulebase-Id,528,,UTF8String,"M,V",,, +SN-CF-Policy-ID,529,,Unsigned32,"M,V",,, +SN-Charging-Collection-Function-Name,530,,UTF8String,V,,, +SN-Fast-Reauth-Username,11010,,OctetString,"M,V",,, +SN-Pseudonym-Username,11011,,OctetString,"M,V",,, diff -r 6a35c5470ef4 -r 19ab8ac08a36 extensions/dict_dcca_starent/dict_dcca_starent.org --- a/extensions/dict_dcca_starent/dict_dcca_starent.org Tue Jul 07 01:24:48 2020 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ -| Attribute Name | Code | Section defined | Value Type | MUST | MAY | SHLD NOT | MUST NOT | Encr | -| # Cisco ASR 5000 Series AAA Interface | | | | | | | | | -| # Administration and Reference | | | | | | | | | -| # Release 8.x and 9.0 | | | | | | | | | -| # Last Updated June 30, 2010 | | | | | | | | | -| # updated using v15 docs from Jan 2014 | | | | | | | | | -| # www.cisco.com/c/dam/en/us/td/docs/wireless/asr_5000/15-0/15-0-AAA-Reference.pdf | | | | | | | | | -| SN-Volume-Quota-Threshold | 501 | | Unsigned32 | M,V | | | | | -| SN-Unit-Quota-Threshold | 502 | | Unsigned32 | M,V | | | | | -| SN-Time-Quota-Threshold | 503 | | Unsigned32 | M,V | | | | | -| SN-Total-Used-Service-Unit | 504 | | Grouped | V | | | | | -| SN-Absolute-Validity-Time | 505 | | Time | V | | | | | -| SN-Bandwidth-Control | 512 | | Enumerated | M,V | | | | | -| SN-Transparent-Data | 513 | | OctetString | V | | | | | -| SN-Traffic-Policy | 514 | | UTF8String | V | | | | | -| SN-Firewall-Policy | 515 | | UTF8String | V | | | | | -| SN-Usage-Monitoring-Control | 517 | | Grouped | V | | | | | -| SN-Monitoring-Key | 518 | | Unsigned32 | V | | | | | -| SN-Usage-Volume | 519 | | Unsigned64 | V | | | | | -| SN-Service-Flow-Detection | 520 | | Enumerated | V | | | | | -| SN-Usage-Monitoring | 521 | | Enumerated | V | | | | | -| SN-Session-Start-Indicator | 522 | | OctetString | M,V | | | | | -| SN-Phase0-PSAPName | 523 | | UTF8String | V | | | | | -| SN-Charging-Id | 525 | | OctetString | V | | | | | -| SN-Remaining-Service-Unit | 526 | | Grouped | V | | | | | -| SN-Service-Start-Timestamp | 527 | | Time | V | | | | | -| SN-Rulebase-Id | 528 | | UTF8String | M,V | | | | | -| SN-CF-Policy-ID | 529 | | Unsigned32 | M,V | | | | | -| SN-Charging-Collection-Function-Name | 530 | | UTF8String | V | | | | | -| SN-Fast-Reauth-Username | 11010 | | OctetString | M,V | | | | | -| SN-Pseudonym-Username | 11011 | | OctetString | M,V | | | | | diff -r 6a35c5470ef4 -r 19ab8ac08a36 extensions/dict_json/CMakeLists.txt --- a/extensions/dict_json/CMakeLists.txt Tue Jul 07 01:24:48 2020 +0800 +++ b/extensions/dict_json/CMakeLists.txt Tue Jul 07 01:41:54 2020 +0800 @@ -16,7 +16,7 @@ ) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) -INCLUDE_DIRECTORIES(${JSONCPP_INCLUDE_DIR}) +INCLUDE_DIRECTORIES(${JSONCPP_INCLUDE_DIRS}) INCLUDE_DIRECTORIES(${JSON_SCHEMA_INCLUDE_DIR}) LINK_DIRECTORIES(${JSONCPP_LIBDIR}) diff -r 6a35c5470ef4 -r 19ab8ac08a36 extensions/rt_ereg/rtereg.c --- a/extensions/rt_ereg/rtereg.c Tue Jul 07 01:24:48 2020 +0800 +++ b/extensions/rt_ereg/rtereg.c Tue Jul 07 01:41:54 2020 +0800 @@ -190,8 +190,12 @@ /* Augment the buffer if needed */ if (avp_hdr->avp_value->os.len >= bufsz) { - CHECK_MALLOC_DO( buf = realloc(buf, avp_hdr->avp_value->os.len + 1), + char *newbuf; + CHECK_MALLOC_DO( newbuf = realloc(buf, avp_hdr->avp_value->os.len + 1), { pthread_mutex_unlock(&mtx); return ENOMEM; } ); + /* Update buffer and buffer size */ + buf = newbuf; + bufsz = avp_hdr->avp_value->os.len + 1; } /* Copy the AVP value */ @@ -319,12 +323,11 @@ static int rtereg_init_config(void) { /* Initialize the configuration */ - if ((rtereg_conf=malloc(sizeof(*rtereg_conf))) == NULL) { + if ((rtereg_conf=calloc(sizeof(*rtereg_conf), 1)) == NULL) { LOG_E("[rt_ereg] malloc failured"); return 1; } rtereg_conf_size = 1; - memset(rtereg_conf, 0, sizeof(*rtereg_conf)); /* Parse the configuration file */ CHECK_FCT( rtereg_conf_handle(rt_ereg_config_file) ); @@ -371,6 +374,7 @@ #ifndef HAVE_REG_STARTEND free(buf); buf = NULL; + bufsz = 0; #endif /* HAVE_REG_STARTEND */ if (pthread_rwlock_wrlock(&rte_lock) != 0) { diff -r 6a35c5470ef4 -r 19ab8ac08a36 extensions/rt_rewrite/rt_rewrite.c --- a/extensions/rt_rewrite/rt_rewrite.c Tue Jul 07 01:24:48 2020 +0800 +++ b/extensions/rt_rewrite/rt_rewrite.c Tue Jul 07 01:41:54 2020 +0800 @@ -86,6 +86,7 @@ return; } +/* TODO: convert to fd_msg_search_avp ? */ static int fd_avp_search_avp(msg_or_avp *where, struct dict_object *what, struct avp **avp) { struct avp *nextavp; @@ -396,23 +397,21 @@ return errno; } - if ((store=store_new()) == NULL) { - fd_log_error("%s: malloc failure"); - pthread_rwlock_unlock(&rt_rewrite_lock); - return ENOMEM; - } if ((ret = fd_msg_parse_dict(*msg, fd_g_config->cnf_dict, NULL)) != 0) { fd_log_notice("%s: error parsing message", MODULE_NAME); - free(store); pthread_rwlock_unlock(&rt_rewrite_lock); return ret; } if ((ret=fd_msg_browse(*msg, MSG_BRW_FIRST_CHILD, &avp, NULL)) != 0) { fd_log_notice("internal error: message has no child"); - free(store); pthread_rwlock_unlock(&rt_rewrite_lock); return ret; } + if ((store=store_new()) == NULL) { + fd_log_error("%s: malloc failure"); + pthread_rwlock_unlock(&rt_rewrite_lock); + return ENOMEM; + } if (replace_avps(*msg, avp, avp_match_start->children, store) != 0) { fd_log_error("%s: replace AVP function failed", MODULE_NAME); store_free(store); diff -r 6a35c5470ef4 -r 19ab8ac08a36 extensions/rt_rewrite/rt_rewrite_conf.y --- a/extensions/rt_rewrite/rt_rewrite_conf.y Tue Jul 07 01:24:48 2020 +0800 +++ b/extensions/rt_rewrite/rt_rewrite_conf.y Tue Jul 07 01:41:54 2020 +0800 @@ -107,7 +107,11 @@ fd_dict_getval(model_source, &dictdata_source); fd_dict_getval(model_dest, &dictdata_dest); if (dictdata_source.avp_basetype != dictdata_dest.avp_basetype) { - fd_log_notice("rt_rewrite: type mismatch: %s (type %s) mapped to %s (type %s) (continuing anyway)", source, type_base_name[dictdata_source.avp_basetype], dest, type_base_name[dictdata_dest.avp_basetype]); + if (dictdata_source.avp_basetype == AVP_TYPE_OCTETSTRING) { + fd_log_error("rt_rewrite: type mismatch: %s (type %s) mapped to %s (type %s): OctetString cannot be mapped to non-OctetString type", source, type_base_name[dictdata_source.avp_basetype], dest, type_base_name[dictdata_dest.avp_basetype]); + return; + } + fd_log_error("rt_rewrite: type mismatch: %s (type %s) mapped to %s (type %s) (continuing anyway)", source, type_base_name[dictdata_source.avp_basetype], dest, type_base_name[dictdata_dest.avp_basetype]); } return; } diff -r 6a35c5470ef4 -r 19ab8ac08a36 extensions/test_sip/multimediaauth.c --- a/extensions/test_sip/multimediaauth.c Tue Jul 07 01:24:48 2020 +0800 +++ b/extensions/test_sip/multimediaauth.c Tue Jul 07 01:41:54 2020 +0800 @@ -335,7 +335,7 @@ //CHECK_FCT(fd_msg_browse ( avp, MSG_BRW_WALK, &avp, NULL) ); - CHECK_FCT(fd_avp_search_avp (avp, sip_dict.Digest_CNonce, &a2 )); + CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_CNonce, &a2 )); if(a2!=NULL) found_cnonce=1; @@ -472,7 +472,7 @@ char * digest_username=NULL, *digest_uri=NULL, *digest_response=NULL, *digest_realm=NULL, *digest_nonce=NULL, *digest_method=NULL, *digest_qop=NULL, *digest_algorithm=NULL, *digest_cnonce=NULL, *digest_noncecount=NULL; - CHECK_FCT(fd_avp_search_avp (avp, sip_dict.Digest_Nonce, &a2 )); + CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_Nonce, &a2 )); if(a2!=NULL) { CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) ); @@ -501,7 +501,7 @@ } } - CHECK_FCT(fd_avp_search_avp (avp, sip_dict.Digest_Response, &a2 )); + CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_Response, &a2 )); if(a2!=NULL) { CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) ); @@ -515,7 +515,7 @@ } } - CHECK_FCT(fd_avp_search_avp (avp, sip_dict.Digest_Realm, &a2 )); + CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_Realm, &a2 )); if(a2!=NULL) { CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) ); @@ -529,7 +529,7 @@ } } - CHECK_FCT(fd_avp_search_avp (avp, sip_dict.Digest_Method, &a2 )); + CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_Method, &a2 )); if(a2!=NULL) { CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) ); @@ -545,7 +545,7 @@ else digest_method=""; - CHECK_FCT(fd_avp_search_avp (avp, sip_dict.Digest_URI, &a2 )); + CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_URI, &a2 )); if(a2!=NULL) { CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) ); @@ -559,7 +559,7 @@ } } - CHECK_FCT(fd_avp_search_avp (avp, sip_dict.Digest_QOP, &a2 )); + CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_QOP, &a2 )); if(a2!=NULL) { CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) ); @@ -574,7 +574,7 @@ } else digest_qop=NULL; - CHECK_FCT(fd_avp_search_avp (avp, sip_dict.Digest_Algorithm, &a2 )); + CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_Algorithm, &a2 )); if(a2!=NULL) { CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) ); @@ -589,7 +589,7 @@ } else digest_algorithm=NULL; - CHECK_FCT(fd_avp_search_avp (avp, sip_dict.Digest_CNonce, &a2 )); + CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_CNonce, &a2 )); if(a2!=NULL) { CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) ); @@ -604,7 +604,7 @@ } else digest_cnonce=""; - CHECK_FCT(fd_avp_search_avp (avp, sip_dict.Digest_Nonce_Count, &a2 )); + CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_Nonce_Count, &a2 )); if(a2!=NULL) { CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) ); @@ -619,7 +619,7 @@ } else digest_noncecount=""; - CHECK_FCT(fd_avp_search_avp (avp, sip_dict.Digest_Username, &a2 )); + CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_Username, &a2 )); if(a2!=NULL) { CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) ); diff -r 6a35c5470ef4 -r 19ab8ac08a36 freeDiameterd/main.c --- a/freeDiameterd/main.c Tue Jul 07 01:24:48 2020 +0800 +++ b/freeDiameterd/main.c Tue Jul 07 01:41:54 2020 +0800 @@ -45,7 +45,9 @@ #include #include #include +#include #include +#include #include /* forward declarations */ @@ -56,18 +58,67 @@ static char *conffile = NULL; static int daemon_mode = 0; static int gnutls_debug = 0; +static char *pidfile = NULL; /* gnutls debug */ static void fd_gnutls_debug(int level, const char * str) { fd_log_debug(" [gnutls:%d] %s", level, str); } +static void pidfile_cleanup(void) +{ + if (pidfile != NULL) { + LOG_I("Removing pidfile '%s'", pidfile); + CHECK_SYS_DO( unlink(pidfile), /* ignore */ ); + pidfile = NULL; + } +} + +static int pidfile_create(void) +{ + if (pidfile == NULL) { + return 0; + } + + /* Create pidfile */ + FILE * fp = fopen(pidfile, "w"); + if (fp == NULL) { + int ret = errno; + LOG_F("Unable to write pidfile '%s'; Error: %s", + pidfile, strerror(ret)); + pidfile = NULL; /* disable pidfile_cleanup() */ + return ret; + } + + /* Cleanup pidfile on exit */ + if (atexit(pidfile_cleanup) != 0) { + LOG_F("Unable to setup pidfile cleanup"); + CHECK_SYS( fclose(fp) ); + pidfile_cleanup(); + return EINVAL; + } + + /* Write the pid and close pidfile */ + fprintf(fp, "%d\n", getpid()); + CHECK_SYS_DO( fclose(fp), { pidfile_cleanup(); return __ret__; } ); + + LOG_I("Created pidfile '%s'", pidfile); + return 0; +} + static void syslog_logger(int loglevel, const char * format, va_list args) { + if (loglevel < fd_g_debug_lvl) { + return; + } + int level; switch (loglevel) { + case FD_LOG_INFO: + level = LOG_INFO; + break; case FD_LOG_NOTICE: level = LOG_NOTICE; break; @@ -79,17 +130,13 @@ break; default: /* fallthrough */ + case FD_LOG_ANNOYING: case FD_LOG_DEBUG: - /* some systems log LOG_DEBUG to a file; but - * freeDiameter debug output is too verbose */ - return; -#if 0 level = LOG_DEBUG; break; -#endif } - vsyslog(level, format, args); + vsyslog(level | LOG_DAEMON, format, args); } @@ -107,19 +154,21 @@ /* Parse the command-line */ ret = main_cmdline(argc, argv); if (ret != 0) { - return ret; + return EXIT_FAILURE; } if (daemon_mode) { TRACE_DEBUG(INFO, "entering background mode"); - CHECK_POSIX_DO( daemon(1, 0), goto error ); + CHECK_SYS_DO( daemon(1, 0), return EXIT_FAILURE ); } + CHECK_FCT_DO( pidfile_create(), return EXIT_FAILURE ); + /* Initialize the core library */ ret = fd_core_initialize(); if (ret != 0) { fprintf(stderr, "An error occurred during freeDiameter core library initialization.\n"); - return ret; + return EXIT_FAILURE; } /* Set gnutls debug level ? */ @@ -141,17 +190,17 @@ TRACE_DEBUG(INFO, FD_PROJECT_BINARY " daemon initialized."); /* Now, just wait for termination */ - CHECK_FCT( fd_core_wait_shutdown_complete() ); + CHECK_FCT_DO( fd_core_wait_shutdown_complete(), return EXIT_FAILURE ); /* Just in case it was not the result of a signal, we cancel signals_thr */ fd_thr_term(&signals_thr); - return 0; + return EXIT_SUCCESS; error: CHECK_FCT_DO( fd_core_shutdown(), ); - CHECK_FCT( fd_core_wait_shutdown_complete() ); + CHECK_FCT_DO( fd_core_wait_shutdown_complete(), return EXIT_FAILURE ); fd_thr_term(&signals_thr); - return -1; + return EXIT_FAILURE; } @@ -182,15 +231,16 @@ " -c, --config=filename Read configuration from this file instead of the \n" " default location (" DEFAULT_CONF_PATH "/" FD_DEFAULT_CONF_FILENAME ")\n" " -D, --daemon Start program in background\n" + " -p, --pidfile=filename Write PID to filename\n" " -s, --syslog Write log output to syslog (instead of stdout)\n"); printf( "\nDebug:\n" " These options are mostly useful for developers\n" - " -d, --debug Increase verbosity of debug messages if default logger is used\n" - " --dbg_gnutls Enable GNU TLS debug at level \n" + " -d, --debug Increase verbosity of log messages\n" " -f, --dbg_func Enable all traces within the function \n" " -F, --dbg_file Enable all traces within the file (basename match)\n" + " -g, --dbg_gnutls Enable GNU TLS debug at level \n" " -l, --dbglocale Set the locale for error messages\n" - " -q, --quiet Decrease verbosity if default logger is used\n" + " -q, --quiet Decrease verbosity of log messages\n" ); } @@ -207,6 +257,7 @@ { "config", required_argument, NULL, 'c' }, { "syslog", no_argument, NULL, 's' }, { "daemon", no_argument, NULL, 'D' }, + { "pidfile", required_argument, NULL, 'p' }, { "debug", no_argument, NULL, 'd' }, { "quiet", no_argument, NULL, 'q' }, { "dbglocale", optional_argument, NULL, 'l' }, @@ -218,18 +269,18 @@ /* Loop on arguments */ while (1) { - c = getopt_long (argc, argv, "hVc:Ddql:f:F:g:s", long_options, &option_index); + c = getopt_long (argc, argv, "hVc:Dp:dql:f:F:g:s", long_options, &option_index); if (c == -1) break; /* Exit from the loop. */ switch (c) { case 'h': /* Print help and exit. */ main_help(); - exit(0); + exit(EXIT_SUCCESS); case 'V': /* Print version and exit. */ main_version(); - exit(0); + exit(EXIT_SUCCESS); case 'c': /* Read configuration from this file instead of the default location.. */ if (optarg == NULL ) { @@ -243,6 +294,14 @@ daemon_mode = 1; break; + case 'p': /* Write pidfile */ + if (optarg == NULL ) { + fprintf(stderr, "Missing argument with --pidfile directive\n"); + return EINVAL; + } + pidfile = optarg; + break; + case 'l': /* Change the locale. */ locale = setlocale(LC_ALL, optarg?:""); if (!locale) { diff -r 6a35c5470ef4 -r 19ab8ac08a36 include/freeDiameter/CMakeLists.txt --- a/include/freeDiameter/CMakeLists.txt Tue Jul 07 01:24:48 2020 +0800 +++ b/include/freeDiameter/CMakeLists.txt Tue Jul 07 01:41:54 2020 +0800 @@ -15,6 +15,9 @@ # Find TODO items in the code easily ? OPTION(ERRORS_ON_TODO "(development) Generate compilation errors on TODO items ?" OFF) +# Compiler warnings are fatal? +OPTION(ERRORS_ON_WARNINGS "(development) Compiler warnings cause compilation errors ?" OFF) + # In DEBUG mode, each log can contain pid, calling function and file for easy debug. Set to ON to display this information. OPTION(DEBUG_WITH_META "Show calling location in logs?" OFF) diff -r 6a35c5470ef4 -r 19ab8ac08a36 include/freeDiameter/extension.h --- a/include/freeDiameter/extension.h Tue Jul 07 01:24:48 2020 +0800 +++ b/include/freeDiameter/extension.h Tue Jul 07 01:41:54 2020 +0800 @@ -48,6 +48,8 @@ #define EXTENSION_ENTRY(_name, _function, _depends...) \ const char *fd_ext_depends[] = { _name , ## _depends , NULL }; \ static int extension_loaded = 0; \ + \ +__attribute__((visibility("default"))) \ int fd_ext_init(int major, int minor, char * conffile) { \ if ((major != FD_PROJECT_VERSION_MAJOR) \ || (minor != FD_PROJECT_VERSION_MINOR)) { \ @@ -63,7 +65,11 @@ } \ extension_loaded++; \ return (_function)(conffile); \ -} +} + +/* Optional exit point (finish function) of the extension */ +__attribute__((visibility("default"))) +void fd_ext_fini(void); #ifdef __cplusplus } diff -r 6a35c5470ef4 -r 19ab8ac08a36 include/freeDiameter/libfdcore.h --- a/include/freeDiameter/libfdcore.h Tue Jul 07 01:24:48 2020 +0800 +++ b/include/freeDiameter/libfdcore.h Tue Jul 07 01:41:54 2020 +0800 @@ -151,6 +151,7 @@ unsigned no_sctp: 1; /* disable the use of SCTP */ unsigned pr_tcp : 1; /* prefer TCP over SCTP */ unsigned tls_alg: 1; /* TLS algorithm for initiated cnx. 0: separate port. 1: inband-security (old) */ + unsigned no_bind: 1; /* disable client bind to cnf_endpoints if non configured (bind all) */ } cnf_flags; struct { @@ -552,6 +553,30 @@ int fd_msg_send_timeout ( struct msg ** pmsg, void (*anscb)(void *, struct msg **), void * data, void (*expirecb)(void *, DiamId_t, size_t, struct msg **), const struct timespec *timeout ); /* + * FUNCTION: fd_msg_add_result + * + * PARAMETERS: + * msg : A msg object -- it must be an answer. + * vendor : Vendor. If 0, add Result-Code else add Experimental-Result. + * restype : DICT_TYPE containing rescode (ex: from TYPE_BY_NAME "Enumerated(Result-Code)"). + * rescode : The name of the returned error code (ex: "DIAMETER_INVALID_AVP"). + * errormsg : (optional) human-readable error message to put in Error-Message AVP. + * optavp : (optional) If provided, the content will be put inside a Failed-AVP. + * type_id : 0 => nothing; 1 => adds Origin-Host and Origin-Realm with local info. 2=> adds Error-Reporting-Host. + * + * DESCRIPTION: + * This function adds a Result-Code AVP (if vendor is 0) or Experimental-Result AVP (vendor is not 0) + * to a message, and optionally + * - sets the 'E' error flag in the header, + * - adds Error-Message, Error-Reporting-Host and Failed-AVP AVPs. + * + * RETURN VALUE: + * 0 : Operation complete. + * !0 : an error occurred. + */ +int fd_msg_add_result( struct msg * msg, vendor_id_t vendor, struct dict_object * restype, char * rescode, char * errormsg, struct avp * optavp, int type_id ); + +/* * FUNCTION: fd_msg_rescode_set * * PARAMETERS: @@ -561,14 +586,15 @@ * optavp : (optional) If provided, the content will be put inside a Failed-AVP * type_id : 0 => nothing; 1 => adds Origin-Host and Origin-Realm with local info. 2=> adds Error-Reporting-Host. * - * DESCRIPTION: - * This function adds a Result-Code AVP to a message, and optionally + * DESCRIPTION: + * This function adds a Result-Code AVP to a message, and optionally * - sets the 'E' error flag in the header, * - adds Error-Message, Error-Reporting-Host and Failed-AVP AVPs. + * Uses fd_msg_add_result with vendor 0 and restype for Enumerated(Result-Code). * * RETURN VALUE: - * 0 : Operation complete. - * !0 : an error occurred. + * 0 : Operation complete. + * !0 : an error occurred. */ int fd_msg_rescode_set( struct msg * msg, char * rescode, char * errormsg, struct avp * optavp, int type_id ); diff -r 6a35c5470ef4 -r 19ab8ac08a36 include/freeDiameter/libfdproto.h --- a/include/freeDiameter/libfdproto.h Tue Jul 07 01:24:48 2020 +0800 +++ b/include/freeDiameter/libfdproto.h Tue Jul 07 01:41:54 2020 +0800 @@ -29,7 +29,7 @@ * 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 S_OUT OF THE USE OF THIS SOFTWARE, EVEN IF * +* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY S_OUT OF THE USE OF THIS SOFTWARE, EVEN IF * * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * *********************************************************************************************************/ @@ -270,6 +270,7 @@ /* log levels definitions, that are passed to the logger */ #define FD_LOG_ANNOYING 0 /* very verbose loops and such "overkill" traces. Only active when the framework is compiled in DEBUG mode. */ #define FD_LOG_DEBUG 1 /* Get a detailed sense of what is going on in the framework. Use this level for normal debug */ +#define FD_LOG_INFO 2 /* Informational execution states */ #define FD_LOG_NOTICE 3 /* Normal execution states worth noting */ #define FD_LOG_ERROR 5 /* Recoverable or expected error conditions */ #define FD_LOG_FATAL 6 /* Unrecoverable error, e.g. malloc fail, etc. that requires the framework to shutdown */ @@ -330,6 +331,10 @@ #define LOG_D(format,args... ) \ LOG(FD_LOG_DEBUG, format, ##args) +/* Report an info message */ +#define LOG_I(format,args... ) \ + LOG(FD_LOG_INFO, format,##args) + /* Report a normal message that is useful for normal admin monitoring */ #define LOG_N(format,args... ) \ LOG(FD_LOG_NOTICE, format,##args) @@ -516,7 +521,7 @@ int __l__; \ if ((__l__ = TRACE_BOOL(oldlevel))) { \ if (oldlevel <= NONE) { LOG_E(format,##args); } \ - else if (oldlevel <= INFO) { LOG_N(format,##args); } \ + else if (oldlevel <= INFO) { LOG_I(format,##args); } \ else if (__l__ == 2) { LOG_N(format,##args); } \ else if (oldlevel <= FULL) { LOG_D(format,##args); } \ else { LOG_A(format,##args); } \ @@ -595,12 +600,14 @@ /*============================================================*/ #ifdef STRIP_DEBUG_CODE #undef LOG_D +#undef LOG_I #undef LOG_N #undef LOG_E #undef LOG_F #undef LOG_BUFFER #define LOG_D(format,args... ) /* noop */ +#define LOG_I(format,args...) fd_log(FD_LOG_INFO, format, ## args) #define LOG_N(format,args...) fd_log(FD_LOG_NOTICE, format, ## args) #define LOG_E(format,args...) fd_log(FD_LOG_ERROR, format, ## args) #define LOG_F(format,args...) fd_log(FD_LOG_FATAL, format, ## args) @@ -682,10 +689,10 @@ /* create a V4MAPPED address */ #define IN6_ADDR_V4MAP( a6, a4 ) { \ - ((uint32_t *)(a6))[0] = 0; \ - ((uint32_t *)(a6))[1] = 0; \ - ((uint32_t *)(a6))[2] = htonl(0xffff); \ - ((uint32_t *)(a6))[3] = (uint32_t)(a4); \ + memset(&(*a6)[0], 0, 10); \ + (*a6)[10] = 0xff; \ + (*a6)[11] = 0xff; \ + memcpy(&(*a6)[12], &a4, 4); \ } /* Retrieve a v4 value from V4MAPPED address ( takes a s6_addr as param) */ @@ -955,7 +962,7 @@ * FUNCTION: fd_dict_new * * PARAMETERS: - * dict : Pointer to the dictionnary where the object is created + * dict : Pointer to the dictionary where the object is created * type : What kind of object must be created * data : pointer to the data for the object. * type parameter is used to determine the type of data (see below for detail). @@ -980,7 +987,7 @@ * FUNCTION: fd_dict_search * * PARAMETERS: - * dict : Pointer to the dictionnary where the object is searched + * dict : Pointer to the dictionary where the object is searched * type : type of object that is being searched * criteria : how the object must be searched. See object-related sections below for more information. * what : depending on criteria, the data that must be searched. @@ -1373,8 +1380,8 @@ /* The criteria for searching a constant in the dictionary */ enum { ENUMVAL_BY_STRUCT = 40, /* "what" points to a struct dict_enumval_request as defined below */ - ENUMVAL_BY_NAME, /* This cannot be used for researches */ - ENUMVAL_BY_VALUE /* This cannot be used for researches */ + ENUMVAL_BY_NAME, /* This cannot be used for searches */ + ENUMVAL_BY_VALUE /* This cannot be used for searches */ }; struct dict_enumval_request { @@ -1503,7 +1510,7 @@ AVP_BY_NAME_AND_VENDOR /* "what" points to a struct dict_avp_request (see below), where avp_vendor and avp_name are set */ }; -/* Struct used for some researchs */ +/* Struct used for some searches */ struct dict_avp_request_ex { struct { /* Only one of the following fields must be set. */ @@ -2359,22 +2366,22 @@ * FUNCTION: fd_msg_search_avp * * PARAMETERS: - * msg : The message structure in which to search the AVP. + * reference : Pointer to a valid msg or avp in which to search the AVP. * what : The dictionary model of the AVP to search. * avp : location where the AVP reference is stored if found. * * DESCRIPTION: - * Search the first top-level AVP of a given model inside a message. + * Search for the first top-level AVP of a given model inside a message or AVP. * Note: only the first instance of the AVP is returned by this function. * Note: only top-level AVPs are searched, not inside grouped AVPs. - * Use msg_browse if you need more advanced research features. + * Use msg_browse if you need more advanced search features. * * RETURN VALUE: * 0 : The AVP has been found. * EINVAL : A parameter is invalid. * ENOENT : No AVP has been found, and "avp" was NULL (otherwise, *avp is set to NULL and 0 returned). */ -int fd_msg_search_avp ( struct msg * msg, struct dict_object * what, struct avp ** avp ); +int fd_msg_search_avp ( msg_or_avp * reference, struct dict_object * what, struct avp ** avp ); /* * FUNCTION: fd_msg_free diff -r 6a35c5470ef4 -r 19ab8ac08a36 libfdcore/cnxctx.c --- a/libfdcore/cnxctx.c Tue Jul 07 01:24:48 2020 +0800 +++ b/libfdcore/cnxctx.c Tue Jul 07 01:41:54 2020 +0800 @@ -176,7 +176,7 @@ } else { cnx->cc_family = AF_INET6; /* can create socket for both IP and IPv6 */ } - + /* Create the socket */ CHECK_FCT_DO( fd_sctp_create_bind_server( &cnx->cc_socket, cnx->cc_family, ep_list, port ), goto error ); @@ -226,41 +226,41 @@ TRACE_ENTRY("%p", serv); CHECK_PARAMS_DO(serv, return NULL); - + /* Accept the new connection -- this is blocking until new client enters or until cancellation */ CHECK_SYS_DO( cli_sock = accept(serv->cc_socket, (sSA *)&ss, &ss_len), return NULL ); - + CHECK_MALLOC_DO( cli = fd_cnx_init(1), { shutdown(cli_sock, SHUT_RDWR); close(cli_sock); return NULL; } ); cli->cc_socket = cli_sock; cli->cc_family = serv->cc_family; cli->cc_proto = serv->cc_proto; - + /* Set the timeout */ fd_cnx_s_setto(cli->cc_socket); - + /* Generate the name for the connection object */ { char addrbuf[INET6_ADDRSTRLEN]; char portbuf[10]; int rc; - + rc = getnameinfo((sSA *)&ss, ss_len, addrbuf, sizeof(addrbuf), portbuf, sizeof(portbuf), NI_NUMERICHOST | NI_NUMERICSERV); if (rc) { snprintf(addrbuf, sizeof(addrbuf), "[err:%s]", gai_strerror(rc)); portbuf[0] = '\0'; } - + /* Numeric values for debug... */ - snprintf(cli->cc_id, sizeof(cli->cc_id), CC_ID_HDR "%s from [%s]:%s (%d<-%d)", + snprintf(cli->cc_id, sizeof(cli->cc_id), CC_ID_HDR "%s from [%s]:%s (%d<-%d)", IPPROTO_NAME(cli->cc_proto), addrbuf, portbuf, serv->cc_socket, cli->cc_socket); - - + + /* ...Name for log messages */ rc = getnameinfo((sSA *)&ss, ss_len, cli->cc_remid, sizeof(cli->cc_remid), NULL, 0, 0); if (rc) snprintf(cli->cc_remid, sizeof(cli->cc_remid), "[err:%s]", gai_strerror(rc)); } - + LOG_D("Incoming connection: '%s' <- '%s' {%s}", fd_cnx_getid(serv), cli->cc_remid, cli->cc_id); #ifndef DISABLE_SCTP @@ -272,7 +272,7 @@ cli->cc_sctp_para.pairs = cli->cc_sctp_para.str_out; else cli->cc_sctp_para.pairs = cli->cc_sctp_para.str_in; - + LOG_A( "%s : client '%s' (SCTP:%d, %d/%d streams)", fd_cnx_getid(serv), fd_cnx_getid(cli), cli->cc_socket, cli->cc_sctp_para.str_in, cli->cc_sctp_para.str_out); } #endif /* DISABLE_SCTP */ @@ -286,14 +286,14 @@ int sock = 0; struct cnxctx * cnx = NULL; char sa_buf[sSA_DUMP_STRLEN]; - + TRACE_ENTRY("%p %d", sa, addrlen); CHECK_PARAMS_DO( sa && addrlen, return NULL ); - + fd_sa_sdump_numeric(sa_buf, sa); - + LOG_D("Connecting to TCP %s...", sa_buf); - + /* Create the socket and connect, which can take some time and/or fail */ { int ret = fd_tcp_client( &sock, sa, addrlen ); @@ -302,36 +302,37 @@ return NULL; } } - + /* Once the socket is created successfuly, prepare the remaining of the cnx */ CHECK_MALLOC_DO( cnx = fd_cnx_init(1), { shutdown(sock, SHUT_RDWR); close(sock); return NULL; } ); - + cnx->cc_socket = sock; cnx->cc_family = sa->sa_family; cnx->cc_proto = IPPROTO_TCP; - + /* Set the timeout */ fd_cnx_s_setto(cnx->cc_socket); - + /* Generate the names for the object */ { int rc; - + snprintf(cnx->cc_id, sizeof(cnx->cc_id), CC_ID_HDR "TCP,#%d->%s", cnx->cc_socket, sa_buf); - + /* ...Name for log messages */ rc = getnameinfo(sa, addrlen, cnx->cc_remid, sizeof(cnx->cc_remid), NULL, 0, 0); if (rc) snprintf(cnx->cc_remid, sizeof(cnx->cc_remid), "[err:%s]", gai_strerror(rc)); } - + LOG_A("TCP connection to %s succeed (socket:%d).", sa_buf, sock); - + return cnx; } -/* Same for SCTP, accepts a list of remote addresses to connect to (see sctp_connectx for how they are used) */ -struct cnxctx * fd_cnx_cli_connect_sctp(int no_ip6, uint16_t port, struct fd_list * list) +/* Same for SCTP, accepts a list of remote addresses to connect to (see sctp_connectx for how they are used). + * If src_list is not NULL and not empty, list of local addresses to connect from via sctp_bindx(). */ +struct cnxctx * fd_cnx_cli_connect_sctp(int no_ip6, uint16_t port, struct fd_list * list, struct fd_list * src_list) { #ifdef DISABLE_SCTP TRACE_DEBUG(INFO, "This function should never be called when SCTP is disabled..."); @@ -343,55 +344,72 @@ struct cnxctx * cnx = NULL; char sa_buf[sSA_DUMP_STRLEN]; sSS primary; - - TRACE_ENTRY("%p", list); + + TRACE_ENTRY("%p %p", list, src_list); CHECK_PARAMS_DO( list && !FD_IS_LIST_EMPTY(list), return NULL ); - + + /* Log SCTP association source and destination endpoints */ + { + char * buf = NULL; + size_t len = 0, offset = 0; + CHECK_MALLOC_DO( fd_dump_extend( &buf, &len, &offset, "Connecting SCTP endpoints"), ); + CHECK_MALLOC_DO( fd_dump_extend( &buf, &len, &offset, " source: "), ); + if (src_list && !FD_IS_LIST_EMPTY(src_list)) { + CHECK_MALLOC_DO( fd_ep_dump( &buf, &len, &offset, 0, 0, src_list ), ); + } else { + CHECK_MALLOC_DO( fd_dump_extend( &buf, &len, &offset, "(ANY)"), ); + } + CHECK_MALLOC_DO( fd_dump_extend( &buf, &len, &offset, ", destination: "), ); + CHECK_MALLOC_DO( fd_ep_dump( &buf, &len, &offset, 0, 0, list ), ); + LOG_D("%s", buf ?: "Error determining SCTP endpoints"); + free(buf); + } + fd_sa_sdump_numeric(sa_buf, &((struct fd_endpoint *)(list->next))->sa); - + LOG_D("Connecting to SCTP %s:%hu...", sa_buf, port); - + { - int ret = fd_sctp_client( &sock, no_ip6, port, list ); + int ret = fd_sctp_client( &sock, no_ip6, port, list, src_list ); if (ret != 0) { LOG_D("SCTP connection to [%s,...] failed: %s", sa_buf, strerror(ret)); return NULL; } } - + /* Once the socket is created successfuly, prepare the remaining of the cnx */ CHECK_MALLOC_DO( cnx = fd_cnx_init(1), { shutdown(sock, SHUT_RDWR); close(sock); return NULL; } ); - + cnx->cc_socket = sock; cnx->cc_family = no_ip6 ? AF_INET : AF_INET6; cnx->cc_proto = IPPROTO_SCTP; - + /* Set the timeout */ fd_cnx_s_setto(cnx->cc_socket); - + /* Retrieve the number of streams and primary address */ CHECK_FCT_DO( fd_sctp_get_str_info( sock, &cnx->cc_sctp_para.str_in, &cnx->cc_sctp_para.str_out, &primary ), goto error ); if (cnx->cc_sctp_para.str_out < cnx->cc_sctp_para.str_in) cnx->cc_sctp_para.pairs = cnx->cc_sctp_para.str_out; else cnx->cc_sctp_para.pairs = cnx->cc_sctp_para.str_in; - + fd_sa_sdump_numeric(sa_buf, (sSA *)&primary); - + /* Generate the names for the object */ { int rc; - + snprintf(cnx->cc_id, sizeof(cnx->cc_id), CC_ID_HDR "SCTP,#%d->%s", cnx->cc_socket, sa_buf); - + /* ...Name for log messages */ rc = getnameinfo((sSA *)&primary, sSAlen(&primary), cnx->cc_remid, sizeof(cnx->cc_remid), NULL, 0, 0); if (rc) snprintf(cnx->cc_remid, sizeof(cnx->cc_remid), "[err:%s]", gai_strerror(rc)); } - + LOG_A("SCTP connection to %s succeed (socket:%d, %d/%d streams).", sa_buf, sock, cnx->cc_sctp_para.str_in, cnx->cc_sctp_para.str_out); - + return cnx; error: @@ -444,17 +462,17 @@ conn->cc_id[1] = 'C'; else conn->cc_id[1] = '-'; - + if (conn->cc_state & CC_STATUS_ERROR) conn->cc_id[2] = 'E'; else conn->cc_id[2] = '-'; - + if (conn->cc_state & CC_STATUS_SIGNALED) conn->cc_id[3] = 'S'; else conn->cc_id[3] = '-'; - + if (conn->cc_state & CC_STATUS_TLS) conn->cc_id[4] = 'T'; else @@ -508,7 +526,7 @@ { TRACE_ENTRY("%p %p", conn, eps); CHECK_PARAMS(conn && eps); - + /* Check we have a full connection object, not a listening socket (with no remote) */ CHECK_PARAMS( conn->cc_incoming ); @@ -546,16 +564,16 @@ static int fd_cnx_may_dtls(struct cnxctx * conn); /* Get a short string representing the connection */ -int fd_cnx_proto_info(struct cnxctx * conn, char * buf, size_t len) +int fd_cnx_proto_info(struct cnxctx * conn, char * buf, size_t len) { CHECK_PARAMS( conn ); - + if (fd_cnx_teststate(conn, CC_STATUS_TLS)) { snprintf(buf, len, "%s,%s,soc#%d", IPPROTO_NAME(conn->cc_proto), fd_cnx_may_dtls(conn) ? "DTLS" : "TLS", conn->cc_socket); } else { snprintf(buf, len, "%s,soc#%d", IPPROTO_NAME(conn->cc_proto), conn->cc_socket); } - + return 0; } @@ -563,27 +581,27 @@ int fd_cnx_get_local_eps(struct fd_list * list) { struct ifaddrs *iflist, *cur; - + CHECK_SYS(getifaddrs(&iflist)); - + for (cur = iflist; cur != NULL; cur = cur->ifa_next) { if (cur->ifa_flags & IFF_LOOPBACK) continue; - + if (cur->ifa_addr == NULL) /* may happen with ppp interfaces */ continue; - + if (fd_g_config->cnf_flags.no_ip4 && (cur->ifa_addr->sa_family == AF_INET)) continue; - + if (fd_g_config->cnf_flags.no_ip6 && (cur->ifa_addr->sa_family == AF_INET6)) continue; - + CHECK_FCT(fd_ep_add_merge( list, cur->ifa_addr, sSAlen(cur->ifa_addr), EP_FL_LL )); } - + freeifaddrs(iflist); - + return 0; } @@ -597,31 +615,31 @@ { TRACE_ENTRY("%p", conn); CHECK_PARAMS_DO( conn, goto fatal ); - + TRACE_DEBUG(FULL, "Error flag set for socket %d (%s, %s)", conn->cc_socket, conn->cc_id, conn->cc_remid); /* Mark the error */ fd_cnx_addstate(conn, CC_STATUS_ERROR); - + /* Report the error if not reported yet, and not closing */ if (!fd_cnx_teststate(conn, CC_STATUS_CLOSING | CC_STATUS_SIGNALED )) { TRACE_DEBUG(FULL, "Sending FDEVP_CNX_ERROR event"); CHECK_FCT_DO( fd_event_send( fd_cnx_target_queue(conn), FDEVP_CNX_ERROR, 0, NULL), goto fatal); fd_cnx_addstate(conn, CC_STATUS_SIGNALED); } - + return; fatal: /* An unrecoverable error occurred, stop the daemon */ ASSERT(0); - CHECK_FCT_DO(fd_core_shutdown(), ); + CHECK_FCT_DO(fd_core_shutdown(), ); } /* Set the timeout option on the socket */ -void fd_cnx_s_setto(int sock) +void fd_cnx_s_setto(int sock) { struct timeval tv; - + /* Set a timeout on the socket so that in any case we are not stuck waiting for something */ memset(&tv, 0, sizeof(tv)); tv.tv_usec = 100000L; /* 100ms, to react quickly to head-of-the-line blocking. */ @@ -636,15 +654,15 @@ { fd_set rfds; struct timeval tv; - + FD_ZERO (&rfds); FD_SET (conn->cc_socket, &rfds); - + tv.tv_sec = ms / 1000; tv.tv_usec = (ms * 1000) % 1000000; - + return select (conn->cc_socket + 1, &rfds, NULL, NULL, &tv); -} +} #endif /* GNUTLS_VERSION_300 */ /* A recv-like function, taking a cnxctx object instead of socket as entry. We use it to quickly react to timeouts without traversing GNUTLS wrapper each time */ @@ -664,13 +682,13 @@ goto again; } } - + /* Mark the error */ if (ret <= 0) { CHECK_SYS_DO(ret, /* continue, this is only used to log the error here */); fd_cnx_markerror(conn); } - + return ret; } @@ -686,7 +704,7 @@ if ((ret < 0) && ((errno == EAGAIN) || (errno == EINTR))) { ret = -errno; pthread_testcancel(); - + /* Check how much time we were blocked for this sending. */ CHECK_SYS_DO( clock_gettime(CLOCK_REALTIME, &now), return -1 ); if ( ((now.tv_sec - ts.tv_sec) * 1000 + ((now.tv_nsec - ts.tv_nsec) / 1000000L)) > MAX_HOTL_BLOCKING_TIME) { @@ -694,17 +712,17 @@ } else if (! fd_cnx_teststate(conn, CC_STATUS_CLOSING )) { goto again; /* don't care, just ignore */ } - + /* propagate the error */ errno = -ret; ret = -1; CHECK_SYS_DO(ret, /* continue */); } - + /* Mark the error */ if (ret <= 0) fd_cnx_markerror(conn); - + return ret; } @@ -730,7 +748,7 @@ struct fd_msg_pmdl * fd_msg_pmdl_get_inbuf(uint8_t * buf, size_t datalen) { return (struct fd_msg_pmdl *)(buf + PMDL_PADDED(datalen)); -} +} static int fd_cnx_init_msg_buffer(uint8_t * buffer, size_t expected_len, struct fd_msg_pmdl ** pmdl) { @@ -743,7 +761,7 @@ static uint8_t * fd_cnx_alloc_msg_buffer(size_t expected_len, struct fd_msg_pmdl ** pmdl) { uint8_t * ret = NULL; - + CHECK_MALLOC_DO( ret = malloc( fd_msg_pmdl_sizewithoverhead(expected_len) ), return NULL ); CHECK_FCT_DO( fd_cnx_init_msg_buffer(ret, expected_len, pmdl), {free(ret); return NULL;} ); return ret; @@ -753,14 +771,14 @@ static uint8_t * fd_cnx_realloc_msg_buffer(uint8_t * buffer, size_t expected_len, struct fd_msg_pmdl ** pmdl) { uint8_t * ret = NULL; - + CHECK_MALLOC_DO( ret = realloc( buffer, fd_msg_pmdl_sizewithoverhead(expected_len) ), return NULL ); CHECK_FCT_DO( fd_cnx_init_msg_buffer(ret, expected_len, pmdl), {free(ret); return NULL;} ); return ret; } #endif /* DISABLE_SCTP */ -static void free_rcvdata(void * arg) +static void free_rcvdata(void * arg) { struct fd_cnx_rcvdata * data = arg; struct fd_msg_pmdl * pmdl = fd_msg_pmdl_get_inbuf(data->buffer, data->length); @@ -772,21 +790,21 @@ static void * rcvthr_notls_tcp(void * arg) { struct cnxctx * conn = arg; - + TRACE_ENTRY("%p", arg); CHECK_PARAMS_DO(conn && (conn->cc_socket > 0), goto out); - + /* Set the thread name */ { char buf[48]; snprintf(buf, sizeof(buf), "Receiver (%d) TCP/noTLS)", conn->cc_socket); fd_log_threadname ( buf ); } - + ASSERT( conn->cc_proto == IPPROTO_TCP ); ASSERT( ! fd_cnx_teststate(conn, CC_STATUS_TLS ) ); ASSERT( fd_cnx_target_queue(conn) ); - + /* Receive from a TCP connection: we have to rebuild the message boundaries */ do { uint8_t header[4]; @@ -802,7 +820,7 @@ } received += ret; - + if (header[0] != DIAMETER_VERSION) break; /* No need to wait for 4 bytes in this case */ } while (received < sizeof(header)); @@ -833,22 +851,22 @@ } received += ret; } - + fd_hook_call(HOOK_DATA_RECEIVED, NULL, NULL, &rcv_data, pmdl); - + /* We have received a complete message, pass it to the daemon */ - CHECK_FCT_DO( fd_event_send( fd_cnx_target_queue(conn), FDEVP_CNX_MSG_RECV, rcv_data.length, rcv_data.buffer), - { + CHECK_FCT_DO( fd_event_send( fd_cnx_target_queue(conn), FDEVP_CNX_MSG_RECV, rcv_data.length, rcv_data.buffer), + { free_rcvdata(&rcv_data); - goto fatal; + goto fatal; } ); - + } while (conn->cc_loop); - + out: - TRACE_DEBUG(FULL, "Thread terminated"); + TRACE_DEBUG(FULL, "Thread terminated"); return NULL; - + fatal: /* An unrecoverable error occurred, stop the daemon */ CHECK_FCT_DO(fd_core_shutdown(), ); @@ -862,21 +880,21 @@ struct cnxctx * conn = arg; struct fd_cnx_rcvdata rcv_data; int event; - + TRACE_ENTRY("%p", arg); CHECK_PARAMS_DO(conn && (conn->cc_socket > 0), goto fatal); - + /* Set the thread name */ { char buf[48]; snprintf(buf, sizeof(buf), "Receiver (%d) SCTP/noTLS)", conn->cc_socket); fd_log_threadname ( buf ); } - + ASSERT( conn->cc_proto == IPPROTO_SCTP ); ASSERT( ! fd_cnx_teststate(conn, CC_STATUS_TLS ) ); ASSERT( fd_cnx_target_queue(conn) ); - + do { struct fd_msg_pmdl *pmdl=NULL; CHECK_FCT_DO( fd_sctp_recvmeta(conn, NULL, &rcv_data.buffer, &rcv_data.length, &event), goto fatal ); @@ -884,7 +902,7 @@ fd_cnx_markerror(conn); goto out; } - + if (event == FDEVP_CNX_SHUTDOWN) { /* Just ignore the notification for now, we will get another error later anyway */ continue; @@ -895,11 +913,11 @@ fd_hook_call(HOOK_DATA_RECEIVED, NULL, NULL, &rcv_data, pmdl); } CHECK_FCT_DO( fd_event_send( fd_cnx_target_queue(conn), event, rcv_data.length, rcv_data.buffer), goto fatal ); - + } while (conn->cc_loop || (event != FDEVP_CNX_MSG_RECV)); - + out: - TRACE_DEBUG(FULL, "Thread terminated"); + TRACE_DEBUG(FULL, "Thread terminated"); return NULL; fatal: @@ -913,15 +931,15 @@ int fd_cnx_start_clear(struct cnxctx * conn, int loop) { TRACE_ENTRY("%p %i", conn, loop); - + CHECK_PARAMS( conn && fd_cnx_target_queue(conn) && (!fd_cnx_teststate(conn, CC_STATUS_TLS)) && (!conn->cc_loop)); - + /* Release resources in case of a previous call was already made */ CHECK_FCT_DO( fd_thr_term(&conn->cc_rcvthr), /* continue */); - + /* Save the loop request */ conn->cc_loop = loop; - + switch (conn->cc_proto) { case IPPROTO_TCP: /* Start the tcp_notls thread */ @@ -938,7 +956,7 @@ ASSERT(0); return ENOTSUP; } - + return 0; } @@ -949,11 +967,11 @@ static ssize_t fd_tls_recv_handle_error(struct cnxctx * conn, gnutls_session_t session, void * data, size_t sz) { ssize_t ret; -again: - CHECK_GNUTLS_DO( ret = gnutls_record_recv(session, data, sz), +again: + CHECK_GNUTLS_DO( ret = gnutls_record_recv(session, data, sz), { switch (ret) { - case GNUTLS_E_REHANDSHAKE: + case GNUTLS_E_REHANDSHAKE: if (!fd_cnx_teststate(conn, CC_STATUS_CLOSING)) { CHECK_GNUTLS_DO( ret = gnutls_handshake(session), { @@ -975,7 +993,7 @@ /* The connection is closed */ TRACE_DEBUG(FULL, "Got 0 size while reading the socket, probably connection closed..."); break; - + default: if (gnutls_error_is_fatal (ret) == 0) { LOG_N("Ignoring non-fatal GNU TLS error: %s", gnutls_strerror (ret)); @@ -984,11 +1002,11 @@ LOG_E("Fatal GNUTLS error: %s", gnutls_strerror (ret)); } } ); - + if (ret == 0) CHECK_GNUTLS_DO( gnutls_bye(session, GNUTLS_SHUT_RDWR), ); - -end: + +end: if (ret <= 0) fd_cnx_markerror(conn); return ret; @@ -1000,12 +1018,12 @@ ssize_t ret; struct timespec ts, now; CHECK_SYS_DO( clock_gettime(CLOCK_REALTIME, &ts), return -1 ); -again: +again: CHECK_GNUTLS_DO( ret = gnutls_record_send(session, data, sz), { pthread_testcancel(); switch (ret) { - case GNUTLS_E_REHANDSHAKE: + case GNUTLS_E_REHANDSHAKE: if (!fd_cnx_teststate(conn, CC_STATUS_CLOSING)) { CHECK_GNUTLS_DO( ret = gnutls_handshake(session), { @@ -1034,10 +1052,10 @@ LOG_E("Fatal GNUTLS error: %s", gnutls_strerror (ret)); } } ); -end: +end: if (ret <= 0) fd_cnx_markerror(conn); - + return ret; } @@ -1045,8 +1063,8 @@ /* The function that receives TLS data and re-builds a Diameter message -- it exits only on error or cancelation */ /* For the case of DTLS, since we are not using SCTP_UNORDERED, the messages over a single stream are ordered. Furthermore, as long as messages are shorter than the MTU [2^14 = 16384 bytes], they are delivered in a single - record, as far as I understand. - For larger messages, however, it is possible that pieces of messages coming from different streams can get interleaved. + record, as far as I understand. + For larger messages, however, it is possible that pieces of messages coming from different streams can get interleaved. As a result, we do not use the following function for DTLS reception, because we use the sequence number to rebuild the messages. */ int fd_tls_rcvthr_core(struct cnxctx * conn, gnutls_session_t session) @@ -1095,19 +1113,19 @@ } received += ret; } - + fd_hook_call(HOOK_DATA_RECEIVED, NULL, NULL, &rcv_data, pmdl); - + /* We have received a complete message, pass it to the daemon */ - CHECK_FCT_DO( ret = fd_event_send( fd_cnx_target_queue(conn), FDEVP_CNX_MSG_RECV, rcv_data.length, rcv_data.buffer), - { + CHECK_FCT_DO( ret = fd_event_send( fd_cnx_target_queue(conn), FDEVP_CNX_MSG_RECV, rcv_data.length, rcv_data.buffer), + { free_rcvdata(&rcv_data); CHECK_FCT_DO(fd_core_shutdown(), ); - return ret; + return ret; } ); - + } while (1); - + out: return (ret == 0) ? 0 : ENOTCONN; } @@ -1116,24 +1134,24 @@ static void * rcvthr_tls_single(void * arg) { struct cnxctx * conn = arg; - + TRACE_ENTRY("%p", arg); CHECK_PARAMS_DO(conn && (conn->cc_socket > 0), return NULL ); - + /* Set the thread name */ { char buf[48]; snprintf(buf, sizeof(buf), "Receiver (%d) TLS/single stream", conn->cc_socket); fd_log_threadname ( buf ); } - + ASSERT( fd_cnx_teststate(conn, CC_STATUS_TLS) ); ASSERT( fd_cnx_target_queue(conn) ); - /* The next function only returns when there is an error on the socket */ + /* The next function only returns when there is an error on the socket */ CHECK_FCT_DO(fd_tls_rcvthr_core(conn, conn->cc_tls_para.session), /* continue */); - TRACE_DEBUG(FULL, "Thread terminated"); + TRACE_DEBUG(FULL, "Thread terminated"); return NULL; } @@ -1151,7 +1169,7 @@ /* Set the algorithm suite */ if (priority) { const char * errorpos; - CHECK_GNUTLS_DO( gnutls_priority_set_direct( *session, priority, &errorpos ), + CHECK_GNUTLS_DO( gnutls_priority_set_direct( *session, priority, &errorpos ), { TRACE_DEBUG(INFO, "Error in priority string '%s' at position: '%s'", priority, errorpos); return EINVAL; } ); } else { CHECK_GNUTLS_DO( gnutls_priority_set( *session, fd_g_config->cnf_sec_data.prio_cache ), return EINVAL ); @@ -1164,7 +1182,7 @@ if (mode == GNUTLS_SERVER) { gnutls_certificate_server_set_request (*session, GNUTLS_CERT_REQUIRE); } - + return 0; } @@ -1179,17 +1197,17 @@ unsigned int cert_list_size; gnutls_x509_crt_t cert; time_t now; - + TRACE_ENTRY("%p %d", conn, verbose); CHECK_PARAMS(conn); - + /* Trace the session information -- http://www.gnu.org/software/gnutls/manual/gnutls.html#Obtaining-session-information */ #ifdef DEBUG if (verbose) { const char *tmp; gnutls_kx_algorithm_t kx; gnutls_credentials_type_t cred; - + LOG_D("TLS Session information for connection '%s':", conn->cc_id); /* print the key exchange's algorithm name */ @@ -1229,7 +1247,7 @@ gnutls_dh_get_prime_bits (session)); } break; -#ifdef ENABLE_SRP +#ifdef ENABLE_SRP case GNUTLS_CRD_SRP: LOG_D("\t - SRP session with username %s", gnutls_srp_server_get_username (session)); @@ -1263,7 +1281,7 @@ LOG_D("\t - MAC: %s", tmp); } #endif /* DEBUG */ - + /* First, use built-in verification */ CHECK_GNUTLS_DO( gnutls_certificate_verify_peers2 (session, >ret), return EINVAL ); if (gtret) { @@ -1280,33 +1298,33 @@ LOG_E(" - The certificate signature uses a weak algorithm."); return EINVAL; } - + /* Code from http://www.gnu.org/software/gnutls/manual/gnutls.html#Verifying-peer_0027s-certificate */ if (gnutls_certificate_type_get (session) != GNUTLS_CRT_X509) { LOG_E("TLS: Remote peer did not present a certificate, other mechanisms are not supported yet. socket %d (Remote: '%s')(Connection: '%s') :", conn->cc_socket, conn->cc_remid, conn->cc_id); return EINVAL; } - + GNUTLS_TRACE( cert_list = gnutls_certificate_get_peers (session, &cert_list_size) ); if (cert_list == NULL) return EINVAL; - + now = time(NULL); - + #ifdef DEBUG char serial[40]; char dn[128]; size_t size; unsigned int algo, bits; time_t expiration_time, activation_time; - + LOG_D("TLS Certificate information for connection '%s' (%d certs provided):", conn->cc_id, cert_list_size); for (i = 0; i < cert_list_size; i++) { CHECK_GNUTLS_DO( gnutls_x509_crt_init (&cert), return EINVAL); CHECK_GNUTLS_DO( gnutls_x509_crt_import (cert, &cert_list[i], GNUTLS_X509_FMT_DER), return EINVAL); - + LOG_A(" Certificate %d info:", i); GNUTLS_TRACE( expiration_time = gnutls_x509_crt_get_expiration_time (cert) ); @@ -1318,7 +1336,7 @@ /* Print the serial number of the certificate. */ size = sizeof (serial); gnutls_x509_crt_get_serial (cert, serial, &size); - + { int j; char buf[1024]; @@ -1354,24 +1372,24 @@ for (i = 0; i < cert_list_size; i++) { time_t deadline; - + CHECK_GNUTLS_DO( gnutls_x509_crt_init (&cert), return EINVAL); CHECK_GNUTLS_DO( gnutls_x509_crt_import (cert, &cert_list[i], GNUTLS_X509_FMT_DER), return EINVAL); - + GNUTLS_TRACE( deadline = gnutls_x509_crt_get_expiration_time(cert) ); if ((deadline != (time_t)-1) && (deadline < now)) { LOG_E("TLS: Remote certificate invalid on socket %d (Remote: '%s')(Connection: '%s') :", conn->cc_socket, conn->cc_remid, conn->cc_id); LOG_E(" - The certificate %d in the chain is expired", i); ret = EINVAL; } - + GNUTLS_TRACE( deadline = gnutls_x509_crt_get_activation_time(cert) ); if ((deadline != (time_t)-1) && (deadline > now)) { LOG_E("TLS: Remote certificate invalid on socket %d (Remote: '%s')(Connection: '%s') :", conn->cc_socket, conn->cc_remid, conn->cc_id); LOG_E(" - The certificate %d in the chain is not yet activated", i); ret = EINVAL; } - + if ((i == 0) && (conn->cc_tls_para.cn)) { if (!gnutls_x509_crt_check_hostname (cert, conn->cc_tls_para.cn)) { LOG_E("TLS: Remote certificate invalid on socket %d (Remote: '%s')(Connection: '%s') :", conn->cc_socket, conn->cc_remid, conn->cc_id); @@ -1379,7 +1397,7 @@ ret = EINVAL; } } - + GNUTLS_TRACE( gnutls_x509_crt_deinit (cert) ); } @@ -1400,10 +1418,10 @@ int hostname_verified = 0; TRACE_ENTRY("%p", session); - + /* get the associated connection */ conn = gnutls_session_get_ptr (session); - + /* Trace the session information -- http://www.gnu.org/software/gnutls/manual/gnutls.html#Obtaining-session-information */ #ifdef DEBUG const char *tmp; @@ -1414,7 +1432,7 @@ dhe = ecdh = 0; LOG_A("TLS Session information for connection '%s':", conn->cc_id); - + /* print the key exchange's algorithm name */ GNUTLS_TRACE( kx = gnutls_kx_get (session) ); @@ -1474,7 +1492,7 @@ dhe = 1; else if (kx == GNUTLS_KX_ECDHE_RSA || kx == GNUTLS_KX_ECDHE_ECDSA) ecdh = 1; - + /* Now print some info on the remote certificate */ if (gnutls_certificate_type_get (session) == GNUTLS_CRT_X509) { gnutls_datum_t cinfo; @@ -1504,7 +1522,7 @@ LOG_D("\t\t%s", cinfo.data); gnutls_free (cinfo.data); } - + if (conn->cc_tls_para.cn) { if (!gnutls_x509_crt_check_hostname (cert, conn->cc_tls_para.cn)) { LOG_E("\tTLS: Remote certificate invalid on socket %d (Remote: '%s')(Connection: '%s') :", conn->cc_socket, conn->cc_remid, conn->cc_id); @@ -1512,7 +1530,7 @@ gnutls_x509_crt_deinit (cert); return GNUTLS_E_CERTIFICATE_ERROR; } - + } hostname_verified = 1; @@ -1535,7 +1553,7 @@ LOG_D("\t - Ephemeral DH using prime of %d bits", gnutls_dh_get_prime_bits (session)); - /* print the protocol's name (ie TLS 1.0) + /* print the protocol's name (ie TLS 1.0) */ tmp = gnutls_protocol_get_name (gnutls_protocol_get_version (session)); LOG_D("\t - Protocol: %s", tmp); @@ -1557,8 +1575,8 @@ */ tmp = gnutls_mac_get_name (gnutls_mac_get (session)); LOG_D("\t - MAC: %s", tmp); - -#endif /* DEBUG */ + +#endif /* DEBUG */ /* This verification function uses the trusted CAs in the credentials * structure. So you must have installed one or more CA certificates. @@ -1577,12 +1595,12 @@ if (status & GNUTLS_CERT_NOT_ACTIVATED) LOG_E(" - The certificate is not yet activated."); - } + } if (status & GNUTLS_CERT_INVALID) { return GNUTLS_E_CERTIFICATE_ERROR; } - + /* Up to here the process is the same for X.509 certificates and * OpenPGP keys. From now on X.509 certificates are assumed. This can * be easily extended to work with openpgp keys as well. @@ -1634,22 +1652,22 @@ int fd_cnx_handshake(struct cnxctx * conn, int mode, int algo, char * priority, void * alt_creds) { int dtls = 0; - + TRACE_ENTRY( "%p %d %d %p %p", conn, mode, algo, priority, alt_creds); CHECK_PARAMS( conn && (!fd_cnx_teststate(conn, CC_STATUS_TLS)) && ( (mode == GNUTLS_CLIENT) || (mode == GNUTLS_SERVER) ) && (!conn->cc_loop) ); /* Save the mode */ conn->cc_tls_para.mode = mode; conn->cc_tls_para.algo = algo; - + /* Cancel receiving thread if any -- it should already be terminated anyway, we just release the resources */ CHECK_FCT_DO( fd_thr_term(&conn->cc_rcvthr), /* continue */); - + /* Once TLS handshake is done, we don't stop after the first message */ conn->cc_loop = 1; - + dtls = fd_cnx_may_dtls(conn); - + /* Prepare the master session credentials and priority */ CHECK_FCT( fd_tls_prepare(&conn->cc_tls_para.session, mode, dtls, priority, alt_creds) ); @@ -1682,32 +1700,32 @@ return ENOTSUP; } } - + /* additional initialization for gnutls 3.x */ #ifdef GNUTLS_VERSION_300 /* the verify function has already been set in the global initialization in config.c */ - + /* fd_tls_verify_credentials_2 uses the connection */ gnutls_session_set_ptr (conn->cc_tls_para.session, (void *) conn); - + if ((conn->cc_tls_para.cn != NULL) && (mode == GNUTLS_CLIENT)) { /* this might allow virtual hosting on the remote peer */ CHECK_GNUTLS_DO( gnutls_server_name_set (conn->cc_tls_para.session, GNUTLS_NAME_DNS, conn->cc_tls_para.cn, strlen(conn->cc_tls_para.cn)), /* ignore failure */); } - + #endif /* GNUTLS_VERSION_300 */ #ifdef GNUTLS_VERSION_310 GNUTLS_TRACE( gnutls_handshake_set_timeout( conn->cc_tls_para.session, GNUTLS_DEFAULT_HANDSHAKE_TIMEOUT)); #endif /* GNUTLS_VERSION_310 */ - + /* Mark the connection as protected from here, so that the gnutls credentials will be freed */ fd_cnx_addstate(conn, CC_STATUS_TLS); - + /* Handshake master session */ { int ret; - + CHECK_GNUTLS_DO( ret = gnutls_handshake(conn->cc_tls_para.session), { if (TRACE_BOOL(INFO)) { @@ -1719,15 +1737,15 @@ #ifndef GNUTLS_VERSION_300 /* Now verify the remote credentials are valid -- only simple tests here */ - CHECK_FCT_DO( fd_tls_verify_credentials(conn->cc_tls_para.session, conn, 1), - { + CHECK_FCT_DO( fd_tls_verify_credentials(conn->cc_tls_para.session, conn, 1), + { CHECK_GNUTLS_DO( gnutls_bye(conn->cc_tls_para.session, GNUTLS_SHUT_RDWR), ); fd_cnx_markerror(conn); return EINVAL; }); #endif /* GNUTLS_VERSION_300 */ } - + /* Multi-stream TLS: handshake other streams as well */ if ((!dtls) && (conn->cc_sctp_para.pairs > 1)) { #ifndef DISABLE_SCTP @@ -1750,7 +1768,7 @@ return ENOTSUP; } } - + return 0; } @@ -1759,10 +1777,10 @@ { TRACE_ENTRY("%p %p %p", conn, cert_list, cert_list_size); CHECK_PARAMS( conn && fd_cnx_teststate(conn, CC_STATUS_TLS) && cert_list && cert_list_size ); - + /* This function only works for X.509 certificates. */ CHECK_PARAMS( gnutls_certificate_type_get (conn->cc_tls_para.session) == GNUTLS_CRT_X509 ); - + GNUTLS_TRACE( *cert_list = gnutls_certificate_get_peers (conn->cc_tls_para.session, cert_list_size) ); if (*cert_list == NULL) { TRACE_DEBUG(INFO, "No certificate was provided by remote peer / an error occurred."); @@ -1770,7 +1788,7 @@ } TRACE_DEBUG( FULL, "Saved certificate chain (%d certificates) in peer structure.", *cert_list_size); - + return 0; } @@ -1781,7 +1799,7 @@ int ev; size_t ev_sz; void * ev_data; - + TRACE_ENTRY("%p %p %p %p", conn, timeout, buf, len); CHECK_PARAMS(conn && (conn->cc_socket > 0) && buf && len); CHECK_PARAMS(conn->cc_rcvthr != (pthread_t)NULL); @@ -1794,27 +1812,27 @@ } else { CHECK_FCT( fd_event_get(conn->cc_incoming, &ev, &ev_sz, &ev_data) ); } - + switch (ev) { case FDEVP_CNX_MSG_RECV: /* We got one */ *len = ev_sz; *buf = ev_data; return 0; - + case FDEVP_PSM_TIMEOUT: TRACE_DEBUG(FULL, "Timeout event received"); return ETIMEDOUT; - + case FDEVP_CNX_EP_CHANGE: /* We ignore this event */ goto get_next; - + case FDEVP_CNX_ERROR: TRACE_DEBUG(FULL, "Received ERROR event on the connection"); return ENOTCONN; } - + TRACE_DEBUG(INFO, "Received unexpected event %d (%s)", ev, fd_pev_str(ev)); return EINVAL; } @@ -1835,12 +1853,12 @@ int ret; TRACE_ENTRY( "%p %p", conn, alt_fifo ); CHECK_PARAMS( conn && alt_fifo && conn->cc_incoming ); - + /* The magic function does it all */ CHECK_POSIX_DO( pthread_mutex_lock(&state_lock), { ASSERT(0); } ); CHECK_FCT_DO( ret = fd_fifo_move( conn->cc_incoming, alt_fifo, &conn->cc_alt ), ); CHECK_POSIX_DO( pthread_mutex_unlock(&state_lock), { ASSERT(0); } ); - + return ret; } @@ -1861,7 +1879,7 @@ } if (ret <= 0) return ENOTCONN; - + sent += ret; } while ( sent < len ); return 0; @@ -1871,16 +1889,16 @@ int fd_cnx_send(struct cnxctx * conn, unsigned char * buf, size_t len) { TRACE_ENTRY("%p %p %zd", conn, buf, len); - + CHECK_PARAMS(conn && (conn->cc_socket > 0) && (! fd_cnx_teststate(conn, CC_STATUS_ERROR)) && buf && len); TRACE_DEBUG(FULL, "Sending %zdb %sdata on connection %s", len, fd_cnx_teststate(conn, CC_STATUS_TLS) ? "TLS-protected ":"", conn->cc_id); - + switch (conn->cc_proto) { case IPPROTO_TCP: CHECK_FCT( send_simple(conn, buf, len) ); break; - + #ifndef DISABLE_SCTP case IPPROTO_SCTP: { int dtls = fd_cnx_uses_dtls(conn); @@ -1892,14 +1910,14 @@ limit = conn->cc_sctp_para.pairs; else limit = conn->cc_sctp_para.str_out; - + if (limit > 1) { conn->cc_sctp_para.next += 1; conn->cc_sctp_para.next %= limit; stream = conn->cc_sctp_para.next; } } - + if (stream == 0) { /* We can use default function, it sends over stream #0 */ CHECK_FCT( send_simple(conn, buf, len) ); @@ -1908,7 +1926,7 @@ struct iovec iov; iov.iov_base = buf; iov.iov_len = len; - + CHECK_SYS_DO( fd_sctp_sendstrv(conn, stream, &iov, 1), { fd_cnx_markerror(conn); return ENOTCONN; } ); } else { /* push the data to the appropriate session */ @@ -1932,13 +1950,13 @@ } break; #endif /* DISABLE_SCTP */ - + default: TRACE_DEBUG(INFO, "Unknown protocol: %d", conn->cc_proto); ASSERT(0); return ENOTSUP; /* or EINVAL... */ } - + return 0; } @@ -1951,11 +1969,11 @@ void fd_cnx_destroy(struct cnxctx * conn) { TRACE_ENTRY("%p", conn); - + CHECK_PARAMS_DO(conn, return); - + fd_cnx_addstate(conn, CC_STATUS_CLOSING); - + /* Initiate shutdown of the TLS session(s): call gnutls_bye(WR), then read until error */ if (fd_cnx_teststate(conn, CC_STATUS_TLS)) { #ifndef DISABLE_SCTP @@ -1985,7 +2003,7 @@ GNUTLS_TRACE( gnutls_deinit(conn->cc_tls_para.session) ); conn->cc_tls_para.session = NULL; } - + /* Destroy the wrapper (also stops the demux thread) */ fd_sctp3436_destroy(conn); @@ -2007,7 +2025,7 @@ /* Cancel the receiver thread in case it did not already terminate */ CHECK_FCT_DO( fd_thr_term(&conn->cc_rcvthr), /* continue */ ); } - + /* Free the resources of the TLS session */ if (conn->cc_tls_para.session) { GNUTLS_TRACE( gnutls_deinit(conn->cc_tls_para.session) ); @@ -2017,25 +2035,25 @@ } #endif /* DISABLE_SCTP */ } - + /* Terminate the thread in case it is not done yet -- is there any such case left ?*/ CHECK_FCT_DO( fd_thr_term(&conn->cc_rcvthr), /* continue */ ); - + /* Shut the connection down */ if (conn->cc_socket > 0) { shutdown(conn->cc_socket, SHUT_RDWR); close(conn->cc_socket); conn->cc_socket = -1; } - + /* Empty and destroy FIFO list */ if (conn->cc_incoming) { fd_event_destroy( &conn->cc_incoming, free ); } - + /* Free the object */ free(conn); - + /* Done! */ return; } diff -r 6a35c5470ef4 -r 19ab8ac08a36 libfdcore/cnxctx.h --- a/libfdcore/cnxctx.h Tue Jul 07 01:24:48 2020 +0800 +++ b/libfdcore/cnxctx.h Tue Jul 07 01:41:54 2020 +0800 @@ -43,14 +43,14 @@ /* The connection context structure */ struct cnxctx { - char cc_id[60]; /* The name of this connection. the first 5 chars are reserved for flags display (cc_state). */ + char cc_id[100]; /* The name of this connection. the first 5 chars are reserved for flags display (cc_state). */ char cc_remid[60]; /* Id of remote peer */ - + int cc_socket; /* The socket object of the connection -- <=0 if no socket is created */ int cc_family; /* AF_INET or AF_INET6 (mixed) */ int cc_proto; /* IPPROTO_TCP or IPPROTO_SCTP */ - + uint32_t cc_state; /* True if the object is being destroyed: we don't send events anymore. access with fd_cnx_getstate() */ #define CC_STATUS_CLOSING 1 #define CC_STATUS_ERROR 2 @@ -59,7 +59,7 @@ pthread_t cc_rcvthr; /* thread for receiving messages on the connection */ int cc_loop; /* tell the thread if it loops or stops after the first message is received */ - + struct fifo * cc_incoming; /* FIFO queue of events received on the connection, FDEVP_CNX_* */ struct fifo * cc_alt; /* alternate fifo to send FDEVP_CNX_* events to. */ @@ -117,7 +117,7 @@ /* SCTP */ int fd_sctp_create_bind_server( int * sock, int family, struct fd_list * list, uint16_t port ); int fd_sctp_listen( int sock ); -int fd_sctp_client( int *sock, int no_ip6, uint16_t port, struct fd_list * list ); +int fd_sctp_client( int *sock, int no_ip6, uint16_t port, struct fd_list * list, struct fd_list * src_list ); int fd_sctp_get_local_ep(int sock, struct fd_list * list); int fd_sctp_get_remote_ep(int sock, struct fd_list * list); int fd_sctp_get_str_info( int sock, uint16_t *in, uint16_t *out, sSS *primary ); diff -r 6a35c5470ef4 -r 19ab8ac08a36 libfdcore/config.c --- a/libfdcore/config.c Tue Jul 07 01:24:48 2020 +0800 +++ b/libfdcore/config.c Tue Jul 07 01:41:54 2020 +0800 @@ -107,17 +107,18 @@ CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, " Number of SCTP streams . : %hu\n", fd_g_config->cnf_sctp_str), return NULL); CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, " Number of clients thr .. : %d\n", fd_g_config->cnf_thr_srv), return NULL); CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, " Number of app threads .. : %hu\n", fd_g_config->cnf_dispthr), return NULL); - CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, " Minimal processing peers : %hu\n", fd_g_config->cnf_processing_peers_minimum), return NULL); + CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, " Minimal processing peers : %d\n", fd_g_config->cnf_processing_peers_minimum), return NULL); CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, " Number of rtin threads . : %hu\n", fd_g_config->cnf_rtinthr), return NULL); CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, " Number of rtout threads : %hu\n", fd_g_config->cnf_rtoutthr), return NULL); - CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, " Incoming queue limit : %hu\n", fd_g_config->cnf_qin_limit), return NULL); - CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, " Outgoing queue limit : %hu\n", fd_g_config->cnf_qout_limit), return NULL); - CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, " Local queue limit : %hu\n", fd_g_config->cnf_qlocal_limit), return NULL); + CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, " Incoming queue limit : %d\n", fd_g_config->cnf_qin_limit), return NULL); + CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, " Outgoing queue limit : %d\n", fd_g_config->cnf_qout_limit), return NULL); + CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, " Local queue limit : %d\n", fd_g_config->cnf_qlocal_limit), return NULL); if (FD_IS_LIST_EMPTY(&fd_g_config->cnf_endpoints)) { CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, " Local endpoints ........ : Default (use all available)\n"), return NULL); } else { CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, " Local endpoints ........ : "), return NULL); CHECK_MALLOC_DO( fd_ep_dump( FD_DUMP_STD_PARAMS, 0, 0, &fd_g_config->cnf_endpoints ), return NULL); + CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, "\n"), return NULL); } if (FD_IS_LIST_EMPTY(&fd_g_config->cnf_apps)) { CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, " Local applications ..... : (none)"), return NULL); @@ -146,6 +147,7 @@ #endif /* DISABLE_SCTP */ CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, " - Pref. proto .. : %s\n", fd_g_config->cnf_flags.pr_tcp ? "TCP" : "SCTP"), return NULL); CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, " - TLS method ... : %s\n", fd_g_config->cnf_flags.tls_alg ? "INBAND" : "Separate port"), return NULL); + CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, " - Client bind .. : %s\n", fd_g_config->cnf_flags.no_bind ? "DISABLED" : "Enabled"), return NULL); CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, " TLS : - Certificate .. : %s\n", fd_g_config->cnf_sec_data.cert_file ?: "(NONE)"), return NULL); CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, " - Private key .. : %s\n", fd_g_config->cnf_sec_data.key_file ?: "(NONE)"), return NULL); @@ -350,7 +352,8 @@ } /* Validate local endpoints */ - if ((!FD_IS_LIST_EMPTY(&fd_g_config->cnf_endpoints)) && (fd_g_config->cnf_flags.no_ip4 || fd_g_config->cnf_flags.no_ip6)) { + fd_g_config->cnf_flags.no_bind = FD_IS_LIST_EMPTY(&fd_g_config->cnf_endpoints); + if ((!fd_g_config->cnf_flags.no_bind) && (fd_g_config->cnf_flags.no_ip4 || fd_g_config->cnf_flags.no_ip6)) { struct fd_list * li; for ( li = fd_g_config->cnf_endpoints.next; li != &fd_g_config->cnf_endpoints; li = li->next) { struct fd_endpoint * ep = (struct fd_endpoint *)li; diff -r 6a35c5470ef4 -r 19ab8ac08a36 libfdcore/dict_base_proto.c --- a/libfdcore/dict_base_proto.c Tue Jul 07 01:24:48 2020 +0800 +++ b/libfdcore/dict_base_proto.c Tue Jul 07 01:41:54 2020 +0800 @@ -1582,38 +1582,7 @@ }; CHECK_dict_new( DICT_AVP, &data , NULL, NULL); } - - /* Experimental-Result */ - { - /* - The Experimental-Result AVP (AVP Code 297) is of type Grouped, and - indicates whether a particular vendor-specific request was completed - successfully or whether an error occurred. Its Data field has the - following ABNF grammar: - AVP Format - - Experimental-Result ::= < AVP Header: 297 > - { Vendor-Id } - { Experimental-Result-Code } - - The Vendor-Id AVP (see Section 5.3.3) in this grouped AVP identifies - the vendor responsible for the assignment of the result code which - follows. All Diameter answer messages defined in vendor-specific - applications MUST include either one Result-Code AVP or one - Experimental-Result AVP. - */ - struct dict_avp_data data = { - 297, /* Code */ - 0, /* Vendor */ - "Experimental-Result", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ - AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_GROUPED /* base type of data */ - }; - CHECK_dict_new( DICT_AVP, &data , NULL, NULL); - } - /* Experimental-Result-Code */ { /* @@ -1629,21 +1598,58 @@ /* Although the RFC does not specify an "Enumerated" type here, we go forward and create one. * This is the reason for the "*" in the type name. Vendors will have to define their values. */ - struct dict_object * type; - struct dict_type_data tdata = { AVP_TYPE_UNSIGNED32, "Enumerated(Experimental-Result-Code)" , NULL, NULL, NULL }; - struct dict_avp_data data = { - 298, /* Code */ - 0, /* Vendor */ - "Experimental-Result-Code", /* Name */ - AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ + struct dict_object * type; + struct dict_type_data tdata = { AVP_TYPE_UNSIGNED32, "Enumerated(Experimental-Result-Code)" , NULL, NULL, NULL }; + struct dict_avp_data data = { + 298, /* Code */ + 0, /* Vendor */ + "Experimental-Result-Code", /* Name */ + AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ AVP_FLAG_MANDATORY, /* Fixed flag values */ - AVP_TYPE_UNSIGNED32 /* base type of data */ + AVP_TYPE_UNSIGNED32 /* base type of data */ }; - + CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type); CHECK_dict_new( DICT_AVP, &data , type, NULL); } - + + /* Experimental-Result */ + { + /* + The Experimental-Result AVP (AVP Code 297) is of type Grouped, and + indicates whether a particular vendor-specific request was completed + successfully or whether an error occurred. Its Data field has the + following ABNF grammar: + + AVP Format + + Experimental-Result ::= < AVP Header: 297 > + { Vendor-Id } + { Experimental-Result-Code } + + The Vendor-Id AVP (see Section 5.3.3) in this grouped AVP identifies + the vendor responsible for the assignment of the result code which + follows. All Diameter answer messages defined in vendor-specific + applications MUST include either one Result-Code AVP or one + Experimental-Result AVP. + */ + struct dict_object * avp = NULL; + struct dict_avp_data data = { + 297, /* Code */ + 0, /* Vendor */ + "Experimental-Result", /* 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[] = { + { "Vendor-Id", RULE_REQUIRED, -1, 1 }, + { "Experimental-Result-Code", RULE_REQUIRED, -1, 1 }, + }; + CHECK_dict_new( DICT_AVP, &data , NULL, &avp); + PARSE_loc_rules( rules, avp ); + } + /* Auth-Request-Type */ { /* diff -r 6a35c5470ef4 -r 19ab8ac08a36 libfdcore/fdcore-internal.h --- a/libfdcore/fdcore-internal.h Tue Jul 07 01:24:48 2020 +0800 +++ b/libfdcore/fdcore-internal.h Tue Jul 07 01:41:54 2020 +0800 @@ -342,7 +342,7 @@ int fd_cnx_serv_listen(struct cnxctx * conn); struct cnxctx * fd_cnx_serv_accept(struct cnxctx * serv); struct cnxctx * fd_cnx_cli_connect_tcp(sSA * sa, socklen_t addrlen); -struct cnxctx * fd_cnx_cli_connect_sctp(int no_ip6, uint16_t port, struct fd_list * list); +struct cnxctx * fd_cnx_cli_connect_sctp(int no_ip6, uint16_t port, struct fd_list * list, struct fd_list * src_list); int fd_cnx_start_clear(struct cnxctx * conn, int loop); void fd_cnx_sethostname(struct cnxctx * conn, DiamId_t hn); int fd_cnx_proto_info(struct cnxctx * conn, char * buf, size_t len); diff -r 6a35c5470ef4 -r 19ab8ac08a36 libfdcore/hooks.c --- a/libfdcore/hooks.c Tue Jul 07 01:24:48 2020 +0800 +++ b/libfdcore/hooks.c Tue Jul 07 01:41:54 2020 +0800 @@ -332,7 +332,9 @@ /* There was no registered handler, default behavior for this hook */ switch (type) { case HOOK_DATA_RECEIVED: { +#ifdef DEBUG struct fd_cnx_rcvdata *rcv_data = other; +#endif LOG_A("RCV: %zd bytes", rcv_data->length); break; } diff -r 6a35c5470ef4 -r 19ab8ac08a36 libfdcore/messages.c --- a/libfdcore/messages.c Tue Jul 07 01:24:48 2020 +0800 +++ b/libfdcore/messages.c Tue Jul 07 01:41:54 2020 +0800 @@ -42,6 +42,9 @@ static struct dict_object * dict_avp_ERH = NULL; /* Error-Reporting-Host */ static struct dict_object * dict_avp_FAVP= NULL; /* Failed-AVP */ static struct dict_object * dict_avp_RC = NULL; /* Result-Code */ +static struct dict_object * dict_avp_ER = NULL; /* Experimental-Result */ +static struct dict_object * dict_avp_VI = NULL; /* Vendor-Id */ +static struct dict_object * dict_avp_ERC = NULL; /* Experimental-Result-Code */ struct dict_object * fd_dict_avp_OSI = NULL; /* Origin-State-Id */ struct dict_object * fd_dict_cmd_CER = NULL; /* Capabilities-Exchange-Request */ struct dict_object * fd_dict_cmd_DWR = NULL; /* Device-Watchdog-Request */ @@ -63,6 +66,9 @@ CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Error-Message", &dict_avp_EM , ENOENT) ); CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Error-Reporting-Host", &dict_avp_ERH , ENOENT) ); CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Failed-AVP", &dict_avp_FAVP, ENOENT) ); + CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Experimental-Result", &dict_avp_ER, ENOENT) ); + CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Vendor-Id", &dict_avp_VI, ENOENT) ); + CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Experimental-Result-Code", &dict_avp_ERC, ENOENT) ); CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Disconnect-Cause", &fd_dict_avp_DC , ENOENT) ); @@ -166,30 +172,26 @@ } -/* Add Result-Code and eventually Failed-AVP, Error-Message and Error-Reporting-Host AVPs */ -int fd_msg_rescode_set( struct msg * msg, char * rescode, char * errormsg, struct avp * optavp, int type_id ) +/* Add Result-Code or Experimental-Result, and eventually Failed-AVP, Error-Message and Error-Reporting-Host AVPs */ +int fd_msg_add_result( struct msg * msg, vendor_id_t vendor, struct dict_object * restype, char * rescode, char * errormsg, struct avp * optavp, int type_id ) { union avp_value val; - struct avp * avp_RC = NULL; - struct avp * avp_EM = NULL; - struct avp * avp_ERH = NULL; - struct avp * avp_FAVP= NULL; uint32_t rc_val = 0; int set_e_bit=0; int std_err_msg=0; - TRACE_ENTRY("%p %s %p %p %d", msg, rescode, errormsg, optavp, type_id); + TRACE_ENTRY("%p %d %p %s %p %p %d", msg, vendor, restype, rescode, errormsg, optavp, type_id); - CHECK_PARAMS( msg && rescode ); + CHECK_PARAMS( msg && restype && rescode ); /* Find the enum value corresponding to the rescode string, this will give the class of error */ { struct dict_object * enum_obj = NULL; + + /* Search in the restype */ struct dict_enumval_request req; memset(&req, 0, sizeof(struct dict_enumval_request)); - - /* First, get the enumerated type of the Result-Code AVP (this is fast, no need to cache the object) */ - CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_TYPE, TYPE_OF_AVP, dict_avp_RC, &(req.type_obj), ENOENT ) ); + req.type_obj = restype; /* Now search for the value given as parameter */ req.search.enum_name = rescode; @@ -207,20 +209,58 @@ CHECK_FCT( fd_msg_add_origin ( msg, 0 ) ); } - /* Create the Result-Code AVP */ - CHECK_FCT( fd_msg_avp_new( dict_avp_RC, 0, &avp_RC ) ); + if (vendor == 0) { + /* Vendor 0; create the Result-Code AVP */ + struct avp * avp_RC = NULL; + CHECK_FCT( fd_msg_avp_new( dict_avp_RC, 0, &avp_RC ) ); + + /* Set its value */ + memset(&val, 0, sizeof(val)); + val.u32 = rc_val; + CHECK_FCT( fd_msg_avp_setvalue( avp_RC, &val ) ); + + /* Add it to the message */ + CHECK_FCT( fd_msg_avp_add( msg, MSG_BRW_LAST_CHILD, avp_RC ) ); + } else { + /* Vendor !0; create the Experimental-Result AVP */ + struct avp * avp_ER = NULL; + CHECK_FCT( fd_msg_avp_new( dict_avp_ER, 0, &avp_ER ) ); + + /* Create the Vendor-Id AVP and add to Experimental-Result */ + { + struct avp * avp_VI = NULL; + CHECK_FCT( fd_msg_avp_new( dict_avp_VI, 0, &avp_VI ) ); - /* Set its value */ - memset(&val, 0, sizeof(val)); - val.u32 = rc_val; - CHECK_FCT( fd_msg_avp_setvalue( avp_RC, &val ) ); + /* Set Vendor-Id value to vendor */ + memset(&val, 0, sizeof(val)); + val.u32 = vendor; + CHECK_FCT( fd_msg_avp_setvalue( avp_VI, &val ) ); + + /* Add it to Experimental-Result */ + CHECK_FCT( fd_msg_avp_add( avp_ER, MSG_BRW_LAST_CHILD, avp_VI ) ); + } - /* Add it to the message */ - CHECK_FCT( fd_msg_avp_add( msg, MSG_BRW_LAST_CHILD, avp_RC ) ); + /* Create the Experimental-Result-Code AVP and add to Experimental-Result */ + { + struct avp * avp_ERC = NULL; + CHECK_FCT( fd_msg_avp_new( dict_avp_ERC, 0, &avp_ERC ) ); + + /* Set Experimental-Result-Code value to rc_val */ + memset(&val, 0, sizeof(val)); + val.u32 = rc_val; + CHECK_FCT( fd_msg_avp_setvalue( avp_ERC, &val ) ); + + /* Add it to Experimental-Result */ + CHECK_FCT( fd_msg_avp_add( avp_ER, MSG_BRW_LAST_CHILD, avp_ERC ) ); + } + + /* Add it to the message */ + CHECK_FCT( fd_msg_avp_add( msg, MSG_BRW_LAST_CHILD, avp_ER ) ); + } if (type_id == 2) { /* Add the Error-Reporting-Host AVP */ - + struct avp * avp_ERH = NULL; CHECK_FCT( fd_msg_avp_new( dict_avp_ERH, 0, &avp_ERH ) ); /* Set its value */ @@ -231,11 +271,11 @@ /* Add it to the message */ CHECK_FCT( fd_msg_avp_add( msg, MSG_BRW_LAST_CHILD, avp_ERH ) ); - } - /* Now add the optavp in a FailedAVP if provided */ + /* Now add the optavp in a Failed-AVP if provided */ if (optavp) { + struct avp * avp_FAVP= NULL; struct avp * optavp_cpy = NULL; struct avp_hdr *opt_hdr, *optcpy_hdr; struct dict_object * opt_model = NULL; @@ -309,7 +349,7 @@ if (std_err_msg || errormsg) { /* Add the Error-Message AVP */ - + struct avp * avp_EM = NULL; CHECK_FCT( fd_msg_avp_new( dict_avp_EM, 0, &avp_EM ) ); /* Set its value */ @@ -331,6 +371,13 @@ return 0; } +int fd_msg_rescode_set( struct msg * msg, char * rescode, char * errormsg, struct avp * optavp, int type_id ) +{ + struct dict_object * restype = NULL; + CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_TYPE, TYPE_OF_AVP, dict_avp_RC, &restype, ENOENT ) ); + return fd_msg_add_result(msg, 0, restype, rescode, errormsg, optavp, type_id); +} + static int fd_msg_send_int( struct msg ** pmsg, void (*anscb)(void *, struct msg **), void * data, void (*expirecb)(void *, DiamId_t, size_t, struct msg **), const struct timespec *timeout ) { struct msg_hdr *hdr; diff -r 6a35c5470ef4 -r 19ab8ac08a36 libfdcore/p_ce.c --- a/libfdcore/p_ce.c Tue Jul 07 01:24:48 2020 +0800 +++ b/libfdcore/p_ce.c Tue Jul 07 01:41:54 2020 +0800 @@ -704,7 +704,7 @@ int fd_p_ce_msgrcv(struct msg ** msg, int req, struct fd_peer * peer) { uint32_t rc = 0; - int st; + int st = STATE_NEW; struct fd_pei pei; TRACE_ENTRY("%p %p", msg, peer); diff -r 6a35c5470ef4 -r 19ab8ac08a36 libfdcore/p_cnx.c --- a/libfdcore/p_cnx.c Tue Jul 07 01:24:48 2020 +0800 +++ b/libfdcore/p_cnx.c Tue Jul 07 01:41:54 2020 +0800 @@ -261,12 +261,14 @@ switch (nc->proto) { case IPPROTO_TCP: +/* TODO: use no_bind and first of cnf_endpoints of nc->ss.sa_family ? */ cnx = fd_cnx_cli_connect_tcp((sSA *)&nc->ss, sSAlen(&nc->ss)); break; #ifndef DISABLE_SCTP case IPPROTO_SCTP: cnx = fd_cnx_cli_connect_sctp((peer->p_hdr.info.config.pic_flags.pro3 == PI_P3_IP) ? 1 : fd_g_config->cnf_flags.no_ip6, - nc->port, &peer->p_hdr.info.pi_endpoints); + nc->port, &peer->p_hdr.info.pi_endpoints, + fd_g_config->cnf_flags.no_bind ? NULL : &fd_g_config->cnf_endpoints); break; #endif /* DISABLE_SCTP */ } diff -r 6a35c5470ef4 -r 19ab8ac08a36 libfdcore/sctp.c --- a/libfdcore/sctp.c Tue Jul 07 01:24:48 2020 +0800 +++ b/libfdcore/sctp.c Tue Jul 07 01:41:54 2020 +0800 @@ -48,7 +48,7 @@ /* #define OLD_SCTP_SOCKET_API */ /* Automatically fallback to old API if some of the new symbols are not defined */ -#if (!defined(SCTP_CONNECTX_4_ARGS) || (!defined(SCTP_RECVRCVINFO)) || (!defined(SCTP_SNDINFO))) +#if (!defined(SCTP_CONNECTX_4_ARGS) || (!defined(SCTP_RECVRCVINFO)) || (!defined(SCTP_SNDINFO)) || (!defined(SCTP_SEND_FAILED_EVENT))) # define OLD_SCTP_SOCKET_API #endif @@ -58,6 +58,34 @@ #define ADJUST_RTX_PARAMS #endif /* USE_DEFAULT_SCTP_RTX_PARAMS */ + +DECLARE_FD_DUMP_PROTOTYPE(fd_sa_dump_array, sSA * saddrs, int saddrs_count) +{ + union { + sSA *sa; + uint8_t *buf; + } ptr; + int i; + int salen; + + FD_DUMP_HANDLE_OFFSET(); + + ptr.sa = saddrs; + for (i = 0; i < saddrs_count; i++) { + salen = sSAlen(ptr.sa); + if (salen == 0) { + LOG_E("fd_sa_dump_array: Unknown sockaddr family"); + break; + } + if (i > 0) { + CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, " "), return NULL); + } + CHECK_MALLOC_DO( fd_sa_dump( FD_DUMP_STD_PARAMS, ptr.sa, NI_NUMERICHOST | NI_NUMERICSERV), return NULL); + ptr.buf += salen; + } + return *buf; +} + /* Pre-binding socket options -- # streams read in config */ static int fd_setsockopt_prebind(int sk) { @@ -82,7 +110,7 @@ if (TRACE_BOOL(ANNOYING)) { sz = sizeof(rtoinfo); /* Read socket defaults */ - CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_RTOINFO, &rtoinfo, &sz) ); + CHECK_SYS( sctp_opt_info(sk, 0, SCTP_RTOINFO, &rtoinfo, &sz) ); if (sz != sizeof(rtoinfo)) { TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(rtoinfo)); @@ -102,7 +130,7 @@ if (TRACE_BOOL(ANNOYING)) { /* Check new values */ - CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_RTOINFO, &rtoinfo, &sz) ); + CHECK_SYS( sctp_opt_info(sk, 0, SCTP_RTOINFO, &rtoinfo, &sz) ); fd_log_debug( "New SCTP_RTOINFO : srto_initial : %u", rtoinfo.srto_initial); fd_log_debug( " srto_max : %u", rtoinfo.srto_max); fd_log_debug( " srto_min : %u", rtoinfo.srto_min); @@ -121,7 +149,7 @@ if (TRACE_BOOL(ANNOYING)) { sz = sizeof(assoc); /* Read socket defaults */ - CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_ASSOCINFO, &assoc, &sz) ); + CHECK_SYS( sctp_opt_info(sk, 0, SCTP_ASSOCINFO, &assoc, &sz) ); if (sz != sizeof(assoc)) { TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(assoc)); @@ -142,7 +170,7 @@ if (TRACE_BOOL(ANNOYING)) { /* Check new values */ - CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_ASSOCINFO, &assoc, &sz) ); + CHECK_SYS( sctp_opt_info(sk, 0, SCTP_ASSOCINFO, &assoc, &sz) ); fd_log_debug( "New SCTP_ASSOCINFO : sasoc_asocmaxrxt : %hu", assoc.sasoc_asocmaxrxt); fd_log_debug( " sasoc_number_peer_destinations : %hu", assoc.sasoc_number_peer_destinations); fd_log_debug( " sasoc_peer_rwnd : %u" , assoc.sasoc_peer_rwnd); @@ -318,7 +346,7 @@ sz = sizeof(parms); /* Read socket defaults */ - CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, &parms, &sz) ); + CHECK_SYS( sctp_opt_info(sk, 0, SCTP_PEER_ADDR_PARAMS, &parms, &sz) ); if (sz != sizeof(parms)) { TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(parms)); @@ -347,7 +375,7 @@ if (TRACE_BOOL(ANNOYING)) { /* Check new values */ - CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, &parms, &sz) ); + CHECK_SYS( sctp_opt_info(sk, 0, SCTP_PEER_ADDR_PARAMS, &parms, &sz) ); fd_log_debug( "New SCTP_PEER_ADDR_PARAMS : spp_hbinterval : %u", parms.spp_hbinterval); fd_log_debug( " spp_pathmaxrxt : %hu", parms.spp_pathmaxrxt); fd_log_debug( " spp_pathmtu : %u", parms.spp_pathmtu); @@ -814,21 +842,16 @@ bind_default = 1; goto redo; } - - #if 0 - union { - sSA *sa; - uint8_t *buf; - } ptr; - int i; - ptr.sa = sar; - fd_log_debug("Calling sctp_bindx with the following address array:"); - for (i = 0; i < count; i++) { - TRACE_sSA(FD_LOG_DEBUG, FULL, " - ", ptr.sa, NI_NUMERICHOST | NI_NUMERICSERV, "" ); - ptr.buf += (ptr.sa->sa_family == AF_INET) ? sizeof(sSA4) : sizeof(sSA6) ; - } - #endif - + + /* Debug: show bound addresses */ + { + char * buf = NULL; + size_t len = 0; + CHECK_MALLOC_DO( fd_sa_dump_array( &buf, &len, 0, sar, count), ); + LOG_D("SCTP server binding local addresses: %s", buf); + free(buf); + } + /* Bind to this array */ CHECK_SYS( sctp_bindx(*sock, sar, count, SCTP_BINDX_ADD_ADDR) ); @@ -840,22 +863,19 @@ CHECK_FCT( fd_setsockopt_postbind(*sock, bind_default) ); /* Debug: show all local listening addresses */ - #if 0 - sSA *sar; - union { - sSA *sa; - uint8_t *buf; - } ptr; - int sz; - + { + sSA *sar = NULL; + int sz = 0; + char * buf = NULL; + size_t len = 0; + CHECK_SYS( sz = sctp_getladdrs(*sock, 0, &sar) ); - - fd_log_debug("SCTP server bound on :"); - for (ptr.sa = sar; sz-- > 0; ptr.buf += (ptr.sa->sa_family == AF_INET) ? sizeof(sSA4) : sizeof(sSA6)) { - TRACE_sSA(FD_LOG_DEBUG, FULL, " - ", ptr.sa, NI_NUMERICHOST | NI_NUMERICSERV, "" ); - } + + CHECK_MALLOC_DO( fd_sa_dump_array( &buf, &len, 0, sar, sz), ); + LOG_D("SCTP server locally bound addresses: %s", buf); sctp_freeladdrs(sar); - #endif + free(buf); + } return 0; } @@ -869,7 +889,7 @@ } /* Create a client socket and connect to remote server */ -int fd_sctp_client( int *sock, int no_ip6, uint16_t port, struct fd_list * list ) +int fd_sctp_client( int *sock, int no_ip6, uint16_t port, struct fd_list * list, struct fd_list * src_list ) { int family; union { @@ -879,11 +899,13 @@ size_t size = 0; int count = 0; int ret; + int bind_default = 1; /* enable ASCONF in postbind */ sar.buf = NULL; - TRACE_ENTRY("%p %i %hu %p", sock, no_ip6, port, list); + TRACE_ENTRY("%p %i %hu %p %p", sock, no_ip6, port, list, src_list); CHECK_PARAMS( sock && list && (!FD_IS_LIST_EMPTY(list)) ); + CHECK_PARAMS( !src_list || (src_list && (!FD_IS_LIST_EMPTY(src_list))) ); if (no_ip6) { family = AF_INET; @@ -899,31 +921,47 @@ /* Set the socket options */ CHECK_FCT_DO( ret = fd_setsockopt_prebind(*sock), goto out ); - + + /* Bind to explicit source addresses if requested */ + if (src_list && !FD_IS_LIST_EMPTY(src_list)) { + sSA * bindsar = NULL; /* array of addresses */ + size_t sz = 0; /* size of the array */ + int sarcount = 0; /* number of sock addr in the array */ + + /* Create the array of configured addresses */ + CHECK_FCT_DO( ret = add_addresses_from_list_mask((void *)&bindsar, &sz, &sarcount, family, 0, src_list, EP_FL_CONF, EP_FL_CONF), goto out ); + + if (sarcount) { + char * buf = NULL; + size_t len = 0; + CHECK_MALLOC_DO( fd_sa_dump_array( &buf, &len, 0, bindsar, sarcount), goto out ); + LOG_A("SCTP client binding local addresses: %s", buf); + free(buf); + + CHECK_SYS_DO( ret = sctp_bindx(*sock, bindsar, sarcount, SCTP_BINDX_ADD_ADDR), goto out ); + } + + /* Disable ASCONF option in postbind */ + bind_default = 0; + + /* We don't need bindsar anymore */ + free(bindsar); + } + /* Create the array of addresses, add first the configured addresses, then the discovered, then the other ones */ CHECK_FCT_DO( ret = add_addresses_from_list_mask(&sar.buf, &size, &count, family, htons(port), list, EP_FL_CONF, EP_FL_CONF ), goto out ); CHECK_FCT_DO( ret = add_addresses_from_list_mask(&sar.buf, &size, &count, family, htons(port), list, EP_FL_CONF | EP_FL_DISC, EP_FL_DISC ), goto out ); CHECK_FCT_DO( ret = add_addresses_from_list_mask(&sar.buf, &size, &count, family, htons(port), list, EP_FL_CONF | EP_FL_DISC, 0 ), goto out ); /* Try connecting */ - LOG_A("Attempting SCTP connection (%d addresses attempted) ", count); - -#if 0 - /* Dump the SAs */ - union { - uint8_t *buf; - sSA *sa; - sSA4 *sin; - sSA6 *sin6; - } ptr; - int i; - ptr.buf = sar.buf; - for (i=0; i< count; i++) { - TRACE_sSA(FD_LOG_DEBUG, FULL, " - ", ptr.sa, NI_NUMERICHOST | NI_NUMERICSERV, "" ); - ptr.buf += (ptr.sa->sa_family == AF_INET) ? sizeof(sSA4) : sizeof(sSA6); - } -#endif - + { + char * buf = NULL; + size_t len = 0; + CHECK_MALLOC_DO( fd_sa_dump_array( &buf, &len, 0, sar.sa, count), goto out ); + LOG_A("SCTP client connecting to addresses: %s", buf); + free(buf); + } + /* Bug in some Linux kernel, the sctp_connectx is not a cancellation point. To avoid blocking freeDiameter, we allow async cancel here */ pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); #ifdef SCTP_CONNECTX_4_ARGS @@ -944,7 +982,7 @@ free(sar.buf); sar.buf = NULL; /* Set the remaining sockopts */ - CHECK_FCT_DO( ret = fd_setsockopt_postbind(*sock, 1), + CHECK_FCT_DO( ret = fd_setsockopt_postbind(*sock, bind_default), { CHECK_SYS_DO( shutdown(*sock, SHUT_RDWR), /* continue */ ); } ); @@ -982,7 +1020,7 @@ } #if 0 char sa_buf[sSA_DUMP_STRLEN]; - fd_sa_sdump_numeric(sa_buf, &status.sstat_primary.spinfo_address); + fd_sa_sdump_numeric(sa_buf, (sSA *)&status.sstat_primary.spinfo_address); fd_log_debug( "SCTP_STATUS : sstat_state : %i" , status.sstat_state); fd_log_debug( " sstat_rwnd : %u" , status.sstat_rwnd); fd_log_debug( " sstat_unackdata : %hu", status.sstat_unackdata); @@ -1218,6 +1256,7 @@ /* Handle the case where the data received is a notification */ if (mhdr.msg_flags & MSG_NOTIFICATION) { union sctp_notification * notif = (union sctp_notification *) data; + char sa_buf[sSA_DUMP_STRLEN]; TRACE_DEBUG(FULL, "Received %zdb data of notification on socket %d", datasize, conn->cc_socket); @@ -1235,7 +1274,8 @@ case SCTP_PEER_ADDR_CHANGE: TRACE_DEBUG(FULL, "Received SCTP_PEER_ADDR_CHANGE notification"); - /* TRACE_sSA(FD_LOG_DEBUG, ANNOYING, " intf_change : ", &(notif->sn_paddr_change.spc_aaddr), NI_NUMERICHOST | NI_NUMERICSERV, "" ); */ + fd_sa_sdump_numeric(sa_buf, (sSA *)&(notif->sn_paddr_change.spc_aaddr)); + TRACE_DEBUG(ANNOYING, " intf_change : %s", sa_buf); TRACE_DEBUG(ANNOYING, " state : %d", notif->sn_paddr_change.spc_state); TRACE_DEBUG(ANNOYING, " error : %d", notif->sn_paddr_change.spc_error); @@ -1271,10 +1311,12 @@ break; #ifndef OLD_SCTP_SOCKET_API +#ifdef SCTP_NOTIFICATIONS_STOPPED_EVENT case SCTP_NOTIFICATIONS_STOPPED_EVENT: TRACE_DEBUG(INFO, "Received SCTP_NOTIFICATIONS_STOPPED_EVENT notification, marking the association in error state"); *event = FDEVP_CNX_ERROR; break; +#endif /* SCTP_NOTIFICATIONS_STOPPED_EVENT */ #endif /* OLD_SCTP_SOCKET_API */ default: diff -r 6a35c5470ef4 -r 19ab8ac08a36 libfdcore/sctp3436.c --- a/libfdcore/sctp3436.c Tue Jul 07 01:24:48 2020 +0800 +++ b/libfdcore/sctp3436.c Tue Jul 07 01:41:54 2020 +0800 @@ -137,7 +137,7 @@ static void * decipher(void * arg) { struct sctp3436_ctx * ctx = arg; - struct cnxctx *cnx; + struct cnxctx *cnx = NULL; TRACE_ENTRY("%p", arg); CHECK_PARAMS_DO(ctx && ctx->raw_recv && ctx->parent, goto error); diff -r 6a35c5470ef4 -r 19ab8ac08a36 libfdproto/dictionary-internal.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libfdproto/dictionary-internal.h Tue Jul 07 01:41:54 2020 +0800 @@ -0,0 +1,136 @@ +/********************************************************************************************************* +* Software License Agreement (BSD License) * +* Author: Sebastien Decugis * +* * +* Copyright (c) 2015, 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. * +*********************************************************************************************************/ + +#ifndef HAD_DICTIONARY_INTERNAL_H +#define HAD_DICTIONARY_INTERNAL_H + +/* Names of the base types */ +extern const char * type_base_name[]; + +/* The number of lists in an object */ +#define NB_LISTS_PER_OBJ 3 + +/* Definition of the dictionary objects */ +struct dict_object { + enum dict_object_type type; /* What type of object is this? */ + int objeyec;/* eyecatcher for this object */ + int typeyec;/* eyecatcher for this type of object */ + struct dictionary *dico; /* The dictionary this object belongs to */ + + union { + struct dict_vendor_data vendor; /* datastr_len = strlen(vendor_name) */ + struct dict_application_data application; /* datastr_len = strlen(application_name) */ + struct dict_type_data type; /* datastr_len = strlen(type_name) */ + struct dict_enumval_data enumval; /* datastr_len = strlen(enum_name) */ + struct dict_avp_data avp; /* datastr_len = strlen(avp_name) */ + struct dict_cmd_data cmd; /* datastr_len = strlen(cmd_name) */ + struct dict_rule_data rule; /* datastr_len = 0 */ + } data; /* The data of this object */ + + size_t datastr_len; /* cached length of the string inside the data. Saved when the object is created. */ + + struct dict_object * parent; /* The parent of this object, if any */ + + struct fd_list list[NB_LISTS_PER_OBJ];/* used to chain objects.*/ + /* More information about the lists : + + - the use for each list depends on the type of object. See detail below. + + - a sentinel for a list has its 'o' field cleared. (this is the criteria to detect end of a loop) + + - The lists are always ordered. The criteria are described below. the functions to order them are referenced in dict_obj_info + + - The dict_lock must be held for any list operation. + + => VENDORS: + list[0]: list of the vendors, ordered by their id. The sentinel is g_dict_vendors (vendor with id 0) + list[1]: sentinel for the list of AVPs from this vendor, ordered by AVP code. + list[2]: sentinel for the list of AVPs from this vendor, ordered by AVP name (fd_os_cmp). + + => APPLICATIONS: + list[0]: list of the applications, ordered by their id. The sentinel is g_dict_applications (application with id 0) + list[1]: not used + list[2]: not used. + + => TYPES: + list[0]: list of the types, ordered by their names. The sentinel is g_list_types. + list[1]: sentinel for the type_enum list of this type, ordered by their constant name (fd_os_cmp). + list[2]: sentinel for the type_enum list of this type, ordered by their constant value. + + => TYPE_ENUMS: + list[0]: list of the contants for a given type, ordered by the constant name (fd_os_cmp). Sentinel is a (list[1]) element of a TYPE object. + list[1]: list of the contants for a given type, ordered by the constant value. Sentinel is a (list[2]) element of a TYPE object. + list[2]: not used + + => AVPS: + list[0]: list of the AVP from a given vendor, ordered by avp code. Sentinel is a list[1] element of a VENDOR object. + list[1]: list of the AVP from a given vendor, ordered by avp name (fd_os_cmp). Sentinel is a list[2] element of a VENDOR object. + list[2]: sentinel for the rule list that apply to this AVP. + + => COMMANDS: + list[0]: list of the commands, ordered by their names (fd_os_cmp). The sentinel is g_list_cmd_name. + list[1]: list of the commands, ordered by their command code and 'R' flag. The sentinel is g_list_cmd_code. + list[2]: sentinel for the rule list that apply to this command. + + => RULES: + list[0]: list of the rules for a given (grouped) AVP or Command, ordered by the AVP vendor & code to which they refer. sentinel is list[2] of a command or (grouped) avp. + list[1]: not used + list[2]: not used. + + */ + + /* Sentinel for the dispatch callbacks */ + struct fd_list disp_cbs; + +}; + +/* Definition of the dictionary structure */ +struct dictionary { + int dict_eyec; /* Eye-catcher for the dictionary (DICT_EYECATCHER) */ + + pthread_rwlock_t dict_lock; /* The global rwlock for the dictionary */ + + struct dict_object dict_vendors; /* Sentinel for the list of vendors, corresponding to vendor 0 */ + struct dict_object dict_applications; /* Sentinel for the list of applications, corresponding to app 0 */ + struct fd_list dict_types; /* Sentinel for the list of types */ + struct fd_list dict_cmd_name; /* Sentinel for the list of commands, ordered by names */ + struct fd_list dict_cmd_code; /* Sentinel for the list of commands, ordered by codes */ + + struct dict_object dict_cmd_error; /* Special command object for answers with the 'E' bit set */ + + int dict_count[DICT_TYPE_MAX + 1]; /* Number of objects of each type */ +}; + +#endif /* HAD_DICTIONARY_INTERNAL_H */ diff -r 6a35c5470ef4 -r 19ab8ac08a36 libfdproto/dictionary.c --- a/libfdproto/dictionary.c Tue Jul 07 01:24:48 2020 +0800 +++ b/libfdproto/dictionary.c Tue Jul 07 01:41:54 2020 +0800 @@ -34,6 +34,7 @@ *********************************************************************************************************/ #include "fdproto-internal.h" +#include "dictionary-internal.h" #include /* Names of the base types */ @@ -48,104 +49,10 @@ "FLOAT64" /* AVP_TYPE_FLOAT64 */ }; -/* The number of lists in an object */ -#define NB_LISTS_PER_OBJ 3 - /* Some eye catchers definitions */ #define OBJECT_EYECATCHER (0x0b13c7) #define DICT_EYECATCHER (0x00d1c7) -/* Definition of the dictionary objects */ -struct dict_object { - enum dict_object_type type; /* What type of object is this? */ - int objeyec;/* eyecatcher for this object */ - int typeyec;/* eyecatcher for this type of object */ - struct dictionary *dico; /* The dictionary this object belongs to */ - - union { - struct dict_vendor_data vendor; /* datastr_len = strlen(vendor_name) */ - struct dict_application_data application; /* datastr_len = strlen(application_name) */ - struct dict_type_data type; /* datastr_len = strlen(type_name) */ - struct dict_enumval_data enumval; /* datastr_len = strlen(enum_name) */ - struct dict_avp_data avp; /* datastr_len = strlen(avp_name) */ - struct dict_cmd_data cmd; /* datastr_len = strlen(cmd_name) */ - struct dict_rule_data rule; /* datastr_len = 0 */ - } data; /* The data of this object */ - - size_t datastr_len; /* cached length of the string inside the data. Saved when the object is created. */ - - struct dict_object * parent; /* The parent of this object, if any */ - - struct fd_list list[NB_LISTS_PER_OBJ];/* used to chain objects.*/ - /* More information about the lists : - - - the use for each list depends on the type of object. See detail below. - - - a sentinel for a list has its 'o' field cleared. (this is the criteria to detect end of a loop) - - - The lists are always ordered. The criteria are described below. the functions to order them are referenced in dict_obj_info - - - The dict_lock must be held for any list operation. - - => VENDORS: - list[0]: list of the vendors, ordered by their id. The sentinel is g_dict_vendors (vendor with id 0) - list[1]: sentinel for the list of AVPs from this vendor, ordered by AVP code. - list[2]: sentinel for the list of AVPs from this vendor, ordered by AVP name (fd_os_cmp). - - => APPLICATIONS: - list[0]: list of the applications, ordered by their id. The sentinel is g_dict_applications (application with id 0) - list[1]: not used - list[2]: not used. - - => TYPES: - list[0]: list of the types, ordered by their names. The sentinel is g_list_types. - list[1]: sentinel for the type_enum list of this type, ordered by their constant name (fd_os_cmp). - list[2]: sentinel for the type_enum list of this type, ordered by their constant value. - - => TYPE_ENUMS: - list[0]: list of the contants for a given type, ordered by the constant name (fd_os_cmp). Sentinel is a (list[1]) element of a TYPE object. - list[1]: list of the contants for a given type, ordered by the constant value. Sentinel is a (list[2]) element of a TYPE object. - list[2]: not used - - => AVPS: - list[0]: list of the AVP from a given vendor, ordered by avp code. Sentinel is a list[1] element of a VENDOR object. - list[1]: list of the AVP from a given vendor, ordered by avp name (fd_os_cmp). Sentinel is a list[2] element of a VENDOR object. - list[2]: sentinel for the rule list that apply to this AVP. - - => COMMANDS: - list[0]: list of the commands, ordered by their names (fd_os_cmp). The sentinel is g_list_cmd_name. - list[1]: list of the commands, ordered by their command code and 'R' flag. The sentinel is g_list_cmd_code. - list[2]: sentinel for the rule list that apply to this command. - - => RULES: - list[0]: list of the rules for a given (grouped) AVP or Command, ordered by the AVP vendor & code to which they refer. sentinel is list[2] of a command or (grouped) avp. - list[1]: not used - list[2]: not used. - - */ - - /* Sentinel for the dispatch callbacks */ - struct fd_list disp_cbs; - -}; - -/* Definition of the dictionary structure */ -struct dictionary { - int dict_eyec; /* Eye-catcher for the dictionary (DICT_EYECATCHER) */ - - pthread_rwlock_t dict_lock; /* The global rwlock for the dictionary */ - - struct dict_object dict_vendors; /* Sentinel for the list of vendors, corresponding to vendor 0 */ - struct dict_object dict_applications; /* Sentinel for the list of applications, corresponding to app 0 */ - struct fd_list dict_types; /* Sentinel for the list of types */ - struct fd_list dict_cmd_name; /* Sentinel for the list of commands, ordered by names */ - struct fd_list dict_cmd_code; /* Sentinel for the list of commands, ordered by codes */ - - struct dict_object dict_cmd_error; /* Special command object for answers with the 'E' bit set */ - - int dict_count[DICT_TYPE_MAX + 1]; /* Number of objects of each type */ -}; - /* Forward declarations of dump functions */ static DECLARE_FD_DUMP_PROTOTYPE(dump_vendor_data, void * data ); static DECLARE_FD_DUMP_PROTOTYPE(dump_application_data, void * data ); @@ -177,32 +84,32 @@ int haslist[NB_LISTS_PER_OBJ]; /* Tell if this list is used */ } dict_obj_info[] = { { 0, "(error)", 0, 0, 0, 0, NULL, NULL, {0, 0, 0} } - /* type name datasize parent parenttype + /* type name datasize parent parenttype eyecatcher dump_data search_fct, haslist[] */ ,{ DICT_VENDOR, "VENDOR", sizeof(struct dict_vendor_data), 0, 0, OBJECT_EYECATCHER + 1, dump_vendor_data, search_vendor, { 1, 0, 0 } } - + ,{ DICT_APPLICATION, "APPLICATION", sizeof(struct dict_application_data), 1, DICT_VENDOR, OBJECT_EYECATCHER + 2, dump_application_data, search_application, { 1, 0, 0 } } - + ,{ DICT_TYPE, "TYPE", sizeof(struct dict_type_data), 1, DICT_APPLICATION, OBJECT_EYECATCHER + 3, dump_type_data, search_type, { 1, 0, 0 } } - + ,{ DICT_ENUMVAL, "ENUMVAL", sizeof(struct dict_enumval_data), 2, DICT_TYPE, OBJECT_EYECATCHER + 4, NULL, search_enumval, { 1, 1, 0 } } - + ,{ DICT_AVP, "AVP", sizeof(struct dict_avp_data), 1, DICT_TYPE, OBJECT_EYECATCHER + 5, dump_avp_data, search_avp, { 1, 1, 0 } } - + ,{ DICT_COMMAND, "COMMAND", sizeof(struct dict_cmd_data), 1, DICT_APPLICATION, OBJECT_EYECATCHER + 6, dump_command_data, search_cmd, { 1, 1, 0 } } - + ,{ DICT_RULE, "RULE", sizeof(struct dict_rule_data), 2, -1 /* special case: grouped avp or command */, OBJECT_EYECATCHER + 7, dump_rule_data, search_rule, { 1, 0, 0 } } - + }; - + /* Macro to verify a "type" value */ #define CHECK_TYPE( type ) ( ((type) > 0) && ((type) <= DICT_TYPE_MAX) ) @@ -230,17 +137,17 @@ *(plen) = strlen((str)); \ str = os0dup( str, *(plen)); \ } - + /* Initialize an object */ static void init_object( struct dict_object * obj, enum dict_object_type type ) { int i; - + TRACE_ENTRY("%p %d", obj, type); - + /* Clean the object first */ memset ( obj, 0, sizeof(struct dict_object)); - + CHECK_PARAMS_DO( CHECK_TYPE(type), return ); obj->type = type; @@ -248,15 +155,15 @@ obj->typeyec = _OBINFO(obj).eyecatcher; /* We don't initialize the data nor the parent here */ - + /* Now init the lists */ for (i=0; ilist[i], obj); else fd_list_init(&obj->list[i], NULL); } - + fd_list_init(&obj->disp_cbs, NULL); } @@ -265,31 +172,31 @@ { TRACE_ENTRY("%p %p %d", dest, source, type); CHECK_PARAMS( dest && source && CHECK_TYPE(type) ); - - /* Generic: copy the full data structure */ + + /* Generic: copy the full data structure */ memcpy( &dest->data, source, dict_obj_info[type].datasize ); - + /* Then strings must be duplicated, not copied */ /* This function might be simplified by always defining the "name" field as the first field of the structures, but... it's error-prone */ switch (type) { case DICT_VENDOR: DUP_string_len( dest->data.vendor.vendor_name, &dest->datastr_len ); break; - + case DICT_APPLICATION: DUP_string_len( dest->data.application.application_name, &dest->datastr_len ); break; - + case DICT_TYPE: DUP_string_len( dest->data.type.type_name, &dest->datastr_len ); break; - + case DICT_ENUMVAL: DUP_string_len( dest->data.enumval.enum_name, &dest->datastr_len ); if (dupos) { // we also need to duplicate the octetstring constant value since it is a pointer. - dest->data.enumval.enum_value.os.data = os0dup( - ((struct dict_enumval_data *)source)->enum_value.os.data, + dest->data.enumval.enum_value.os.data = os0dup( + ((struct dict_enumval_data *)source)->enum_value.os.data, ((struct dict_enumval_data *)source)->enum_value.os.len ); } @@ -298,16 +205,16 @@ case DICT_AVP: DUP_string_len( dest->data.avp.avp_name, &dest->datastr_len ); break; - + case DICT_COMMAND: DUP_string_len( dest->data.cmd.cmd_name, &dest->datastr_len ); break; - + default: /* Nothing to do for RULES */ ; } - + return 0; } @@ -315,7 +222,7 @@ static int verify_object( struct dict_object * obj ) { TRACE_ENTRY("%p", obj); - + CHECK_PARAMS_DO( obj && (obj->objeyec == OBJECT_EYECATCHER) && CHECK_TYPE(obj->type) @@ -333,7 +240,7 @@ } return 0; } ); - + /* The object is probably valid. */ return 1; } @@ -342,20 +249,20 @@ static void destroy_object_data(struct dict_object * obj) { /* TRACE_ENTRY("%p", obj); */ - + switch (obj->type) { case DICT_VENDOR: free( obj->data.vendor.vendor_name ); break; - + case DICT_APPLICATION: free( obj->data.application.application_name ); break; - + case DICT_TYPE: free( obj->data.type.type_name ); break; - + case DICT_ENUMVAL: free( obj->data.enumval.enum_name ); break; @@ -363,11 +270,11 @@ case DICT_AVP: free( obj->data.avp.avp_name ); break; - + case DICT_COMMAND: free( obj->data.cmd.cmd_name ); break; - + default: /* nothing to do */ ; @@ -378,10 +285,10 @@ static void destroy_object(struct dict_object * obj); /* Destroy all objects in a list - the lock must be held */ -static void destroy_list(struct fd_list * head) +static void destroy_list(struct fd_list * head) { /* TRACE_ENTRY("%p", head); */ - + /* loop in the list */ while (!FD_IS_LIST_EMPTY(head)) { @@ -389,24 +296,24 @@ destroy_object(_O(head->next->o)); } } - + /* Free an object and its sublists */ static void destroy_object(struct dict_object * obj) { int i; - + /* TRACE_ENTRY("%p", obj); */ - + /* Update global count */ - if (obj->dico) + if (obj->dico) obj->dico->dict_count[obj->type]--; - + /* Mark the object as invalid */ obj->objeyec = 0xdead; - + /* First, destroy the data associated to the object */ destroy_object_data(obj); - + for (i=0; ilist[i] ); } - + /* Unlink all elements from the dispatch list; they will be freed when callback is unregistered */ CHECK_POSIX_DO( pthread_rwlock_wrlock(&fd_disp_lock), /* continue */ ); while (!FD_IS_LIST_EMPTY(&obj->disp_cbs)) { fd_list_unlink( obj->disp_cbs.next ); } CHECK_POSIX_DO( pthread_rwlock_unlock(&fd_disp_lock), /* continue */ ); - + /* Last, destroy the object */ free(obj); } @@ -437,14 +344,14 @@ /* Compare two values */ #define ORDER_scalar( i1, i2 ) \ - ((i1 < i2 ) ? -1 : ( i1 > i2 ? 1 : 0 )) + ((i1 < i2 ) ? -1 : ( i1 > i2 ? 1 : 0 )) /* Compare two vendor objects by their id (checks already performed) */ static int order_vendor_by_id ( struct dict_object *o1, struct dict_object *o2 ) { TRACE_ENTRY("%p %p", o1, o2); - + return ORDER_scalar( o1->data.vendor.vendor_id, o2->data.vendor.vendor_id ); } @@ -452,7 +359,7 @@ static int order_appli_by_id ( struct dict_object *o1, struct dict_object *o2 ) { TRACE_ENTRY("%p %p", o1, o2); - + return ORDER_scalar( o1->data.application.application_id, o2->data.application.application_id ); } @@ -460,7 +367,7 @@ static int order_type_by_name ( struct dict_object *o1, struct dict_object *o2 ) { TRACE_ENTRY("%p %p", o1, o2); - + return fd_os_cmp( o1->data.type.type_name, o1->datastr_len, o2->data.type.type_name, o2->datastr_len ); } @@ -468,7 +375,7 @@ static int order_enum_by_name ( struct dict_object *o1, struct dict_object *o2 ) { TRACE_ENTRY("%p %p", o1, o2); - + return fd_os_cmp( o1->data.enumval.enum_name, o1->datastr_len, o2->data.enumval.enum_name, o2->datastr_len ); } @@ -476,13 +383,13 @@ static int order_enum_by_val ( struct dict_object *o1, struct dict_object *o2 ) { TRACE_ENTRY("%p %p", o1, o2); - + /* The comparison function depends on the type of data */ switch ( o1->parent->data.type.type_base ) { case AVP_TYPE_OCTETSTRING: - return fd_os_cmp( o1->data.enumval.enum_value.os.data, o1->data.enumval.enum_value.os.len, + return fd_os_cmp( o1->data.enumval.enum_value.os.data, o1->data.enumval.enum_value.os.len, o2->data.enumval.enum_value.os.data, o2->data.enumval.enum_value.os.len); - + case AVP_TYPE_INTEGER32: return ORDER_scalar( o1->data.enumval.enum_value.i32, o2->data.enumval.enum_value.i32 ); @@ -512,7 +419,7 @@ static int order_avp_by_code ( struct dict_object *o1, struct dict_object *o2 ) { TRACE_ENTRY("%p %p", o1, o2); - + return ORDER_scalar( o1->data.avp.avp_code, o2->data.avp.avp_code ); } @@ -520,7 +427,7 @@ static int order_avp_by_name ( struct dict_object *o1, struct dict_object *o2 ) { TRACE_ENTRY("%p %p", o1, o2); - + return fd_os_cmp( o1->data.avp.avp_name, o1->datastr_len, o2->data.avp.avp_name, o2->datastr_len ); } @@ -528,7 +435,7 @@ static int order_cmd_by_name ( struct dict_object *o1, struct dict_object *o2 ) { TRACE_ENTRY("%p %p", o1, o2); - + return fd_os_cmp( o1->data.cmd.cmd_name, o1->datastr_len, o2->data.cmd.cmd_name, o2->datastr_len ); } @@ -537,28 +444,28 @@ { uint8_t fl1, fl2; int cmp = 0; - + TRACE_ENTRY("%p %p", o1, o2); - + cmp = ORDER_scalar( o1->data.cmd.cmd_code, o2->data.cmd.cmd_code ); - if (cmp) + if (cmp) return cmp; - + /* Same command code, we must compare the value of the 'R' flag */ fl1 = o1->data.cmd.cmd_flag_val & CMD_FLAG_REQUEST; fl2 = o2->data.cmd.cmd_flag_val & CMD_FLAG_REQUEST; - + /* We want requests first, so we reverse the operators here */ return ORDER_scalar(fl2, fl1); - + } /* Compare two rule object by the AVP vendor & code that they refer (checks already performed) */ static int order_rule_by_avpvc ( struct dict_object *o1, struct dict_object *o2 ) { TRACE_ENTRY("%p %p", o1, o2); - - return ORDER_scalar(o1->data.rule.rule_avp->data.avp.avp_vendor, o2->data.rule.rule_avp->data.avp.avp_vendor) + + return ORDER_scalar(o1->data.rule.rule_avp->data.avp.avp_vendor, o2->data.rule.rule_avp->data.avp.avp_vendor) ?: ORDER_scalar(o1->data.rule.rule_avp->data.avp.avp_code, o2->data.rule.rule_avp->data.avp.avp_code) ; } @@ -744,30 +651,30 @@ { int ret = 0; vendor_id_t id; - + TRACE_ENTRY("%p %d %p %p", dict, criteria, what, result); - + switch (criteria) { case VENDOR_BY_ID: id = *(vendor_id_t *) what; SEARCH_scalar( id, &dict->dict_vendors.list[0], vendor.vendor_id, 1, &dict->dict_vendors ); break; - + case VENDOR_BY_NAME: /* "what" is a vendor name */ SEARCH_os0( what, &dict->dict_vendors.list[0], vendor.vendor_name, 0); break; - + case VENDOR_OF_APPLICATION: /* "what" should be an application object */ SEARCH_childs_parent( DICT_APPLICATION, &dict->dict_vendors ); break; - + case VENDOR_OF_AVP: /* "what" should be an avp object */ SEARCH_sentinel( DICT_AVP, 0, 1 ); break; - + default: /* Invalid criteria */ CHECK_PARAMS( criteria = 0 ); @@ -780,31 +687,31 @@ { int ret = 0; application_id_t id; - + TRACE_ENTRY("%p %d %p %p", dict, criteria, what, result); - + switch (criteria) { case APPLICATION_BY_ID: id = *(application_id_t *) what; SEARCH_scalar( id, &dict->dict_applications.list[0], application.application_id, 1, &dict->dict_applications ); break; - + case APPLICATION_BY_NAME: /* "what" is an application name */ SEARCH_os0( what, &dict->dict_applications.list[0], application.application_name, 0); break; - + case APPLICATION_OF_TYPE: /* "what" should be a type object */ SEARCH_childs_parent( DICT_TYPE, &dict->dict_applications ); break; - + case APPLICATION_OF_COMMAND: /* "what" should be a command object */ SEARCH_childs_parent( DICT_COMMAND, &dict->dict_applications ); break; - + default: /* Invalid criteria */ CHECK_PARAMS( criteria = 0 ); @@ -816,26 +723,26 @@ static int search_type ( struct dictionary * dict, int criteria, const void * what, struct dict_object **result ) { int ret = 0; - + TRACE_ENTRY("%p %d %p %p", dict, criteria, what, result); - + switch (criteria) { case TYPE_BY_NAME: /* "what" is a type name */ SEARCH_os0( what, &dict->dict_types, type.type_name, 1); break; - + case TYPE_OF_ENUMVAL: /* "what" should be a type_enum object */ SEARCH_childs_parent( DICT_ENUMVAL, NULL ); break; - + case TYPE_OF_AVP: /* "what" should be an avp object */ SEARCH_childs_parent( DICT_AVP, NULL ); break; - - + + default: /* Invalid criteria */ CHECK_PARAMS( criteria = 0 ); @@ -847,17 +754,17 @@ static int search_enumval ( struct dictionary * dict, int criteria, const void * what, struct dict_object **result ) { int ret = 0; - + TRACE_ENTRY("%p %d %p %p", dict, criteria, what, result); - + switch (criteria) { case ENUMVAL_BY_STRUCT: { struct dict_object * parent = NULL; struct dict_enumval_request * _what = (struct dict_enumval_request *) what; - + CHECK_PARAMS( _what && ( _what->type_obj || _what->type_name ) ); - + if (_what->type_obj != NULL) { parent = _what->type_obj; CHECK_PARAMS( verify_object(parent) && (parent->type == DICT_TYPE) ); @@ -866,9 +773,9 @@ CHECK_FCT_DO( search_type( dict, TYPE_BY_NAME, _what->type_name, &parent ), CHECK_PARAMS( 0 ) ); } - + /* From here the "parent" object is valid */ - + if ( _what->search.enum_name != NULL ) { /* We are looking for this string */ SEARCH_os0( _what->search.enum_name, &parent->list[1], enumval.enum_name, 1 ); @@ -876,10 +783,10 @@ /* We are looking for the value in enum_value */ switch (parent->data.type.type_base) { case AVP_TYPE_OCTETSTRING: - SEARCH_os( _what->search.enum_value.os.data, - _what->search.enum_value.os.len, - &parent->list[2], - enumval.enum_value.os , + SEARCH_os( _what->search.enum_value.os.data, + _what->search.enum_value.os.len, + &parent->list[2], + enumval.enum_value.os , 1 ); break; @@ -890,7 +797,7 @@ 1, (struct dict_object *)NULL); break; - + case AVP_TYPE_INTEGER64: SEARCH_scalar( _what->search.enum_value.i64, &parent->list[2], @@ -898,7 +805,7 @@ 1, (struct dict_object *)NULL); break; - + case AVP_TYPE_UNSIGNED32: SEARCH_scalar( _what->search.enum_value.u32, &parent->list[2], @@ -906,7 +813,7 @@ 1, (struct dict_object *)NULL); break; - + case AVP_TYPE_UNSIGNED64: SEARCH_scalar( _what->search.enum_value.u64, &parent->list[2], @@ -914,7 +821,7 @@ 1, (struct dict_object *)NULL); break; - + case AVP_TYPE_FLOAT32: SEARCH_scalar( _what->search.enum_value.f32, &parent->list[2], @@ -922,7 +829,7 @@ 1, (struct dict_object *)NULL); break; - + case AVP_TYPE_FLOAT64: SEARCH_scalar( _what->search.enum_value.f64, &parent->list[2], @@ -930,17 +837,17 @@ 1, (struct dict_object *)NULL); break; - + default: /* Invalid parent type basetype */ CHECK_PARAMS( parent = NULL ); } } - + } break; - - + + default: /* Invalid criteria */ CHECK_PARAMS( criteria = 0 ); @@ -952,9 +859,9 @@ static int search_avp ( struct dictionary * dict, int criteria, const void * what, struct dict_object **result ) { int ret = 0; - + TRACE_ENTRY("%p %d %p %p", dict, criteria, what, result); - + switch (criteria) { case AVP_BY_CODE: { @@ -964,20 +871,20 @@ SEARCH_scalar( code, &dict->dict_vendors.list[1], avp.avp_code, 1, (struct dict_object *)NULL ); } break; - + case AVP_BY_NAME: /* "what" is the AVP name, vendor 0 */ SEARCH_os0( what, &dict->dict_vendors.list[2], avp.avp_name, 1); break; - + case AVP_BY_CODE_AND_VENDOR: case AVP_BY_NAME_AND_VENDOR: { struct dict_avp_request * _what = (struct dict_avp_request *) what; struct dict_object * vendor = NULL; - + CHECK_PARAMS( (criteria != AVP_BY_NAME_AND_VENDOR) || _what->avp_name ); - + /* Now look for the vendor first */ CHECK_FCT( search_vendor( dict, VENDOR_BY_ID, &_what->avp_vendor, &vendor ) ); if (vendor == NULL) { @@ -987,7 +894,7 @@ ret = ENOENT; goto end; } - + /* We now have our vendor = head of the appropriate avp list */ if (criteria == AVP_BY_NAME_AND_VENDOR) { SEARCH_os0( _what->avp_name, &vendor->list[2], avp.avp_name, 1); @@ -997,15 +904,15 @@ } } break; - + case AVP_BY_STRUCT: { struct dict_avp_request_ex * _what = (struct dict_avp_request_ex *) what; struct dict_object * vendor = NULL; - + CHECK_PARAMS( _what->avp_vendor.vendor || _what->avp_vendor.vendor_id || _what->avp_vendor.vendor_name ); CHECK_PARAMS( _what->avp_data.avp_code || _what->avp_data.avp_name ); - + /* Now look for the vendor first */ if (_what->avp_vendor.vendor) { CHECK_PARAMS( ! _what->avp_vendor.vendor_id && ! _what->avp_vendor.vendor_name ); @@ -1016,7 +923,7 @@ } else { CHECK_FCT( search_vendor( dict, VENDOR_BY_NAME, _what->avp_vendor.vendor_name, &vendor ) ); } - + if (vendor == NULL) { if (result) *result = NULL; @@ -1024,7 +931,7 @@ ret = ENOENT; goto end; } - + /* We now have our vendor = head of the appropriate avp list */ if (_what->avp_data.avp_code) { CHECK_PARAMS( ! _what->avp_data.avp_name ); @@ -1034,22 +941,22 @@ } } break; - + case AVP_BY_NAME_ALL_VENDORS: { struct fd_list * li; size_t wl = strlen((char *)what); - + /* First, search for vendor 0 */ SEARCH_os0_l( what, wl, &dict->dict_vendors.list[2], avp.avp_name, 1); - + /* If not found, loop for all vendors, until found */ for (li = dict->dict_vendors.list[0].next; li != &dict->dict_vendors.list[0]; li = li->next) { SEARCH_os0_l( what, wl, &_O(li->o)->list[2], avp.avp_name, 1); } } break; - + default: /* Invalid criteria */ CHECK_PARAMS( criteria = 0 ); @@ -1061,45 +968,45 @@ static int search_cmd ( struct dictionary * dict, int criteria, const void * what, struct dict_object **result ) { int ret = 0; - + TRACE_ENTRY("%p %d %p %p", dict, criteria, what, result); - + switch (criteria) { case CMD_BY_NAME: /* "what" is a command name */ SEARCH_os0( what, &dict->dict_cmd_name, cmd.cmd_name, 1); break; - + case CMD_BY_CODE_R: case CMD_BY_CODE_A: { command_code_t code; uint8_t searchfl = 0; - + /* The command code that we are searching */ code = *(command_code_t *) what; - + /* The flag (request or answer) of the command we are searching */ if (criteria == CMD_BY_CODE_R) { searchfl = CMD_FLAG_REQUEST; } - + /* perform the search */ SEARCH_codefl( code, searchfl, &dict->dict_cmd_code ); } break; - + case CMD_ANSWER: { /* "what" is a command object of type "request" */ struct dict_object * req = (struct dict_object *) what; struct dict_object * ans = NULL; - - CHECK_PARAMS( verify_object(req) + + CHECK_PARAMS( verify_object(req) && (req->type == DICT_COMMAND) && (req->data.cmd.cmd_flag_mask & CMD_FLAG_REQUEST) && (req->data.cmd.cmd_flag_val & CMD_FLAG_REQUEST) ); - + /* The answer is supposed to be the next element in the list, if it exists */ ans = req->list[1].next->o; if ( ans == NULL ) { @@ -1107,7 +1014,7 @@ ret = ENOENT; goto end; } - + /* Now check that the ans element is really the correct one */ if ( (ans->data.cmd.cmd_code != req->data.cmd.cmd_code) || (!(ans->data.cmd.cmd_flag_mask & CMD_FLAG_REQUEST)) @@ -1116,13 +1023,13 @@ ret = ENOENT; goto end; } - + if (result) *result = ans; ret = 0; - } + } break; - + default: /* Invalid criteria */ CHECK_PARAMS( criteria = 0 ); @@ -1134,32 +1041,32 @@ static int search_rule ( struct dictionary * dict, int criteria, const void * what, struct dict_object **result ) { int ret = 0; - + TRACE_ENTRY("%p %d %p %p", dict, criteria, what, result); - + switch (criteria) { case RULE_BY_AVP_AND_PARENT: { struct dict_object * parent = NULL; struct dict_object * avp = NULL; struct dict_rule_request * _what = (struct dict_rule_request *) what; - - CHECK_PARAMS( _what + + CHECK_PARAMS( _what && (parent = _what->rule_parent) && (avp = _what->rule_avp ) ); - - CHECK_PARAMS( verify_object(parent) - && ((parent->type == DICT_COMMAND) + + CHECK_PARAMS( verify_object(parent) + && ((parent->type == DICT_COMMAND) || ((parent->type == DICT_AVP) && (parent->data.avp.avp_basetype == AVP_TYPE_GROUPED))) ); - + CHECK_PARAMS( verify_object(avp) && (avp->type == DICT_AVP) ); - + /* Perform the search */ SEARCH_ruleavpname( avp->data.avp.avp_name, avp->datastr_len, &parent->list[2]); - + } break; - + default: /* Invalid criteria */ CHECK_PARAMS( criteria = 0 ); @@ -1179,7 +1086,7 @@ static DECLARE_FD_DUMP_PROTOTYPE(dump_vendor_data, void * data ) { struct dict_vendor_data * vendor = (struct dict_vendor_data *)data; - + return fd_dump_extend( FD_DUMP_STD_PARAMS, "data: %-6u \"%s\"", vendor->vendor_id, vendor->vendor_name); } static DECLARE_FD_DUMP_PROTOTYPE(dump_application_data, void * data ) @@ -1190,9 +1097,9 @@ static DECLARE_FD_DUMP_PROTOTYPE(dump_type_data, void * data ) { struct dict_type_data * type = ( struct dict_type_data * ) data; - - return fd_dump_extend( FD_DUMP_STD_PARAMS, "data: %-12s \"%s\"", - type_base_name[type->type_base], + + return fd_dump_extend( FD_DUMP_STD_PARAMS, "data: %-12s \"%s\"", + type_base_name[type->type_base], type->type_name); } static DECLARE_FD_DUMP_PROTOTYPE(dump_enumval_data, struct dict_enumval_data * enumval, enum dict_avp_basetype type ) @@ -1211,7 +1118,7 @@ CHECK_MALLOC_DO(fd_dump_extend( FD_DUMP_STD_PARAMS, "..."), return NULL); } break; - + case AVP_TYPE_INTEGER32: CHECK_MALLOC_DO(fd_dump_extend( FD_DUMP_STD_PARAMS, "%i", enumval->enum_value.i32), return NULL); break; @@ -1235,7 +1142,7 @@ case AVP_TYPE_FLOAT64: CHECK_MALLOC_DO(fd_dump_extend( FD_DUMP_STD_PARAMS, "%g", enumval->enum_value.f64), return NULL); break; - + default: CHECK_MALLOC_DO(fd_dump_extend( FD_DUMP_STD_PARAMS, "??? (ERROR unknown type %d)", type), return NULL); } @@ -1244,26 +1151,26 @@ static DECLARE_FD_DUMP_PROTOTYPE(dump_avp_data, void * data ) { struct dict_avp_data * avp = (struct dict_avp_data * ) data; - return fd_dump_extend( FD_DUMP_STD_PARAMS, "data: v/m:" DUMP_AVPFL_str "/" DUMP_AVPFL_str ", %12s, %-6u \"%s\"", - DUMP_AVPFL_val(avp->avp_flag_val), - DUMP_AVPFL_val(avp->avp_flag_mask), - type_base_name[avp->avp_basetype], - avp->avp_code, + return fd_dump_extend( FD_DUMP_STD_PARAMS, "data: v/m:" DUMP_AVPFL_str "/" DUMP_AVPFL_str ", %12s, %-6u \"%s\"", + DUMP_AVPFL_val(avp->avp_flag_val), + DUMP_AVPFL_val(avp->avp_flag_mask), + type_base_name[avp->avp_basetype], + avp->avp_code, avp->avp_name ); } static DECLARE_FD_DUMP_PROTOTYPE(dump_command_data, void * data ) { struct dict_cmd_data * cmd = (struct dict_cmd_data *) data; - return fd_dump_extend( FD_DUMP_STD_PARAMS, "data: v/m:" DUMP_CMDFL_str "/" DUMP_CMDFL_str ", %-6u \"%s\"", + return fd_dump_extend( FD_DUMP_STD_PARAMS, "data: v/m:" DUMP_CMDFL_str "/" DUMP_CMDFL_str ", %-6u \"%s\"", DUMP_CMDFL_val(cmd->cmd_flag_val), DUMP_CMDFL_val(cmd->cmd_flag_mask), cmd->cmd_code, cmd->cmd_name); } static DECLARE_FD_DUMP_PROTOTYPE(dump_rule_data, void * data ) { struct dict_rule_data * rule = (struct dict_rule_data * )data; return fd_dump_extend( FD_DUMP_STD_PARAMS, "data: pos:%d ord:%d m/M:%2d/%2d avp:\"%s\"", - rule->rule_position, - rule->rule_order, - rule->rule_min, + rule->rule_position, + rule->rule_order, + rule->rule_min, rule->rule_max, rule->rule_avp->data.avp.avp_name); } @@ -1290,27 +1197,27 @@ static DECLARE_FD_DUMP_PROTOTYPE(dump_object, struct dict_object * obj, int parents, int depth, int indent ) { CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, "%*s{dictobj}(@%p): ", indent, "", obj), return NULL); - + if (!verify_object(obj)) { CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, "INVALID/NULL"), return NULL); return *buf; } - - CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, "%s p:%p ", - _OBINFO(obj).name, + + CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, "%s p:%p ", + _OBINFO(obj).name, obj->parent), return NULL); - + if (obj->type == DICT_ENUMVAL) { CHECK_MALLOC_DO( dump_enumval_data ( FD_DUMP_STD_PARAMS, &obj->data.enumval, obj->parent->data.type.type_base ), return NULL); } else { CHECK_MALLOC_DO( _OBINFO(obj).dump_data(FD_DUMP_STD_PARAMS, &obj->data), return NULL); } - + if (parents) { CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, "\n%*sparent:", indent + 1, ""), return NULL); CHECK_MALLOC_DO( dump_object (FD_DUMP_STD_PARAMS, obj->parent, parents-1, 0, 0 ), return NULL); } - + if (depth) { int i; for (i=0; idict_eyec != DICT_EYECATCHER)) { return fd_dump_extend(FD_DUMP_STD_PARAMS, "INVALID/NULL"); } - + CHECK_POSIX_DO( pthread_rwlock_rdlock( &dict->dict_lock ), /* ignore */ ); - - CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, "\n {dict(%p) : VENDORS / AVP / RULES}\n", dict), goto error); + + CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, "\n {dict}(@%p): VENDORS / AVP / RULES\n", dict), goto error); CHECK_MALLOC_DO( dump_object (FD_DUMP_STD_PARAMS, &dict->dict_vendors, 0, 3, 3 ), goto error); for (li = dict->dict_vendors.list[0].next; li != &dict->dict_vendors.list[0]; li = li->next) { CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, "\n"), return NULL); CHECK_MALLOC_DO( dump_object (FD_DUMP_STD_PARAMS, li->o, 0, 3, 3 ), goto error); } - - CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, "\n {dict(%p) : APPLICATIONS}\n", dict), goto error); + + CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, "\n {dict}(@%p): APPLICATIONS\n", dict), goto error); CHECK_MALLOC_DO( dump_object (FD_DUMP_STD_PARAMS, &dict->dict_applications, 0, 1, 3 ), goto error); for (li = dict->dict_applications.list[0].next; li != &dict->dict_applications.list[0]; li = li->next) { CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, "\n"), return NULL); CHECK_MALLOC_DO( dump_object (FD_DUMP_STD_PARAMS, li->o, 0, 1, 3 ), goto error); } - - CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, "\n {dict(%p) : TYPES / ENUMVAL}", dict), goto error); + + CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, "\n {dict}(@%p): TYPES / ENUMVAL", dict), goto error); CHECK_MALLOC_DO( dump_list(FD_DUMP_STD_PARAMS, &dict->dict_types, 0, 2, 3 ), goto error); - - CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, "\n {dict(%p) : COMMANDS / RULES}", dict), goto error); + + CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, "\n {dict}(@%p): COMMANDS / RULES", dict), goto error); CHECK_MALLOC_DO( dump_list(FD_DUMP_STD_PARAMS, &dict->dict_cmd_code, 0, 0, 3 ), goto error); - - CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, "\n {dict(%p) : statistics}", dict), goto error); + + CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, "\n {dict}(@%p): statistics", dict), goto error); for (i=1; i<=DICT_TYPE_MAX; i++) CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, "\n %5d: %s", dict->dict_count[i], dict_obj_info[i].name), goto error); - + CHECK_POSIX_DO( pthread_rwlock_unlock( &dict->dict_lock ), /* ignore */ ); return *buf; -error: +error: /* Free the rwlock */ CHECK_POSIX_DO( pthread_rwlock_unlock( &dict->dict_lock ), /* ignore */ ); return NULL; @@ -1386,7 +1293,7 @@ static DECLARE_FD_DUMP_PROTOTYPE(dump_val_os, union avp_value * value) { int i; - + CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, "<"), return NULL); for (i = 0; i < value->os.len; i++) { if (i == 1024) { /* Dump only up to 1024 bytes of the buffer */ @@ -1435,7 +1342,7 @@ switch (datatype) { case AVP_TYPE_OCTETSTRING: return &dump_val_os; - + case AVP_TYPE_INTEGER32: return &dump_val_i32; @@ -1453,7 +1360,7 @@ case AVP_TYPE_FLOAT64: return &dump_val_f64; - + case AVP_TYPE_GROUPED: TRACE_DEBUG(FULL, "error: grouped AVP with a value!"); } @@ -1467,24 +1374,24 @@ typedef DECLARE_FD_DUMP_PROTOTYPE((*dump_val_cb_t), union avp_value *); /* Formatter for the AVP value dump line */ -static DECLARE_FD_DUMP_PROTOTYPE(dump_avp_val, union avp_value *avp_value, - dump_val_cb_t def_dump_val_cb, - dump_val_cb_t dump_val_cb, - enum dict_avp_basetype datatype, - char * type_name, - char * const_name, - int indent, +static DECLARE_FD_DUMP_PROTOTYPE(dump_avp_val, union avp_value *avp_value, + dump_val_cb_t def_dump_val_cb, + dump_val_cb_t dump_val_cb, + enum dict_avp_basetype datatype, + char * type_name, + char * const_name, + int indent, int header) { if (header) { /* Header for all AVP values dumps: */ CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, INOBJHDR "value ", INOBJHDRVAL), return NULL); - + /* If the type is provided, write it */ if (type_name) { CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, "t: '%s' ", type_name), return NULL); } - + /* Always give the base datatype anyway */ CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, "(%s) ", type_base_name[datatype]), return NULL); @@ -1502,7 +1409,7 @@ if (const_name) { CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, ")"), return NULL); } - + /* Done! */ return *buf; } @@ -1514,9 +1421,9 @@ struct dict_object * type = NULL; char * type_name = NULL; char * const_name = NULL; - + FD_DUMP_HANDLE_OFFSET(); - + /* Handle invalid parameters */ if (!avp_value) { CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, "(avp value not set)"), return NULL); @@ -1527,24 +1434,24 @@ CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, "(model not set)"), return NULL); return *buf; } - + if (! ( verify_object(model) && (model->type == DICT_AVP) )) { CHECK_MALLOC_DO( fd_dump_extend( FD_DUMP_STD_PARAMS, "(invalid model)"), return NULL); return *buf; } - + /* Get the type definition of this AVP */ type = model->parent; if (type) { struct dict_enumval_request request; struct dict_object * enumval = NULL; - + type_name = type->data.type.type_name; - + /* overwrite the dump function ? */ if (type->data.type.type_dump) dump_val_cb = type->data.type.type_dump; - + /* Now check if the AVP value matches a constant */ memset(&request, 0, sizeof(request)); request.type_obj = type; @@ -1555,7 +1462,7 @@ const_name = enumval->data.enumval.enum_name; } } - + /* And finally, dump the value */ CHECK_MALLOC_DO( dump_avp_val(FD_DUMP_STD_PARAMS, avp_value, get_default_dump_val_cb(model->data.avp.avp_basetype), dump_val_cb, model->data.avp.avp_basetype, type_name, const_name, indent, header), return NULL ); return *buf; @@ -1575,9 +1482,9 @@ int fd_dict_gettype ( struct dict_object * object, enum dict_object_type * type) { TRACE_ENTRY("%p %p", object, type); - + CHECK_PARAMS( type && verify_object(object) ); - + /* Copy the value and return */ *type = object->type; return 0; @@ -1586,9 +1493,9 @@ int fd_dict_getdict ( struct dict_object * object, struct dictionary ** dict) { TRACE_ENTRY("%p %p", object, dict); - + CHECK_PARAMS( dict && verify_object(object) ); - + /* Copy the value and return */ *dict = object->dico; return 0; @@ -1599,9 +1506,9 @@ int fd_dict_getval ( struct dict_object * object, void * val) { TRACE_ENTRY("%p %p", object, val); - + CHECK_PARAMS( val && verify_object(object) ); - + /* Copy the value and return */ memcpy(val, &object->data, _OBINFO(object).datasize);; return 0; @@ -1615,49 +1522,49 @@ struct dict_object * new = NULL; struct dict_object * vendor = NULL; struct dict_object * locref = NULL; - + TRACE_ENTRY("%p %d(%s) %p %p %p", dict, type, dict_obj_info[CHECK_TYPE(type) ? type : 0].name, data, parent, ref); - + /* Check parameters */ CHECK_PARAMS( dict && (dict->dict_eyec == DICT_EYECATCHER) && CHECK_TYPE(type) && data ); - + /* Check the "parent" parameter */ switch (dict_obj_info[type].parent) { case 0: /* parent is forbidden */ CHECK_PARAMS_DO( parent == NULL, goto error_param ); - + case 1: /* parent is optional */ if (parent == NULL) break; - + case 2: /* parent is mandatory */ CHECK_PARAMS_DO( verify_object(parent), goto error_param ); - + if (type == DICT_RULE ) { /* Special case : grouped AVP or Command parents are allowed */ - CHECK_PARAMS_DO( (parent->type == DICT_COMMAND ) + CHECK_PARAMS_DO( (parent->type == DICT_COMMAND ) || ( (parent->type == DICT_AVP) && (parent->data.avp.avp_basetype == AVP_TYPE_GROUPED ) ), goto error_param ); } else { CHECK_PARAMS_DO( parent->type == dict_obj_info[type].parenttype, goto error_param ); } } - + /* For AVP object, we must also check that the "vendor" referenced exists */ if (type == DICT_AVP) { CHECK_FCT_DO( fd_dict_search( dict, DICT_VENDOR, VENDOR_BY_ID, &(((struct dict_avp_data *)data)->avp_vendor), (void*)&vendor, ENOENT ), { TRACE_DEBUG(INFO, "Unable to find vendor '%d' referenced in the AVP data", ((struct dict_avp_data *)data)->avp_vendor); goto error_param; } ); - + /* Also check if a parent is provided, that the type are the same */ if (parent) { CHECK_PARAMS_DO( parent->data.type.type_base == ((struct dict_avp_data *)data)->avp_basetype, goto error_param ); } } - + /* For RULE object, we must also check that the "avp" referenced exists */ if (type == DICT_RULE) { CHECK_PARAMS_DO( verify_object(((struct dict_rule_data *)data)->rule_avp), goto error_param ); CHECK_PARAMS_DO( ((struct dict_rule_data *)data)->rule_avp->type == DICT_AVP, goto error_param ); } - + /* For COMMAND object, check that the 'R' flag is fixed */ if (type == DICT_COMMAND) { CHECK_PARAMS_DO( ((struct dict_cmd_data *)data)->cmd_flag_mask & CMD_FLAG_REQUEST, goto error_param ); @@ -1668,7 +1575,7 @@ if (parent->data.type.type_base == AVP_TYPE_OCTETSTRING) dupos = 1; } - + /* We have to check that the new values are not equal to the sentinels */ if (type == DICT_VENDOR) { CHECK_PARAMS_DO( ((struct dict_vendor_data *)data)->vendor_id != 0, goto error_param ); @@ -1676,19 +1583,19 @@ if (type == DICT_APPLICATION) { CHECK_PARAMS_DO( ((struct dict_application_data *)data)->application_id != 0, goto error_param ); } - + /* Parameters are valid, create the new object */ CHECK_MALLOC( new = malloc(sizeof(struct dict_object)) ); - + /* Initialize the data of the new object */ init_object(new, type); init_object_data(new, data, type, dupos); new->dico = dict; new->parent = parent; - + /* We will change the dictionary => acquire the write lock */ CHECK_POSIX_DO( ret = pthread_rwlock_wrlock(&dict->dict_lock), goto error_free ); - + /* Now link the object -- this also checks that no object with same keys already exists */ switch (type) { case DICT_VENDOR: @@ -1697,83 +1604,83 @@ if (ret) goto error_unlock; break; - + case DICT_APPLICATION: /* An application object is linked in the g_dict_applciations.list[0], by their id */ ret = fd_list_insert_ordered ( &dict->dict_applications.list[0], &new->list[0], (int (*)(void*, void *))order_appli_by_id, (void **)&locref ); if (ret) goto error_unlock; break; - + case DICT_TYPE: /* A type object is linked in g_list_types by its name */ ret = fd_list_insert_ordered ( &dict->dict_types, &new->list[0], (int (*)(void*, void *))order_type_by_name, (void **)&locref ); if (ret) goto error_unlock; break; - + case DICT_ENUMVAL: /* A type_enum object is linked in it's parent 'type' object lists 1 and 2 by its name and values */ ret = fd_list_insert_ordered ( &parent->list[1], &new->list[0], (int (*)(void*, void *))order_enum_by_name, (void **)&locref ); if (ret) goto error_unlock; - + ret = fd_list_insert_ordered ( &parent->list[2], &new->list[1], (int (*)(void*, void *))order_enum_by_val, (void **)&locref ); - if (ret) { - fd_list_unlink(&new->list[0]); - goto error_unlock; + if (ret) { + fd_list_unlink(&new->list[0]); + goto error_unlock; } break; - + case DICT_AVP: /* An avp object is linked in lists 1 and 2 of its vendor, by code and name */ ret = fd_list_insert_ordered ( &vendor->list[1], &new->list[0], (int (*)(void*, void *))order_avp_by_code, (void **)&locref ); if (ret) goto error_unlock; - + ret = fd_list_insert_ordered ( &vendor->list[2], &new->list[1], (int (*)(void*, void *))order_avp_by_name, (void **)&locref ); if (ret) { fd_list_unlink(&new->list[0]); goto error_unlock; } break; - + case DICT_COMMAND: /* A command object is linked in g_list_cmd_name and g_list_cmd_code by its name and code */ ret = fd_list_insert_ordered ( &dict->dict_cmd_code, &new->list[1], (int (*)(void*, void *))order_cmd_by_codefl, (void **)&locref ); if (ret) goto error_unlock; - + ret = fd_list_insert_ordered ( &dict->dict_cmd_name, &new->list[0], (int (*)(void*, void *))order_cmd_by_name, (void **)&locref ); if (ret) { fd_list_unlink(&new->list[1]); goto error_unlock; } break; - + case DICT_RULE: /* A rule object is linked in list[2] of its parent command or AVP by the name of the AVP it refers */ ret = fd_list_insert_ordered ( &parent->list[2], &new->list[0], (int (*)(void*, void *))order_rule_by_avpvc, (void **)&locref ); if (ret) goto error_unlock; break; - + default: ASSERT(0); } - + /* A new object has been created, increment the global counter */ dict->dict_count[type]++; - + /* Unlock the dictionary */ CHECK_POSIX_DO( ret = pthread_rwlock_unlock(&dict->dict_lock), goto error_free ); - + /* Save the pointer to the new object */ if (ref) *ref = new; - + return 0; - + error_param: ret = EINVAL; goto all_errors; @@ -1786,19 +1693,19 @@ case DICT_VENDOR: TRACE_DEBUG(FULL, "Vendor %s already in dictionary", new->data.vendor.vendor_name); /* if we are here, it means the two vendors id are identical */ - if (fd_os_cmp(locref->data.vendor.vendor_name, locref->datastr_len, + if (fd_os_cmp(locref->data.vendor.vendor_name, locref->datastr_len, new->data.vendor.vendor_name, new->datastr_len)) { TRACE_DEBUG(INFO, "Conflicting vendor name: %s", new->data.vendor.vendor_name); break; } /* Otherwise (same name), we consider the function succeeded, since the (same) object is in the dictionary */ - ret = 0; + ret = 0; break; case DICT_APPLICATION: TRACE_DEBUG(FULL, "Application %s already in dictionary", new->data.application.application_name); /* got same id */ - if (fd_os_cmp(locref->data.application.application_name, locref->datastr_len, + if (fd_os_cmp(locref->data.application.application_name, locref->datastr_len, new->data.application.application_name, new->datastr_len)) { TRACE_DEBUG(FULL, "Conflicting application name"); break; @@ -1936,15 +1843,15 @@ if (ret != 0) { char * buf = NULL; size_t len = 0, offset=0; - + if (type == DICT_ENUMVAL) { CHECK_MALLOC( dump_enumval_data ( &buf, &len, &offset, data, parent->data.type.type_base )); } else { CHECK_MALLOC( dict_obj_info[CHECK_TYPE(type) ? type : 0].dump_data(&buf, &len, &offset, data) ); } - + TRACE_DEBUG(INFO, "An error occurred while adding the following data in the dictionary: %s", buf); - + if (ret == EEXIST) { offset=0; CHECK_MALLOC( dump_object(&buf, &len, &offset, locref, 0, 0, 0) ); @@ -1963,14 +1870,14 @@ int i; struct dictionary * dict; int ret=0; - + /* check params */ CHECK_PARAMS( verify_object(obj) && obj->dico); dict = obj->dico; /* Lock the dictionary for change */ CHECK_POSIX( pthread_rwlock_wrlock(&dict->dict_lock) ); - + /* check the object is not sentinel for another list */ for (i=0; ilist[i]))) { @@ -1983,14 +1890,14 @@ break; } } - + /* ok, now destroy the object */ if (!ret) destroy_object(obj); - + /* Unlock */ CHECK_POSIX( pthread_rwlock_unlock(&dict->dict_lock) ); - + return ret; } @@ -1998,25 +1905,25 @@ int fd_dict_search ( struct dictionary * dict, enum dict_object_type type, int criteria, const void * what, struct dict_object **result, int retval ) { int ret = 0; - + TRACE_ENTRY("%p %d(%s) %d %p %p %d", dict, type, dict_obj_info[CHECK_TYPE(type) ? type : 0].name, criteria, what, result, retval); - + /* Check param */ CHECK_PARAMS( dict && (dict->dict_eyec == DICT_EYECATCHER) && CHECK_TYPE(type) ); - + /* Lock the dictionary for reading */ CHECK_POSIX( pthread_rwlock_rdlock(&dict->dict_lock) ); - + /* Now call the type-specific search function */ ret = dict_obj_info[type].search_fct (dict, criteria, what, result); - + /* Unlock */ CHECK_POSIX( pthread_rwlock_unlock(&dict->dict_lock) ); - + /* Update the return value as needed */ if ((result != NULL) && (*result == NULL)) ret = retval; - + return ret; } @@ -2029,14 +1936,14 @@ ... } -The following criteria are allowed, with corresponding parent. +The following criteria are allowed, with corresponding parent. The parent is either struct dictionary * or struct dict_object * - + VENDOR_BY_ID : (parent = dictionary) returns list of vendors ordered by ID APPLICATION_BY_ID : (parent = dictionary) returns list of applications ordered by ID - ** for these two lists, the Vendor with id 0 and applciation with id 0 are excluded. + ** for these two lists, the Vendor with id 0 and applciation with id 0 are excluded. You must resolve them separatly with dict_search. - + TYPE_BY_NAME : (parent = dictionary) returns list of types ordered by name (osstring order) ENUMVAL_BY_NAME : (parent = type object) return list of constants for this type ordered by name (osstring order) ENUMVAL_BY_VALUE : (parent = type object) return list of constants for this type ordered by values @@ -2052,69 +1959,69 @@ { struct dictionary * dict = parent; struct dict_object * obj_parent = parent; - + TRACE_ENTRY("%i %p %p", criteria, parent, sentinel); - + CHECK_PARAMS(sentinel && parent); - + switch(criteria) { case VENDOR_BY_ID: /* parent must be the dictionary */ CHECK_PARAMS(dict->dict_eyec == DICT_EYECATCHER); *sentinel = &dict->dict_vendors.list[0]; break; - + case APPLICATION_BY_ID: /* parent must be the dictionary */ CHECK_PARAMS(dict->dict_eyec == DICT_EYECATCHER); *sentinel = &dict->dict_applications.list[0]; break; - + case TYPE_BY_NAME: /* parent must be the dictionary */ CHECK_PARAMS(dict->dict_eyec == DICT_EYECATCHER); *sentinel = &dict->dict_types; break; - + case ENUMVAL_BY_NAME: /* parent must be a type object */ CHECK_PARAMS(verify_object(obj_parent) && (obj_parent->type == DICT_TYPE)); *sentinel = &obj_parent->list[1]; break; - + case ENUMVAL_BY_VALUE: /* parent must be a type object */ CHECK_PARAMS(verify_object(obj_parent) && (obj_parent->type == DICT_TYPE)); *sentinel = &obj_parent->list[2]; break; - + case AVP_BY_NAME: /* parent must be a VENDOR object */ CHECK_PARAMS(verify_object(obj_parent) && (obj_parent->type == DICT_VENDOR)); *sentinel = &obj_parent->list[2]; break; - + case AVP_BY_CODE: /* parent must be a VENDOR object */ CHECK_PARAMS(verify_object(obj_parent) && (obj_parent->type == DICT_VENDOR)); *sentinel = &obj_parent->list[1]; break; - + case CMD_BY_NAME: /* parent must be the dictionary */ CHECK_PARAMS(dict->dict_eyec == DICT_EYECATCHER); *sentinel = &dict->dict_cmd_name; break; - + case CMD_BY_CODE_R: /* parent must be the dictionary */ CHECK_PARAMS(dict->dict_eyec == DICT_EYECATCHER); *sentinel = &dict->dict_cmd_code; break; - + case RULE_BY_AVP_AND_PARENT: /* parent must be command or grouped AVP */ CHECK_PARAMS(verify_object(obj_parent)); CHECK_PARAMS( (obj_parent->type == DICT_COMMAND) || - ((obj_parent->type == DICT_AVP) + ((obj_parent->type == DICT_AVP) && (obj_parent->data.avp.avp_basetype == AVP_TYPE_GROUPED)) ); *sentinel = &obj_parent->list[2]; break; - + default: CHECK_PARAMS(0); } - + return 0; } @@ -2130,23 +2037,23 @@ int fd_dict_init ( struct dictionary ** dict) { struct dictionary * new = NULL; - + TRACE_ENTRY("%p", dict); - + /* Sanity checks */ ASSERT( (sizeof(type_base_name) / sizeof(type_base_name[0])) == (AVP_TYPE_MAX + 1) ); ASSERT( (sizeof(dict_obj_info) / sizeof(dict_obj_info[0])) == (DICT_TYPE_MAX + 1) ); CHECK_PARAMS(dict); - + /* Allocate the memory for the dictionary */ CHECK_MALLOC( new = malloc(sizeof(struct dictionary)) ); memset(new, 0, sizeof(struct dictionary)); - + new->dict_eyec = DICT_EYECATCHER; - + /* Initialize the lock for the dictionary */ CHECK_POSIX( pthread_rwlock_init(&new->dict_lock, NULL) ); - + /* Initialize the sentinel for vendors and AVP lists */ init_object( &new->dict_vendors, DICT_VENDOR ); #define NO_VENDOR_NAME "(no vendor)" @@ -2154,7 +2061,7 @@ new->dict_vendors.datastr_len = CONSTSTRLEN(NO_VENDOR_NAME); /* new->dict_vendors.list[0].o = NULL; *//* overwrite since element is also sentinel for this list. */ new->dict_vendors.dico = new; - + /* Initialize the sentinel for applications */ init_object( &new->dict_applications, DICT_APPLICATION ); #define APPLICATION_0_NAME "Diameter Common Messages" @@ -2162,14 +2069,14 @@ new->dict_applications.datastr_len = CONSTSTRLEN(APPLICATION_0_NAME); /* new->dict_applications.list[0].o = NULL; *//* overwrite since since element is also sentinel for this list. */ new->dict_applications.dico = new; - + /* Initialize the sentinel for types */ fd_list_init ( &new->dict_types, NULL ); - + /* Initialize the sentinels for commands */ fd_list_init ( &new->dict_cmd_name, NULL ); fd_list_init ( &new->dict_cmd_code, NULL ); - + /* Initialize the error command object */ init_object( &new->dict_cmd_error, DICT_COMMAND ); #define GENERIC_ERROR_NAME "(generic error format)" @@ -2178,9 +2085,9 @@ new->dict_cmd_error.data.cmd.cmd_flag_mask=CMD_FLAG_ERROR | CMD_FLAG_REQUEST | CMD_FLAG_RETRANSMIT; new->dict_cmd_error.data.cmd.cmd_flag_val =CMD_FLAG_ERROR; new->dict_cmd_error.dico = new; - + *dict = new; - + /* Done */ return 0; } @@ -2189,13 +2096,13 @@ int fd_dict_fini ( struct dictionary ** dict) { int i; - + TRACE_ENTRY(""); CHECK_PARAMS( dict && *dict && ((*dict)->dict_eyec == DICT_EYECATCHER) ); - + /* Acquire the write lock to make sure no other operation is ongoing */ CHECK_POSIX( pthread_rwlock_wrlock(&(*dict)->dict_lock) ); - + /* Empty all the lists, free the elements */ destroy_list ( &(*dict)->dict_cmd_error.list[2] ); destroy_list ( &(*dict)->dict_cmd_code ); @@ -2205,14 +2112,14 @@ destroy_list ( &(*dict)->dict_applications.list[i] ); destroy_list ( &(*dict)->dict_vendors.list[i] ); } - + /* Dictionary is empty, now destroy the lock */ CHECK_POSIX( pthread_rwlock_unlock(&(*dict)->dict_lock) ); CHECK_POSIX( pthread_rwlock_destroy(&(*dict)->dict_lock) ); - + free(*dict); *dict = NULL; - + return 0; } @@ -2229,32 +2136,32 @@ { int ret = 0; struct fd_list * li; - + TRACE_ENTRY("%p %p %p", parent, data, cb); - + /* Check parameters */ CHECK_PARAMS( verify_object(parent) ); - CHECK_PARAMS( (parent->type == DICT_COMMAND) + CHECK_PARAMS( (parent->type == DICT_COMMAND) || ((parent->type == DICT_AVP) && (parent->data.avp.avp_basetype == AVP_TYPE_GROUPED)) ); - TRACE_DEBUG (FULL, "Iterating on rules of %s: '%s'.", - _OBINFO(parent).name, - parent->type == DICT_COMMAND ? + TRACE_DEBUG (FULL, "Iterating on rules of %s: '%s'.", + _OBINFO(parent).name, + parent->type == DICT_COMMAND ? parent->data.cmd.cmd_name : parent->data.avp.avp_name); - + /* Acquire the read lock */ CHECK_POSIX( pthread_rwlock_rdlock(&parent->dico->dict_lock) ); - + /* go through the list and call the cb on each rule data */ for (li = &(parent->list[2]); li->next != &(parent->list[2]); li = li->next) { ret = (*cb)(data, &(_O(li->next->o)->data.rule)); if (ret != 0) break; } - + /* Release the lock */ CHECK_POSIX( pthread_rwlock_unlock(&parent->dico->dict_lock) ); - + return ret; } @@ -2264,25 +2171,25 @@ uint32_t * ret = NULL; int i = 0; struct fd_list * li; - + TRACE_ENTRY(); - + /* Acquire the read lock */ CHECK_POSIX_DO( pthread_rwlock_rdlock(&dict->dict_lock), return NULL ); - + /* Allocate an array to contain all the elements */ CHECK_MALLOC_DO( ret = calloc( dict->dict_count[DICT_VENDOR] + 1, sizeof(uint32_t) ), goto out ); - + /* Copy the vendors IDs */ for (li = dict->dict_vendors.list[0].next; li != &(dict->dict_vendors.list[0]); li = li->next) { ret[i] = _O(li->o)->data.vendor.vendor_id; i++; ASSERT( i <= dict->dict_count[DICT_VENDOR] ); } -out: +out: /* Release the lock */ CHECK_POSIX_DO( pthread_rwlock_unlock(&dict->dict_lock), return NULL ); - + return ret; } diff -r 6a35c5470ef4 -r 19ab8ac08a36 libfdproto/dictionary_functions.c --- a/libfdproto/dictionary_functions.c Tue Jul 07 01:24:48 2020 +0800 +++ b/libfdproto/dictionary_functions.c Tue Jul 07 01:41:54 2020 +0800 @@ -287,7 +287,7 @@ int fd_dictfct_Time_encode(void * data, union avp_value * avp_value) { - char * buf; + char * buf = NULL; size_t len; TRACE_ENTRY("%p %p", data, avp_value); diff -r 6a35c5470ef4 -r 19ab8ac08a36 libfdproto/fifo.c --- a/libfdproto/fifo.c Tue Jul 07 01:24:48 2020 +0800 +++ b/libfdproto/fifo.c Tue Jul 07 01:41:54 2020 +0800 @@ -170,7 +170,9 @@ int fd_fifo_del ( struct fifo ** queue ) { struct fifo * q; +#ifndef NDEBUG int loops = 0; +#endif TRACE_ENTRY( "%p", queue ); @@ -225,7 +227,9 @@ /* Move the content of old into new, and update loc_update atomically. We leave the old queue empty but valid */ int fd_fifo_move ( struct fifo * old, struct fifo * new, struct fifo ** loc_update ) { +#ifndef NDEBUG int loops = 0; +#endif TRACE_ENTRY("%p %p %p", old, new, loc_update); CHECK_PARAMS( CHECK_FIFO( old ) && CHECK_FIFO( new )); @@ -416,6 +420,9 @@ pthread_cleanup_pop(0); queue->thrs_push-- ; +#ifdef NDEBUG + (void)ret; +#endif ASSERT( ret == 0 ); } } diff -r 6a35c5470ef4 -r 19ab8ac08a36 libfdproto/log.c --- a/libfdproto/log.c Tue Jul 07 01:24:48 2020 +0800 +++ b/libfdproto/log.c Tue Jul 07 01:41:54 2020 +0800 @@ -112,6 +112,7 @@ switch(printlevel) { case FD_LOG_ANNOYING: printf("%s A ", (use_colors == 1) ? "\e[0;37m" : ""); break; case FD_LOG_DEBUG: printf("%s DBG ", (use_colors == 1) ? "\e[0;37m" : ""); break; + case FD_LOG_INFO: printf("%sINFO ", (use_colors == 1) ? "\e[1;37m" : ""); break; case FD_LOG_NOTICE: printf("%sNOTI ", (use_colors == 1) ? "\e[1;37m" : ""); break; case FD_LOG_ERROR: printf("%sERROR ", (use_colors == 1) ? "\e[0;31m" : ""); break; case FD_LOG_FATAL: printf("%sFATAL! ", (use_colors == 1) ? "\e[0;31m" : ""); break; diff -r 6a35c5470ef4 -r 19ab8ac08a36 libfdproto/messages.c --- a/libfdproto/messages.c Tue Jul 07 01:24:48 2020 +0800 +++ b/libfdproto/messages.c Tue Jul 07 01:41:54 2020 +0800 @@ -596,29 +596,29 @@ return 0; } -/* Search a given AVP model in a message */ -int fd_msg_search_avp ( struct msg * msg, struct dict_object * what, struct avp ** avp ) +/* Search a given AVP model in a message or AVP */ +int fd_msg_search_avp ( msg_or_avp * reference, struct dict_object * what, struct avp ** avp ) { struct avp * nextavp; struct dict_avp_data dictdata; enum dict_object_type dicttype; - TRACE_ENTRY("%p %p %p", msg, what, avp); + TRACE_ENTRY("%p %p %p", reference, what, avp); - CHECK_PARAMS( CHECK_MSG(msg) && what ); + CHECK_PARAMS( VALIDATE_OBJ(reference) && what ); CHECK_PARAMS( (fd_dict_gettype(what, &dicttype) == 0) && (dicttype == DICT_AVP) ); CHECK_FCT( fd_dict_getval(what, &dictdata) ); - /* Loop on all top AVPs */ - CHECK_FCT( fd_msg_browse(msg, MSG_BRW_FIRST_CHILD, (void *)&nextavp, NULL) ); + /* Loop on all top AVPs in message or AVP */ + CHECK_FCT( fd_msg_browse(reference, MSG_BRW_FIRST_CHILD, (void *)&nextavp, NULL) ); while (nextavp) { if ( (nextavp->avp_public.avp_code == dictdata.avp_code) && (nextavp->avp_public.avp_vendor == dictdata.avp_vendor) ) /* always 0 if no V flag */ break; - /* Otherwise move to next AVP in the message */ + /* Otherwise move to next AVP in the message or AVP */ CHECK_FCT( fd_msg_browse(nextavp, MSG_BRW_NEXT, (void *)&nextavp, NULL) ); } @@ -2246,7 +2246,7 @@ if (error_info) { error_info->pei_errcode = "DIAMETER_INVALID_AVP_VALUE"; error_info->pei_avp = avp; - strncpy(error_message, err, sizeof(error_message)); + snprintf(error_message, sizeof(error_message), "%s", err); error_info->pei_message = error_message; } else { char * buf = NULL; @@ -2296,7 +2296,9 @@ /* First, check if we already have a model. */ if (msg->msg_model != NULL) { /* Check if this model is still valid for the message data */ +#ifndef NDEBUG enum dict_object_type dicttype; +#endif struct dict_cmd_data data; ASSERT(((fd_dict_gettype(msg->msg_model, &dicttype) == 0) && (dicttype == DICT_COMMAND))); (void)fd_dict_getval( msg->msg_model, &data); diff -r 6a35c5470ef4 -r 19ab8ac08a36 tests/testcnx.c --- a/tests/testcnx.c Tue Jul 07 01:24:48 2020 +0800 +++ b/tests/testcnx.c Tue Jul 07 01:41:54 2020 +0800 @@ -674,7 +674,7 @@ #ifndef DISABLE_SCTP case IPPROTO_SCTP: { - cnx = fd_cnx_cli_connect_sctp(0, TEST_PORT, &eps); + cnx = fd_cnx_cli_connect_sctp(0, TEST_PORT, &eps, NULL); CHECK( 1, (cnx ? 1 : 0) ^ cf->expect_failure ); } break; diff -r 6a35c5470ef4 -r 19ab8ac08a36 tests/testmesg.c --- a/tests/testmesg.c Tue Jul 07 01:24:48 2020 +0800 +++ b/tests/testmesg.c Tue Jul 07 01:41:54 2020 +0800 @@ -164,6 +164,8 @@ /* Create the instance, using the templates */ CHECK( 0, fd_msg_new ( acr_model, 0, &acr ) ); + +/* TODO: Do we need this recreated? acr is not used again . */ } /* Now let's create some additional Dictionary objects for the test */ @@ -282,6 +284,11 @@ CHECK( 0, fd_dict_search ( fd_g_config->cnf_dict, DICT_APPLICATION, APPLICATION_BY_NAME, "Application test", &application, ENOENT ) ); CHECK( 0, fd_dict_new ( fd_g_config->cnf_dict, DICT_COMMAND, &cmd_data , application, &command ) ); + ADD_RULE(command, 0, "Session-Id", RULE_FIXED_HEAD, 1, 1, 1); + ADD_RULE(command, 0, "Result-Code", RULE_OPTIONAL, 0, 1, 0); + ADD_RULE(command, 0, "Experimental-Result", RULE_OPTIONAL, 0, 1, 0); + ADD_RULE(command, 0, "Origin-Host", RULE_REQUIRED, 1, 1, 0); + ADD_RULE(command, 0, "Origin-Realm", RULE_REQUIRED, 1, 1, 0); } { @@ -316,7 +323,19 @@ CHECK( 0, fd_dict_new ( fd_g_config->cnf_dict, DICT_TYPE, &type_data , NULL, &type ) ); CHECK( 0, fd_dict_new ( fd_g_config->cnf_dict, DICT_AVP, &avp_data , type, NULL ) ); } - + + { + struct dict_object * type = NULL; + struct dict_type_data type_data = { AVP_TYPE_UNSIGNED32, "Enumerated(73565/Experimental-Result-Code)" }; + struct dict_avp_data avp_data = { 73576, 73565, "Experimental-Result-Code", AVP_FLAG_VENDOR, AVP_FLAG_VENDOR, AVP_TYPE_UNSIGNED32 }; + struct dict_enumval_data val1 = { "DIAMETER_TEST_RESULT_1000", { .u32 = 1000 } }; + struct dict_enumval_data val2 = { "DIAMETER_TEST_RESULT_5000", { .u32 = 5000 } }; + CHECK( 0, fd_dict_new ( fd_g_config->cnf_dict, DICT_TYPE, &type_data , NULL, &type ) ); + CHECK( 0, fd_dict_new ( fd_g_config->cnf_dict, DICT_AVP, &avp_data , type, NULL ) ); + CHECK( 0, fd_dict_new ( fd_g_config->cnf_dict, DICT_ENUMVAL, &val1 , type, NULL ) ); + CHECK( 0, fd_dict_new ( fd_g_config->cnf_dict, DICT_ENUMVAL, &val2 , type, NULL ) ); + } + #if 0 { fd_log_debug("%s", fd_dict_dump_object(FD_DUMP_TEST_PARAMS, vendor)); @@ -680,21 +699,49 @@ { struct dict_object * avp_model; struct avp * found; + struct avp * grouped = NULL; struct avp_hdr * avpdata = NULL; - /* Now find the ACR dictionary object */ + /* Now find the Test f32 AVP dictionary object */ CHECK( 0, fd_dict_search ( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "AVP Test - no vendor - f32", &avp_model, ENOENT ) ); CPYBUF(); CHECK( 0, fd_msg_parse_buffer( &buf_cpy, 344, &msg) ); - + CHECK( 0, fd_msg_parse_dict( msg, fd_g_config->cnf_dict, NULL ) ); +#if 0 + LOG_D("msg: %s", fd_msg_dump_treeview(FD_DUMP_TEST_PARAMS, msg, fd_g_config->cnf_dict, 0, 1)); +#endif + /* Search this AVP instance in the msg */ CHECK( 0, fd_msg_search_avp( msg, avp_model, &found ) ); /* Check the AVP value is 3.1415 */ CHECK( 0, fd_msg_avp_hdr ( found, &avpdata ) ); CHECK( 3.1415F, avpdata->avp_value->f32 ); - + + /* Search for the first grouped message */ + { + struct dict_avp_request grouped_req = { 73565, 0, "AVP Test - grouped"}; + CHECK( 0, fd_dict_search ( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME_AND_VENDOR, &grouped_req, &avp_model, ENOENT ) ); + } + CHECK( 0, fd_msg_search_avp( msg, avp_model, &grouped ) ); +#if 0 + LOG_D("grouped: %s", fd_msg_dump_treeview(FD_DUMP_TEST_PARAMS, grouped, fd_g_config->cnf_dict, 0, 1)); +#endif + + /* Find the first item in the grouped */ + { + struct dict_avp_request avp_req = { 73565, 0, "AVP Test - os"}; + CHECK( 0, fd_dict_search ( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avp_req, &avp_model, ENOENT ) ); + } + + CHECK( 0, fd_msg_search_avp( grouped, avp_model, &found ) ); + + /* Check the AVP value is "1" */ + CHECK( 0, fd_msg_avp_hdr ( found, &avpdata ) ); + CHECK( 8, avpdata->avp_value->os.len ); + CHECK( 0, memcmp(avpdata->avp_value->os.data, "12345678", 8)); + /* reinit the msg */ CHECK( 0, fd_msg_free ( msg ) ); @@ -1070,6 +1117,8 @@ fd_log_debug("%s", fd_msg_dump_treeview(FD_DUMP_TEST_PARAMS, msg, fd_g_config->cnf_dict, 0, 1)); TODO("Check the Failed-AVP is as expected"); + + CHECK( 0, fd_msg_free( msg ) ); } } @@ -1448,6 +1497,120 @@ CHECK( 0, fd_msg_free( msg ) ); } } + + /* Test the fd_msg_add_result function for Result-Code */ + { + struct msg * msg = NULL; + struct dict_object * avp_model = NULL; + struct avp * rc = NULL; + struct avp_hdr * avpdata = NULL; + + { + struct dict_object * cmd_model = NULL; + CHECK( 0, fd_dict_search ( fd_g_config->cnf_dict, DICT_COMMAND, CMD_BY_NAME, "Test-Command-Answer", &cmd_model, ENOENT ) ); + + /* Create a message */ + CHECK( 0, fd_msg_new ( cmd_model, 0, &msg ) ); + + /* Add a session id */ + CHECK( 0, fd_msg_new_session( msg, (os0_t)"testmsg", strlen("testmsg") ) ); + + /* Find the DICT_TYPE Enumerated(Result-Code) */ + struct dict_object * restype = NULL; + CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_TYPE, TYPE_BY_NAME, "Enumerated(Result-Code)", &restype, ENOENT ) ); + + /* Now test the behavior of fd_msg_add_result for Result-Code AVP */ + CHECK( 0, fd_msg_add_result(msg, 0, restype, "DIAMETER_SUCCESS", NULL, NULL, 1) ); + + LOG_D("%s", fd_msg_dump_treeview(FD_DUMP_TEST_PARAMS, msg, fd_g_config->cnf_dict, 0, 1)); + } + + /* Ensure Result-Code is present */ + CHECK( 0, fd_dict_search ( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Result-Code", &avp_model, ENOENT ) ); + CHECK( 0, fd_msg_search_avp( msg, avp_model, &rc ) ); + + /* Check the Result-Code AVP value is DIAMETER_SUCCESS */ + CHECK( 0, fd_msg_avp_hdr ( rc, &avpdata ) ); + CHECK( ER_DIAMETER_SUCCESS, avpdata->avp_value->u32 ); + + /* Ensure Experimental-Result is missing */ + CHECK( 0, fd_dict_search ( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Experimental-Result", &avp_model, ENOENT ) ); + CHECK( ENOENT, fd_msg_search_avp( msg, avp_model, NULL ) ); + + /* Free msg */ + CHECK( 0, fd_msg_free( msg ) ); + } + + /* Test the fd_msg_add_result function for Experimental-Result */ + { + struct msg * msg = NULL; + struct dict_object * avp_model = NULL; + struct avp * er = NULL; + struct avp * erc = NULL; + struct avp_hdr * avpdata = NULL; + + { + struct dict_object * cmd_model = NULL; + CHECK( 0, fd_dict_search ( fd_g_config->cnf_dict, DICT_COMMAND, CMD_BY_NAME, "Test-Command-Answer", &cmd_model, ENOENT ) ); + + /* Create a message */ + CHECK( 0, fd_msg_new ( cmd_model, 0, &msg ) ); + + /* Add a session id */ + CHECK( 0, fd_msg_new_session( msg, (os0_t)"testmsg", strlen("testmsg") ) ); + + /* Find the DICT_TYPE Enumerated(73565/Experimental-Result-Code) */ + struct dict_object * restype = NULL; + CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_TYPE, TYPE_BY_NAME, "Enumerated(73565/Experimental-Result-Code)", &restype, ENOENT ) ); + + /* Now test the behavior of fd_msg_add_result for Experimental-Result AVP */ + CHECK( 0, fd_msg_add_result(msg, 73565, restype, "DIAMETER_TEST_RESULT_5000", NULL, NULL, 1) ); + + LOG_D("%s", fd_msg_dump_treeview(FD_DUMP_TEST_PARAMS, msg, fd_g_config->cnf_dict, 0, 1)); + } + + /* Ensure Result-Code is missing */ + CHECK( 0, fd_dict_search ( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Result-Code", &avp_model, ENOENT ) ); + CHECK( ENOENT, fd_msg_search_avp( msg, avp_model, NULL ) ); + + /* Ensure Experimental-Result is present */ + CHECK( 0, fd_dict_search ( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Experimental-Result", &avp_model, ENOENT ) ); + CHECK( 0, fd_msg_search_avp( msg, avp_model, &er ) ); + + /* Ensure Experimental-Result-Code is present */ + CHECK( 0, fd_dict_search ( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Experimental-Result-Code", &avp_model, ENOENT ) ); + CHECK( 0, fd_msg_search_avp( er, avp_model, &erc ) ); + + /* Check the Experimental-Result-Code AVP value is 5000 */ + CHECK( 0, fd_msg_avp_hdr ( erc, &avpdata ) ); + CHECK( 5000, avpdata->avp_value->u32 ); + + /* Free msg */ + CHECK( 0, fd_msg_free( msg ) ); + } + + /* Check IPv4 -> IPv6 and IPv6->IPv4 mapping */ + { + struct in_addr i4; + memset(&i4, 0xff, sizeof(i4)); + CHECK( 1, inet_pton( AF_INET, TEST_IP4, &i4 ) ); + + #define TEST_IP6MAP "::ffff:" TEST_IP4 + + struct in6_addr i6; + memset(&i6, 0xff, sizeof(i6)); + IN6_ADDR_V4MAP(&i6.s6_addr, i4.s_addr); + char buf6[INET6_ADDRSTRLEN]; + CHECK( 0, (inet_ntop( AF_INET6, &i6, buf6, sizeof(buf6) ) == NULL) ? errno : 0 ); + LOG_D("buf6='%s'", buf6); + CHECK( 0, strcasecmp( buf6, TEST_IP6MAP ) ); + + struct in_addr o4; + o4.s_addr = IN6_ADDR_V4UNMAP(&i6); + char buf4[INET_ADDRSTRLEN]; + CHECK( 0, (inet_ntop( AF_INET, &o4.s_addr, buf4, sizeof(buf4) ) == NULL) ? errno : 0 ); + CHECK( 0, strcmp( buf4, TEST_IP4 ) ); + } /* That's all for the tests yet */ PASSTEST(); diff -r 6a35c5470ef4 -r 19ab8ac08a36 tests/testsctp.c --- a/tests/testsctp.c Tue Jul 07 01:24:48 2020 +0800 +++ b/tests/testsctp.c Tue Jul 07 01:41:54 2020 +0800 @@ -98,7 +98,7 @@ CHECK( 0, fd_sctp_listen( sock )); /* Now, create the client socket */ - CHECK( 0, fd_sctp_client( &cli.cc_socket, 0, TEST_PORT, &eps )); + CHECK( 0, fd_sctp_client( &cli.cc_socket, 0, TEST_PORT, &eps, NULL )); /* Accept this connection */ srv.cc_socket = accept(sock, NULL, NULL);