blob: d8beb1920920ccc343a1956c6c240a93c78f9077 [file] [log] [blame]
Brian Waters13d96012017-12-08 16:53:31 -06001/*
2* Copyright (c) 2017 Sprint
3*
4* Licensed under the Apache License, Version 2.0 (the "License");
5* you may not use this file except in compliance with the License.
6* You may obtain a copy of the License at
7*
8* http://www.apache.org/licenses/LICENSE-2.0
9*
10* Unless required by applicable law or agreed to in writing, software
11* distributed under the License is distributed on an "AS IS" BASIS,
12* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13* See the License for the specific language governing permissions and
14* limitations under the License.
15*/
16
17/****************
18 Generated By: fdtool enhancements to diafuzzer
19 License: same as freeDiameter
20****************/
21
22
23/*
24 * Dictionary definitions of objects specified in ts29229_avps (e10).
25 */
26#include <freeDiameter/extension.h>
27
28#define PROTO_VER "e10"
29#define GEN_DATE 1506697168.8
30
31const char *ts29229_avps_proto_ver = PROTO_VER;
32const double ts29229_avps_gen_date = GEN_DATE;
33
34/* The content of this file follows the same structure as dict_base_proto.c */
35
36#define CHECK_dict_new( _type, _data, _parent, _ref ) \
37{ \
38 int _ret = fd_dict_new( fd_g_config->cnf_dict, (_type), (_data), (_parent), (_ref) ); \
39 if ( _ret != 0 && _ret != EEXIST ) \
40 return _ret; \
41}
42
43#define CHECK_dict_search( _type, _criteria, _what, _result ) \
44 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, (_type), (_criteria), (_what), (_result), ENOENT) );
45
46struct local_rules_definition {
47 struct dict_avp_request avp_vendor_plus_name;
48 enum rule_position position;
49 int min;
50 int max;
51};
52
53#define RULE_ORDER( _position ) ((((_position) == RULE_FIXED_HEAD) || ((_position) == RULE_FIXED_TAIL)) ? 1 : 0 )
54
55/* Attention! This version of the macro uses AVP_BY_NAME_AND_VENDOR, in contrast to most other copies! */
56#define PARSE_loc_rules( _rulearray, _parent) { \
57 int __ar; \
58 for (__ar=0; __ar < sizeof(_rulearray) / sizeof((_rulearray)[0]); __ar++) { \
59 struct dict_rule_data __data = { NULL, \
60 (_rulearray)[__ar].position, \
61 0, \
62 (_rulearray)[__ar].min, \
63 (_rulearray)[__ar].max}; \
64 __data.rule_order = RULE_ORDER(__data.rule_position); \
65 CHECK_FCT( fd_dict_search( \
66 fd_g_config->cnf_dict, \
67 DICT_AVP, \
68 AVP_BY_NAME_AND_VENDOR, \
69 &(_rulearray)[__ar].avp_vendor_plus_name, \
70 &__data.rule_avp, 0 ) ); \
71 if ( !__data.rule_avp ) { \
72 TRACE_DEBUG(INFO, "AVP Not found: '%s'", (_rulearray)[__ar].avp_vendor_plus_name.avp_name); \
73 return ENOENT; \
74 } \
75 { \
76 int _ret = fd_dict_new( fd_g_config->cnf_dict, DICT_RULE, &(__data), (_parent), NULL ); \
77 if ( _ret != 0 && _ret != EEXIST ) { \
78 TRACE_DEBUG(INFO, "Error on rule with AVP '%s'", \
79 (_rulearray)[__ar].avp_vendor_plus_name.avp_name); \
80 return EINVAL; \
81 } \
82 } \
83 } \
84}
85
86#define CHECK_vendor_new( _data ) { \
87 struct dict_object * vendor_found; \
88 if (fd_dict_search(fd_g_config->cnf_dict,DICT_VENDOR,VENDOR_BY_ID,&_data.vendor_id,&vendor_found,ENOENT) == ENOENT) { \
89 CHECK_FCT(fd_dict_new(fd_g_config->cnf_dict, DICT_VENDOR, &_data, NULL, NULL)); \
90 } \
91}
92
93#define enumval_def_u32( _val_, _str_ ) \
94 { _str_, { .u32 = _val_ }}
95
96#define enumval_def_os( _len_, _val_, _str_ ) \
97 { _str_, { .os = { .data = (unsigned char *)_val_, .len = _len_ }}}
98
99
100static int dict_ts29229_avps_load_defs(char * conffile)
101{
102 TRACE_ENTRY("%p", conffile);
103 /* Application Section */
104 {
105 /* Create the vendors */ {
106 struct dict_vendor_data vendor_data = { 10415, "3GPP" };
107 CHECK_dict_new(DICT_VENDOR, &vendor_data, NULL, NULL)
108 }
109 }
110
111
112 /* AVP section */
113 {
114 struct dict_object * Address_type;
115 struct dict_object * UTF8String_type;
116 struct dict_object * DiameterIdentity_type;
117 struct dict_object * DiameterURI_type;
118 struct dict_object * Time_type;
119 struct dict_object * IPFilterRule_type;
120
121 CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "Address", &Address_type);
122 CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "UTF8String", &UTF8String_type);
123 CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "DiameterIdentity", &DiameterIdentity_type);
124 CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "DiameterURI", &DiameterURI_type);
125 CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "Time", &Time_type);
126 CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "IPFilterRule", &IPFilterRule_type);
127 /* Visited-Network-Identifier */
128 {
129 struct dict_avp_data data = {
130 600, /* Code */
131 10415, /* Vendor */
132 "Visited-Network-Identifier", /* Name */
133 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
134 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
135 AVP_TYPE_OCTETSTRING /* base type of data */
136 };
137 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
138 };
139 /* Public-Identity */
140 {
141 struct dict_avp_data data = {
142 601, /* Code */
143 10415, /* Vendor */
144 "Public-Identity", /* Name */
145 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
146 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
147 AVP_TYPE_OCTETSTRING /* base type of data */
148 };
149 CHECK_dict_new( DICT_AVP, &data, UTF8String_type, NULL);
150 };
151 /* Server-Name */
152 {
153 struct dict_avp_data data = {
154 602, /* Code */
155 10415, /* Vendor */
156 "Server-Name", /* Name */
157 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
158 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
159 AVP_TYPE_OCTETSTRING /* base type of data */
160 };
161 CHECK_dict_new( DICT_AVP, &data, UTF8String_type, NULL);
162 };
163 /* Mandatory-Capability */
164 {
165 struct dict_avp_data data = {
166 604, /* Code */
167 10415, /* Vendor */
168 "Mandatory-Capability", /* Name */
169 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
170 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
171 AVP_TYPE_UNSIGNED32 /* base type of data */
172 };
173 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
174 };
175 /* Optional-Capability */
176 {
177 struct dict_avp_data data = {
178 605, /* Code */
179 10415, /* Vendor */
180 "Optional-Capability", /* Name */
181 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
182 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
183 AVP_TYPE_UNSIGNED32 /* base type of data */
184 };
185 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
186 };
187 /* User-Data */
188 {
189 struct dict_avp_data data = {
190 606, /* Code */
191 10415, /* Vendor */
192 "User-Data", /* Name */
193 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
194 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
195 AVP_TYPE_OCTETSTRING /* base type of data */
196 };
197 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
198 };
199 /* SIP-Number-Auth-Items */
200 {
201 struct dict_avp_data data = {
202 607, /* Code */
203 10415, /* Vendor */
204 "SIP-Number-Auth-Items", /* Name */
205 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
206 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
207 AVP_TYPE_UNSIGNED32 /* base type of data */
208 };
209 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
210 };
211 /* SIP-Authentication-Scheme */
212 {
213 struct dict_avp_data data = {
214 608, /* Code */
215 10415, /* Vendor */
216 "SIP-Authentication-Scheme", /* Name */
217 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
218 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
219 AVP_TYPE_OCTETSTRING /* base type of data */
220 };
221 CHECK_dict_new( DICT_AVP, &data, UTF8String_type, NULL);
222 };
223 /* SIP-Authenticate */
224 {
225 struct dict_avp_data data = {
226 609, /* Code */
227 10415, /* Vendor */
228 "SIP-Authenticate", /* Name */
229 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
230 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
231 AVP_TYPE_OCTETSTRING /* base type of data */
232 };
233 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
234 };
235 /* SIP-Authorization */
236 {
237 struct dict_avp_data data = {
238 610, /* Code */
239 10415, /* Vendor */
240 "SIP-Authorization", /* Name */
241 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
242 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
243 AVP_TYPE_OCTETSTRING /* base type of data */
244 };
245 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
246 };
247 /* SIP-Authentication-Context */
248 {
249 struct dict_avp_data data = {
250 611, /* Code */
251 10415, /* Vendor */
252 "SIP-Authentication-Context", /* Name */
253 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
254 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
255 AVP_TYPE_OCTETSTRING /* base type of data */
256 };
257 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
258 };
259 /* SIP-Item-Number */
260 {
261 struct dict_avp_data data = {
262 613, /* Code */
263 10415, /* Vendor */
264 "SIP-Item-Number", /* Name */
265 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
266 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
267 AVP_TYPE_UNSIGNED32 /* base type of data */
268 };
269 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
270 };
271 /* Server-Assignment-Type */
272 {
273 struct dict_avp_data data = {
274 614, /* Code */
275 10415, /* Vendor */
276 "Server-Assignment-Type", /* Name */
277 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
278 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
279 AVP_TYPE_INTEGER32 /* base type of data */
280 };
281 struct dict_object *type;
282 struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Server-Assignment-Type)", NULL, NULL, NULL };
283 struct dict_enumval_data t_1 = { "NO_ASSIGNMENT", { .i32=0 }};
284 struct dict_enumval_data t_2 = { "REGISTRATION", { .i32=1 }};
285 struct dict_enumval_data t_3 = { "AUTHENTICATION_TIMEOUT", { .i32=10 }};
286 struct dict_enumval_data t_4 = { "DEREGISTRATION_TOO_MUCH_DATA", { .i32=11 }};
287 struct dict_enumval_data t_5 = { "AAA_USER_DATA_REQUEST", { .i32=12 }};
288 struct dict_enumval_data t_6 = { "PGW_UPDATE", { .i32=13 }};
289 struct dict_enumval_data t_7 = { "RESTORATION", { .i32=14 }};
290 struct dict_enumval_data t_8 = { "RE_REGISTRATION", { .i32=2 }};
291 struct dict_enumval_data t_9 = { "UNREGISTERED_USER", { .i32=3 }};
292 struct dict_enumval_data t_10 = { "TIMEOUT_DEREGISTRATION", { .i32=4 }};
293 struct dict_enumval_data t_11 = { "USER_DEREGISTRATION", { .i32=5 }};
294 struct dict_enumval_data t_12 = { "TIMEOUT_DEREGISTRATION_STORE_SERVER_NAME", { .i32=6 }};
295 struct dict_enumval_data t_13 = { "USER_DEREGISTRATION_STORE_SERVER_NAME", { .i32=7 }};
296 struct dict_enumval_data t_14 = { "ADMINISTRATIVE_DEREGISTRATION", { .i32=8 }};
297 struct dict_enumval_data t_15 = { "AUTHENTICATION_FAILURE", { .i32=9 }};
298 /* Create the Enumerated type, and then the AVP */
299 CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
300 CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
301 CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
302 CHECK_dict_new( DICT_ENUMVAL, &t_3, type, NULL);
303 CHECK_dict_new( DICT_ENUMVAL, &t_4, type, NULL);
304 CHECK_dict_new( DICT_ENUMVAL, &t_5, type, NULL);
305 CHECK_dict_new( DICT_ENUMVAL, &t_6, type, NULL);
306 CHECK_dict_new( DICT_ENUMVAL, &t_7, type, NULL);
307 CHECK_dict_new( DICT_ENUMVAL, &t_8, type, NULL);
308 CHECK_dict_new( DICT_ENUMVAL, &t_9, type, NULL);
309 CHECK_dict_new( DICT_ENUMVAL, &t_10, type, NULL);
310 CHECK_dict_new( DICT_ENUMVAL, &t_11, type, NULL);
311 CHECK_dict_new( DICT_ENUMVAL, &t_12, type, NULL);
312 CHECK_dict_new( DICT_ENUMVAL, &t_13, type, NULL);
313 CHECK_dict_new( DICT_ENUMVAL, &t_14, type, NULL);
314 CHECK_dict_new( DICT_ENUMVAL, &t_15, type, NULL);
315 CHECK_dict_new( DICT_AVP, &data, type, NULL);
316 };
317 /* Reason-Code */
318 {
319 struct dict_avp_data data = {
320 616, /* Code */
321 10415, /* Vendor */
322 "Reason-Code", /* Name */
323 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
324 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
325 AVP_TYPE_INTEGER32 /* base type of data */
326 };
327 struct dict_object *type;
328 struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Reason-Code)", NULL, NULL, NULL };
329 struct dict_enumval_data t_1 = { "PERMANENT_TERMINATION", { .i32=0 }};
330 struct dict_enumval_data t_2 = { "NEW_SERVER_ASSIGNED", { .i32=1 }};
331 struct dict_enumval_data t_3 = { "SERVER_CHANGE", { .i32=2 }};
332 struct dict_enumval_data t_4 = { "REMOVE_S_CSCF", { .i32=3 }};
333 /* Create the Enumerated type, and then the AVP */
334 CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
335 CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
336 CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
337 CHECK_dict_new( DICT_ENUMVAL, &t_3, type, NULL);
338 CHECK_dict_new( DICT_ENUMVAL, &t_4, type, NULL);
339 CHECK_dict_new( DICT_AVP, &data, type, NULL);
340 };
341 /* Reason-Info */
342 {
343 struct dict_avp_data data = {
344 617, /* Code */
345 10415, /* Vendor */
346 "Reason-Info", /* Name */
347 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
348 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
349 AVP_TYPE_OCTETSTRING /* base type of data */
350 };
351 CHECK_dict_new( DICT_AVP, &data, UTF8String_type, NULL);
352 };
353 /* Primary-Event-Charging-Function-Name */
354 {
355 struct dict_avp_data data = {
356 619, /* Code */
357 10415, /* Vendor */
358 "Primary-Event-Charging-Function-Name", /* Name */
359 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
360 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
361 AVP_TYPE_OCTETSTRING /* base type of data */
362 };
363 CHECK_dict_new( DICT_AVP, &data, DiameterURI_type, NULL);
364 };
365 /* Secondary-Event-Charging-Function-Name */
366 {
367 struct dict_avp_data data = {
368 620, /* Code */
369 10415, /* Vendor */
370 "Secondary-Event-Charging-Function-Name", /* Name */
371 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
372 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
373 AVP_TYPE_OCTETSTRING /* base type of data */
374 };
375 CHECK_dict_new( DICT_AVP, &data, DiameterURI_type, NULL);
376 };
377 /* Primary-Charging-Collection-Function-Name */
378 {
379 struct dict_avp_data data = {
380 621, /* Code */
381 10415, /* Vendor */
382 "Primary-Charging-Collection-Function-Name", /* Name */
383 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
384 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
385 AVP_TYPE_OCTETSTRING /* base type of data */
386 };
387 CHECK_dict_new( DICT_AVP, &data, DiameterURI_type, NULL);
388 };
389 /* Secondary-Charging-Collection-Function-Name */
390 {
391 struct dict_avp_data data = {
392 622, /* Code */
393 10415, /* Vendor */
394 "Secondary-Charging-Collection-Function-Name", /* Name */
395 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
396 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
397 AVP_TYPE_OCTETSTRING /* base type of data */
398 };
399 CHECK_dict_new( DICT_AVP, &data, DiameterURI_type, NULL);
400 };
401 /* User-Authorization-Type */
402 {
403 struct dict_avp_data data = {
404 623, /* Code */
405 10415, /* Vendor */
406 "User-Authorization-Type", /* Name */
407 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
408 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
409 AVP_TYPE_INTEGER32 /* base type of data */
410 };
411 struct dict_object *type;
412 struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(User-Authorization-Type)", NULL, NULL, NULL };
413 struct dict_enumval_data t_1 = { "REGISTRATION", { .i32=0 }};
414 struct dict_enumval_data t_2 = { "DE_REGISTRATION", { .i32=1 }};
415 struct dict_enumval_data t_3 = { "REGISTRATION_AND_CAPABILITIES", { .i32=2 }};
416 /* Create the Enumerated type, and then the AVP */
417 CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
418 CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
419 CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
420 CHECK_dict_new( DICT_ENUMVAL, &t_3, type, NULL);
421 CHECK_dict_new( DICT_AVP, &data, type, NULL);
422 };
423 /* User-Data-Already-Available */
424 {
425 struct dict_avp_data data = {
426 624, /* Code */
427 10415, /* Vendor */
428 "User-Data-Already-Available", /* Name */
429 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
430 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
431 AVP_TYPE_INTEGER32 /* base type of data */
432 };
433 struct dict_object *type;
434 struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(User-Data-Already-Available)", NULL, NULL, NULL };
435 struct dict_enumval_data t_1 = { "USER_DATA_NOT_AVAILABLE", { .i32=0 }};
436 struct dict_enumval_data t_2 = { "USER_DATA_ALREADY_AVAILABLE", { .i32=1 }};
437 /* Create the Enumerated type, and then the AVP */
438 CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
439 CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
440 CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
441 CHECK_dict_new( DICT_AVP, &data, type, NULL);
442 };
443 /* Confidentiality-Key */
444 {
445 struct dict_avp_data data = {
446 625, /* Code */
447 10415, /* Vendor */
448 "Confidentiality-Key", /* Name */
449 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
450 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
451 AVP_TYPE_OCTETSTRING /* base type of data */
452 };
453 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
454 };
455 /* Integrity-Key */
456 {
457 struct dict_avp_data data = {
458 626, /* Code */
459 10415, /* Vendor */
460 "Integrity-Key", /* Name */
461 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
462 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
463 AVP_TYPE_OCTETSTRING /* base type of data */
464 };
465 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
466 };
467 /* Feature-List-ID */
468 {
469 struct dict_avp_data data = {
470 629, /* Code */
471 10415, /* Vendor */
472 "Feature-List-ID", /* Name */
473 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
474 AVP_FLAG_VENDOR, /* Fixed flag values */
475 AVP_TYPE_UNSIGNED32 /* base type of data */
476 };
477 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
478 };
479 /* Feature-List */
480 {
481 struct dict_avp_data data = {
482 630, /* Code */
483 10415, /* Vendor */
484 "Feature-List", /* Name */
485 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
486 AVP_FLAG_VENDOR, /* Fixed flag values */
487 AVP_TYPE_UNSIGNED32 /* base type of data */
488 };
489 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
490 };
491 /* Originating-Request */
492 {
493 struct dict_avp_data data = {
494 633, /* Code */
495 10415, /* Vendor */
496 "Originating-Request", /* Name */
497 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
498 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
499 AVP_TYPE_INTEGER32 /* base type of data */
500 };
501 struct dict_object *type;
502 struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Originating-Request)", NULL, NULL, NULL };
503 struct dict_enumval_data t_1 = { "ORIGINATING", { .i32=0 }};
504 /* Create the Enumerated type, and then the AVP */
505 CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
506 CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
507 CHECK_dict_new( DICT_AVP, &data, type, NULL);
508 };
509 /* Wildcarded-Public-Identity */
510 {
511 struct dict_avp_data data = {
512 634, /* Code */
513 10415, /* Vendor */
514 "Wildcarded-Public-Identity", /* Name */
515 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
516 AVP_FLAG_VENDOR, /* Fixed flag values */
517 AVP_TYPE_OCTETSTRING /* base type of data */
518 };
519 CHECK_dict_new( DICT_AVP, &data, UTF8String_type, NULL);
520 };
521 /* UAR-Flags */
522 {
523 struct dict_avp_data data = {
524 637, /* Code */
525 10415, /* Vendor */
526 "UAR-Flags", /* Name */
527 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
528 AVP_FLAG_VENDOR, /* Fixed flag values */
529 AVP_TYPE_UNSIGNED32 /* base type of data */
530 };
531 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
532 };
533 /* Loose-Route-Indication */
534 {
535 struct dict_avp_data data = {
536 638, /* Code */
537 10415, /* Vendor */
538 "Loose-Route-Indication", /* Name */
539 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
540 AVP_FLAG_VENDOR, /* Fixed flag values */
541 AVP_TYPE_INTEGER32 /* base type of data */
542 };
543 struct dict_object *type;
544 struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Loose-Route-Indication)", NULL, NULL, NULL };
545 struct dict_enumval_data t_1 = { "LOOSE_ROUTE_NOT_REQUIRED", { .i32=0 }};
546 struct dict_enumval_data t_2 = { "LOOSE_ROUTE_REQUIRED", { .i32=1 }};
547 /* Create the Enumerated type, and then the AVP */
548 CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
549 CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
550 CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
551 CHECK_dict_new( DICT_AVP, &data, type, NULL);
552 };
553 /* Path */
554 {
555 struct dict_avp_data data = {
556 640, /* Code */
557 10415, /* Vendor */
558 "Path", /* Name */
559 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
560 AVP_FLAG_VENDOR, /* Fixed flag values */
561 AVP_TYPE_OCTETSTRING /* base type of data */
562 };
563 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
564 };
565 /* Contact */
566 {
567 struct dict_avp_data data = {
568 641, /* Code */
569 10415, /* Vendor */
570 "Contact", /* Name */
571 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
572 AVP_FLAG_VENDOR, /* Fixed flag values */
573 AVP_TYPE_OCTETSTRING /* base type of data */
574 };
575 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
576 };
577 /* Call-ID-SIP-Header */
578 {
579 struct dict_avp_data data = {
580 643, /* Code */
581 10415, /* Vendor */
582 "Call-ID-SIP-Header", /* Name */
583 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
584 AVP_FLAG_VENDOR, /* Fixed flag values */
585 AVP_TYPE_OCTETSTRING /* base type of data */
586 };
587 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
588 };
589 /* From-SIP-Header */
590 {
591 struct dict_avp_data data = {
592 644, /* Code */
593 10415, /* Vendor */
594 "From-SIP-Header", /* Name */
595 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
596 AVP_FLAG_VENDOR, /* Fixed flag values */
597 AVP_TYPE_OCTETSTRING /* base type of data */
598 };
599 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
600 };
601 /* To-SIP-Header */
602 {
603 struct dict_avp_data data = {
604 645, /* Code */
605 10415, /* Vendor */
606 "To-SIP-Header", /* Name */
607 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
608 AVP_FLAG_VENDOR, /* Fixed flag values */
609 AVP_TYPE_OCTETSTRING /* base type of data */
610 };
611 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
612 };
613 /* Record-Route */
614 {
615 struct dict_avp_data data = {
616 646, /* Code */
617 10415, /* Vendor */
618 "Record-Route", /* Name */
619 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
620 AVP_FLAG_VENDOR, /* Fixed flag values */
621 AVP_TYPE_OCTETSTRING /* base type of data */
622 };
623 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
624 };
625 /* Multiple-Registration-Indication */
626 {
627 struct dict_avp_data data = {
628 648, /* Code */
629 10415, /* Vendor */
630 "Multiple-Registration-Indication", /* Name */
631 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
632 AVP_FLAG_VENDOR, /* Fixed flag values */
633 AVP_TYPE_INTEGER32 /* base type of data */
634 };
635 struct dict_object *type;
636 struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Multiple-Registration-Indication)", NULL, NULL, NULL };
637 struct dict_enumval_data t_1 = { "NOT_MULTIPLE_REGISTRATION", { .i32=0 }};
638 struct dict_enumval_data t_2 = { "MULTIPLE_REGISTRATION", { .i32=1 }};
639 /* Create the Enumerated type, and then the AVP */
640 CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
641 CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
642 CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
643 CHECK_dict_new( DICT_AVP, &data, type, NULL);
644 };
645 /* Session-Priority */
646 {
647 struct dict_avp_data data = {
648 650, /* Code */
649 10415, /* Vendor */
650 "Session-Priority", /* Name */
651 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
652 AVP_FLAG_VENDOR, /* Fixed flag values */
653 AVP_TYPE_INTEGER32 /* base type of data */
654 };
655 struct dict_object *type;
656 struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Session-Priority)", NULL, NULL, NULL };
657 struct dict_enumval_data t_1 = { "PRIORITY_0", { .i32=0 }};
658 struct dict_enumval_data t_2 = { "PRIORITY_1", { .i32=1 }};
659 struct dict_enumval_data t_3 = { "PRIORITY_2", { .i32=2 }};
660 struct dict_enumval_data t_4 = { "PRIORITY_3", { .i32=3 }};
661 struct dict_enumval_data t_5 = { "PRIORITY_4", { .i32=4 }};
662 /* Create the Enumerated type, and then the AVP */
663 CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
664 CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
665 CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
666 CHECK_dict_new( DICT_ENUMVAL, &t_3, type, NULL);
667 CHECK_dict_new( DICT_ENUMVAL, &t_4, type, NULL);
668 CHECK_dict_new( DICT_ENUMVAL, &t_5, type, NULL);
669 CHECK_dict_new( DICT_AVP, &data, type, NULL);
670 };
671 /* Priviledged-Sender-Indication */
672 {
673 struct dict_avp_data data = {
674 652, /* Code */
675 10415, /* Vendor */
676 "Priviledged-Sender-Indication", /* Name */
677 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
678 AVP_FLAG_VENDOR, /* Fixed flag values */
679 AVP_TYPE_INTEGER32 /* base type of data */
680 };
681 struct dict_object *type;
682 struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Priviledged-Sender-Indication)", NULL, NULL, NULL };
683 struct dict_enumval_data t_1 = { "PRIVILEDGED_SENDER", { .i32=1 }};
684 /* Create the Enumerated type, and then the AVP */
685 CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
686 CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
687 CHECK_dict_new( DICT_AVP, &data, type, NULL);
688 };
689 /* LIA-Flags */
690 {
691 struct dict_avp_data data = {
692 653, /* Code */
693 10415, /* Vendor */
694 "LIA-Flags", /* Name */
695 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
696 AVP_FLAG_VENDOR, /* Fixed flag values */
697 AVP_TYPE_UNSIGNED32 /* base type of data */
698 };
699 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
700 };
701 /* Initial-CSeq-Sequence-Number */
702 {
703 struct dict_avp_data data = {
704 654, /* Code */
705 10415, /* Vendor */
706 "Initial-CSeq-Sequence-Number", /* Name */
707 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
708 AVP_FLAG_VENDOR, /* Fixed flag values */
709 AVP_TYPE_UNSIGNED32 /* base type of data */
710 };
711 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
712 };
713 /* SAR-Flags */
714 {
715 struct dict_avp_data data = {
716 655, /* Code */
717 10415, /* Vendor */
718 "SAR-Flags", /* Name */
719 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
720 AVP_FLAG_VENDOR, /* Fixed flag values */
721 AVP_TYPE_UNSIGNED32 /* base type of data */
722 };
723 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
724 };
725 /* WebRTC-Authentication-Function-Name */
726 {
727 struct dict_avp_data data = {
728 657, /* Code */
729 10415, /* Vendor */
730 "WebRTC-Authentication-Function-Name", /* Name */
731 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
732 AVP_FLAG_VENDOR, /* Fixed flag values */
733 AVP_TYPE_OCTETSTRING /* base type of data */
734 };
735 CHECK_dict_new( DICT_AVP, &data, UTF8String_type, NULL);
736 };
737 /* WebRTC-Web-Server-Function-Name */
738 {
739 struct dict_avp_data data = {
740 658, /* Code */
741 10415, /* Vendor */
742 "WebRTC-Web-Server-Function-Name", /* Name */
743 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
744 AVP_FLAG_VENDOR, /* Fixed flag values */
745 AVP_TYPE_OCTETSTRING /* base type of data */
746 };
747 CHECK_dict_new( DICT_AVP, &data, UTF8String_type, NULL);
748 };
749 /* Wildcarded-IMPU */
750 {
751 struct dict_avp_data data = {
752 636, /* Code */
753 10415, /* Vendor */
754 "Wildcarded-IMPU", /* Name */
755 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
756 AVP_FLAG_VENDOR, /* Fixed flag values */
757 AVP_TYPE_OCTETSTRING /* base type of data */
758 };
759 CHECK_dict_new( DICT_AVP, &data, UTF8String_type, NULL);
760 };
761 /* Subscription-Info */
762 {
763 /* Grouped */
764 struct dict_object * avp;
765 struct dict_avp_data data = {
766 642, /* Code */
767 10415, /* Vendor */
768 "Subscription-Info", /* Name */
769 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
770 AVP_FLAG_VENDOR, /* Fixed flag values */
771 AVP_TYPE_GROUPED /* base type of data */
772 };
773 CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
774 }
775 /* Server-Capabilities */
776 {
777 /* Grouped */
778 struct dict_object * avp;
779 struct dict_avp_data data = {
780 603, /* Code */
781 10415, /* Vendor */
782 "Server-Capabilities", /* Name */
783 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
784 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
785 AVP_TYPE_GROUPED /* base type of data */
786 };
787 CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
788 }
789 /* Associated-Registered-Identities */
790 {
791 /* Grouped */
792 struct dict_object * avp;
793 struct dict_avp_data data = {
794 647, /* Code */
795 10415, /* Vendor */
796 "Associated-Registered-Identities", /* Name */
797 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
798 AVP_FLAG_VENDOR, /* Fixed flag values */
799 AVP_TYPE_GROUPED /* base type of data */
800 };
801 CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
802 }
803 /* SIP-Digest-Authenticate */
804 {
805 /* Grouped */
806 struct dict_object * avp;
807 struct dict_avp_data data = {
808 635, /* Code */
809 10415, /* Vendor */
810 "SIP-Digest-Authenticate", /* Name */
811 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
812 AVP_FLAG_VENDOR, /* Fixed flag values */
813 AVP_TYPE_GROUPED /* base type of data */
814 };
815 CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
816 }
817 /* Supported-Features */
818 {
819 /* Grouped */
820 struct dict_object * avp;
821 struct dict_avp_data data = {
822 628, /* Code */
823 10415, /* Vendor */
824 "Supported-Features", /* Name */
825 AVP_FLAG_VENDOR, /* Fixed flags */
826 AVP_FLAG_VENDOR, /* Fixed flag values */
827 AVP_TYPE_GROUPED /* base type of data */
828 };
829 CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
830 }
831 /* Allowed-WAF-WWSF-Identities */
832 {
833 /* Grouped */
834 struct dict_object * avp;
835 struct dict_avp_data data = {
836 656, /* Code */
837 10415, /* Vendor */
838 "Allowed-WAF-WWSF-Identities", /* Name */
839 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
840 AVP_FLAG_VENDOR, /* Fixed flag values */
841 AVP_TYPE_GROUPED /* base type of data */
842 };
843 CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
844 }
845 /* Identity-with-Emergency-Registration */
846 {
847 /* Grouped */
848 struct dict_object * avp;
849 struct dict_avp_data data = {
850 651, /* Code */
851 10415, /* Vendor */
852 "Identity-with-Emergency-Registration", /* Name */
853 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
854 AVP_FLAG_VENDOR, /* Fixed flag values */
855 AVP_TYPE_GROUPED /* base type of data */
856 };
857 CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
858 }
859 /* Associated-Identities */
860 {
861 /* Grouped */
862 struct dict_object * avp;
863 struct dict_avp_data data = {
864 632, /* Code */
865 10415, /* Vendor */
866 "Associated-Identities", /* Name */
867 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
868 AVP_FLAG_VENDOR, /* Fixed flag values */
869 AVP_TYPE_GROUPED /* base type of data */
870 };
871 CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
872 }
873 /* Deregistration-Reason */
874 {
875 /* Grouped */
876 struct dict_object * avp;
877 struct dict_avp_data data = {
878 615, /* Code */
879 10415, /* Vendor */
880 "Deregistration-Reason", /* Name */
881 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
882 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
883 AVP_TYPE_GROUPED /* base type of data */
884 };
885 CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
886 }
887 /* Charging-Information */
888 {
889 /* Grouped */
890 struct dict_object * avp;
891 struct dict_avp_data data = {
892 618, /* Code */
893 10415, /* Vendor */
894 "Charging-Information", /* Name */
895 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
896 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
897 AVP_TYPE_GROUPED /* base type of data */
898 };
899 CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
900 }
901 /* SIP-Auth-Data-Item */
902 {
903 /* Grouped */
904 struct dict_object * avp;
905 struct dict_avp_data data = {
906 612, /* Code */
907 10415, /* Vendor */
908 "SIP-Auth-Data-Item", /* Name */
909 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
910 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
911 AVP_TYPE_GROUPED /* base type of data */
912 };
913 CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
914 }
915 /* Restoration-Info */
916 {
917 /* Grouped */
918 struct dict_object * avp;
919 struct dict_avp_data data = {
920 649, /* Code */
921 10415, /* Vendor */
922 "Restoration-Info", /* Name */
923 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
924 AVP_FLAG_VENDOR, /* Fixed flag values */
925 AVP_TYPE_GROUPED /* base type of data */
926 };
927 CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
928 }
929 /* Supported-Applications */
930 {
931 /* Grouped */
932 struct dict_object * avp;
933 struct dict_avp_data data = {
934 631, /* Code */
935 10415, /* Vendor */
936 "Supported-Applications", /* Name */
937 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
938 AVP_FLAG_VENDOR, /* Fixed flag values */
939 AVP_TYPE_GROUPED /* base type of data */
940 };
941 CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
942 }
943 /* SCSCF-Restoration-Info */
944 {
945 /* Grouped */
946 struct dict_object * avp;
947 struct dict_avp_data data = {
948 639, /* Code */
949 10415, /* Vendor */
950 "SCSCF-Restoration-Info", /* Name */
951 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
952 AVP_FLAG_VENDOR, /* Fixed flag values */
953 AVP_TYPE_GROUPED /* base type of data */
954 };
955 CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
956 }
957
958
959 }
960
961 /* Commands section */
962 {
963
964 }
965
966 return 0;
967}
968
969static int dict_ts29229_avps_load_rules(char * conffile)
970{
971 /* Grouped AVP section */
972 {
973 /* Subscription-Info */
974 {
975 /* Grouped */
976 struct dict_object * avp;
977 struct dict_avp_request avp_vendor_plus_name = { .avp_vendor = 10415, .avp_name = "Subscription-Info"};
978 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
979 struct local_rules_definition rules[] =
980 {
981 { { .avp_vendor = 10415, .avp_name = "Call-ID-SIP-Header"}, RULE_REQUIRED, -1, -1 },
982 { { .avp_vendor = 10415, .avp_name = "From-SIP-Header"}, RULE_REQUIRED, -1, -1 },
983 { { .avp_vendor = 10415, .avp_name = "To-SIP-Header"}, RULE_REQUIRED, -1, -1 },
984 { { .avp_vendor = 10415, .avp_name = "Record-Route"}, RULE_REQUIRED, -1, -1 },
985 { { .avp_vendor = 10415, .avp_name = "Contact"}, RULE_REQUIRED, -1, -1 }
986 };
987 PARSE_loc_rules( rules, avp );
988 }
989 /* Server-Capabilities */
990 {
991 /* Grouped */
992 struct dict_object * avp;
993 struct dict_avp_request avp_vendor_plus_name = { .avp_vendor = 10415, .avp_name = "Server-Capabilities"};
994 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
995 struct local_rules_definition rules[] =
996 {
997 { { .avp_vendor = 10415, .avp_name = "Mandatory-Capability"}, RULE_OPTIONAL, -1, -1 },
998 { { .avp_vendor = 10415, .avp_name = "Optional-Capability"}, RULE_OPTIONAL, -1, -1 },
999 { { .avp_vendor = 10415, .avp_name = "Server-Name"}, RULE_OPTIONAL, -1, -1 }
1000 };
1001 PARSE_loc_rules( rules, avp );
1002 }
1003 /* Associated-Registered-Identities */
1004 {
1005 /* Grouped */
1006 struct dict_object * avp;
1007 struct dict_avp_request avp_vendor_plus_name = { .avp_vendor = 10415, .avp_name = "Associated-Registered-Identities"};
1008 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
1009 struct local_rules_definition rules[] =
1010 {
1011 { { .avp_vendor = 0, .avp_name = "User-Name"}, RULE_OPTIONAL, -1, -1 }
1012 };
1013 PARSE_loc_rules( rules, avp );
1014 }
1015 /* SIP-Digest-Authenticate */
1016 {
1017 /* Grouped */
1018 struct dict_object * avp;
1019 struct dict_avp_request avp_vendor_plus_name = { .avp_vendor = 10415, .avp_name = "SIP-Digest-Authenticate"};
1020 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
1021 struct local_rules_definition rules[] =
1022 {
1023 { { .avp_vendor = 0, .avp_name = "Digest-Realm"}, RULE_REQUIRED, -1, -1 },
1024 { { .avp_vendor = 0, .avp_name = "Digest-Algorithm"}, RULE_OPTIONAL, -1, -1 },
1025 { { .avp_vendor = 0, .avp_name = "Digest-QoP"}, RULE_REQUIRED, -1, -1 },
1026 { { .avp_vendor = 0, .avp_name = "Digest-HA1"}, RULE_REQUIRED, -1, -1 }
1027 };
1028 PARSE_loc_rules( rules, avp );
1029 }
1030 /* Supported-Features */
1031 {
1032 /* Grouped */
1033 struct dict_object * avp;
1034 struct dict_avp_request avp_vendor_plus_name = { .avp_vendor = 10415, .avp_name = "Supported-Features"};
1035 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
1036 struct local_rules_definition rules[] =
1037 {
1038 { { .avp_vendor = 0, .avp_name = "Vendor-Id"}, RULE_REQUIRED, -1, -1 },
1039 { { .avp_vendor = 10415, .avp_name = "Feature-List-ID"}, RULE_REQUIRED, -1, -1 },
1040 { { .avp_vendor = 10415, .avp_name = "Feature-List"}, RULE_REQUIRED, -1, -1 }
1041 };
1042 PARSE_loc_rules( rules, avp );
1043 }
1044 /* Allowed-WAF-WWSF-Identities */
1045 {
1046 /* Grouped */
1047 struct dict_object * avp;
1048 struct dict_avp_request avp_vendor_plus_name = { .avp_vendor = 10415, .avp_name = "Allowed-WAF-WWSF-Identities"};
1049 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
1050 struct local_rules_definition rules[] =
1051 {
1052 { { .avp_vendor = 10415, .avp_name = "WebRTC-Authentication-Function-Name"}, RULE_OPTIONAL, -1, -1 },
1053 { { .avp_vendor = 10415, .avp_name = "WebRTC-Web-Server-Function-Name"}, RULE_OPTIONAL, -1, -1 }
1054 };
1055 PARSE_loc_rules( rules, avp );
1056 }
1057 /* Identity-with-Emergency-Registration */
1058 {
1059 /* Grouped */
1060 struct dict_object * avp;
1061 struct dict_avp_request avp_vendor_plus_name = { .avp_vendor = 10415, .avp_name = "Identity-with-Emergency-Registration"};
1062 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
1063 struct local_rules_definition rules[] =
1064 {
1065 { { .avp_vendor = 0, .avp_name = "User-Name"}, RULE_REQUIRED, -1, -1 },
1066 { { .avp_vendor = 10415, .avp_name = "Public-Identity"}, RULE_REQUIRED, -1, -1 }
1067 };
1068 PARSE_loc_rules( rules, avp );
1069 }
1070 /* Associated-Identities */
1071 {
1072 /* Grouped */
1073 struct dict_object * avp;
1074 struct dict_avp_request avp_vendor_plus_name = { .avp_vendor = 10415, .avp_name = "Associated-Identities"};
1075 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
1076 struct local_rules_definition rules[] =
1077 {
1078 { { .avp_vendor = 0, .avp_name = "User-Name"}, RULE_OPTIONAL, -1, -1 }
1079 };
1080 PARSE_loc_rules( rules, avp );
1081 }
1082 /* Deregistration-Reason */
1083 {
1084 /* Grouped */
1085 struct dict_object * avp;
1086 struct dict_avp_request avp_vendor_plus_name = { .avp_vendor = 10415, .avp_name = "Deregistration-Reason"};
1087 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
1088 struct local_rules_definition rules[] =
1089 {
1090 { { .avp_vendor = 10415, .avp_name = "Reason-Code"}, RULE_REQUIRED, -1, -1 },
1091 { { .avp_vendor = 10415, .avp_name = "Reason-Info"}, RULE_OPTIONAL, -1, -1 }
1092 };
1093 PARSE_loc_rules( rules, avp );
1094 }
1095 /* Charging-Information */
1096 {
1097 /* Grouped */
1098 struct dict_object * avp;
1099 struct dict_avp_request avp_vendor_plus_name = { .avp_vendor = 10415, .avp_name = "Charging-Information"};
1100 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
1101 struct local_rules_definition rules[] =
1102 {
1103 { { .avp_vendor = 10415, .avp_name = "Primary-Event-Charging-Function-Name"}, RULE_OPTIONAL, -1, -1 },
1104 { { .avp_vendor = 10415, .avp_name = "Secondary-Event-Charging-Function-Name"}, RULE_OPTIONAL, -1, -1 },
1105 { { .avp_vendor = 10415, .avp_name = "Primary-Charging-Collection-Function-Name"}, RULE_OPTIONAL, -1, -1 },
1106 { { .avp_vendor = 10415, .avp_name = "Secondary-Charging-Collection-Function-Name"}, RULE_OPTIONAL, -1, -1 }
1107 };
1108 PARSE_loc_rules( rules, avp );
1109 }
1110 /* SIP-Auth-Data-Item */
1111 {
1112 /* Grouped */
1113 struct dict_object * avp;
1114 struct dict_avp_request avp_vendor_plus_name = { .avp_vendor = 10415, .avp_name = "SIP-Auth-Data-Item"};
1115 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
1116 struct local_rules_definition rules[] =
1117 {
1118 { { .avp_vendor = 10415, .avp_name = "SIP-Item-Number"}, RULE_OPTIONAL, -1, -1 },
1119 { { .avp_vendor = 10415, .avp_name = "SIP-Authentication-Scheme"}, RULE_OPTIONAL, -1, -1 },
1120 { { .avp_vendor = 10415, .avp_name = "SIP-Authenticate"}, RULE_OPTIONAL, -1, -1 },
1121 { { .avp_vendor = 10415, .avp_name = "SIP-Authorization"}, RULE_OPTIONAL, -1, -1 },
1122 { { .avp_vendor = 10415, .avp_name = "SIP-Authentication-Context"}, RULE_OPTIONAL, -1, -1 },
1123 { { .avp_vendor = 10415, .avp_name = "Confidentiality-Key"}, RULE_OPTIONAL, -1, -1 },
1124 { { .avp_vendor = 10415, .avp_name = "Integrity-Key"}, RULE_OPTIONAL, -1, -1 },
1125 { { .avp_vendor = 10415, .avp_name = "SIP-Digest-Authenticate"}, RULE_OPTIONAL, -1, -1 },
1126 { { .avp_vendor = 0, .avp_name = "Framed-IP-Address"}, RULE_OPTIONAL, -1, -1 },
1127 { { .avp_vendor = 0, .avp_name = "Framed-IPv6-Prefix"}, RULE_OPTIONAL, -1, -1 },
1128 { { .avp_vendor = 0, .avp_name = "Framed-Interface-Id"}, RULE_OPTIONAL, -1, -1 },
1129 { { .avp_vendor = 13019, .avp_name = "Line-Identifier"}, RULE_OPTIONAL, -1, -1 }
1130 };
1131 PARSE_loc_rules( rules, avp );
1132 }
1133 /* Restoration-Info */
1134 {
1135 /* Grouped */
1136 struct dict_object * avp;
1137 struct dict_avp_request avp_vendor_plus_name = { .avp_vendor = 10415, .avp_name = "Restoration-Info"};
1138 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
1139 struct local_rules_definition rules[] =
1140 {
1141 { { .avp_vendor = 10415, .avp_name = "Path"}, RULE_REQUIRED, -1, -1 },
1142 { { .avp_vendor = 10415, .avp_name = "Contact"}, RULE_REQUIRED, -1, -1 },
1143 { { .avp_vendor = 10415, .avp_name = "Initial-CSeq-Sequence-Number"}, RULE_OPTIONAL, -1, -1 },
1144 { { .avp_vendor = 10415, .avp_name = "Call-ID-SIP-Header"}, RULE_OPTIONAL, -1, -1 },
1145 { { .avp_vendor = 10415, .avp_name = "Subscription-Info"}, RULE_OPTIONAL, -1, -1 }
1146 };
1147 PARSE_loc_rules( rules, avp );
1148 }
1149 /* Supported-Applications */
1150 {
1151 /* Grouped */
1152 struct dict_object * avp;
1153 struct dict_avp_request avp_vendor_plus_name = { .avp_vendor = 10415, .avp_name = "Supported-Applications"};
1154 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
1155 struct local_rules_definition rules[] =
1156 {
1157 { { .avp_vendor = 0, .avp_name = "Auth-Application-Id"}, RULE_OPTIONAL, -1, -1 },
1158 { { .avp_vendor = 0, .avp_name = "Acct-Application-Id"}, RULE_OPTIONAL, -1, -1 },
1159 { { .avp_vendor = 0, .avp_name = "Vendor-Specific-Application-Id"}, RULE_OPTIONAL, -1, -1 }
1160 };
1161 PARSE_loc_rules( rules, avp );
1162 }
1163 /* SCSCF-Restoration-Info */
1164 {
1165 /* Grouped */
1166 struct dict_object * avp;
1167 struct dict_avp_request avp_vendor_plus_name = { .avp_vendor = 10415, .avp_name = "SCSCF-Restoration-Info"};
1168 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
1169 struct local_rules_definition rules[] =
1170 {
1171 { { .avp_vendor = 0, .avp_name = "User-Name"}, RULE_REQUIRED, -1, -1 },
1172 { { .avp_vendor = 10415, .avp_name = "Restoration-Info"}, RULE_REQUIRED, 1, -1 },
1173 { { .avp_vendor = 10415, .avp_name = "SIP-Authentication-Scheme"}, RULE_OPTIONAL, -1, -1 }
1174 };
1175 PARSE_loc_rules( rules, avp );
1176 }
1177
1178 }
1179
1180 /* Commands section */
1181 {
1182
1183 }
1184
1185 LOG_D( "Extension 'Dictionary definitions for ts29229_avps (e10)' initialized");
1186 return 0;
1187}
1188
1189int dict_entry(char * conffile)
1190{
1191 dict_ts29229_avps_load_defs(conffile);
1192 return dict_ts29229_avps_load_rules(conffile);
1193}
1194
1195const char* dict_ts29229_avps_proto_ver(char * conffile) {
1196 return ts29229_avps_proto_ver;
1197}
1198
1199const double dict_ts29229_avps_gen_ts(char * conffile) {
1200 return ts29229_avps_gen_date;
1201}
1202
1203EXTENSION_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");
1204
1205
1206