Mercurial > hg > freeDiameter
comparison extensions/dict_dcca_3gpp/dict_dcca_3gpp.c @ 1534:c83e60f28632
dict_dcca_3gpp: simplify rule creation
Refactor local_rules_definition to simplify rule creation
(to avoid c99 struct initialisers that result in long lines).
No change to generated rules.
author | Luke Mewburn <luke@mewburn.net> |
---|---|
date | Mon, 20 Apr 2020 12:12:42 +1000 |
parents | 64d0a145b041 |
children | 00278a2c5b90 |
comparison
equal
deleted
inserted
replaced
1533:f8561a0f7ac1 | 1534:c83e60f28632 |
---|---|
95 | 95 |
96 #define CHECK_dict_search( _type, _criteria, _what, _result ) \ | 96 #define CHECK_dict_search( _type, _criteria, _what, _result ) \ |
97 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, (_type), (_criteria), (_what), (_result), ENOENT) ); | 97 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, (_type), (_criteria), (_what), (_result), ENOENT) ); |
98 | 98 |
99 struct local_rules_definition { | 99 struct local_rules_definition { |
100 struct dict_avp_request avp_vendor_plus_name; | 100 vendor_id_t vendor; |
101 char * name; | |
101 enum rule_position position; | 102 enum rule_position position; |
102 int min; | 103 int min; |
103 int max; | 104 int max; |
104 }; | 105 }; |
105 | 106 |
107 | 108 |
108 /* Attention! This version of the macro uses AVP_BY_NAME_AND_VENDOR, in contrast to most other copies! */ | 109 /* Attention! This version of the macro uses AVP_BY_NAME_AND_VENDOR, in contrast to most other copies! */ |
109 #define PARSE_loc_rules( _rulearray, _parent) { \ | 110 #define PARSE_loc_rules( _rulearray, _parent) { \ |
110 int __ar; \ | 111 int __ar; \ |
111 for (__ar=0; __ar < sizeof(_rulearray) / sizeof((_rulearray)[0]); __ar++) { \ | 112 for (__ar=0; __ar < sizeof(_rulearray) / sizeof((_rulearray)[0]); __ar++) { \ |
113 struct dict_avp_request __avp = { \ | |
114 .avp_vendor = (_rulearray)[__ar].vendor, \ | |
115 .avp_name = (_rulearray)[__ar].name, \ | |
116 }; \ | |
112 struct dict_rule_data __data = { NULL, \ | 117 struct dict_rule_data __data = { NULL, \ |
113 (_rulearray)[__ar].position, \ | 118 (_rulearray)[__ar].position, \ |
114 0, \ | 119 0, \ |
115 (_rulearray)[__ar].min, \ | 120 (_rulearray)[__ar].min, \ |
116 (_rulearray)[__ar].max}; \ | 121 (_rulearray)[__ar].max}; \ |
117 __data.rule_order = RULE_ORDER(__data.rule_position); \ | 122 __data.rule_order = RULE_ORDER(__data.rule_position); \ |
118 CHECK_FCT( fd_dict_search( \ | 123 CHECK_FCT( fd_dict_search( \ |
119 fd_g_config->cnf_dict, \ | 124 fd_g_config->cnf_dict, \ |
120 DICT_AVP, \ | 125 DICT_AVP, \ |
121 AVP_BY_NAME_AND_VENDOR, \ | 126 AVP_BY_NAME_AND_VENDOR, \ |
122 &(_rulearray)[__ar].avp_vendor_plus_name, \ | 127 &__avp, \ |
123 &__data.rule_avp, 0 ) ); \ | 128 &__data.rule_avp, 0 ) ); \ |
124 if ( !__data.rule_avp ) { \ | 129 if ( !__data.rule_avp ) { \ |
125 LOG_E( "AVP Not found: '%s'", (_rulearray)[__ar].avp_vendor_plus_name.avp_name); \ | 130 LOG_E( "AVP Not found: '%s'", __avp.avp_name); \ |
126 return ENOENT; \ | 131 return ENOENT; \ |
127 } \ | 132 } \ |
128 CHECK_FCT_DO( fd_dict_new( fd_g_config->cnf_dict, DICT_RULE, &__data, _parent, NULL), \ | 133 CHECK_FCT_DO( fd_dict_new( fd_g_config->cnf_dict, DICT_RULE, &__data, _parent, NULL), \ |
129 { \ | 134 { \ |
130 LOG_E( "Error on rule with AVP '%s'", \ | 135 LOG_E( "Error on rule with AVP '%s'", __avp.avp_name); \ |
131 (_rulearray)[__ar].avp_vendor_plus_name.avp_name); \ | |
132 return EINVAL; \ | 136 return EINVAL; \ |
133 } ); \ | 137 } ); \ |
134 } \ | 138 } \ |
135 } | 139 } |
136 | 140 |
357 vpa.avp_vendor = 10415; | 361 vpa.avp_vendor = 10415; |
358 vpa.avp_name = "Allocation-Retention-Priority"; | 362 vpa.avp_name = "Allocation-Retention-Priority"; |
359 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); | 363 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); |
360 struct local_rules_definition rules[] = | 364 struct local_rules_definition rules[] = |
361 { | 365 { |
362 { { .avp_vendor = 10415, .avp_name = "Priority-Level" }, RULE_REQUIRED, -1, 1 }, | 366 { 10415, "Priority-Level", RULE_REQUIRED, -1, 1 }, |
363 { { .avp_vendor = 10415, .avp_name = "Pre-emption-Capability" }, RULE_OPTIONAL, -1, 1 }, | 367 { 10415, "Pre-emption-Capability", RULE_OPTIONAL, -1, 1 }, |
364 { { .avp_vendor = 10415, .avp_name = "Pre-emption-Vulnerability" }, RULE_OPTIONAL, -1, 1 }, | 368 { 10415, "Pre-emption-Vulnerability", RULE_OPTIONAL, -1, 1 }, |
365 }; | 369 }; |
366 PARSE_loc_rules(rules, rule_avp); | 370 PARSE_loc_rules(rules, rule_avp); |
367 } | 371 } |
368 | 372 |
369 { | 373 { |
372 vpa.avp_vendor = 10415; | 376 vpa.avp_vendor = 10415; |
373 vpa.avp_name = "QoS-Information"; | 377 vpa.avp_name = "QoS-Information"; |
374 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); | 378 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); |
375 struct local_rules_definition rules[] = | 379 struct local_rules_definition rules[] = |
376 { | 380 { |
377 { { .avp_vendor = 10415, .avp_name = "QoS-Class-Identifier" }, RULE_OPTIONAL, -1, 1 }, | 381 { 10415, "QoS-Class-Identifier", RULE_OPTIONAL, -1, 1 }, |
378 { { .avp_vendor = 10415, .avp_name = "Max-Requested-Bandwidth-UL" }, RULE_OPTIONAL, -1, 1 }, | 382 { 10415, "Max-Requested-Bandwidth-UL", RULE_OPTIONAL, -1, 1 }, |
379 { { .avp_vendor = 10415, .avp_name = "Max-Requested-Bandwidth-DL" }, RULE_OPTIONAL, -1, 1 }, | 383 { 10415, "Max-Requested-Bandwidth-DL", RULE_OPTIONAL, -1, 1 }, |
380 { { .avp_vendor = 10415, .avp_name = "Guaranteed-Bitrate-UL" }, RULE_OPTIONAL, -1, 1 }, | 384 { 10415, "Guaranteed-Bitrate-UL", RULE_OPTIONAL, -1, 1 }, |
381 { { .avp_vendor = 10415, .avp_name = "Guaranteed-Bitrate-DL" }, RULE_OPTIONAL, -1, 1 }, | 385 { 10415, "Guaranteed-Bitrate-DL", RULE_OPTIONAL, -1, 1 }, |
382 { { .avp_vendor = 10415, .avp_name = "Bearer-Identifier" }, RULE_OPTIONAL, -1, 1 }, | 386 { 10415, "Bearer-Identifier", RULE_OPTIONAL, -1, 1 }, |
383 { { .avp_vendor = 10415, .avp_name = "Allocation-Retention-Priority" }, RULE_OPTIONAL, -1, 1 }, | 387 { 10415, "Allocation-Retention-Priority", RULE_OPTIONAL, -1, 1 }, |
384 { { .avp_vendor = 10415, .avp_name = "APN-Aggregate-Max-Bitrate-UL" }, RULE_OPTIONAL, -1, 1 }, | 388 { 10415, "APN-Aggregate-Max-Bitrate-UL", RULE_OPTIONAL, -1, 1 }, |
385 { { .avp_vendor = 10415, .avp_name = "APN-Aggregate-Max-Bitrate-DL" }, RULE_OPTIONAL, -1, 1 }, | 389 { 10415, "APN-Aggregate-Max-Bitrate-DL", RULE_OPTIONAL, -1, 1 }, |
386 }; | 390 }; |
387 PARSE_loc_rules(rules, rule_avp); | 391 PARSE_loc_rules(rules, rule_avp); |
388 } | 392 } |
389 | 393 |
390 /* 32.299 */ | 394 /* 32.299 */ |
393 /* additional allowed AVPs */ | 397 /* additional allowed AVPs */ |
394 struct dict_object *ccr; | 398 struct dict_object *ccr; |
395 CHECK_dict_search(DICT_COMMAND, CMD_BY_NAME, "Credit-Control-Request", &ccr); | 399 CHECK_dict_search(DICT_COMMAND, CMD_BY_NAME, "Credit-Control-Request", &ccr); |
396 struct local_rules_definition rules[] = | 400 struct local_rules_definition rules[] = |
397 { | 401 { |
398 { { .avp_vendor = 10415, .avp_name = "AoC-Request-Type"}, RULE_OPTIONAL, -1, 1 }, | 402 { 10415, "AoC-Request-Type", RULE_OPTIONAL, -1, 1 }, |
399 { { .avp_vendor = 10415, .avp_name = "Service-Information"}, RULE_OPTIONAL, -1, 1 }, | 403 { 10415, "Service-Information", RULE_OPTIONAL, -1, 1 }, |
400 }; | 404 }; |
401 PARSE_loc_rules(rules, ccr); | 405 PARSE_loc_rules(rules, ccr); |
402 } | 406 } |
403 | 407 |
404 { | 408 { |
405 /* additional allowed AVPs */ | 409 /* additional allowed AVPs */ |
406 struct dict_object *ccr; | 410 struct dict_object *ccr; |
407 CHECK_dict_search(DICT_COMMAND, CMD_BY_NAME, "Credit-Control-Answer", &ccr); | 411 CHECK_dict_search(DICT_COMMAND, CMD_BY_NAME, "Credit-Control-Answer", &ccr); |
408 struct local_rules_definition rules[] = | 412 struct local_rules_definition rules[] = |
409 { | 413 { |
410 { { .avp_vendor = 10415, .avp_name = "Low-Balance-Indication"}, RULE_OPTIONAL, -1, 1 }, | 414 { 10415, "Low-Balance-Indication", RULE_OPTIONAL, -1, 1 }, |
411 { { .avp_vendor = 10415, .avp_name = "Remaining-Balance"}, RULE_OPTIONAL, -1, 1 }, | 415 { 10415, "Remaining-Balance", RULE_OPTIONAL, -1, 1 }, |
412 { { .avp_vendor = 10415, .avp_name = "Service-Information"}, RULE_OPTIONAL, -1, 1 }, | 416 { 10415, "Service-Information", RULE_OPTIONAL, -1, 1 }, |
413 }; | 417 }; |
414 PARSE_loc_rules(rules, ccr); | 418 PARSE_loc_rules(rules, ccr); |
415 } | 419 } |
416 | 420 |
417 { | 421 { |
420 vpa.avp_vendor = 10415; | 424 vpa.avp_vendor = 10415; |
421 vpa.avp_name = "Address-Domain"; | 425 vpa.avp_name = "Address-Domain"; |
422 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); | 426 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); |
423 struct local_rules_definition rules[] = | 427 struct local_rules_definition rules[] = |
424 { | 428 { |
425 { { .avp_vendor = 10415, .avp_name = "Domain-Name" }, RULE_OPTIONAL, -1, 1 }, | 429 { 10415, "Domain-Name", RULE_OPTIONAL, -1, 1 }, |
426 { { .avp_vendor = 10415, .avp_name = "3GPP-IMSI-MCC-MNC" }, RULE_OPTIONAL, -1, 1 }, | 430 { 10415, "3GPP-IMSI-MCC-MNC", RULE_OPTIONAL, -1, 1 }, |
427 }; | 431 }; |
428 PARSE_loc_rules(rules, rule_avp); | 432 PARSE_loc_rules(rules, rule_avp); |
429 } | 433 } |
430 | 434 |
431 { | 435 { |
434 vpa.avp_vendor = 10415; | 438 vpa.avp_vendor = 10415; |
435 vpa.avp_name = "Application-Server-Information"; | 439 vpa.avp_name = "Application-Server-Information"; |
436 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); | 440 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); |
437 struct local_rules_definition rules[] = | 441 struct local_rules_definition rules[] = |
438 { | 442 { |
439 { { .avp_vendor = 10415, .avp_name = "Application-Server" }, RULE_REQUIRED, -1, 1 }, | 443 { 10415, "Application-Server", RULE_REQUIRED, -1, 1 }, |
440 { { .avp_vendor = 10415, .avp_name = "Application-Provided-Called-Party-Address" }, RULE_OPTIONAL, -1, -1 }, | 444 { 10415, "Application-Provided-Called-Party-Address", RULE_OPTIONAL, -1, -1 }, |
441 }; | 445 }; |
442 PARSE_loc_rules(rules, rule_avp); | 446 PARSE_loc_rules(rules, rule_avp); |
443 } | 447 } |
444 | 448 |
445 { | 449 { |
448 vpa.avp_vendor = 10415; | 452 vpa.avp_vendor = 10415; |
449 vpa.avp_name = "Destination-Interface"; | 453 vpa.avp_name = "Destination-Interface"; |
450 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); | 454 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); |
451 struct local_rules_definition rules[] = | 455 struct local_rules_definition rules[] = |
452 { | 456 { |
453 { { .avp_vendor = 10415, .avp_name = "Interface-Id" }, RULE_OPTIONAL, -1, 1 }, | 457 { 10415, "Interface-Id", RULE_OPTIONAL, -1, 1 }, |
454 { { .avp_vendor = 10415, .avp_name = "Interface-Text" }, RULE_OPTIONAL, -1, 1 }, | 458 { 10415, "Interface-Text", RULE_OPTIONAL, -1, 1 }, |
455 { { .avp_vendor = 10415, .avp_name = "Interface-Port" }, RULE_OPTIONAL, -1, 1 }, | 459 { 10415, "Interface-Port", RULE_OPTIONAL, -1, 1 }, |
456 { { .avp_vendor = 10415, .avp_name = "Interface-Type" }, RULE_OPTIONAL, -1, 1 }, | 460 { 10415, "Interface-Type", RULE_OPTIONAL, -1, 1 }, |
457 }; | 461 }; |
458 PARSE_loc_rules(rules, rule_avp); | 462 PARSE_loc_rules(rules, rule_avp); |
459 } | 463 } |
460 | 464 |
461 { | 465 { |
464 vpa.avp_vendor = 10415; | 468 vpa.avp_vendor = 10415; |
465 vpa.avp_name = "Envelope"; | 469 vpa.avp_name = "Envelope"; |
466 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); | 470 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); |
467 struct local_rules_definition rules[] = | 471 struct local_rules_definition rules[] = |
468 { | 472 { |
469 { { .avp_vendor = 10415, .avp_name = "Envelope-Start-Time" }, RULE_REQUIRED, -1, 1 }, | 473 { 10415, "Envelope-Start-Time", RULE_REQUIRED, -1, 1 }, |
470 { { .avp_vendor = 10415, .avp_name = "Envelope-End-Time" }, RULE_OPTIONAL, -1, 1 }, | 474 { 10415, "Envelope-End-Time", RULE_OPTIONAL, -1, 1 }, |
471 { { .avp_vendor = 0, .avp_name = "CC-Total-Octets" }, RULE_REQUIRED, -1, 1 }, | 475 { 0, "CC-Total-Octets", RULE_REQUIRED, -1, 1 }, |
472 { { .avp_vendor = 0, .avp_name = "CC-Input-Octets" }, RULE_OPTIONAL, -1, 1 }, | 476 { 0, "CC-Input-Octets", RULE_OPTIONAL, -1, 1 }, |
473 { { .avp_vendor = 0, .avp_name = "CC-Output-Octets" }, RULE_OPTIONAL, -1, 1 }, | 477 { 0, "CC-Output-Octets", RULE_OPTIONAL, -1, 1 }, |
474 { { .avp_vendor = 0, .avp_name = "CC-Service-Specific-Units" }, RULE_OPTIONAL, -1, 1 }, | 478 { 0, "CC-Service-Specific-Units", RULE_OPTIONAL, -1, 1 }, |
475 }; | 479 }; |
476 PARSE_loc_rules(rules, rule_avp); | 480 PARSE_loc_rules(rules, rule_avp); |
477 } | 481 } |
478 | 482 |
479 { | 483 { |
482 vpa.avp_vendor = 10415; | 486 vpa.avp_vendor = 10415; |
483 vpa.avp_name = "Event-Type"; | 487 vpa.avp_name = "Event-Type"; |
484 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); | 488 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); |
485 struct local_rules_definition rules[] = | 489 struct local_rules_definition rules[] = |
486 { | 490 { |
487 { { .avp_vendor = 10415, .avp_name = "SIP-Method" }, RULE_OPTIONAL, -1, 1 }, | 491 { 10415, "SIP-Method", RULE_OPTIONAL, -1, 1 }, |
488 { { .avp_vendor = 10415, .avp_name = "Event" }, RULE_OPTIONAL, -1, 1 }, | 492 { 10415, "Event", RULE_OPTIONAL, -1, 1 }, |
489 { { .avp_vendor = 10415, .avp_name = "Expires" }, RULE_OPTIONAL, -1, 1 }, | 493 { 10415, "Expires", RULE_OPTIONAL, -1, 1 }, |
490 }; | 494 }; |
491 PARSE_loc_rules(rules, rule_avp); | 495 PARSE_loc_rules(rules, rule_avp); |
492 } | 496 } |
493 | 497 |
494 { | 498 { |
497 vpa.avp_vendor = 10415; | 501 vpa.avp_vendor = 10415; |
498 vpa.avp_name = "IMS-Information"; | 502 vpa.avp_name = "IMS-Information"; |
499 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); | 503 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); |
500 struct local_rules_definition rules[] = | 504 struct local_rules_definition rules[] = |
501 { | 505 { |
502 { { .avp_vendor = 10415, .avp_name = "Event-Type" }, RULE_OPTIONAL, -1, 1 }, | 506 { 10415, "Event-Type", RULE_OPTIONAL, -1, 1 }, |
503 { { .avp_vendor = 10415, .avp_name = "Role-Of-Node" }, RULE_OPTIONAL, -1, 1 }, | 507 { 10415, "Role-Of-Node", RULE_OPTIONAL, -1, 1 }, |
504 { { .avp_vendor = 10415, .avp_name = "Node-Functionality" }, RULE_REQUIRED, -1, 1 }, | 508 { 10415, "Node-Functionality", RULE_REQUIRED, -1, 1 }, |
505 { { .avp_vendor = 10415, .avp_name = "User-Session-Id" }, RULE_OPTIONAL, -1, 1 }, | 509 { 10415, "User-Session-Id", RULE_OPTIONAL, -1, 1 }, |
506 { { .avp_vendor = 10415, .avp_name = "Outgoing-Session-Id" }, RULE_OPTIONAL, -1, 1 }, | 510 { 10415, "Outgoing-Session-Id", RULE_OPTIONAL, -1, 1 }, |
507 { { .avp_vendor = 10415, .avp_name = "Session-Priority" }, RULE_OPTIONAL, -1, 1 }, | 511 { 10415, "Session-Priority", RULE_OPTIONAL, -1, 1 }, |
508 { { .avp_vendor = 10415, .avp_name = "Calling-Party-Address" }, RULE_OPTIONAL, -1, -1 }, | 512 { 10415, "Calling-Party-Address", RULE_OPTIONAL, -1, -1 }, |
509 { { .avp_vendor = 10415, .avp_name = "Called-Party-Address" }, RULE_OPTIONAL, -1, 1 }, | 513 { 10415, "Called-Party-Address", RULE_OPTIONAL, -1, 1 }, |
510 { { .avp_vendor = 10415, .avp_name = "Called-Asserted-Identity" }, RULE_OPTIONAL, -1, -1 }, | 514 { 10415, "Called-Asserted-Identity", RULE_OPTIONAL, -1, -1 }, |
511 { { .avp_vendor = 10415, .avp_name = "Number-Portability-Routing-Information" }, RULE_OPTIONAL, -1, 1 }, | 515 { 10415, "Number-Portability-Routing-Information", RULE_OPTIONAL, -1, 1 }, |
512 { { .avp_vendor = 10415, .avp_name = "Carrier-Select-Routing-Information" }, RULE_OPTIONAL, -1, 1 }, | 516 { 10415, "Carrier-Select-Routing-Information", RULE_OPTIONAL, -1, 1 }, |
513 { { .avp_vendor = 10415, .avp_name = "Alternate-Charged-Party-Address" }, RULE_OPTIONAL, -1, 1 }, | 517 { 10415, "Alternate-Charged-Party-Address", RULE_OPTIONAL, -1, 1 }, |
514 { { .avp_vendor = 10415, .avp_name = "Requested-Party-Address" }, RULE_OPTIONAL, -1, -1 }, | 518 { 10415, "Requested-Party-Address", RULE_OPTIONAL, -1, -1 }, |
515 { { .avp_vendor = 10415, .avp_name = "Associated-URI" }, RULE_OPTIONAL, -1, -1 }, | 519 { 10415, "Associated-URI", RULE_OPTIONAL, -1, -1 }, |
516 { { .avp_vendor = 10415, .avp_name = "Time-Stamps" }, RULE_OPTIONAL, -1, 1 }, | 520 { 10415, "Time-Stamps", RULE_OPTIONAL, -1, 1 }, |
517 { { .avp_vendor = 10415, .avp_name = "Application-Server-Information" }, RULE_OPTIONAL, -1, -1 }, | 521 { 10415, "Application-Server-Information", RULE_OPTIONAL, -1, -1 }, |
518 { { .avp_vendor = 10415, .avp_name = "Inter-Operator-Identifier" }, RULE_OPTIONAL, -1, -1 }, | 522 { 10415, "Inter-Operator-Identifier", RULE_OPTIONAL, -1, -1 }, |
519 { { .avp_vendor = 10415, .avp_name = "Transit-IOI-List" }, RULE_OPTIONAL, -1, 1 }, | 523 { 10415, "Transit-IOI-List", RULE_OPTIONAL, -1, 1 }, |
520 { { .avp_vendor = 10415, .avp_name = "IMS-Charging-Identifier" }, RULE_OPTIONAL, -1, 1 }, | 524 { 10415, "IMS-Charging-Identifier", RULE_OPTIONAL, -1, 1 }, |
521 { { .avp_vendor = 10415, .avp_name = "SDP-Session-Description" }, RULE_OPTIONAL, -1, -1 }, | 525 { 10415, "SDP-Session-Description", RULE_OPTIONAL, -1, -1 }, |
522 { { .avp_vendor = 10415, .avp_name = "SDP-Media-Component" }, RULE_OPTIONAL, -1, -1 }, | 526 { 10415, "SDP-Media-Component", RULE_OPTIONAL, -1, -1 }, |
523 { { .avp_vendor = 10415, .avp_name = "Served-Party-IP-Address" }, RULE_OPTIONAL, -1, 1 }, | 527 { 10415, "Served-Party-IP-Address", RULE_OPTIONAL, -1, 1 }, |
524 { { .avp_vendor = 10415, .avp_name = "Server-Capabilities" }, RULE_OPTIONAL, -1, 1 }, | 528 { 10415, "Server-Capabilities", RULE_OPTIONAL, -1, 1 }, |
525 { { .avp_vendor = 10415, .avp_name = "Trunk-Group-Id" }, RULE_OPTIONAL, -1, 1 }, | 529 { 10415, "Trunk-Group-Id", RULE_OPTIONAL, -1, 1 }, |
526 { { .avp_vendor = 10415, .avp_name = "Bearer-Service" }, RULE_OPTIONAL, -1, 1 }, | 530 { 10415, "Bearer-Service", RULE_OPTIONAL, -1, 1 }, |
527 { { .avp_vendor = 10415, .avp_name = "Service-Id" }, RULE_OPTIONAL, -1, 1 }, | 531 { 10415, "Service-Id", RULE_OPTIONAL, -1, 1 }, |
528 { { .avp_vendor = 10415, .avp_name = "Service-Specific-Info" }, RULE_OPTIONAL, -1, -1 }, | 532 { 10415, "Service-Specific-Info", RULE_OPTIONAL, -1, -1 }, |
529 { { .avp_vendor = 10415, .avp_name = "Message-Body" }, RULE_OPTIONAL, -1, -1 }, | 533 { 10415, "Message-Body", RULE_OPTIONAL, -1, -1 }, |
530 { { .avp_vendor = 10415, .avp_name = "Cause-Code" }, RULE_OPTIONAL, -1, 1 }, | 534 { 10415, "Cause-Code", RULE_OPTIONAL, -1, 1 }, |
531 { { .avp_vendor = 10415, .avp_name = "Access-Network-Information" }, RULE_OPTIONAL, -1, 1 }, | 535 { 10415, "Access-Network-Information", RULE_OPTIONAL, -1, 1 }, |
532 { { .avp_vendor = 10415, .avp_name = "Early-Media-Description" }, RULE_OPTIONAL, -1, -1 }, | 536 { 10415, "Early-Media-Description", RULE_OPTIONAL, -1, -1 }, |
533 { { .avp_vendor = 10415, .avp_name = "IMS-Communication-Service-Identifier" }, RULE_OPTIONAL, -1, 1 }, | 537 { 10415, "IMS-Communication-Service-Identifier",RULE_OPTIONAL, -1, 1 }, |
534 { { .avp_vendor = 10415, .avp_name = "IMS-Application-Reference-Identifier" }, RULE_OPTIONAL, -1, 1 }, | 538 { 10415, "IMS-Application-Reference-Identifier",RULE_OPTIONAL, -1, 1 }, |
535 { { .avp_vendor = 10415, .avp_name = "Online-Charging-Flag" }, RULE_OPTIONAL, -1, 1 }, | 539 { 10415, "Online-Charging-Flag", RULE_OPTIONAL, -1, 1 }, |
536 { { .avp_vendor = 10415, .avp_name = "Real-Time-Tariff-Information" }, RULE_OPTIONAL, -1, 1 }, | 540 { 10415, "Real-Time-Tariff-Information", RULE_OPTIONAL, -1, 1 }, |
537 { { .avp_vendor = 10415, .avp_name = "Account-Expiration" }, RULE_OPTIONAL, -1, 1 }, | 541 { 10415, "Account-Expiration", RULE_OPTIONAL, -1, 1 }, |
538 { { .avp_vendor = 10415, .avp_name = "Initial-IMS-Charging-Identifier" }, RULE_OPTIONAL, -1, 1 }, | 542 { 10415, "Initial-IMS-Charging-Identifier", RULE_OPTIONAL, -1, 1 }, |
539 { { .avp_vendor = 10415, .avp_name = "NNI-Information" }, RULE_OPTIONAL, -1, -1 }, | 543 { 10415, "NNI-Information", RULE_OPTIONAL, -1, -1 }, |
540 { { .avp_vendor = 10415, .avp_name = "From-Address" }, RULE_OPTIONAL, -1, 1 }, | 544 { 10415, "From-Address", RULE_OPTIONAL, -1, 1 }, |
541 { { .avp_vendor = 10415, .avp_name = "IMS-Emergency-Indicator" }, RULE_OPTIONAL, -1, 1 }, | 545 { 10415, "IMS-Emergency-Indicator", RULE_OPTIONAL, -1, 1 }, |
542 { { .avp_vendor = 10415, .avp_name = "Access-Transfer-Information" }, RULE_OPTIONAL, -1, -1 }, | 546 { 10415, "Access-Transfer-Information", RULE_OPTIONAL, -1, -1 }, |
543 }; | 547 }; |
544 PARSE_loc_rules(rules, rule_avp); | 548 PARSE_loc_rules(rules, rule_avp); |
545 } | 549 } |
546 | 550 |
547 { | 551 { |
550 vpa.avp_vendor = 10415; | 554 vpa.avp_vendor = 10415; |
551 vpa.avp_name = "Message-Class"; | 555 vpa.avp_name = "Message-Class"; |
552 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); | 556 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); |
553 struct local_rules_definition rules[] = | 557 struct local_rules_definition rules[] = |
554 { | 558 { |
555 { { .avp_vendor = 10415, .avp_name = "Class-Identifier" }, RULE_OPTIONAL, -1, 1 }, | 559 { 10415, "Class-Identifier", RULE_OPTIONAL, -1, 1 }, |
556 { { .avp_vendor = 10415, .avp_name = "Token-Text" }, RULE_OPTIONAL, -1, 1 }, | 560 { 10415, "Token-Text", RULE_OPTIONAL, -1, 1 }, |
557 }; | 561 }; |
558 PARSE_loc_rules(rules, rule_avp); | 562 PARSE_loc_rules(rules, rule_avp); |
559 } | 563 } |
560 | 564 |
561 { | 565 { |
564 vpa.avp_vendor = 10415; | 568 vpa.avp_vendor = 10415; |
565 vpa.avp_name = "MMS-Information"; | 569 vpa.avp_name = "MMS-Information"; |
566 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); | 570 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); |
567 struct local_rules_definition rules[] = | 571 struct local_rules_definition rules[] = |
568 { | 572 { |
569 { { .avp_vendor = 10415, .avp_name = "Originator-Address" }, RULE_OPTIONAL, -1, 1 }, | 573 { 10415, "Originator-Address", RULE_OPTIONAL, -1, 1 }, |
570 { { .avp_vendor = 10415, .avp_name = "Recipient-Address" }, RULE_OPTIONAL, -1, -1 }, | 574 { 10415, "Recipient-Address", RULE_OPTIONAL, -1, -1 }, |
571 { { .avp_vendor = 10415, .avp_name = "Submission-Time" }, RULE_OPTIONAL, -1, 1 }, | 575 { 10415, "Submission-Time", RULE_OPTIONAL, -1, 1 }, |
572 { { .avp_vendor = 10415, .avp_name = "MM-Content-Type" }, RULE_OPTIONAL, -1, 1 }, | 576 { 10415, "MM-Content-Type", RULE_OPTIONAL, -1, 1 }, |
573 { { .avp_vendor = 10415, .avp_name = "Priority" }, RULE_OPTIONAL, -1, -1 }, | 577 { 10415, "Priority", RULE_OPTIONAL, -1, -1 }, |
574 { { .avp_vendor = 10415, .avp_name = "Message-ID" }, RULE_OPTIONAL, -1, 1 }, | 578 { 10415, "Message-ID", RULE_OPTIONAL, -1, 1 }, |
575 { { .avp_vendor = 10415, .avp_name = "Message-Type" }, RULE_OPTIONAL, -1, 1 }, | 579 { 10415, "Message-Type", RULE_OPTIONAL, -1, 1 }, |
576 { { .avp_vendor = 10415, .avp_name = "Message-Size" }, RULE_OPTIONAL, -1, 1 }, | 580 { 10415, "Message-Size", RULE_OPTIONAL, -1, 1 }, |
577 { { .avp_vendor = 10415, .avp_name = "Message-Class" }, RULE_OPTIONAL, -1, 1 }, | 581 { 10415, "Message-Class", RULE_OPTIONAL, -1, 1 }, |
578 { { .avp_vendor = 10415, .avp_name = "Delivery-Report-Requested" }, RULE_OPTIONAL, -1, 1 }, | 582 { 10415, "Delivery-Report-Requested", RULE_OPTIONAL, -1, 1 }, |
579 { { .avp_vendor = 10415, .avp_name = "Read-Reply-Report-Requested" }, RULE_OPTIONAL, -1, 1 }, | 583 { 10415, "Read-Reply-Report-Requested", RULE_OPTIONAL, -1, 1 }, |
580 { { .avp_vendor = 10415, .avp_name = "MMBox-Storage-Requested" }, RULE_OPTIONAL, -1, 1 }, | 584 { 10415, "MMBox-Storage-Requested", RULE_OPTIONAL, -1, 1 }, |
581 { { .avp_vendor = 10415, .avp_name = "Applic-ID" }, RULE_OPTIONAL, -1, 1 }, | 585 { 10415, "Applic-ID", RULE_OPTIONAL, -1, 1 }, |
582 { { .avp_vendor = 10415, .avp_name = "Reply-Applic-ID" }, RULE_OPTIONAL, -1, 1 }, | 586 { 10415, "Reply-Applic-ID", RULE_OPTIONAL, -1, 1 }, |
583 { { .avp_vendor = 10415, .avp_name = "Aux-Applic-Info" }, RULE_OPTIONAL, -1, 1 }, | 587 { 10415, "Aux-Applic-Info", RULE_OPTIONAL, -1, 1 }, |
584 { { .avp_vendor = 10415, .avp_name = "Content-Class" }, RULE_OPTIONAL, -1, 1 }, | 588 { 10415, "Content-Class", RULE_OPTIONAL, -1, 1 }, |
585 { { .avp_vendor = 10415, .avp_name = "DRM-Content" }, RULE_OPTIONAL, -1, 1 }, | 589 { 10415, "DRM-Content", RULE_OPTIONAL, -1, 1 }, |
586 { { .avp_vendor = 10415, .avp_name = "Adaptations" }, RULE_OPTIONAL, -1, 1 }, | 590 { 10415, "Adaptations", RULE_OPTIONAL, -1, 1 }, |
587 { { .avp_vendor = 10415, .avp_name = "VASP-ID" }, RULE_OPTIONAL, -1, 1 }, | 591 { 10415, "VASP-ID", RULE_OPTIONAL, -1, 1 }, |
588 { { .avp_vendor = 10415, .avp_name = "VAS-ID" }, RULE_OPTIONAL, -1, 1 }, | 592 { 10415, "VAS-ID", RULE_OPTIONAL, -1, 1 }, |
589 }; | 593 }; |
590 PARSE_loc_rules(rules, rule_avp); | 594 PARSE_loc_rules(rules, rule_avp); |
591 } | 595 } |
592 | 596 |
593 { | 597 { |
598 vpa.avp_vendor = 0; | 602 vpa.avp_vendor = 0; |
599 vpa.avp_name = "Multiple-Services-Credit-Control"; | 603 vpa.avp_name = "Multiple-Services-Credit-Control"; |
600 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); | 604 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); |
601 struct local_rules_definition rules[] = | 605 struct local_rules_definition rules[] = |
602 { | 606 { |
603 { { .avp_vendor = 10415, .avp_name = "Time-Quota-Threshold" }, RULE_OPTIONAL, -1, 1 }, | 607 { 10415, "Time-Quota-Threshold", RULE_OPTIONAL, -1, 1 }, |
604 { { .avp_vendor = 10415, .avp_name = "Volume-Quota-Threshold" }, RULE_OPTIONAL, -1, 1 }, | 608 { 10415, "Volume-Quota-Threshold", RULE_OPTIONAL, -1, 1 }, |
605 { { .avp_vendor = 10415, .avp_name = "Unit-Quota-Threshold" }, RULE_OPTIONAL, -1, 1 }, | 609 { 10415, "Unit-Quota-Threshold", RULE_OPTIONAL, -1, 1 }, |
606 { { .avp_vendor = 10415, .avp_name = "Quota-Holding-Time" }, RULE_OPTIONAL, -1, 1 }, | 610 { 10415, "Quota-Holding-Time", RULE_OPTIONAL, -1, 1 }, |
607 { { .avp_vendor = 10415, .avp_name = "Quota-Consumption-Time" }, RULE_OPTIONAL, -1, 1 }, | 611 { 10415, "Quota-Consumption-Time", RULE_OPTIONAL, -1, 1 }, |
608 { { .avp_vendor = 10415, .avp_name = "Reporting-Reason" }, RULE_OPTIONAL, -1, -1 }, | 612 { 10415, "Reporting-Reason", RULE_OPTIONAL, -1, -1 }, |
609 { { .avp_vendor = 10415, .avp_name = "Trigger" }, RULE_OPTIONAL, -1, 1 }, | 613 { 10415, "Trigger", RULE_OPTIONAL, -1, 1 }, |
610 { { .avp_vendor = 10415, .avp_name = "PS-Furnish-Charging-Information" }, RULE_OPTIONAL, -1, 1 }, | 614 { 10415, "PS-Furnish-Charging-Information", RULE_OPTIONAL, -1, 1 }, |
611 { { .avp_vendor = 10415, .avp_name = "Refund-Information" }, RULE_OPTIONAL, -1, 1 }, | 615 { 10415, "Refund-Information", RULE_OPTIONAL, -1, 1 }, |
612 { { .avp_vendor = 10415, .avp_name = "AF-Correlation-Information" }, RULE_OPTIONAL, -1, -1 }, | 616 { 10415, "AF-Correlation-Information", RULE_OPTIONAL, -1, -1 }, |
613 { { .avp_vendor = 10415, .avp_name = "Envelope" }, RULE_OPTIONAL, -1, -1 }, | 617 { 10415, "Envelope", RULE_OPTIONAL, -1, -1 }, |
614 { { .avp_vendor = 10415, .avp_name = "Envelope-Reporting" }, RULE_OPTIONAL, -1, 1 }, | 618 { 10415, "Envelope-Reporting", RULE_OPTIONAL, -1, 1 }, |
615 { { .avp_vendor = 10415, .avp_name = "Time-Quota-Mechanism" }, RULE_OPTIONAL, -1, 1 }, | 619 { 10415, "Time-Quota-Mechanism", RULE_OPTIONAL, -1, 1 }, |
616 { { .avp_vendor = 10415, .avp_name = "Service-Specific-Info" }, RULE_OPTIONAL, -1, -1 }, | 620 { 10415, "Service-Specific-Info", RULE_OPTIONAL, -1, -1 }, |
617 { { .avp_vendor = 10415, .avp_name = "QoS-Information" }, RULE_OPTIONAL, -1, 1 }, | 621 { 10415, "QoS-Information", RULE_OPTIONAL, -1, 1 }, |
618 }; | 622 }; |
619 PARSE_loc_rules(rules, rule_avp); | 623 PARSE_loc_rules(rules, rule_avp); |
620 } | 624 } |
621 | 625 |
622 { | 626 { |
625 vpa.avp_vendor = 10415; | 629 vpa.avp_vendor = 10415; |
626 vpa.avp_name = "Offline-Charging"; | 630 vpa.avp_name = "Offline-Charging"; |
627 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); | 631 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); |
628 struct local_rules_definition rules[] = | 632 struct local_rules_definition rules[] = |
629 { | 633 { |
630 { { .avp_vendor = 10415, .avp_name = "Quota-Consumption-Time" }, RULE_OPTIONAL, -1, 1 }, | 634 { 10415, "Quota-Consumption-Time", RULE_OPTIONAL, -1, 1 }, |
631 { { .avp_vendor = 10415, .avp_name = "Time-Quota-Mechanism" }, RULE_OPTIONAL, -1, 1 }, | 635 { 10415, "Time-Quota-Mechanism", RULE_OPTIONAL, -1, 1 }, |
632 { { .avp_vendor = 10415, .avp_name = "Envelope-Reporting" }, RULE_OPTIONAL, -1, 1 }, | 636 { 10415, "Envelope-Reporting", RULE_OPTIONAL, -1, 1 }, |
633 { { .avp_vendor = 0, .avp_name = "Multiple-Services-Credit-Control" }, RULE_OPTIONAL, -1, -1 }, | 637 { 0, "Multiple-Services-Credit-Control", RULE_OPTIONAL, -1, -1 }, |
634 }; | 638 }; |
635 PARSE_loc_rules(rules, rule_avp); | 639 PARSE_loc_rules(rules, rule_avp); |
636 } | 640 } |
637 | 641 |
638 { | 642 { |
641 vpa.avp_vendor = 10415; | 645 vpa.avp_vendor = 10415; |
642 vpa.avp_name = "Originator-Address"; | 646 vpa.avp_name = "Originator-Address"; |
643 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); | 647 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); |
644 struct local_rules_definition rules[] = | 648 struct local_rules_definition rules[] = |
645 { | 649 { |
646 { { .avp_vendor = 10415, .avp_name = "Address-Type" }, RULE_OPTIONAL, -1, 1 }, | 650 { 10415, "Address-Type", RULE_OPTIONAL, -1, 1 }, |
647 { { .avp_vendor = 10415, .avp_name = "Address-Data" }, RULE_OPTIONAL, -1, 1 }, | 651 { 10415, "Address-Data", RULE_OPTIONAL, -1, 1 }, |
648 { { .avp_vendor = 10415, .avp_name = "Address-Domain" }, RULE_OPTIONAL, -1, 1 }, | 652 { 10415, "Address-Domain", RULE_OPTIONAL, -1, 1 }, |
649 }; | 653 }; |
650 PARSE_loc_rules(rules, rule_avp); | 654 PARSE_loc_rules(rules, rule_avp); |
651 } | 655 } |
652 | 656 |
653 { | 657 { |
656 vpa.avp_vendor = 10415; | 660 vpa.avp_vendor = 10415; |
657 vpa.avp_name = "Originator-Interface"; | 661 vpa.avp_name = "Originator-Interface"; |
658 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); | 662 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); |
659 struct local_rules_definition rules[] = | 663 struct local_rules_definition rules[] = |
660 { | 664 { |
661 { { .avp_vendor = 10415, .avp_name = "Interface-Id" }, RULE_OPTIONAL, -1, 1 }, | 665 { 10415, "Interface-Id", RULE_OPTIONAL, -1, 1 }, |
662 { { .avp_vendor = 10415, .avp_name = "Interface-Text" }, RULE_OPTIONAL, -1, 1 }, | 666 { 10415, "Interface-Text", RULE_OPTIONAL, -1, 1 }, |
663 { { .avp_vendor = 10415, .avp_name = "Interface-Port" }, RULE_OPTIONAL, -1, 1 }, | 667 { 10415, "Interface-Port", RULE_OPTIONAL, -1, 1 }, |
664 { { .avp_vendor = 10415, .avp_name = "Interface-Type" }, RULE_OPTIONAL, -1, 1 }, | 668 { 10415, "Interface-Type", RULE_OPTIONAL, -1, 1 }, |
665 }; | 669 }; |
666 PARSE_loc_rules(rules, rule_avp); | 670 PARSE_loc_rules(rules, rule_avp); |
667 } | 671 } |
668 | 672 |
669 { | 673 { |
672 vpa.avp_vendor = 10415; | 676 vpa.avp_vendor = 10415; |
673 vpa.avp_name = "Originator-Received-Address"; | 677 vpa.avp_name = "Originator-Received-Address"; |
674 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); | 678 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); |
675 struct local_rules_definition rules[] = | 679 struct local_rules_definition rules[] = |
676 { | 680 { |
677 { { .avp_vendor = 10415, .avp_name = "Address-Type" }, RULE_OPTIONAL, -1, 1 }, | 681 { 10415, "Address-Type", RULE_OPTIONAL, -1, 1 }, |
678 { { .avp_vendor = 10415, .avp_name = "Address-Data" }, RULE_OPTIONAL, -1, 1 }, | 682 { 10415, "Address-Data", RULE_OPTIONAL, -1, 1 }, |
679 { { .avp_vendor = 10415, .avp_name = "Address-Domain" }, RULE_OPTIONAL, -1, 1 }, | 683 { 10415, "Address-Domain", RULE_OPTIONAL, -1, 1 }, |
680 }; | 684 }; |
681 PARSE_loc_rules(rules, rule_avp); | 685 PARSE_loc_rules(rules, rule_avp); |
682 } | 686 } |
683 | 687 |
684 { | 688 { |
687 vpa.avp_vendor = 10415; | 691 vpa.avp_vendor = 10415; |
688 vpa.avp_name = "PS-Furnish-Charging-Information"; | 692 vpa.avp_name = "PS-Furnish-Charging-Information"; |
689 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); | 693 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); |
690 struct local_rules_definition rules[] = | 694 struct local_rules_definition rules[] = |
691 { | 695 { |
692 { { .avp_vendor = 10415, .avp_name = "3GPP-Charging-Id" }, RULE_REQUIRED, -1, 1 }, | 696 { 10415, "3GPP-Charging-Id", RULE_REQUIRED, -1, 1 }, |
693 { { .avp_vendor = 10415, .avp_name = "PS-Free-Format-Data" }, RULE_REQUIRED, -1, 1 }, | 697 { 10415, "PS-Free-Format-Data", RULE_REQUIRED, -1, 1 }, |
694 { { .avp_vendor = 10415, .avp_name = "PS-Append-Free-Format-Data" }, RULE_OPTIONAL, -1, 1 }, | 698 { 10415, "PS-Append-Free-Format-Data", RULE_OPTIONAL, -1, 1 }, |
695 }; | 699 }; |
696 PARSE_loc_rules(rules, rule_avp); | 700 PARSE_loc_rules(rules, rule_avp); |
697 } | 701 } |
698 | 702 |
699 { | 703 { |
702 vpa.avp_vendor = 10415; | 706 vpa.avp_vendor = 10415; |
703 vpa.avp_name = "PS-Information"; | 707 vpa.avp_name = "PS-Information"; |
704 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); | 708 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); |
705 struct local_rules_definition rules[] = | 709 struct local_rules_definition rules[] = |
706 { | 710 { |
707 { { .avp_vendor = 10415, .avp_name = "3GPP-Charging-Id" }, RULE_OPTIONAL, -1, 1 }, | 711 { 10415, "3GPP-Charging-Id", RULE_OPTIONAL, -1, 1 }, |
708 { { .avp_vendor = 10415, .avp_name = "PDN-Connection-Charging-ID" }, RULE_OPTIONAL, -1, 1 }, | 712 { 10415, "PDN-Connection-Charging-ID", RULE_OPTIONAL, -1, 1 }, |
709 { { .avp_vendor = 10415, .avp_name = "Node-Id" }, RULE_OPTIONAL, -1, 1 }, | 713 { 10415, "Node-Id", RULE_OPTIONAL, -1, 1 }, |
710 { { .avp_vendor = 10415, .avp_name = "3GPP-PDP-Type" }, RULE_OPTIONAL, -1, 1 }, | 714 { 10415, "3GPP-PDP-Type", RULE_OPTIONAL, -1, 1 }, |
711 { { .avp_vendor = 10415, .avp_name = "PDP-Address" }, RULE_OPTIONAL, -1, -1 }, | 715 { 10415, "PDP-Address", RULE_OPTIONAL, -1, -1 }, |
712 { { .avp_vendor = 10415, .avp_name = "PDP-Address-Prefix-Length" }, RULE_OPTIONAL, -1, 1 }, | 716 { 10415, "PDP-Address-Prefix-Length", RULE_OPTIONAL, -1, 1 }, |
713 { { .avp_vendor = 10415, .avp_name = "Dynamic-Address-Flag" }, RULE_OPTIONAL, -1, 1 }, | 717 { 10415, "Dynamic-Address-Flag", RULE_OPTIONAL, -1, 1 }, |
714 { { .avp_vendor = 10415, .avp_name = "Dynamic-Address-Flag-Extension" }, RULE_OPTIONAL, -1, 1 }, | 718 { 10415, "Dynamic-Address-Flag-Extension", RULE_OPTIONAL, -1, 1 }, |
715 { { .avp_vendor = 10415, .avp_name = "QoS-Information" }, RULE_OPTIONAL, -1, 1 }, | 719 { 10415, "QoS-Information", RULE_OPTIONAL, -1, 1 }, |
716 { { .avp_vendor = 10415, .avp_name = "SGSN-Address" }, RULE_OPTIONAL, -1, -1 }, | 720 { 10415, "SGSN-Address", RULE_OPTIONAL, -1, -1 }, |
717 { { .avp_vendor = 10415, .avp_name = "GGSN-Address" }, RULE_OPTIONAL, -1, -1 }, | 721 { 10415, "GGSN-Address", RULE_OPTIONAL, -1, -1 }, |
718 { { .avp_vendor = 10415, .avp_name = "SGW-Address" }, RULE_OPTIONAL, -1, -1 }, | 722 { 10415, "SGW-Address", RULE_OPTIONAL, -1, -1 }, |
719 { { .avp_vendor = 10415, .avp_name = "CG-Address" }, RULE_OPTIONAL, -1, 1 }, | 723 { 10415, "CG-Address", RULE_OPTIONAL, -1, 1 }, |
720 { { .avp_vendor = 10415, .avp_name = "Serving-Node-Type" }, RULE_OPTIONAL, -1, 1 }, | 724 { 10415, "Serving-Node-Type", RULE_OPTIONAL, -1, 1 }, |
721 { { .avp_vendor = 10415, .avp_name = "SGW-Change" }, RULE_OPTIONAL, -1, 1 }, | 725 { 10415, "SGW-Change", RULE_OPTIONAL, -1, 1 }, |
722 { { .avp_vendor = 10415, .avp_name = "3GPP-IMSI-MCC-MNC" }, RULE_OPTIONAL, -1, 1 }, | 726 { 10415, "3GPP-IMSI-MCC-MNC", RULE_OPTIONAL, -1, 1 }, |
723 { { .avp_vendor = 10415, .avp_name = "IMSI-Unauthenticated-Flag" }, RULE_OPTIONAL, -1, 1 }, | 727 { 10415, "IMSI-Unauthenticated-Flag", RULE_OPTIONAL, -1, 1 }, |
724 { { .avp_vendor = 10415, .avp_name = "3GPP-GGSN-MCC-MNC" }, RULE_OPTIONAL, -1, 1 }, | 728 { 10415, "3GPP-GGSN-MCC-MNC", RULE_OPTIONAL, -1, 1 }, |
725 { { .avp_vendor = 10415, .avp_name = "3GPP-NSAPI" }, RULE_OPTIONAL, -1, 1 }, | 729 { 10415, "3GPP-NSAPI", RULE_OPTIONAL, -1, 1 }, |
726 { { .avp_vendor = 0, .avp_name = "Called-Station-Id" }, RULE_OPTIONAL, -1, 1 }, | 730 { 0, "Called-Station-Id", RULE_OPTIONAL, -1, 1 }, |
727 { { .avp_vendor = 10415, .avp_name = "3GPP-Session-Stop-Indicator" }, RULE_OPTIONAL, -1, 1 }, | 731 { 10415, "3GPP-Session-Stop-Indicator", RULE_OPTIONAL, -1, 1 }, |
728 { { .avp_vendor = 10415, .avp_name = "3GPP-Selection-Mode" }, RULE_OPTIONAL, -1, 1 }, | 732 { 10415, "3GPP-Selection-Mode", RULE_OPTIONAL, -1, 1 }, |
729 { { .avp_vendor = 10415, .avp_name = "3GPP-Charging-Characteristics" }, RULE_OPTIONAL, -1, 1 }, | 733 { 10415, "3GPP-Charging-Characteristics", RULE_OPTIONAL, -1, 1 }, |
730 { { .avp_vendor = 10415, .avp_name = "Charging-Characteristics-Selection-Mode" }, RULE_OPTIONAL, -1, 1 }, | 734 { 10415, "Charging-Characteristics-Selection-Mode", RULE_OPTIONAL, -1, 1 }, |
731 { { .avp_vendor = 10415, .avp_name = "3GPP-SGSN-MCC-MNC" }, RULE_OPTIONAL, -1, 1 }, | 735 { 10415, "3GPP-SGSN-MCC-MNC", RULE_OPTIONAL, -1, 1 }, |
732 { { .avp_vendor = 10415, .avp_name = "3GPP-MS-TimeZone" }, RULE_OPTIONAL, -1, 1 }, | 736 { 10415, "3GPP-MS-TimeZone", RULE_OPTIONAL, -1, 1 }, |
733 { { .avp_vendor = 10415, .avp_name = "Charging-Rule-Base-Name" }, RULE_OPTIONAL, -1, 1 }, | 737 { 10415, "Charging-Rule-Base-Name", RULE_OPTIONAL, -1, 1 }, |
734 { { .avp_vendor = 10415, .avp_name = "3GPP-User-Location-Info" }, RULE_OPTIONAL, -1, 1 }, | 738 { 10415, "3GPP-User-Location-Info", RULE_OPTIONAL, -1, 1 }, |
735 { { .avp_vendor = 10415, .avp_name = "User-CSG-Information" }, RULE_OPTIONAL, -1, 1 }, | 739 { 10415, "User-CSG-Information", RULE_OPTIONAL, -1, 1 }, |
736 { { .avp_vendor = 5535, .avp_name = "3GPP2-BSID" }, RULE_OPTIONAL, -1, 1 }, | 740 { 5535, "3GPP2-BSID", RULE_OPTIONAL, -1, 1 }, |
737 { { .avp_vendor = 10415, .avp_name = "3GPP-RAT-Type" }, RULE_OPTIONAL, -1, 1 }, | 741 { 10415, "3GPP-RAT-Type", RULE_OPTIONAL, -1, 1 }, |
738 { { .avp_vendor = 10415, .avp_name = "PS-Furnish-Charging-Information" }, RULE_OPTIONAL, -1, 1 }, | 742 { 10415, "PS-Furnish-Charging-Information", RULE_OPTIONAL, -1, 1 }, |
739 { { .avp_vendor = 10415, .avp_name = "PDP-Context-Type" }, RULE_OPTIONAL, -1, 1 }, | 743 { 10415, "PDP-Context-Type", RULE_OPTIONAL, -1, 1 }, |
740 { { .avp_vendor = 10415, .avp_name = "Offline-Charging" }, RULE_OPTIONAL, -1, 1 }, | 744 { 10415, "Offline-Charging", RULE_OPTIONAL, -1, 1 }, |
741 { { .avp_vendor = 10415, .avp_name = "Traffic-Data-Volumes" }, RULE_OPTIONAL, -1, -1 }, | 745 { 10415, "Traffic-Data-Volumes", RULE_OPTIONAL, -1, -1 }, |
742 { { .avp_vendor = 10415, .avp_name = "Service-Data-Container" }, RULE_OPTIONAL, -1, -1 }, | 746 { 10415, "Service-Data-Container", RULE_OPTIONAL, -1, -1 }, |
743 { { .avp_vendor = 0, .avp_name = "User-Equipment-Info" }, RULE_OPTIONAL, -1, 1 }, | 747 { 0, "User-Equipment-Info", RULE_OPTIONAL, -1, 1 }, |
744 { { .avp_vendor = 10415, .avp_name = "Terminal-Information" }, RULE_OPTIONAL, -1, 1 }, | 748 { 10415, "Terminal-Information", RULE_OPTIONAL, -1, 1 }, |
745 { { .avp_vendor = 10415, .avp_name = "Start-Time" }, RULE_OPTIONAL, -1, 1 }, | 749 { 10415, "Start-Time", RULE_OPTIONAL, -1, 1 }, |
746 { { .avp_vendor = 10415, .avp_name = "Stop-Time" }, RULE_OPTIONAL, -1, 1 }, | 750 { 10415, "Stop-Time", RULE_OPTIONAL, -1, 1 }, |
747 { { .avp_vendor = 10415, .avp_name = "Change-Condition" }, RULE_OPTIONAL, -1, 1 }, | 751 { 10415, "Change-Condition", RULE_OPTIONAL, -1, 1 }, |
748 { { .avp_vendor = 10415, .avp_name = "Diagnostics" }, RULE_OPTIONAL, -1, 1 }, | 752 { 10415, "Diagnostics", RULE_OPTIONAL, -1, 1 }, |
749 { { .avp_vendor = 10415, .avp_name = "Low-Priority-Indicator" }, RULE_OPTIONAL, -1, 1 }, | 753 { 10415, "Low-Priority-Indicator", RULE_OPTIONAL, -1, 1 }, |
750 { { .avp_vendor = 10415, .avp_name = "MME-Number-for-MT-SMS" }, RULE_OPTIONAL, -1, 1 }, | 754 { 10415, "MME-Number-for-MT-SMS", RULE_OPTIONAL, -1, 1 }, |
751 { { .avp_vendor = 10415, .avp_name = "MME-Name" }, RULE_OPTIONAL, -1, 1 }, | 755 { 10415, "MME-Name", RULE_OPTIONAL, -1, 1 }, |
752 { { .avp_vendor = 10415, .avp_name = "MME-Realm" }, RULE_OPTIONAL, -1, 1 }, | 756 { 10415, "MME-Realm", RULE_OPTIONAL, -1, 1 }, |
753 }; | 757 }; |
754 PARSE_loc_rules(rules, rule_avp); | 758 PARSE_loc_rules(rules, rule_avp); |
755 } | 759 } |
756 | 760 |
757 { | 761 { |
760 vpa.avp_vendor = 10415; | 764 vpa.avp_vendor = 10415; |
761 vpa.avp_name = "Recipient-Address"; | 765 vpa.avp_name = "Recipient-Address"; |
762 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); | 766 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); |
763 struct local_rules_definition rules[] = | 767 struct local_rules_definition rules[] = |
764 { | 768 { |
765 { { .avp_vendor = 10415, .avp_name = "Address-Type" }, RULE_OPTIONAL, -1, 1 }, | 769 { 10415, "Address-Type", RULE_OPTIONAL, -1, 1 }, |
766 { { .avp_vendor = 10415, .avp_name = "Address-Data" }, RULE_OPTIONAL, -1, 1 }, | 770 { 10415, "Address-Data", RULE_OPTIONAL, -1, 1 }, |
767 { { .avp_vendor = 10415, .avp_name = "Address-Domain" }, RULE_OPTIONAL, -1, 1 }, | 771 { 10415, "Address-Domain", RULE_OPTIONAL, -1, 1 }, |
768 { { .avp_vendor = 10415, .avp_name = "Addressee-Type" }, RULE_OPTIONAL, -1, 1 }, | 772 { 10415, "Addressee-Type", RULE_OPTIONAL, -1, 1 }, |
769 }; | 773 }; |
770 PARSE_loc_rules(rules, rule_avp); | 774 PARSE_loc_rules(rules, rule_avp); |
771 } | 775 } |
772 | 776 |
773 { | 777 { |
776 vpa.avp_vendor = 10415; | 780 vpa.avp_vendor = 10415; |
777 vpa.avp_name = "Recipient-Info"; | 781 vpa.avp_name = "Recipient-Info"; |
778 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); | 782 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); |
779 struct local_rules_definition rules[] = | 783 struct local_rules_definition rules[] = |
780 { | 784 { |
781 { { .avp_vendor = 10415, .avp_name = "Destination-Interface" }, RULE_OPTIONAL, -1, 1 }, | 785 { 10415, "Destination-Interface", RULE_OPTIONAL, -1, 1 }, |
782 { { .avp_vendor = 10415, .avp_name = "Recipient-Address" }, RULE_OPTIONAL, -1, -1 }, | 786 { 10415, "Recipient-Address", RULE_OPTIONAL, -1, -1 }, |
783 { { .avp_vendor = 10415, .avp_name = "Recipient-Received-Address" }, RULE_OPTIONAL, -1, -1 }, | 787 { 10415, "Recipient-Received-Address", RULE_OPTIONAL, -1, -1 }, |
784 { { .avp_vendor = 10415, .avp_name = "Recipient-SCCP-Address" }, RULE_OPTIONAL, -1, 1 }, | 788 { 10415, "Recipient-SCCP-Address", RULE_OPTIONAL, -1, 1 }, |
785 { { .avp_vendor = 10415, .avp_name = "SM-Protocol-ID" }, RULE_OPTIONAL, -1, 1 }, | 789 { 10415, "SM-Protocol-ID", RULE_OPTIONAL, -1, 1 }, |
786 }; | 790 }; |
787 PARSE_loc_rules(rules, rule_avp); | 791 PARSE_loc_rules(rules, rule_avp); |
788 } | 792 } |
789 | 793 |
790 { | 794 { |
793 vpa.avp_vendor = 10415; | 797 vpa.avp_vendor = 10415; |
794 vpa.avp_name = "Recipient-Received-Address"; | 798 vpa.avp_name = "Recipient-Received-Address"; |
795 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); | 799 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); |
796 struct local_rules_definition rules[] = | 800 struct local_rules_definition rules[] = |
797 { | 801 { |
798 { { .avp_vendor = 10415, .avp_name = "Address-Type" }, RULE_OPTIONAL, -1, 1 }, | 802 { 10415, "Address-Type", RULE_OPTIONAL, -1, 1 }, |
799 { { .avp_vendor = 10415, .avp_name = "Address-Data" }, RULE_OPTIONAL, -1, 1 }, | 803 { 10415, "Address-Data", RULE_OPTIONAL, -1, 1 }, |
800 { { .avp_vendor = 10415, .avp_name = "Address-Domain" }, RULE_OPTIONAL, -1, 1 }, | 804 { 10415, "Address-Domain", RULE_OPTIONAL, -1, 1 }, |
801 }; | 805 }; |
802 PARSE_loc_rules(rules, rule_avp); | 806 PARSE_loc_rules(rules, rule_avp); |
803 } | 807 } |
804 | 808 |
805 { | 809 { |
808 vpa.avp_vendor = 10415; | 812 vpa.avp_vendor = 10415; |
809 vpa.avp_name = "SDP-Media-Component"; | 813 vpa.avp_name = "SDP-Media-Component"; |
810 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); | 814 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); |
811 struct local_rules_definition rules[] = | 815 struct local_rules_definition rules[] = |
812 { | 816 { |
813 { { .avp_vendor = 10415, .avp_name = "SDP-Media-Name" }, RULE_OPTIONAL, -1, 1 }, | 817 { 10415, "SDP-Media-Name", RULE_OPTIONAL, -1, 1 }, |
814 { { .avp_vendor = 10415, .avp_name = "SDP-Media-Description" }, RULE_OPTIONAL, -1, -1 }, | 818 { 10415, "SDP-Media-Description", RULE_OPTIONAL, -1, -1 }, |
815 { { .avp_vendor = 10415, .avp_name = "Local-GW-Inserted-Indication" }, RULE_OPTIONAL, -1, 1 }, | 819 { 10415, "Local-GW-Inserted-Indication", RULE_OPTIONAL, -1, 1 }, |
816 { { .avp_vendor = 10415, .avp_name = "IP-Realm-Default-Indication" }, RULE_OPTIONAL, -1, 1 }, | 820 { 10415, "IP-Realm-Default-Indication", RULE_OPTIONAL, -1, 1 }, |
817 { { .avp_vendor = 10415, .avp_name = "Transcoder-Inserted-Indication" }, RULE_OPTIONAL, -1, 1 }, | 821 { 10415, "Transcoder-Inserted-Indication", RULE_OPTIONAL, -1, 1 }, |
818 { { .avp_vendor = 10415, .avp_name = "Media-Initiator-Flag" }, RULE_OPTIONAL, -1, 1 }, | 822 { 10415, "Media-Initiator-Flag", RULE_OPTIONAL, -1, 1 }, |
819 { { .avp_vendor = 10415, .avp_name = "Media-Initiator-Party" }, RULE_OPTIONAL, -1, 1 }, | 823 { 10415, "Media-Initiator-Party", RULE_OPTIONAL, -1, 1 }, |
820 { { .avp_vendor = 10415, .avp_name = "3GPP-Charging-Id" }, RULE_OPTIONAL, -1, 1 }, | 824 { 10415, "3GPP-Charging-Id", RULE_OPTIONAL, -1, 1 }, |
821 { { .avp_vendor = 10415, .avp_name = "Access-Network-Charging-Identifier-Value" }, RULE_OPTIONAL, -1, 1 }, | 825 { 10415, "Access-Network-Charging-Identifier-Value", RULE_OPTIONAL, -1, 1 }, |
822 { { .avp_vendor = 10415, .avp_name = "SDP-Type" }, RULE_OPTIONAL, -1, 1 }, | 826 { 10415, "SDP-Type", RULE_OPTIONAL, -1, 1 }, |
823 }; | 827 }; |
824 PARSE_loc_rules(rules, rule_avp); | 828 PARSE_loc_rules(rules, rule_avp); |
825 } | 829 } |
826 | 830 |
827 { | 831 { |
830 vpa.avp_vendor = 10415; | 834 vpa.avp_vendor = 10415; |
831 vpa.avp_name = "Service-Information"; | 835 vpa.avp_name = "Service-Information"; |
832 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); | 836 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); |
833 struct local_rules_definition rules[] = | 837 struct local_rules_definition rules[] = |
834 { | 838 { |
835 { { .avp_vendor = 0, .avp_name = "Subscription-Id" }, RULE_OPTIONAL, -1, -1 }, | 839 { 0, "Subscription-Id", RULE_OPTIONAL, -1, -1 }, |
836 { { .avp_vendor = 10415, .avp_name = "AoC-Information" }, RULE_OPTIONAL, -1, 1 }, | 840 { 10415, "AoC-Information", RULE_OPTIONAL, -1, 1 }, |
837 { { .avp_vendor = 10415, .avp_name = "PS-Information" }, RULE_OPTIONAL, -1, 1 }, | 841 { 10415, "PS-Information", RULE_OPTIONAL, -1, 1 }, |
838 { { .avp_vendor = 10415, .avp_name = "IMS-Information" }, RULE_OPTIONAL, -1, 1 }, | 842 { 10415, "IMS-Information", RULE_OPTIONAL, -1, 1 }, |
839 { { .avp_vendor = 10415, .avp_name = "MMS-Information" }, RULE_OPTIONAL, -1, 1 }, | 843 { 10415, "MMS-Information", RULE_OPTIONAL, -1, 1 }, |
840 { { .avp_vendor = 10415, .avp_name = "LCS-Information" }, RULE_OPTIONAL, -1, 1 }, | 844 { 10415, "LCS-Information", RULE_OPTIONAL, -1, 1 }, |
841 { { .avp_vendor = 10415, .avp_name = "PoC-Information" }, RULE_OPTIONAL, -1, 1 }, | 845 { 10415, "PoC-Information", RULE_OPTIONAL, -1, 1 }, |
842 { { .avp_vendor = 10415, .avp_name = "MBMS-Information" }, RULE_OPTIONAL, -1, 1 }, | 846 { 10415, "MBMS-Information", RULE_OPTIONAL, -1, 1 }, |
843 { { .avp_vendor = 10415, .avp_name = "SMS-Information" }, RULE_OPTIONAL, -1, 1 }, | 847 { 10415, "SMS-Information", RULE_OPTIONAL, -1, 1 }, |
844 { { .avp_vendor = 10415, .avp_name = "MMTel-Information" }, RULE_OPTIONAL, -1, 1 }, | 848 { 10415, "MMTel-Information", RULE_OPTIONAL, -1, 1 }, |
845 { { .avp_vendor = 10415, .avp_name = "Service-Generic-Information" }, RULE_OPTIONAL, -1, 1 }, | 849 { 10415, "Service-Generic-Information", RULE_OPTIONAL, -1, 1 }, |
846 { { .avp_vendor = 10415, .avp_name = "IM-Information" }, RULE_OPTIONAL, -1, 1 }, | 850 { 10415, "IM-Information", RULE_OPTIONAL, -1, 1 }, |
847 { { .avp_vendor = 10415, .avp_name = "DCD-Information" }, RULE_OPTIONAL, -1, 1 }, | 851 { 10415, "DCD-Information", RULE_OPTIONAL, -1, 1 }, |
848 }; | 852 }; |
849 PARSE_loc_rules(rules, rule_avp); | 853 PARSE_loc_rules(rules, rule_avp); |
850 } | 854 } |
851 | 855 |
852 { | 856 { |
855 vpa.avp_vendor = 10415; | 859 vpa.avp_vendor = 10415; |
856 vpa.avp_name = "SMS-Information"; | 860 vpa.avp_name = "SMS-Information"; |
857 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); | 861 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); |
858 struct local_rules_definition rules[] = | 862 struct local_rules_definition rules[] = |
859 { | 863 { |
860 { { .avp_vendor = 10415, .avp_name = "SMS-Node" }, RULE_OPTIONAL, -1, 1 }, | 864 { 10415, "SMS-Node", RULE_OPTIONAL, -1, 1 }, |
861 { { .avp_vendor = 10415, .avp_name = "Client-Address" }, RULE_OPTIONAL, -1, 1 }, | 865 { 10415, "Client-Address", RULE_OPTIONAL, -1, 1 }, |
862 { { .avp_vendor = 10415, .avp_name = "Originator-SCCP-Address" }, RULE_OPTIONAL, -1, 1 }, | 866 { 10415, "Originator-SCCP-Address", RULE_OPTIONAL, -1, 1 }, |
863 { { .avp_vendor = 10415, .avp_name = "SMSC-Address" }, RULE_OPTIONAL, -1, 1 }, | 867 { 10415, "SMSC-Address", RULE_OPTIONAL, -1, 1 }, |
864 { { .avp_vendor = 10415, .avp_name = "Data-Coding-Scheme" }, RULE_OPTIONAL, -1, 1 }, | 868 { 10415, "Data-Coding-Scheme", RULE_OPTIONAL, -1, 1 }, |
865 { { .avp_vendor = 10415, .avp_name = "SM-Discharge-Time" }, RULE_OPTIONAL, -1, 1 }, | 869 { 10415, "SM-Discharge-Time", RULE_OPTIONAL, -1, 1 }, |
866 { { .avp_vendor = 10415, .avp_name = "SM-Message-Type" }, RULE_OPTIONAL, -1, 1 }, | 870 { 10415, "SM-Message-Type", RULE_OPTIONAL, -1, 1 }, |
867 { { .avp_vendor = 10415, .avp_name = "Originator-Interface" }, RULE_OPTIONAL, -1, 1 }, | 871 { 10415, "Originator-Interface", RULE_OPTIONAL, -1, 1 }, |
868 { { .avp_vendor = 10415, .avp_name = "SM-Protocol-ID" }, RULE_OPTIONAL, -1, 1 }, | 872 { 10415, "SM-Protocol-ID", RULE_OPTIONAL, -1, 1 }, |
869 { { .avp_vendor = 10415, .avp_name = "Reply-Path-Requested" }, RULE_OPTIONAL, -1, 1 }, | 873 { 10415, "Reply-Path-Requested", RULE_OPTIONAL, -1, 1 }, |
870 { { .avp_vendor = 10415, .avp_name = "SM-Status" }, RULE_OPTIONAL, -1, 1 }, | 874 { 10415, "SM-Status", RULE_OPTIONAL, -1, 1 }, |
871 { { .avp_vendor = 10415, .avp_name = "SM-User-Data-Header" }, RULE_OPTIONAL, -1, 1 }, | 875 { 10415, "SM-User-Data-Header", RULE_OPTIONAL, -1, 1 }, |
872 { { .avp_vendor = 10415, .avp_name = "Number-Of-Messages-Sent" }, RULE_OPTIONAL, -1, 1 }, | 876 { 10415, "Number-Of-Messages-Sent", RULE_OPTIONAL, -1, 1 }, |
873 { { .avp_vendor = 10415, .avp_name = "Recipient-Info" }, RULE_OPTIONAL, -1, -1 }, | 877 { 10415, "Recipient-Info", RULE_OPTIONAL, -1, -1 }, |
874 { { .avp_vendor = 10415, .avp_name = "Originator-Received-Address" }, RULE_OPTIONAL, -1, 1 }, | 878 { 10415, "Originator-Received-Address", RULE_OPTIONAL, -1, 1 }, |
875 { { .avp_vendor = 10415, .avp_name = "SM-Service-Type" }, RULE_OPTIONAL, -1, 1 }, | 879 { 10415, "SM-Service-Type", RULE_OPTIONAL, -1, 1 }, |
876 }; | 880 }; |
877 PARSE_loc_rules(rules, rule_avp); | 881 PARSE_loc_rules(rules, rule_avp); |
878 } | 882 } |
879 | 883 |
880 { | 884 { |
883 vpa.avp_vendor = 10415; | 887 vpa.avp_vendor = 10415; |
884 vpa.avp_name = "Time-Quota-Mechanism"; | 888 vpa.avp_name = "Time-Quota-Mechanism"; |
885 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); | 889 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); |
886 struct local_rules_definition rules[] = | 890 struct local_rules_definition rules[] = |
887 { | 891 { |
888 { { .avp_vendor = 10415, .avp_name = "Time-Quota-Type" }, RULE_REQUIRED, -1, 1 }, | 892 { 10415, "Time-Quota-Type", RULE_REQUIRED, -1, 1 }, |
889 { { .avp_vendor = 10415, .avp_name = "Base-Time-Interval" }, RULE_REQUIRED, -1, 1 }, | 893 { 10415, "Base-Time-Interval", RULE_REQUIRED, -1, 1 }, |
890 }; | 894 }; |
891 PARSE_loc_rules(rules, rule_avp); | 895 PARSE_loc_rules(rules, rule_avp); |
892 } | 896 } |
893 | 897 |
894 { | 898 { |
897 vpa.avp_vendor = 10415; | 901 vpa.avp_vendor = 10415; |
898 vpa.avp_name = "Time-Stamps"; | 902 vpa.avp_name = "Time-Stamps"; |
899 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); | 903 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); |
900 struct local_rules_definition rules[] = | 904 struct local_rules_definition rules[] = |
901 { | 905 { |
902 { { .avp_vendor = 10415, .avp_name = "SIP-Request-Timestamp" }, RULE_OPTIONAL, -1, 1 }, | 906 { 10415, "SIP-Request-Timestamp", RULE_OPTIONAL, -1, 1 }, |
903 { { .avp_vendor = 10415, .avp_name = "SIP-Response-Timestamp" }, RULE_OPTIONAL, -1, 1 }, | 907 { 10415, "SIP-Response-Timestamp", RULE_OPTIONAL, -1, 1 }, |
904 { { .avp_vendor = 10415, .avp_name = "SIP-Request-Timestamp-Fraction" }, RULE_OPTIONAL, -1, 1 }, | 908 { 10415, "SIP-Request-Timestamp-Fraction", RULE_OPTIONAL, -1, 1 }, |
905 { { .avp_vendor = 10415, .avp_name = "SIP-Response-Timestamp-Fraction" }, RULE_OPTIONAL, -1, 1 }, | 909 { 10415, "SIP-Response-Timestamp-Fraction", RULE_OPTIONAL, -1, 1 }, |
906 }; | 910 }; |
907 PARSE_loc_rules(rules, rule_avp); | 911 PARSE_loc_rules(rules, rule_avp); |
908 } | 912 } |
909 | 913 |
910 { | 914 { |
915 vpa.avp_vendor = 0; | 919 vpa.avp_vendor = 0; |
916 vpa.avp_name = "Used-Service-Unit"; | 920 vpa.avp_name = "Used-Service-Unit"; |
917 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); | 921 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); |
918 struct local_rules_definition rules[] = | 922 struct local_rules_definition rules[] = |
919 { | 923 { |
920 { { .avp_vendor = 10415, .avp_name = "Reporting-Reason" }, RULE_OPTIONAL, -1, 1 }, | 924 { 10415, "Reporting-Reason", RULE_OPTIONAL, -1, 1 }, |
921 { { .avp_vendor = 10415, .avp_name = "Event-Charging-TimeStamp" }, RULE_OPTIONAL, -1, -1 }, | 925 { 10415, "Event-Charging-TimeStamp", RULE_OPTIONAL, -1, -1 }, |
922 }; | 926 }; |
923 PARSE_loc_rules(rules, rule_avp); | 927 PARSE_loc_rules(rules, rule_avp); |
924 } | 928 } |
925 | 929 |
926 /* OMA */ | 930 /* OMA */ |
930 vpa.avp_vendor = 10415; | 934 vpa.avp_vendor = 10415; |
931 vpa.avp_name = "DCD-Information"; | 935 vpa.avp_name = "DCD-Information"; |
932 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); | 936 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); |
933 struct local_rules_definition rules[] = | 937 struct local_rules_definition rules[] = |
934 { | 938 { |
935 { { .avp_vendor = 10415, .avp_name = "Content-ID" }, RULE_OPTIONAL, -1, 1 }, | 939 { 10415, "Content-ID", RULE_OPTIONAL, -1, 1 }, |
936 { { .avp_vendor = 10415, .avp_name = "Content-provider-ID" }, RULE_OPTIONAL, -1, 1 }, | 940 { 10415, "Content-provider-ID", RULE_OPTIONAL, -1, 1 }, |
937 }; | 941 }; |
938 PARSE_loc_rules(rules, rule_avp); | 942 PARSE_loc_rules(rules, rule_avp); |
939 } | 943 } |
940 { | 944 { |
941 struct dict_object *rule_avp; | 945 struct dict_object *rule_avp; |
943 vpa.avp_vendor = 10415; | 947 vpa.avp_vendor = 10415; |
944 vpa.avp_name = "IM-Information"; | 948 vpa.avp_name = "IM-Information"; |
945 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); | 949 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); |
946 struct local_rules_definition rules[] = | 950 struct local_rules_definition rules[] = |
947 { | 951 { |
948 { { .avp_vendor = 10415, .avp_name = "Total-Number-Of-Messages-Sent" }, RULE_OPTIONAL, -1, 1 }, | 952 { 10415, "Total-Number-Of-Messages-Sent", RULE_OPTIONAL, -1, 1 }, |
949 { { .avp_vendor = 10415, .avp_name = "Total-Number-Of-Messages-Exploded" }, RULE_OPTIONAL, -1, 1 }, | 953 { 10415, "Total-Number-Of-Messages-Exploded", RULE_OPTIONAL, -1, 1 }, |
950 { { .avp_vendor = 10415, .avp_name = "Number-Of-Messages-Successfully-Sent" }, RULE_OPTIONAL, -1, 1 }, | 954 { 10415, "Number-Of-Messages-Successfully-Sent", RULE_OPTIONAL, -1, 1 }, |
951 { { .avp_vendor = 10415, .avp_name = "Number-Of-Messages-Successfully-Exploded" }, RULE_OPTIONAL, -1, 1 }, | 955 { 10415, "Number-Of-Messages-Successfully-Exploded", RULE_OPTIONAL, -1, 1 }, |
952 }; | 956 }; |
953 PARSE_loc_rules(rules, rule_avp); | 957 PARSE_loc_rules(rules, rule_avp); |
954 } | 958 } |
955 { | 959 { |
956 struct dict_object *rule_avp; | 960 struct dict_object *rule_avp; |
958 vpa.avp_vendor = 10415; | 962 vpa.avp_vendor = 10415; |
959 vpa.avp_name = "Service-Generic-Information"; | 963 vpa.avp_name = "Service-Generic-Information"; |
960 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); | 964 CHECK_dict_search(DICT_AVP, AVP_BY_NAME_AND_VENDOR, &vpa, &rule_avp); |
961 struct local_rules_definition rules[] = | 965 struct local_rules_definition rules[] = |
962 { | 966 { |
963 { { .avp_vendor = 10415, .avp_name = "Application-Server-Id" }, RULE_OPTIONAL, -1, 1 }, | 967 { 10415, "Application-Server-Id", RULE_OPTIONAL, -1, 1 }, |
964 { { .avp_vendor = 10415, .avp_name = "Application-Service-Type" }, RULE_OPTIONAL, -1, 1 }, | 968 { 10415, "Application-Service-Type", RULE_OPTIONAL, -1, 1 }, |
965 { { .avp_vendor = 10415, .avp_name = "Application-Session-Id" }, RULE_OPTIONAL, -1, 1 }, | 969 { 10415, "Application-Session-Id", RULE_OPTIONAL, -1, 1 }, |
966 { { .avp_vendor = 10415, .avp_name = "Delivery-Status" }, RULE_OPTIONAL, -1, 1 }, | 970 { 10415, "Delivery-Status", RULE_OPTIONAL, -1, 1 }, |
967 }; | 971 }; |
968 PARSE_loc_rules(rules, rule_avp); | 972 PARSE_loc_rules(rules, rule_avp); |
969 } | 973 } |
970 | 974 |
971 LOG_D( "Extension 'Dictionary definitions for DCCA 3GPP' initialized"); | 975 LOG_D( "Extension 'Dictionary definitions for DCCA 3GPP' initialized"); |