blob: 734a5c889afa2da9a999f3c25f842602703e0423 [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 ts29214_avps (e30).
25 */
26#include <freeDiameter/extension.h>
27
28#define PROTO_VER "e30"
29#define GEN_DATE 1506697136.73
30
31const char *ts29214_avps_proto_ver = PROTO_VER;
32const double ts29214_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_ts29214_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 /* Abort-Cause */
128 {
129 struct dict_avp_data data = {
130 500, /* Code */
131 10415, /* Vendor */
132 "Abort-Cause", /* Name */
133 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
134 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
135 AVP_TYPE_INTEGER32 /* base type of data */
136 };
137 struct dict_object *type;
138 struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Abort-Cause)", NULL, NULL, NULL };
139 struct dict_enumval_data t_1 = { "BEARER_RELEASED", { .i32=0 }};
140 struct dict_enumval_data t_2 = { "INSUFFICIENT_SERVER_RESOURCES", { .i32=1 }};
141 struct dict_enumval_data t_3 = { "INSUFFICIENT_BEARER_RESOURCES", { .i32=2 }};
142 struct dict_enumval_data t_4 = { "PS_TO_CS_HANDOVER", { .i32=3 }};
143 struct dict_enumval_data t_5 = { "DISALLOWED", { .i32=4 }};
144 /* Create the Enumerated type, and then the AVP */
145 CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
146 CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
147 CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
148 CHECK_dict_new( DICT_ENUMVAL, &t_3, type, NULL);
149 CHECK_dict_new( DICT_ENUMVAL, &t_4, type, NULL);
150 CHECK_dict_new( DICT_ENUMVAL, &t_5, type, NULL);
151 CHECK_dict_new( DICT_AVP, &data, type, NULL);
152 };
153 /* Access-Network-Charging-Address */
154 {
155 struct dict_avp_data data = {
156 501, /* Code */
157 10415, /* Vendor */
158 "Access-Network-Charging-Address", /* Name */
159 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
160 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
161 AVP_TYPE_OCTETSTRING /* base type of data */
162 };
163 CHECK_dict_new( DICT_AVP, &data, Address_type, NULL);
164 };
165 /* Access-Network-Charging-Identifier-Value */
166 {
167 struct dict_avp_data data = {
168 503, /* Code */
169 10415, /* Vendor */
170 "Access-Network-Charging-Identifier-Value", /* Name */
171 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
172 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
173 AVP_TYPE_OCTETSTRING /* base type of data */
174 };
175 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
176 };
177 /* AF-Application-Identifier */
178 {
179 struct dict_avp_data data = {
180 504, /* Code */
181 10415, /* Vendor */
182 "AF-Application-Identifier", /* Name */
183 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
184 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
185 AVP_TYPE_OCTETSTRING /* base type of data */
186 };
187 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
188 };
189 /* AF-Charging-Identifier */
190 {
191 struct dict_avp_data data = {
192 505, /* Code */
193 10415, /* Vendor */
194 "AF-Charging-Identifier", /* Name */
195 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
196 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
197 AVP_TYPE_OCTETSTRING /* base type of data */
198 };
199 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
200 };
201 /* AF-Requested-Data */
202 {
203 struct dict_avp_data data = {
204 551, /* Code */
205 10415, /* Vendor */
206 "AF-Requested-Data", /* Name */
207 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
208 AVP_FLAG_VENDOR, /* Fixed flag values */
209 AVP_TYPE_UNSIGNED32 /* base type of data */
210 };
211 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
212 };
213 /* AF-Signalling-Protocol */
214 {
215 struct dict_avp_data data = {
216 529, /* Code */
217 10415, /* Vendor */
218 "AF-Signalling-Protocol", /* Name */
219 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
220 AVP_FLAG_VENDOR, /* Fixed flag values */
221 AVP_TYPE_INTEGER32 /* base type of data */
222 };
223 struct dict_object *type;
224 struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(AF-Signalling-Protocol)", NULL, NULL, NULL };
225 struct dict_enumval_data t_1 = { "NO_INFORMATION", { .i32=0 }};
226 struct dict_enumval_data t_2 = { "SIP", { .i32=1 }};
227 /* Create the Enumerated type, and then the AVP */
228 CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
229 CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
230 CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
231 CHECK_dict_new( DICT_AVP, &data, type, NULL);
232 };
233 /* Application-Service-Provider-Identity */
234 {
235 struct dict_avp_data data = {
236 532, /* Code */
237 10415, /* Vendor */
238 "Application-Service-Provider-Identity", /* Name */
239 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
240 AVP_FLAG_VENDOR, /* Fixed flag values */
241 AVP_TYPE_OCTETSTRING /* base type of data */
242 };
243 CHECK_dict_new( DICT_AVP, &data, UTF8String_type, NULL);
244 };
245 /* Pre-emption-Control-Info */
246 {
247 struct dict_avp_data data = {
248 553, /* Code */
249 10415, /* Vendor */
250 "Pre-emption-Control-Info", /* Name */
251 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
252 AVP_FLAG_VENDOR, /* Fixed flag values */
253 AVP_TYPE_UNSIGNED32 /* base type of data */
254 };
255 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
256 };
257 /* Codec-Data */
258 {
259 struct dict_avp_data data = {
260 524, /* Code */
261 10415, /* Vendor */
262 "Codec-Data", /* Name */
263 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
264 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
265 AVP_TYPE_OCTETSTRING /* base type of data */
266 };
267 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
268 };
269 /* Content-Version */
270 {
271 struct dict_avp_data data = {
272 552, /* Code */
273 10415, /* Vendor */
274 "Content-Version", /* Name */
275 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
276 AVP_FLAG_VENDOR, /* Fixed flag values */
277 AVP_TYPE_UNSIGNED64 /* base type of data */
278 };
279 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
280 };
281 /* Flow-Description */
282 {
283 struct dict_avp_data data = {
284 507, /* Code */
285 10415, /* Vendor */
286 "Flow-Description", /* Name */
287 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
288 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
289 AVP_TYPE_OCTETSTRING /* base type of data */
290 };
291 CHECK_dict_new( DICT_AVP, &data, IPFilterRule_type, NULL);
292 };
293 /* Flow-Number */
294 {
295 struct dict_avp_data data = {
296 509, /* Code */
297 10415, /* Vendor */
298 "Flow-Number", /* Name */
299 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
300 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
301 AVP_TYPE_UNSIGNED32 /* base type of data */
302 };
303 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
304 };
305 /* Flow-Status */
306 {
307 struct dict_avp_data data = {
308 511, /* Code */
309 10415, /* Vendor */
310 "Flow-Status", /* Name */
311 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
312 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
313 AVP_TYPE_INTEGER32 /* base type of data */
314 };
315 struct dict_object *type;
316 struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Flow-Status)", NULL, NULL, NULL };
317 struct dict_enumval_data t_1 = { "ENABLED_UPLINK", { .i32=0 }};
318 struct dict_enumval_data t_2 = { "ENABLED_DOWNLINK", { .i32=1 }};
319 struct dict_enumval_data t_3 = { "ENABLED", { .i32=2 }};
320 struct dict_enumval_data t_4 = { "DISABLED", { .i32=3 }};
321 struct dict_enumval_data t_5 = { "REMOVED", { .i32=4 }};
322 /* Create the Enumerated type, and then the AVP */
323 CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
324 CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
325 CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
326 CHECK_dict_new( DICT_ENUMVAL, &t_3, type, NULL);
327 CHECK_dict_new( DICT_ENUMVAL, &t_4, type, NULL);
328 CHECK_dict_new( DICT_ENUMVAL, &t_5, type, NULL);
329 CHECK_dict_new( DICT_AVP, &data, type, NULL);
330 };
331 /* Flow-Usage */
332 {
333 struct dict_avp_data data = {
334 512, /* Code */
335 10415, /* Vendor */
336 "Flow-Usage", /* Name */
337 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
338 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
339 AVP_TYPE_INTEGER32 /* base type of data */
340 };
341 struct dict_object *type;
342 struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Flow-Usage)", NULL, NULL, NULL };
343 struct dict_enumval_data t_1 = { "NO_INFORMATION", { .i32=0 }};
344 struct dict_enumval_data t_2 = { "RTCP", { .i32=1 }};
345 struct dict_enumval_data t_3 = { "AF_SIGNALLING", { .i32=2 }};
346 /* Create the Enumerated type, and then the AVP */
347 CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
348 CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
349 CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
350 CHECK_dict_new( DICT_ENUMVAL, &t_3, type, NULL);
351 CHECK_dict_new( DICT_AVP, &data, type, NULL);
352 };
353 /* GCS-Identifier */
354 {
355 struct dict_avp_data data = {
356 538, /* Code */
357 10415, /* Vendor */
358 "GCS-Identifier", /* Name */
359 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
360 AVP_FLAG_VENDOR, /* Fixed flag values */
361 AVP_TYPE_OCTETSTRING /* base type of data */
362 };
363 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
364 };
365 /* IP-Domain-Id */
366 {
367 struct dict_avp_data data = {
368 537, /* Code */
369 10415, /* Vendor */
370 "IP-Domain-Id", /* Name */
371 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
372 AVP_FLAG_VENDOR, /* Fixed flag values */
373 AVP_TYPE_OCTETSTRING /* base type of data */
374 };
375 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
376 };
377 /* Max-Requested-Bandwidth-DL */
378 {
379 struct dict_avp_data data = {
380 515, /* Code */
381 10415, /* Vendor */
382 "Max-Requested-Bandwidth-DL", /* Name */
383 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
384 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
385 AVP_TYPE_UNSIGNED32 /* base type of data */
386 };
387 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
388 };
389 /* Max-Requested-Bandwidth-UL */
390 {
391 struct dict_avp_data data = {
392 516, /* Code */
393 10415, /* Vendor */
394 "Max-Requested-Bandwidth-UL", /* Name */
395 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
396 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
397 AVP_TYPE_UNSIGNED32 /* base type of data */
398 };
399 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
400 };
401 /* Max-Supported-Bandwidth-DL */
402 {
403 struct dict_avp_data data = {
404 543, /* Code */
405 10415, /* Vendor */
406 "Max-Supported-Bandwidth-DL", /* Name */
407 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
408 AVP_FLAG_VENDOR, /* Fixed flag values */
409 AVP_TYPE_UNSIGNED32 /* base type of data */
410 };
411 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
412 };
413 /* Max-Supported-Bandwidth-UL */
414 {
415 struct dict_avp_data data = {
416 544, /* Code */
417 10415, /* Vendor */
418 "Max-Supported-Bandwidth-UL", /* Name */
419 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
420 AVP_FLAG_VENDOR, /* Fixed flag values */
421 AVP_TYPE_UNSIGNED32 /* base type of data */
422 };
423 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
424 };
425 /* MCPTT-Identifier */
426 {
427 struct dict_avp_data data = {
428 547, /* Code */
429 10415, /* Vendor */
430 "MCPTT-Identifier", /* Name */
431 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
432 AVP_FLAG_VENDOR, /* Fixed flag values */
433 AVP_TYPE_OCTETSTRING /* base type of data */
434 };
435 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
436 };
437 /* Media-Component-Number */
438 {
439 struct dict_avp_data data = {
440 518, /* Code */
441 10415, /* Vendor */
442 "Media-Component-Number", /* Name */
443 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
444 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
445 AVP_TYPE_UNSIGNED32 /* base type of data */
446 };
447 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
448 };
449 /* Media-Component-Status */
450 {
451 struct dict_avp_data data = {
452 549, /* Code */
453 10415, /* Vendor */
454 "Media-Component-Status", /* Name */
455 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
456 AVP_FLAG_VENDOR, /* Fixed flag values */
457 AVP_TYPE_UNSIGNED32 /* base type of data */
458 };
459 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
460 };
461 /* Media-Type */
462 {
463 struct dict_avp_data data = {
464 520, /* Code */
465 10415, /* Vendor */
466 "Media-Type", /* Name */
467 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
468 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
469 AVP_TYPE_INTEGER32 /* base type of data */
470 };
471 struct dict_object *type;
472 struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Media-Type)", NULL, NULL, NULL };
473 struct dict_enumval_data t_1 = { "AUDIO", { .i32=0 }};
474 struct dict_enumval_data t_2 = { "VIDEO", { .i32=1 }};
475 struct dict_enumval_data t_3 = { "DATA", { .i32=2 }};
476 struct dict_enumval_data t_4 = { "APPLICATION", { .i32=3 }};
477 struct dict_enumval_data t_5 = { "CONTROL", { .i32=4 }};
478 struct dict_enumval_data t_6 = { "TEXT", { .i32=5 }};
479 struct dict_enumval_data t_7 = { "MESSAGE", { .i32=6 }};
480 /* Create the Enumerated type, and then the AVP */
481 CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
482 CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
483 CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
484 CHECK_dict_new( DICT_ENUMVAL, &t_3, type, NULL);
485 CHECK_dict_new( DICT_ENUMVAL, &t_4, type, NULL);
486 CHECK_dict_new( DICT_ENUMVAL, &t_5, type, NULL);
487 CHECK_dict_new( DICT_ENUMVAL, &t_6, type, NULL);
488 CHECK_dict_new( DICT_ENUMVAL, &t_7, type, NULL);
489 CHECK_dict_new( DICT_AVP, &data, type, NULL);
490 };
491 /* MPS-Identifier */
492 {
493 struct dict_avp_data data = {
494 528, /* Code */
495 10415, /* Vendor */
496 "MPS-Identifier", /* Name */
497 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
498 AVP_FLAG_VENDOR, /* Fixed flag values */
499 AVP_TYPE_OCTETSTRING /* base type of data */
500 };
501 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
502 };
503 /* Min-Desired-Bandwidth-DL */
504 {
505 struct dict_avp_data data = {
506 545, /* Code */
507 10415, /* Vendor */
508 "Min-Desired-Bandwidth-DL", /* Name */
509 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
510 AVP_FLAG_VENDOR, /* Fixed flag values */
511 AVP_TYPE_UNSIGNED32 /* base type of data */
512 };
513 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
514 };
515 /* Min-Desired-Bandwidth-UL */
516 {
517 struct dict_avp_data data = {
518 546, /* Code */
519 10415, /* Vendor */
520 "Min-Desired-Bandwidth-UL", /* Name */
521 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
522 AVP_FLAG_VENDOR, /* Fixed flag values */
523 AVP_TYPE_UNSIGNED32 /* base type of data */
524 };
525 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
526 };
527 /* Min-Requested-Bandwidth-DL */
528 {
529 struct dict_avp_data data = {
530 534, /* Code */
531 10415, /* Vendor */
532 "Min-Requested-Bandwidth-DL", /* Name */
533 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
534 AVP_FLAG_VENDOR, /* Fixed flag values */
535 AVP_TYPE_UNSIGNED32 /* base type of data */
536 };
537 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
538 };
539 /* Min-Requested-Bandwidth-UL */
540 {
541 struct dict_avp_data data = {
542 535, /* Code */
543 10415, /* Vendor */
544 "Min-Requested-Bandwidth-UL", /* Name */
545 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
546 AVP_FLAG_VENDOR, /* Fixed flag values */
547 AVP_TYPE_UNSIGNED32 /* base type of data */
548 };
549 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
550 };
551 /* Priority-Sharing-Indicator */
552 {
553 struct dict_avp_data data = {
554 550, /* Code */
555 10415, /* Vendor */
556 "Priority-Sharing-Indicator", /* Name */
557 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
558 AVP_FLAG_VENDOR, /* Fixed flag values */
559 AVP_TYPE_INTEGER32 /* base type of data */
560 };
561 struct dict_object *type;
562 struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Priority-Sharing-Indicator)", NULL, NULL, NULL };
563 struct dict_enumval_data t_1 = { "PRIORITY_SHARING_ENABLED", { .i32=0 }};
564 struct dict_enumval_data t_2 = { "PRIORITY_SHARING_DISABLED", { .i32=1 }};
565 /* Create the Enumerated type, and then the AVP */
566 CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
567 CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
568 CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
569 CHECK_dict_new( DICT_AVP, &data, type, NULL);
570 };
571 /* RR-Bandwidth */
572 {
573 struct dict_avp_data data = {
574 521, /* Code */
575 10415, /* Vendor */
576 "RR-Bandwidth", /* Name */
577 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
578 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
579 AVP_TYPE_UNSIGNED32 /* base type of data */
580 };
581 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
582 };
583 /* RS-Bandwidth */
584 {
585 struct dict_avp_data data = {
586 522, /* Code */
587 10415, /* Vendor */
588 "RS-Bandwidth", /* Name */
589 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
590 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
591 AVP_TYPE_UNSIGNED32 /* base type of data */
592 };
593 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
594 };
595 /* Service-Authorization-Info */
596 {
597 struct dict_avp_data data = {
598 548, /* Code */
599 10415, /* Vendor */
600 "Service-Authorization-Info", /* Name */
601 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
602 AVP_FLAG_VENDOR, /* Fixed flag values */
603 AVP_TYPE_UNSIGNED32 /* base type of data */
604 };
605 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
606 };
607 /* Service-URN */
608 {
609 struct dict_avp_data data = {
610 525, /* Code */
611 10415, /* Vendor */
612 "Service-URN", /* Name */
613 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
614 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
615 AVP_TYPE_OCTETSTRING /* base type of data */
616 };
617 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
618 };
619 /* Service-Info-Status */
620 {
621 struct dict_avp_data data = {
622 527, /* Code */
623 10415, /* Vendor */
624 "Service-Info-Status", /* Name */
625 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
626 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
627 AVP_TYPE_INTEGER32 /* base type of data */
628 };
629 struct dict_object *type;
630 struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Service-Info-Status)", NULL, NULL, NULL };
631 struct dict_enumval_data t_1 = { "FINAL_SERVICE_INFORMATION", { .i32=0 }};
632 struct dict_enumval_data t_2 = { "PRELIMINARY_SERVICE_INFORMATION", { .i32=1 }};
633 /* Create the Enumerated type, and then the AVP */
634 CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
635 CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
636 CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
637 CHECK_dict_new( DICT_AVP, &data, type, NULL);
638 };
639 /* Sharing-Key-DL */
640 {
641 struct dict_avp_data data = {
642 539, /* Code */
643 10415, /* Vendor */
644 "Sharing-Key-DL", /* Name */
645 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
646 AVP_FLAG_VENDOR, /* Fixed flag values */
647 AVP_TYPE_UNSIGNED32 /* base type of data */
648 };
649 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
650 };
651 /* Sharing-Key-UL */
652 {
653 struct dict_avp_data data = {
654 540, /* Code */
655 10415, /* Vendor */
656 "Sharing-Key-UL", /* Name */
657 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
658 AVP_FLAG_VENDOR, /* Fixed flag values */
659 AVP_TYPE_UNSIGNED32 /* base type of data */
660 };
661 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
662 };
663 /* Specific-Action */
664 {
665 struct dict_avp_data data = {
666 513, /* Code */
667 10415, /* Vendor */
668 "Specific-Action", /* Name */
669 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
670 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
671 AVP_TYPE_INTEGER32 /* base type of data */
672 };
673 struct dict_object *type;
674 struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Specific-Action)", NULL, NULL, NULL };
675 struct dict_enumval_data t_1 = { "Void", { .i32=0 }};
676 struct dict_enumval_data t_2 = { "CHARGING_CORRELATION_EXCHANGE", { .i32=1 }};
677 struct dict_enumval_data t_3 = { "INDICATION_OF_LIMITED_PCC_DEPLOYMENT", { .i32=10 }};
678 struct dict_enumval_data t_4 = { "USAGE_REPORT", { .i32=11 }};
679 struct dict_enumval_data t_5 = { "ACCESS_NETWORK_INFO_REPORT", { .i32=12 }};
680 struct dict_enumval_data t_6 = { "INDICATION_OF_RECOVERY_FROM_LIMITED_PCC_DEPLOYMENT", { .i32=13 }};
681 struct dict_enumval_data t_7 = { "INDICATION_OF_ACCESS_NETWORK_INFO_REPORTING_FAILURE", { .i32=14 }};
682 struct dict_enumval_data t_8 = { "INDICATION_OF_TRANSFER_POLICY_EXPIRED", { .i32=15 }};
683 struct dict_enumval_data t_9 = { "PLMN_CHANGE", { .i32=16 }};
684 struct dict_enumval_data t_10 = { "INDICATION_OF_LOSS_OF_BEARER", { .i32=2 }};
685 struct dict_enumval_data t_11 = { "INDICATION_OF_RECOVERY_OF_BEARER", { .i32=3 }};
686 struct dict_enumval_data t_12 = { "INDICATION_OF_RELEASE_OF_BEARER", { .i32=4 }};
687 struct dict_enumval_data t_13 = { "Void2", { .i32=5 }};
688 struct dict_enumval_data t_14 = { "IP_CAN_CHANGE", { .i32=6 }};
689 struct dict_enumval_data t_15 = { "INDICATION_OF_OUT_OF_CREDIT", { .i32=7 }};
690 struct dict_enumval_data t_16 = { "INDICATION_OF_SUCCESSFUL_RESOURCES_ALLOCATION", { .i32=8 }};
691 struct dict_enumval_data t_17 = { "INDICATION_OF_FAILED_RESOURCES_ALLOCATION", { .i32=9 }};
692 /* Create the Enumerated type, and then the AVP */
693 CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
694 CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
695 CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
696 CHECK_dict_new( DICT_ENUMVAL, &t_3, type, NULL);
697 CHECK_dict_new( DICT_ENUMVAL, &t_4, type, NULL);
698 CHECK_dict_new( DICT_ENUMVAL, &t_5, type, NULL);
699 CHECK_dict_new( DICT_ENUMVAL, &t_6, type, NULL);
700 CHECK_dict_new( DICT_ENUMVAL, &t_7, type, NULL);
701 CHECK_dict_new( DICT_ENUMVAL, &t_8, type, NULL);
702 CHECK_dict_new( DICT_ENUMVAL, &t_9, type, NULL);
703 CHECK_dict_new( DICT_ENUMVAL, &t_10, type, NULL);
704 CHECK_dict_new( DICT_ENUMVAL, &t_11, type, NULL);
705 CHECK_dict_new( DICT_ENUMVAL, &t_12, type, NULL);
706 CHECK_dict_new( DICT_ENUMVAL, &t_13, type, NULL);
707 CHECK_dict_new( DICT_ENUMVAL, &t_14, type, NULL);
708 CHECK_dict_new( DICT_ENUMVAL, &t_15, type, NULL);
709 CHECK_dict_new( DICT_ENUMVAL, &t_16, type, NULL);
710 CHECK_dict_new( DICT_ENUMVAL, &t_17, type, NULL);
711 CHECK_dict_new( DICT_AVP, &data, type, NULL);
712 };
713 /* SIP-Forking-Indication */
714 {
715 struct dict_avp_data data = {
716 523, /* Code */
717 10415, /* Vendor */
718 "SIP-Forking-Indication", /* Name */
719 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
720 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
721 AVP_TYPE_INTEGER32 /* base type of data */
722 };
723 struct dict_object *type;
724 struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(SIP-Forking-Indication)", NULL, NULL, NULL };
725 struct dict_enumval_data t_1 = { "SINGLE_DIALOGUE", { .i32=0 }};
726 struct dict_enumval_data t_2 = { "SEVERAL_DIALOGUES", { .i32=1 }};
727 /* Create the Enumerated type, and then the AVP */
728 CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
729 CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
730 CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
731 CHECK_dict_new( DICT_AVP, &data, type, NULL);
732 };
733 /* Sponsor-Identity */
734 {
735 struct dict_avp_data data = {
736 531, /* Code */
737 10415, /* Vendor */
738 "Sponsor-Identity", /* Name */
739 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
740 AVP_FLAG_VENDOR, /* Fixed flag values */
741 AVP_TYPE_OCTETSTRING /* base type of data */
742 };
743 CHECK_dict_new( DICT_AVP, &data, UTF8String_type, NULL);
744 };
745 /* Sponsoring-Action */
746 {
747 struct dict_avp_data data = {
748 542, /* Code */
749 10415, /* Vendor */
750 "Sponsoring-Action", /* Name */
751 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
752 AVP_FLAG_VENDOR, /* Fixed flag values */
753 AVP_TYPE_INTEGER32 /* base type of data */
754 };
755 struct dict_object *type;
756 struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Sponsoring-Action)", NULL, NULL, NULL };
757 struct dict_enumval_data t_1 = { "DISABLE_SPONSORING", { .i32=0 }};
758 struct dict_enumval_data t_2 = { "ENABLE_SPONSORING", { .i32=1 }};
759 /* Create the Enumerated type, and then the AVP */
760 CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
761 CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
762 CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
763 CHECK_dict_new( DICT_AVP, &data, type, NULL);
764 };
765 /* Required-Access-Info */
766 {
767 struct dict_avp_data data = {
768 536, /* Code */
769 10415, /* Vendor */
770 "Required-Access-Info", /* Name */
771 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
772 AVP_FLAG_VENDOR, /* Fixed flag values */
773 AVP_TYPE_INTEGER32 /* base type of data */
774 };
775 struct dict_object *type;
776 struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Required-Access-Info)", NULL, NULL, NULL };
777 struct dict_enumval_data t_1 = { "USER_LOCATION", { .i32=0 }};
778 struct dict_enumval_data t_2 = { "MS_TIME_ZONE", { .i32=1 }};
779 /* Create the Enumerated type, and then the AVP */
780 CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
781 CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
782 CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
783 CHECK_dict_new( DICT_AVP, &data, type, NULL);
784 };
785 /* Rx-Request-Type */
786 {
787 struct dict_avp_data data = {
788 533, /* Code */
789 10415, /* Vendor */
790 "Rx-Request-Type", /* Name */
791 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
792 AVP_FLAG_VENDOR, /* Fixed flag values */
793 AVP_TYPE_INTEGER32 /* base type of data */
794 };
795 struct dict_object *type;
796 struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "3GPP/Enumerated(Rx-Request-Type)", NULL, NULL, NULL };
797 struct dict_enumval_data t_1 = { "INITIAL_REQUEST", { .i32=0 }};
798 struct dict_enumval_data t_2 = { "UPDATE_REQUEST", { .i32=1 }};
799 struct dict_enumval_data t_3 = { "PCSCF_RESTORATION", { .i32=2 }};
800 /* Create the Enumerated type, and then the AVP */
801 CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type);
802 CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
803 CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
804 CHECK_dict_new( DICT_ENUMVAL, &t_3, type, NULL);
805 CHECK_dict_new( DICT_AVP, &data, type, NULL);
806 };
807 /* Retry-Interval */
808 {
809 struct dict_avp_data data = {
810 541, /* Code */
811 10415, /* Vendor */
812 "Retry-Interval", /* Name */
813 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
814 AVP_FLAG_VENDOR, /* Fixed flag values */
815 AVP_TYPE_UNSIGNED32 /* base type of data */
816 };
817 CHECK_dict_new( DICT_AVP, &data, NULL, NULL);
818 };
819 /* Media-Sub-Component */
820 {
821 /* Grouped */
822 struct dict_object * avp;
823 struct dict_avp_data data = {
824 519, /* Code */
825 10415, /* Vendor */
826 "Media-Sub-Component", /* Name */
827 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
828 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
829 AVP_TYPE_GROUPED /* base type of data */
830 };
831 CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
832 }
833 /* Flows */
834 {
835 /* Grouped */
836 struct dict_object * avp;
837 struct dict_avp_data data = {
838 510, /* Code */
839 10415, /* Vendor */
840 "Flows", /* Name */
841 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
842 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
843 AVP_TYPE_GROUPED /* base type of data */
844 };
845 CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
846 }
847 /* Media-Component-Description */
848 {
849 /* Grouped */
850 struct dict_object * avp;
851 struct dict_avp_data data = {
852 517, /* Code */
853 10415, /* Vendor */
854 "Media-Component-Description", /* Name */
855 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
856 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
857 AVP_TYPE_GROUPED /* base type of data */
858 };
859 CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
860 }
861 /* Access-Network-Charging-Identifier */
862 {
863 /* Grouped */
864 struct dict_object * avp;
865 struct dict_avp_data data = {
866 502, /* Code */
867 10415, /* Vendor */
868 "Access-Network-Charging-Identifier", /* Name */
869 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
870 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
871 AVP_TYPE_GROUPED /* base type of data */
872 };
873 CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
874 }
875 /* Acceptable-Service-Info */
876 {
877 /* Grouped */
878 struct dict_object * avp;
879 struct dict_avp_data data = {
880 526, /* Code */
881 10415, /* Vendor */
882 "Acceptable-Service-Info", /* Name */
883 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
884 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */
885 AVP_TYPE_GROUPED /* base type of data */
886 };
887 CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
888 }
889 /* Sponsored-Connectivity-Data */
890 {
891 /* Grouped */
892 struct dict_object * avp;
893 struct dict_avp_data data = {
894 530, /* Code */
895 10415, /* Vendor */
896 "Sponsored-Connectivity-Data", /* Name */
897 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */
898 AVP_FLAG_VENDOR, /* Fixed flag values */
899 AVP_TYPE_GROUPED /* base type of data */
900 };
901 CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
902 }
903
904
905 }
906
907 /* Commands section */
908 {
909
910 }
911
912 return 0;
913}
914
915static int dict_ts29214_avps_load_rules(char * conffile)
916{
917 /* Grouped AVP section */
918 {
919 /* Media-Sub-Component */
920 {
921 /* Grouped */
922 struct dict_object * avp;
923 struct dict_avp_request avp_vendor_plus_name = { .avp_vendor = 10415, .avp_name = "Media-Sub-Component"};
924 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
925 struct local_rules_definition rules[] =
926 {
927 { { .avp_vendor = 10415, .avp_name = "Flow-Number"}, RULE_REQUIRED, -1, -1 }
928 };
929 PARSE_loc_rules( rules, avp );
930 }
931 /* Flows */
932 {
933 /* Grouped */
934 struct dict_object * avp;
935 struct dict_avp_request avp_vendor_plus_name = { .avp_vendor = 10415, .avp_name = "Flows"};
936 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
937 struct local_rules_definition rules[] =
938 {
939 { { .avp_vendor = 10415, .avp_name = "Media-Component-Number"}, RULE_REQUIRED, -1, -1 },
940 { { .avp_vendor = 10415, .avp_name = "Flow-Number"}, RULE_OPTIONAL, -1, -1 },
941 { { .avp_vendor = 10415, .avp_name = "Content-Version"}, RULE_OPTIONAL, -1, -1 },
942 { { .avp_vendor = 0, .avp_name = "Final-Unit-Action"}, RULE_OPTIONAL, -1, -1 },
943 { { .avp_vendor = 10415, .avp_name = "Media-Component-Status"}, RULE_OPTIONAL, -1, -1 }
944 };
945 PARSE_loc_rules( rules, avp );
946 }
947 /* Media-Component-Description */
948 {
949 /* Grouped */
950 struct dict_object * avp;
951 struct dict_avp_request avp_vendor_plus_name = { .avp_vendor = 10415, .avp_name = "Media-Component-Description"};
952 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
953 struct local_rules_definition rules[] =
954 {
955 { { .avp_vendor = 10415, .avp_name = "Media-Component-Number"}, RULE_REQUIRED, -1, -1 }
956 };
957 PARSE_loc_rules( rules, avp );
958 }
959 /* Access-Network-Charging-Identifier */
960 {
961 /* Grouped */
962 struct dict_object * avp;
963 struct dict_avp_request avp_vendor_plus_name = { .avp_vendor = 10415, .avp_name = "Access-Network-Charging-Identifier"};
964 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
965 struct local_rules_definition rules[] =
966 {
967 { { .avp_vendor = 10415, .avp_name = "Access-Network-Charging-Identifier-Value"}, RULE_REQUIRED, -1, -1 },
968 { { .avp_vendor = 10415, .avp_name = "Flows"}, RULE_OPTIONAL, -1, -1 }
969 };
970 PARSE_loc_rules( rules, avp );
971 }
972 /* Acceptable-Service-Info */
973 {
974 /* Grouped */
975 struct dict_object * avp;
976 struct dict_avp_request avp_vendor_plus_name = { .avp_vendor = 10415, .avp_name = "Acceptable-Service-Info"};
977 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
978 struct local_rules_definition rules[] =
979 {
980 { { .avp_vendor = 10415, .avp_name = "Media-Component-Description"}, RULE_OPTIONAL, -1, -1 },
981 { { .avp_vendor = 10415, .avp_name = "Max-Requested-Bandwidth-DL"}, RULE_OPTIONAL, -1, -1 },
982 { { .avp_vendor = 10415, .avp_name = "Max-Requested-Bandwidth-UL"}, RULE_OPTIONAL, -1, -1 }
983 };
984 PARSE_loc_rules( rules, avp );
985 }
986 /* Sponsored-Connectivity-Data */
987 {
988 /* Grouped */
989 struct dict_object * avp;
990 struct dict_avp_request avp_vendor_plus_name = { .avp_vendor = 10415, .avp_name = "Sponsored-Connectivity-Data"};
991 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avp_vendor_plus_name, &avp)
992 struct local_rules_definition rules[] =
993 {
994 { { .avp_vendor = 10415, .avp_name = "Sponsor-Identity"}, RULE_OPTIONAL, -1, -1 },
995 { { .avp_vendor = 10415, .avp_name = "Application-Service-Provider-Identity"}, RULE_OPTIONAL, -1, -1 },
996 { { .avp_vendor = 0, .avp_name = "Granted-Service-Unit"}, RULE_OPTIONAL, -1, -1 },
997 { { .avp_vendor = 0, .avp_name = "Used-Service-Unit"}, RULE_OPTIONAL, -1, -1 },
998 { { .avp_vendor = 10415, .avp_name = "Sponsoring-Action"}, RULE_OPTIONAL, -1, -1 }
999 };
1000 PARSE_loc_rules( rules, avp );
1001 }
1002
1003 }
1004
1005 /* Commands section */
1006 {
1007
1008 }
1009
1010 LOG_D( "Extension 'Dictionary definitions for ts29214_avps (e30)' initialized");
1011 return 0;
1012}
1013
1014int dict_entry(char * conffile)
1015{
1016 dict_ts29214_avps_load_defs(conffile);
1017 return dict_ts29214_avps_load_rules(conffile);
1018}
1019
1020const char* dict_ts29214_avps_proto_ver(char * conffile) {
1021 return ts29214_avps_proto_ver;
1022}
1023
1024const double dict_ts29214_avps_gen_ts(char * conffile) {
1025 return ts29214_avps_gen_date;
1026}
1027
1028EXTENSION_ENTRY2("dict_ts29214_avps", dict_ts29214_avps_load_defs, dict_ts29214_avps_load_rules, "dict_ts29273_avps", "dict_ts29212_avps", "dict_ts29229_avps", "dict_ts29154_avps", "dict_ts29061_avps", "dict_rfc4006bis_avps", "dict_draftload_avps", "dict_rfc7683_avps", "dict_rfc7155_avps", "dict_etsi283034_avps", "dict_rfc7944_avps");
1029
1030
1031