Initial commit
Change-Id: I6a4444e3c193dae437cd7929f4c39aba7b749efa
diff --git a/extensions/dict_ts29229_avps/dict_ts29229_avps.c b/extensions/dict_ts29229_avps/dict_ts29229_avps.c
new file mode 100644
index 0000000..d8beb19
--- /dev/null
+++ b/extensions/dict_ts29229_avps/dict_ts29229_avps.c
@@ -0,0 +1,1206 @@
+/*
+* Copyright (c) 2017 Sprint
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+/****************
+ Generated By: fdtool enhancements to diafuzzer
+ License: same as freeDiameter
+****************/
+
+
+/*
+ * Dictionary definitions of objects specified in ts29229_avps (e10).
+ */
+#include <freeDiameter/extension.h>
+
+#define PROTO_VER "e10"
+#define GEN_DATE 1506697168.8
+
+const char *ts29229_avps_proto_ver = PROTO_VER;
+const double ts29229_avps_gen_date = GEN_DATE;
+
+/* The content of this file follows the same structure as dict_base_proto.c */
+
+#define CHECK_dict_new( _type, _data, _parent, _ref ) \
+{ \
+ int _ret = fd_dict_new( fd_g_config->cnf_dict, (_type), (_data), (_parent), (_ref) ); \
+ if ( _ret != 0 && _ret != EEXIST ) \
+ return _ret; \
+}
+
+#define CHECK_dict_search( _type, _criteria, _what, _result ) \
+ CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, (_type), (_criteria), (_what), (_result), ENOENT) );
+
+struct local_rules_definition {
+ struct dict_avp_request avp_vendor_plus_name;
+ enum rule_position position;
+ int min;
+ int max;
+};
+
+#define RULE_ORDER( _position ) ((((_position) == RULE_FIXED_HEAD) || ((_position) == RULE_FIXED_TAIL)) ? 1 : 0 )
+
+/* Attention! This version of the macro uses AVP_BY_NAME_AND_VENDOR, in contrast to most other copies! */
+#define PARSE_loc_rules( _rulearray, _parent) { \
+ int __ar; \
+ for (__ar=0; __ar < sizeof(_rulearray) / sizeof((_rulearray)[0]); __ar++) { \
+ struct dict_rule_data __data = { NULL, \
+ (_rulearray)[__ar].position, \
+ 0, \
+ (_rulearray)[__ar].min, \
+ (_rulearray)[__ar].max}; \
+ __data.rule_order = RULE_ORDER(__data.rule_position); \
+ CHECK_FCT( fd_dict_search( \
+ fd_g_config->cnf_dict, \
+ DICT_AVP, \
+ AVP_BY_NAME_AND_VENDOR, \
+ &(_rulearray)[__ar].avp_vendor_plus_name, \
+ &__data.rule_avp, 0 ) ); \
+ if ( !__data.rule_avp ) { \
+ TRACE_DEBUG(INFO, "AVP Not found: '%s'", (_rulearray)[__ar].avp_vendor_plus_name.avp_name); \
+ return ENOENT; \
+ } \
+ { \
+ int _ret = fd_dict_new( fd_g_config->cnf_dict, DICT_RULE, &(__data), (_parent), NULL ); \
+ if ( _ret != 0 && _ret != EEXIST ) { \
+ TRACE_DEBUG(INFO, "Error on rule with AVP '%s'", \
+ (_rulearray)[__ar].avp_vendor_plus_name.avp_name); \
+ return EINVAL; \
+ } \
+ } \
+ } \
+}
+
+#define CHECK_vendor_new( _data ) { \
+ struct dict_object * vendor_found; \
+ if (fd_dict_search(fd_g_config->cnf_dict,DICT_VENDOR,VENDOR_BY_ID,&_data.vendor_id,&vendor_found,ENOENT) == ENOENT) { \
+ CHECK_FCT(fd_dict_new(fd_g_config->cnf_dict, DICT_VENDOR, &_data, NULL, NULL)); \
+ } \
+}
+
+#define enumval_def_u32( _val_, _str_ ) \
+ { _str_, { .u32 = _val_ }}
+
+#define enumval_def_os( _len_, _val_, _str_ ) \
+ { _str_, { .os = { .data = (unsigned char *)_val_, .len = _len_ }}}
+
+
+static int dict_ts29229_avps_load_defs(char * conffile)
+{
+ TRACE_ENTRY("%p", conffile);
+ /* Application Section */
+ {
+ /* Create the vendors */ {
+ struct dict_vendor_data vendor_data = { 10415, "3GPP" };
+ CHECK_dict_new(DICT_VENDOR, &vendor_data, NULL, NULL)
+ }
+ }
+
+
+ /* AVP section */
+ {
+ struct dict_object * Address_type;
+ struct dict_object * UTF8String_type;
+ struct dict_object * DiameterIdentity_type;
+ struct dict_object * DiameterURI_type;
+ struct dict_object * Time_type;
+ struct dict_object * IPFilterRule_type;
+
+ CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "Address", &Address_type);
+ CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "UTF8String", &UTF8String_type);
+ CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "DiameterIdentity", &DiameterIdentity_type);
+ CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "DiameterURI", &DiameterURI_type);
+ CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "Time", &Time_type);
+ CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "IPFilterRule", &IPFilterRule_type);
+ /* 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);
+ };
+ /* 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);
+ };
+ /* 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);
+ };
+ /* 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);
+ };
+ /* 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);
+ };
+ /* 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);
+ };
+ /* 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);
+ };
+ /* 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-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-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-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-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);
+ };
+ /* Server-Assignment-Type */
+ {
+ struct dict_avp_data data = {
+ 614, /* Code */
+ 10415, /* Vendor */
+ "Server-Assignment-Type", /* Name */
+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
+ AVP_TYPE_INTEGER32 /* base type of data */
+ };
+ struct dict_object *type;
+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Server-Assignment-Type)", NULL, NULL, NULL };
+ struct dict_enumval_data t_1 = { "NO_ASSIGNMENT", { .i32=0 }};
+ struct dict_enumval_data t_2 = { "REGISTRATION", { .i32=1 }};
+ struct dict_enumval_data t_3 = { "AUTHENTICATION_TIMEOUT", { .i32=10 }};
+ struct dict_enumval_data t_4 = { "DEREGISTRATION_TOO_MUCH_DATA", { .i32=11 }};
+ struct dict_enumval_data t_5 = { "AAA_USER_DATA_REQUEST", { .i32=12 }};
+ struct dict_enumval_data t_6 = { "PGW_UPDATE", { .i32=13 }};
+ struct dict_enumval_data t_7 = { "RESTORATION", { .i32=14 }};
+ struct dict_enumval_data t_8 = { "RE_REGISTRATION", { .i32=2 }};
+ struct dict_enumval_data t_9 = { "UNREGISTERED_USER", { .i32=3 }};
+ struct dict_enumval_data t_10 = { "TIMEOUT_DEREGISTRATION", { .i32=4 }};
+ struct dict_enumval_data t_11 = { "USER_DEREGISTRATION", { .i32=5 }};
+ struct dict_enumval_data t_12 = { "TIMEOUT_DEREGISTRATION_STORE_SERVER_NAME", { .i32=6 }};
+ struct dict_enumval_data t_13 = { "USER_DEREGISTRATION_STORE_SERVER_NAME", { .i32=7 }};
+ struct dict_enumval_data t_14 = { "ADMINISTRATIVE_DEREGISTRATION", { .i32=8 }};
+ struct dict_enumval_data t_15 = { "AUTHENTICATION_FAILURE", { .i32=9 }};
+ /* Create the Enumerated type, and then the AVP */
+ CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
+ CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
+ CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
+ CHECK_dict_new( DICT_ENUMVAL, &t_3, type, NULL);
+ CHECK_dict_new( DICT_ENUMVAL, &t_4, type, NULL);
+ CHECK_dict_new( DICT_ENUMVAL, &t_5, type, NULL);
+ CHECK_dict_new( DICT_ENUMVAL, &t_6, type, NULL);
+ CHECK_dict_new( DICT_ENUMVAL, &t_7, type, NULL);
+ CHECK_dict_new( DICT_ENUMVAL, &t_8, type, NULL);
+ CHECK_dict_new( DICT_ENUMVAL, &t_9, type, NULL);
+ CHECK_dict_new( DICT_ENUMVAL, &t_10, type, NULL);
+ CHECK_dict_new( DICT_ENUMVAL, &t_11, type, NULL);
+ CHECK_dict_new( DICT_ENUMVAL, &t_12, type, NULL);
+ CHECK_dict_new( DICT_ENUMVAL, &t_13, type, NULL);
+ CHECK_dict_new( DICT_ENUMVAL, &t_14, type, NULL);
+ CHECK_dict_new( DICT_ENUMVAL, &t_15, type, NULL);
+ CHECK_dict_new( DICT_AVP, &data, type, NULL);
+ };
+ /* Reason-Code */
+ {
+ struct dict_avp_data data = {
+ 616, /* Code */
+ 10415, /* Vendor */
+ "Reason-Code", /* Name */
+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
+ AVP_TYPE_INTEGER32 /* base type of data */
+ };
+ struct dict_object *type;
+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Reason-Code)", NULL, NULL, NULL };
+ struct dict_enumval_data t_1 = { "PERMANENT_TERMINATION", { .i32=0 }};
+ struct dict_enumval_data t_2 = { "NEW_SERVER_ASSIGNED", { .i32=1 }};
+ struct dict_enumval_data t_3 = { "SERVER_CHANGE", { .i32=2 }};
+ struct dict_enumval_data t_4 = { "REMOVE_S_CSCF", { .i32=3 }};
+ /* Create the Enumerated type, and then the AVP */
+ CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
+ CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
+ CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
+ CHECK_dict_new( DICT_ENUMVAL, &t_3, type, NULL);
+ CHECK_dict_new( DICT_ENUMVAL, &t_4, type, NULL);
+ CHECK_dict_new( DICT_AVP, &data, type, NULL);
+ };
+ /* 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);
+ };
+ /* 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);
+ };
+ /* 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);
+ };
+ /* 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);
+ };
+ /* 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);
+ };
+ /* User-Authorization-Type */
+ {
+ struct dict_avp_data data = {
+ 623, /* Code */
+ 10415, /* Vendor */
+ "User-Authorization-Type", /* Name */
+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
+ AVP_TYPE_INTEGER32 /* base type of data */
+ };
+ struct dict_object *type;
+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(User-Authorization-Type)", NULL, NULL, NULL };
+ struct dict_enumval_data t_1 = { "REGISTRATION", { .i32=0 }};
+ struct dict_enumval_data t_2 = { "DE_REGISTRATION", { .i32=1 }};
+ struct dict_enumval_data t_3 = { "REGISTRATION_AND_CAPABILITIES", { .i32=2 }};
+ /* Create the Enumerated type, and then the AVP */
+ CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
+ CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
+ CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
+ CHECK_dict_new( DICT_ENUMVAL, &t_3, type, NULL);
+ CHECK_dict_new( DICT_AVP, &data, type, NULL);
+ };
+ /* User-Data-Already-Available */
+ {
+ struct dict_avp_data data = {
+ 624, /* Code */
+ 10415, /* Vendor */
+ "User-Data-Already-Available", /* Name */
+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
+ AVP_TYPE_INTEGER32 /* base type of data */
+ };
+ struct dict_object *type;
+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(User-Data-Already-Available)", NULL, NULL, NULL };
+ struct dict_enumval_data t_1 = { "USER_DATA_NOT_AVAILABLE", { .i32=0 }};
+ struct dict_enumval_data t_2 = { "USER_DATA_ALREADY_AVAILABLE", { .i32=1 }};
+ /* Create the Enumerated type, and then the AVP */
+ CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
+ CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
+ CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
+ CHECK_dict_new( DICT_AVP, &data, type, NULL);
+ };
+ /* 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);
+ };
+ /* 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);
+ };
+ /* 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);
+ };
+ /* 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);
+ };
+ /* Originating-Request */
+ {
+ struct dict_avp_data data = {
+ 633, /* Code */
+ 10415, /* Vendor */
+ "Originating-Request", /* Name */
+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
+ AVP_TYPE_INTEGER32 /* base type of data */
+ };
+ struct dict_object *type;
+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Originating-Request)", NULL, NULL, NULL };
+ struct dict_enumval_data t_1 = { "ORIGINATING", { .i32=0 }};
+ /* Create the Enumerated type, and then the AVP */
+ CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
+ CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
+ CHECK_dict_new( DICT_AVP, &data, type, 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);
+ };
+ /* 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);
+ };
+ /* Loose-Route-Indication */
+ {
+ struct dict_avp_data data = {
+ 638, /* Code */
+ 10415, /* Vendor */
+ "Loose-Route-Indication", /* Name */
+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
+ AVP_FLAG_VENDOR, /* Fixed flag values */
+ AVP_TYPE_INTEGER32 /* base type of data */
+ };
+ struct dict_object *type;
+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Loose-Route-Indication)", NULL, NULL, NULL };
+ struct dict_enumval_data t_1 = { "LOOSE_ROUTE_NOT_REQUIRED", { .i32=0 }};
+ struct dict_enumval_data t_2 = { "LOOSE_ROUTE_REQUIRED", { .i32=1 }};
+ /* Create the Enumerated type, and then the AVP */
+ CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
+ CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
+ CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
+ CHECK_dict_new( DICT_AVP, &data, type, NULL);
+ };
+ /* 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);
+ };
+ /* 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);
+ };
+ /* 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);
+ };
+ /* 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);
+ };
+ /* 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);
+ };
+ /* 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);
+ };
+ /* Multiple-Registration-Indication */
+ {
+ struct dict_avp_data data = {
+ 648, /* Code */
+ 10415, /* Vendor */
+ "Multiple-Registration-Indication", /* Name */
+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
+ AVP_FLAG_VENDOR, /* Fixed flag values */
+ AVP_TYPE_INTEGER32 /* base type of data */
+ };
+ struct dict_object *type;
+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Multiple-Registration-Indication)", NULL, NULL, NULL };
+ struct dict_enumval_data t_1 = { "NOT_MULTIPLE_REGISTRATION", { .i32=0 }};
+ struct dict_enumval_data t_2 = { "MULTIPLE_REGISTRATION", { .i32=1 }};
+ /* Create the Enumerated type, and then the AVP */
+ CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
+ CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
+ CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
+ CHECK_dict_new( DICT_AVP, &data, type, NULL);
+ };
+ /* Session-Priority */
+ {
+ struct dict_avp_data data = {
+ 650, /* Code */
+ 10415, /* Vendor */
+ "Session-Priority", /* Name */
+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
+ AVP_FLAG_VENDOR, /* Fixed flag values */
+ AVP_TYPE_INTEGER32 /* base type of data */
+ };
+ struct dict_object *type;
+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Session-Priority)", NULL, NULL, NULL };
+ struct dict_enumval_data t_1 = { "PRIORITY_0", { .i32=0 }};
+ struct dict_enumval_data t_2 = { "PRIORITY_1", { .i32=1 }};
+ struct dict_enumval_data t_3 = { "PRIORITY_2", { .i32=2 }};
+ struct dict_enumval_data t_4 = { "PRIORITY_3", { .i32=3 }};
+ struct dict_enumval_data t_5 = { "PRIORITY_4", { .i32=4 }};
+ /* Create the Enumerated type, and then the AVP */
+ CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
+ CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
+ CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
+ CHECK_dict_new( DICT_ENUMVAL, &t_3, type, NULL);
+ CHECK_dict_new( DICT_ENUMVAL, &t_4, type, NULL);
+ CHECK_dict_new( DICT_ENUMVAL, &t_5, type, NULL);
+ CHECK_dict_new( DICT_AVP, &data, type, NULL);
+ };
+ /* Priviledged-Sender-Indication */
+ {
+ struct dict_avp_data data = {
+ 652, /* Code */
+ 10415, /* Vendor */
+ "Priviledged-Sender-Indication", /* Name */
+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
+ AVP_FLAG_VENDOR, /* Fixed flag values */
+ AVP_TYPE_INTEGER32 /* base type of data */
+ };
+ struct dict_object *type;
+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Priviledged-Sender-Indication)", NULL, NULL, NULL };
+ struct dict_enumval_data t_1 = { "PRIVILEDGED_SENDER", { .i32=1 }};
+ /* Create the Enumerated type, and then the AVP */
+ CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
+ CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
+ CHECK_dict_new( DICT_AVP, &data, type, 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);
+ };
+ /* Initial-CSeq-Sequence-Number */
+ {
+ 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 */
+ {
+ 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);
+ };
+ /* WebRTC-Authentication-Function-Name */
+ {
+ 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 */
+ {
+ 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);
+ };
+ /* 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);
+ };
+ /* Subscription-Info */
+ {
+ /* Grouped */
+ struct dict_object * avp;
+ 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, &avp);
+ }
+ /* Server-Capabilities */
+ {
+ /* Grouped */
+ struct dict_object * avp;
+ 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, &avp);
+ }
+ /* Associated-Registered-Identities */
+ {
+ /* Grouped */
+ struct dict_object * avp;
+ 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, &avp);
+ }
+ /* SIP-Digest-Authenticate */
+ {
+ /* Grouped */
+ struct dict_object * avp;
+ 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, &avp);
+ }
+ /* Supported-Features */
+ {
+ /* Grouped */
+ struct dict_object * avp;
+ 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, &avp);
+ }
+ /* Allowed-WAF-WWSF-Identities */
+ {
+ /* Grouped */
+ struct dict_object * avp;
+ 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, &avp);
+ }
+ /* Identity-with-Emergency-Registration */
+ {
+ /* Grouped */
+ struct dict_object * avp;
+ 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, &avp);
+ }
+ /* Associated-Identities */
+ {
+ /* Grouped */
+ struct dict_object * avp;
+ 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, &avp);
+ }
+ /* Deregistration-Reason */
+ {
+ /* Grouped */
+ struct dict_object * avp;
+ 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, &avp);
+ }
+ /* Charging-Information */
+ {
+ /* Grouped */
+ struct dict_object * avp;
+ 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, &avp);
+ }
+ /* SIP-Auth-Data-Item */
+ {
+ /* Grouped */
+ struct dict_object * avp;
+ 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, &avp);
+ }
+ /* Restoration-Info */
+ {
+ /* Grouped */
+ struct dict_object * avp;
+ 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, &avp);
+ }
+ /* Supported-Applications */
+ {
+ /* Grouped */
+ struct dict_object * avp;
+ 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, &avp);
+ }
+ /* SCSCF-Restoration-Info */
+ {
+ /* Grouped */
+ struct dict_object * avp;
+ 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, &avp);
+ }
+
+
+ }
+
+ /* Commands section */
+ {
+
+ }
+
+ return 0;
+}
+
+static int dict_ts29229_avps_load_rules(char * conffile)
+{
+ /* Grouped AVP section */
+ {
+ /* Subscription-Info */
+ {
+ /* Grouped */
+ struct dict_object * avp;
+ struct dict_avp_request avp_vendor_plus_name = { .avp_vendor = 10415, .avp_name = "Subscription-Info"};
+ CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
+ struct local_rules_definition rules[] =
+ {
+ { { .avp_vendor = 10415, .avp_name = "Call-ID-SIP-Header"}, RULE_REQUIRED, -1, -1 },
+ { { .avp_vendor = 10415, .avp_name = "From-SIP-Header"}, RULE_REQUIRED, -1, -1 },
+ { { .avp_vendor = 10415, .avp_name = "To-SIP-Header"}, RULE_REQUIRED, -1, -1 },
+ { { .avp_vendor = 10415, .avp_name = "Record-Route"}, RULE_REQUIRED, -1, -1 },
+ { { .avp_vendor = 10415, .avp_name = "Contact"}, RULE_REQUIRED, -1, -1 }
+ };
+ PARSE_loc_rules( rules, avp );
+ }
+ /* Server-Capabilities */
+ {
+ /* Grouped */
+ struct dict_object * avp;
+ struct dict_avp_request avp_vendor_plus_name = { .avp_vendor = 10415, .avp_name = "Server-Capabilities"};
+ CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
+ struct local_rules_definition rules[] =
+ {
+ { { .avp_vendor = 10415, .avp_name = "Mandatory-Capability"}, RULE_OPTIONAL, -1, -1 },
+ { { .avp_vendor = 10415, .avp_name = "Optional-Capability"}, RULE_OPTIONAL, -1, -1 },
+ { { .avp_vendor = 10415, .avp_name = "Server-Name"}, RULE_OPTIONAL, -1, -1 }
+ };
+ PARSE_loc_rules( rules, avp );
+ }
+ /* Associated-Registered-Identities */
+ {
+ /* Grouped */
+ struct dict_object * avp;
+ struct dict_avp_request avp_vendor_plus_name = { .avp_vendor = 10415, .avp_name = "Associated-Registered-Identities"};
+ CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
+ struct local_rules_definition rules[] =
+ {
+ { { .avp_vendor = 0, .avp_name = "User-Name"}, RULE_OPTIONAL, -1, -1 }
+ };
+ PARSE_loc_rules( rules, avp );
+ }
+ /* SIP-Digest-Authenticate */
+ {
+ /* Grouped */
+ struct dict_object * avp;
+ struct dict_avp_request avp_vendor_plus_name = { .avp_vendor = 10415, .avp_name = "SIP-Digest-Authenticate"};
+ CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
+ struct local_rules_definition rules[] =
+ {
+ { { .avp_vendor = 0, .avp_name = "Digest-Realm"}, RULE_REQUIRED, -1, -1 },
+ { { .avp_vendor = 0, .avp_name = "Digest-Algorithm"}, RULE_OPTIONAL, -1, -1 },
+ { { .avp_vendor = 0, .avp_name = "Digest-QoP"}, RULE_REQUIRED, -1, -1 },
+ { { .avp_vendor = 0, .avp_name = "Digest-HA1"}, RULE_REQUIRED, -1, -1 }
+ };
+ PARSE_loc_rules( rules, avp );
+ }
+ /* Supported-Features */
+ {
+ /* Grouped */
+ struct dict_object * avp;
+ struct dict_avp_request avp_vendor_plus_name = { .avp_vendor = 10415, .avp_name = "Supported-Features"};
+ CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
+ struct local_rules_definition rules[] =
+ {
+ { { .avp_vendor = 0, .avp_name = "Vendor-Id"}, RULE_REQUIRED, -1, -1 },
+ { { .avp_vendor = 10415, .avp_name = "Feature-List-ID"}, RULE_REQUIRED, -1, -1 },
+ { { .avp_vendor = 10415, .avp_name = "Feature-List"}, RULE_REQUIRED, -1, -1 }
+ };
+ PARSE_loc_rules( rules, avp );
+ }
+ /* Allowed-WAF-WWSF-Identities */
+ {
+ /* Grouped */
+ struct dict_object * avp;
+ struct dict_avp_request avp_vendor_plus_name = { .avp_vendor = 10415, .avp_name = "Allowed-WAF-WWSF-Identities"};
+ CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
+ struct local_rules_definition rules[] =
+ {
+ { { .avp_vendor = 10415, .avp_name = "WebRTC-Authentication-Function-Name"}, RULE_OPTIONAL, -1, -1 },
+ { { .avp_vendor = 10415, .avp_name = "WebRTC-Web-Server-Function-Name"}, RULE_OPTIONAL, -1, -1 }
+ };
+ PARSE_loc_rules( rules, avp );
+ }
+ /* Identity-with-Emergency-Registration */
+ {
+ /* Grouped */
+ struct dict_object * avp;
+ struct dict_avp_request avp_vendor_plus_name = { .avp_vendor = 10415, .avp_name = "Identity-with-Emergency-Registration"};
+ CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
+ struct local_rules_definition rules[] =
+ {
+ { { .avp_vendor = 0, .avp_name = "User-Name"}, RULE_REQUIRED, -1, -1 },
+ { { .avp_vendor = 10415, .avp_name = "Public-Identity"}, RULE_REQUIRED, -1, -1 }
+ };
+ PARSE_loc_rules( rules, avp );
+ }
+ /* Associated-Identities */
+ {
+ /* Grouped */
+ struct dict_object * avp;
+ struct dict_avp_request avp_vendor_plus_name = { .avp_vendor = 10415, .avp_name = "Associated-Identities"};
+ CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
+ struct local_rules_definition rules[] =
+ {
+ { { .avp_vendor = 0, .avp_name = "User-Name"}, RULE_OPTIONAL, -1, -1 }
+ };
+ PARSE_loc_rules( rules, avp );
+ }
+ /* Deregistration-Reason */
+ {
+ /* Grouped */
+ struct dict_object * avp;
+ struct dict_avp_request avp_vendor_plus_name = { .avp_vendor = 10415, .avp_name = "Deregistration-Reason"};
+ CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
+ struct local_rules_definition rules[] =
+ {
+ { { .avp_vendor = 10415, .avp_name = "Reason-Code"}, RULE_REQUIRED, -1, -1 },
+ { { .avp_vendor = 10415, .avp_name = "Reason-Info"}, RULE_OPTIONAL, -1, -1 }
+ };
+ PARSE_loc_rules( rules, avp );
+ }
+ /* Charging-Information */
+ {
+ /* Grouped */
+ struct dict_object * avp;
+ struct dict_avp_request avp_vendor_plus_name = { .avp_vendor = 10415, .avp_name = "Charging-Information"};
+ CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
+ struct local_rules_definition rules[] =
+ {
+ { { .avp_vendor = 10415, .avp_name = "Primary-Event-Charging-Function-Name"}, RULE_OPTIONAL, -1, -1 },
+ { { .avp_vendor = 10415, .avp_name = "Secondary-Event-Charging-Function-Name"}, RULE_OPTIONAL, -1, -1 },
+ { { .avp_vendor = 10415, .avp_name = "Primary-Charging-Collection-Function-Name"}, RULE_OPTIONAL, -1, -1 },
+ { { .avp_vendor = 10415, .avp_name = "Secondary-Charging-Collection-Function-Name"}, RULE_OPTIONAL, -1, -1 }
+ };
+ PARSE_loc_rules( rules, avp );
+ }
+ /* SIP-Auth-Data-Item */
+ {
+ /* Grouped */
+ struct dict_object * avp;
+ struct dict_avp_request avp_vendor_plus_name = { .avp_vendor = 10415, .avp_name = "SIP-Auth-Data-Item"};
+ CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
+ struct local_rules_definition rules[] =
+ {
+ { { .avp_vendor = 10415, .avp_name = "SIP-Item-Number"}, RULE_OPTIONAL, -1, -1 },
+ { { .avp_vendor = 10415, .avp_name = "SIP-Authentication-Scheme"}, RULE_OPTIONAL, -1, -1 },
+ { { .avp_vendor = 10415, .avp_name = "SIP-Authenticate"}, RULE_OPTIONAL, -1, -1 },
+ { { .avp_vendor = 10415, .avp_name = "SIP-Authorization"}, RULE_OPTIONAL, -1, -1 },
+ { { .avp_vendor = 10415, .avp_name = "SIP-Authentication-Context"}, RULE_OPTIONAL, -1, -1 },
+ { { .avp_vendor = 10415, .avp_name = "Confidentiality-Key"}, RULE_OPTIONAL, -1, -1 },
+ { { .avp_vendor = 10415, .avp_name = "Integrity-Key"}, RULE_OPTIONAL, -1, -1 },
+ { { .avp_vendor = 10415, .avp_name = "SIP-Digest-Authenticate"}, RULE_OPTIONAL, -1, -1 },
+ { { .avp_vendor = 0, .avp_name = "Framed-IP-Address"}, RULE_OPTIONAL, -1, -1 },
+ { { .avp_vendor = 0, .avp_name = "Framed-IPv6-Prefix"}, RULE_OPTIONAL, -1, -1 },
+ { { .avp_vendor = 0, .avp_name = "Framed-Interface-Id"}, RULE_OPTIONAL, -1, -1 },
+ { { .avp_vendor = 13019, .avp_name = "Line-Identifier"}, RULE_OPTIONAL, -1, -1 }
+ };
+ PARSE_loc_rules( rules, avp );
+ }
+ /* Restoration-Info */
+ {
+ /* Grouped */
+ struct dict_object * avp;
+ struct dict_avp_request avp_vendor_plus_name = { .avp_vendor = 10415, .avp_name = "Restoration-Info"};
+ CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
+ struct local_rules_definition rules[] =
+ {
+ { { .avp_vendor = 10415, .avp_name = "Path"}, RULE_REQUIRED, -1, -1 },
+ { { .avp_vendor = 10415, .avp_name = "Contact"}, RULE_REQUIRED, -1, -1 },
+ { { .avp_vendor = 10415, .avp_name = "Initial-CSeq-Sequence-Number"}, RULE_OPTIONAL, -1, -1 },
+ { { .avp_vendor = 10415, .avp_name = "Call-ID-SIP-Header"}, RULE_OPTIONAL, -1, -1 },
+ { { .avp_vendor = 10415, .avp_name = "Subscription-Info"}, RULE_OPTIONAL, -1, -1 }
+ };
+ PARSE_loc_rules( rules, avp );
+ }
+ /* Supported-Applications */
+ {
+ /* Grouped */
+ struct dict_object * avp;
+ struct dict_avp_request avp_vendor_plus_name = { .avp_vendor = 10415, .avp_name = "Supported-Applications"};
+ CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
+ struct local_rules_definition rules[] =
+ {
+ { { .avp_vendor = 0, .avp_name = "Auth-Application-Id"}, RULE_OPTIONAL, -1, -1 },
+ { { .avp_vendor = 0, .avp_name = "Acct-Application-Id"}, RULE_OPTIONAL, -1, -1 },
+ { { .avp_vendor = 0, .avp_name = "Vendor-Specific-Application-Id"}, RULE_OPTIONAL, -1, -1 }
+ };
+ PARSE_loc_rules( rules, avp );
+ }
+ /* SCSCF-Restoration-Info */
+ {
+ /* Grouped */
+ struct dict_object * avp;
+ struct dict_avp_request avp_vendor_plus_name = { .avp_vendor = 10415, .avp_name = "SCSCF-Restoration-Info"};
+ CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
+ struct local_rules_definition rules[] =
+ {
+ { { .avp_vendor = 0, .avp_name = "User-Name"}, RULE_REQUIRED, -1, -1 },
+ { { .avp_vendor = 10415, .avp_name = "Restoration-Info"}, RULE_REQUIRED, 1, -1 },
+ { { .avp_vendor = 10415, .avp_name = "SIP-Authentication-Scheme"}, RULE_OPTIONAL, -1, -1 }
+ };
+ PARSE_loc_rules( rules, avp );
+ }
+
+ }
+
+ /* Commands section */
+ {
+
+ }
+
+ LOG_D( "Extension 'Dictionary definitions for ts29229_avps (e10)' initialized");
+ return 0;
+}
+
+int dict_entry(char * conffile)
+{
+ dict_ts29229_avps_load_defs(conffile);
+ return dict_ts29229_avps_load_rules(conffile);
+}
+
+const char* dict_ts29229_avps_proto_ver(char * conffile) {
+ return ts29229_avps_proto_ver;
+}
+
+const double dict_ts29229_avps_gen_ts(char * conffile) {
+ return ts29229_avps_gen_date;
+}
+
+EXTENSION_ENTRY2("dict_ts29229_avps", dict_ts29229_avps_load_defs, dict_ts29229_avps_load_rules, "dict_rfc7683_avps", "dict_rfc4590_avps", "dict_draftload_avps", "dict_rfc7155_avps", "dict_etsi283034_avps", "dict_rfc7944_avps");
+
+
+