Navigation


Changeset 843:1a563c5f13a9 in freeDiameter


Ignore:
Timestamp:
Oct 17, 2012, 3:06:02 AM (12 years ago)
Author:
Sebastien Decugis <sdecugis@freediameter.net>
Branch:
default
Phase:
public
Message:

indent (no functional changes) -- Thomas Klausner <tk@giga.or.at>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • extensions/dict_dcca/dict_dcca.c

    r842 r843  
    44 TODO:
    55  - rules for all Grouped AVPs
    6  ****************/
     6****************/
    77
    88
     
    1515/* The content of this file follows the same structure as dict_base_proto.c */
    1616
    17 #define CHECK_dict_new( _type, _data, _parent, _ref )   \
    18         CHECK_FCT(  fd_dict_new( fd_g_config->cnf_dict, (_type), (_data), (_parent), (_ref))  );
    19 
    20 #define CHECK_dict_search( _type, _criteria, _what, _result )   \
    21         CHECK_FCT(  fd_dict_search( fd_g_config->cnf_dict, (_type), (_criteria), (_what), (_result), ENOENT) );
     17#define CHECK_dict_new( _type, _data, _parent, _ref )                   \
     18    CHECK_FCT(  fd_dict_new( fd_g_config->cnf_dict, (_type), (_data), (_parent), (_ref))  );
     19
     20#define CHECK_dict_search( _type, _criteria, _what, _result )           \
     21    CHECK_FCT(  fd_dict_search( fd_g_config->cnf_dict, (_type), (_criteria), (_what), (_result), ENOENT) );
    2222
    2323struct local_rules_definition {
    24         char                    *avp_name;
    25         enum rule_position      position;
    26         int                     min;
    27         int                     max;
     24    char                        *avp_name;
     25    enum rule_position  position;
     26    int                         min;
     27    int                 max;
    2828};
    2929
    3030#define RULE_ORDER( _position ) ((((_position) == RULE_FIXED_HEAD) || ((_position) == RULE_FIXED_TAIL)) ? 1 : 0 )
    3131
    32 #define PARSE_loc_rules( _rulearray, _parent) {                                                         \
    33         int __ar;                                                                                       \
    34         for (__ar=0; __ar < sizeof(_rulearray) / sizeof((_rulearray)[0]); __ar++) {                     \
    35                 struct dict_rule_data __data = { NULL,                                                  \
    36                         (_rulearray)[__ar].position,                                                    \
    37                         0,                                                                              \
    38                         (_rulearray)[__ar].min,                                                         \
    39                         (_rulearray)[__ar].max};                                                        \
    40                 __data.rule_order = RULE_ORDER(__data.rule_position);                                   \
    41                 CHECK_FCT(  fd_dict_search(                                                             \
    42                         fd_g_config->cnf_dict,                                                          \
    43                         DICT_AVP,                                                                       \
    44                         AVP_BY_NAME,                                                                    \
    45                         (_rulearray)[__ar].avp_name,                                                    \
    46                         &__data.rule_avp, 0 ) );                                                        \
    47                 if ( !__data.rule_avp ) {                                                               \
    48                         TRACE_DEBUG(INFO, "AVP Not found: '%s'", (_rulearray)[__ar].avp_name );         \
    49                         return ENOENT;                                                                  \
    50                 }                                                                                       \
    51                 CHECK_FCT_DO( fd_dict_new( fd_g_config->cnf_dict, DICT_RULE, &__data, _parent, NULL),   \
    52                         {                                                                               \
    53                                 TRACE_DEBUG(INFO, "Error on rule with AVP '%s'",                        \
    54                                          (_rulearray)[__ar].avp_name );                                 \
    55                                 return EINVAL;                                                          \
    56                         } );                                                                            \
    57         }                                                                                               \
    58 }
    59 
    60 #define enumval_def_u32( _val_, _str_ ) \
    61                 { _str_,                { .u32 = _val_ }}
    62 
    63 #define enumval_def_os( _len_, _val_, _str_ ) \
    64                 { _str_,                { .os = { .data = (unsigned char *)_val_, .len = _len_ }}}
     32#define PARSE_loc_rules( _rulearray, _parent) {                         \
     33        int __ar;                                                       \
     34        for (__ar=0; __ar < sizeof(_rulearray) / sizeof((_rulearray)[0]); __ar++) { \
     35            struct dict_rule_data __data = { NULL,                      \
     36                                             (_rulearray)[__ar].position, \
     37                                             0,                         \
     38                                             (_rulearray)[__ar].min,    \
     39                                             (_rulearray)[__ar].max};   \
     40            __data.rule_order = RULE_ORDER(__data.rule_position);       \
     41            CHECK_FCT(  fd_dict_search(                                 \
     42                            fd_g_config->cnf_dict,                      \
     43                            DICT_AVP,                                   \
     44                            AVP_BY_NAME,                                \
     45                            (_rulearray)[__ar].avp_name,                \
     46                            &__data.rule_avp, 0 ) );                    \
     47            if ( !__data.rule_avp ) {                                   \
     48                TRACE_DEBUG(INFO, "AVP Not found: '%s'", (_rulearray)[__ar].avp_name ); \
     49                return ENOENT;                                          \
     50            }                                                           \
     51            CHECK_FCT_DO( fd_dict_new( fd_g_config->cnf_dict, DICT_RULE, &__data, _parent, NULL), \
     52                          {                                             \
     53                              TRACE_DEBUG(INFO, "Error on rule with AVP '%s'", \
     54                                          (_rulearray)[__ar].avp_name ); \
     55                              return EINVAL;                            \
     56                          } );                                          \
     57        }                                                               \
     58    }
     59
     60#define enumval_def_u32( _val_, _str_ )         \
     61    { _str_,            { .u32 = _val_ }}
     62
     63#define enumval_def_os( _len_, _val_, _str_ )                           \
     64    { _str_,            { .os = { .data = (unsigned char *)_val_, .len = _len_ }}}
    6565
    6666
     
    8686        {
    8787            struct dict_enumval_data error_code = {"END_USER_SERVICE_DENIED",
    88                 { .u32 = 4010}};
     88                                                   { .u32 = 4010}};
    8989            CHECK_dict_new(DICT_ENUMVAL, &error_code, ResultCodeType, NULL);
    9090        }
    9191        {
    9292            struct dict_enumval_data error_code = {"CREDIT_CONTROL_NOT_APPLICABLE",
    93                 { .u32 = 4011}};
     93                                                   { .u32 = 4011}};
    9494            CHECK_dict_new(DICT_ENUMVAL, &error_code, ResultCodeType, NULL);
    9595        }
     
    9999
    100100       
    101         /* AVP section */
    102         {
    103                 struct dict_object * Address_type;
    104                 struct dict_object * UTF8String_type;
    105                 struct dict_object * DiameterIdentity_type;
    106                 struct dict_object * DiameterURI_type;
    107                 struct dict_object * Time_type;
    108                 struct dict_object * IPFilterRule_type;
    109 
    110                 CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "Address", &Address_type);
    111                 CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "UTF8String", &UTF8String_type);
    112                 CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "DiameterIdentity", &DiameterIdentity_type);
    113                 CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "DiameterURI", &DiameterURI_type);
    114                 CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "Time", &Time_type);
    115                 CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "IPFilterRule", &IPFilterRule_type);
    116                
    117                
    118                 /* CC-Correlation-Id */
    119                 {
    120                   /*
    121                     OctetString.
    122                   */
    123                   struct dict_avp_data    data = {
    124                     411,                                    /* Code */
    125                     0,                                      /* Vendor */
    126                     "CC-Correlation-Id",                    /* Name */
    127                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    128                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    129                     AVP_TYPE_OCTETSTRING                    /* base type of data */
    130                   };
    131 
    132                   CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
    133                 }
    134                
    135                 /* CC-Input-Octets */
    136                 {
    137                   /*
    138                      Unsigned64.
    139                    */
    140                   struct dict_avp_data data = {
    141                     412,                                    /* Code */
    142                     0,                                      /* Vendor */
    143                     "CC-Input-Octets",                      /* Name */
    144                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    145                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    146                     AVP_TYPE_UNSIGNED64                     /* base type of data */
    147                   };
    148                   CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
    149                 }
    150                
    151                 /* CC-Money */
    152                 {
    153                   /*
    154                     Grouped
    155                   */
     101    /* AVP section */
     102    {
     103        struct dict_object * Address_type;
     104        struct dict_object * UTF8String_type;
     105        struct dict_object * DiameterIdentity_type;
     106        struct dict_object * DiameterURI_type;
     107        struct dict_object * Time_type;
     108        struct dict_object * IPFilterRule_type;
     109
     110        CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "Address", &Address_type);
     111        CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "UTF8String", &UTF8String_type);
     112        CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "DiameterIdentity", &DiameterIdentity_type);
     113        CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "DiameterURI", &DiameterURI_type);
     114        CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "Time", &Time_type);
     115        CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "IPFilterRule", &IPFilterRule_type);
     116               
     117               
     118        /* CC-Correlation-Id */
     119        {
     120            /*
     121               OctetString.
     122            */
     123            struct dict_avp_data    data = {
     124                411,                                    /* Code */
     125                0,                                      /* Vendor */
     126                "CC-Correlation-Id",                    /* Name */
     127                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     128                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     129                AVP_TYPE_OCTETSTRING                    /* base type of data */
     130            };
     131
     132            CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
     133        }
     134               
     135        /* CC-Input-Octets */
     136        {
     137            /*
     138               Unsigned64.
     139            */
     140            struct dict_avp_data data = {
     141                412,                                    /* Code */
     142                0,                                      /* Vendor */
     143                "CC-Input-Octets",                      /* Name */
     144                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     145                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     146                AVP_TYPE_UNSIGNED64                     /* base type of data */
     147            };
     148            CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
     149        }
     150               
     151        /* CC-Money */
     152        {
     153            /*
     154              Grouped
     155            */
    156156                   
    157                   struct dict_avp_data data = {
    158                     413,                                    /* Code */
    159                     0,                                      /* Vendor */
    160                     "CC-Money",                             /* Name */
    161                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    162                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    163                     AVP_TYPE_GROUPED                        /* base type of data */
    164                   };
    165                   CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
    166                 }
    167                
    168                 /* CC-Output-Octets */
    169                 {
    170                   /*
    171                      Unsigned64.
    172                    */
    173                   struct dict_avp_data data = {
    174                     414,                                    /* Code */
    175                     0,                                      /* Vendor */
    176                     "CC-Output-Octets",                     /* Name */
    177                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    178                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    179                     AVP_TYPE_UNSIGNED64                     /* base type of data */
    180                   };
    181                   CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
    182                 }
    183                
    184                 /* CC-Request-Number */
    185                 {
    186                   /*
    187                      Unsigned32.
    188                    */
    189                   struct dict_avp_data data = {
    190                     415,                                    /* Code */
    191                     0,                                      /* Vendor */
    192                     "CC-Request-Number",                    /* Name */
    193                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    194                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    195                     AVP_TYPE_UNSIGNED32                     /* base type of data */
    196                   };
    197                   CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
    198                 }
    199 
    200                 /* CC-Request-Type */
    201                 {
    202                   /*
    203                     Enumerated.
    204                   */
    205 
    206                   struct dict_object              *type;
    207                   struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(CC-Request-Type)", NULL, NULL, NULL };
    208                   struct dict_enumval_data        t_1 = { "INITIAL_REQUEST", { .i32 = 1 }};
    209                   struct dict_enumval_data        t_2 = { "UPDATE_REQUEST", { .i32 = 2 }};
    210                   struct dict_enumval_data        t_3 = { "TERMINATION_REQUEST", { .i32 = 3 }};
    211                   struct dict_enumval_data        t_4 = { "EVENT_REQUEST", { .i32 = 4 }};
     157            struct dict_avp_data data = {
     158                413,                                    /* Code */
     159                0,                                      /* Vendor */
     160                "CC-Money",                             /* Name */
     161                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     162                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     163                AVP_TYPE_GROUPED                        /* base type of data */
     164            };
     165            CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
     166        }
     167               
     168        /* CC-Output-Octets */
     169        {
     170            /*
     171               Unsigned64.
     172            */
     173            struct dict_avp_data data = {
     174                414,                                    /* Code */
     175                0,                                      /* Vendor */
     176                "CC-Output-Octets",                     /* Name */
     177                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     178                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     179                AVP_TYPE_UNSIGNED64                     /* base type of data */
     180            };
     181            CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
     182        }
     183               
     184        /* CC-Request-Number */
     185        {
     186            /*
     187               Unsigned32.
     188            */
     189            struct dict_avp_data data = {
     190                415,                                    /* Code */
     191                0,                                      /* Vendor */
     192                "CC-Request-Number",                    /* Name */
     193                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     194                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     195                AVP_TYPE_UNSIGNED32                     /* base type of data */
     196            };
     197            CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
     198        }
     199
     200        /* CC-Request-Type */
     201        {
     202            /*
     203               Enumerated.
     204            */
     205
     206            struct dict_object              *type;
     207            struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(CC-Request-Type)", NULL, NULL, NULL };
     208            struct dict_enumval_data        t_1 = { "INITIAL_REQUEST", { .i32 = 1 }};
     209            struct dict_enumval_data        t_2 = { "UPDATE_REQUEST", { .i32 = 2 }};
     210            struct dict_enumval_data        t_3 = { "TERMINATION_REQUEST", { .i32 = 3 }};
     211            struct dict_enumval_data        t_4 = { "EVENT_REQUEST", { .i32 = 4 }};
    212212                 
    213213
    214                   struct dict_avp_data    data = {
    215                     416,                                    /* Code */
    216                     0,                                      /* Vendor */
    217                     "CC-Request-Type",                      /* Name */
    218                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    219                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    220                     AVP_TYPE_INTEGER32                      /* base type of data */
    221                   };
    222                   /* Create the Enumerated type, and then the AVP */
    223                   CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
    224                   CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);
    225                   CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
    226                   CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL);
    227                   CHECK_dict_new( DICT_ENUMVAL, &t_4 , type, NULL);
    228                   CHECK_dict_new( DICT_AVP, &data , type, NULL);
    229                 }
    230                
    231 
    232                 /* CC-Service-Specific-Units */
    233                 {
    234                   /*
    235                      Unsigned64.
    236                    */
    237                   struct dict_avp_data data = {
    238                     417,                                    /* Code */
    239                     0,                                      /* Vendor */
    240                     "CC-Service-Specific-Units",            /* Name */
    241                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    242                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    243                     AVP_TYPE_UNSIGNED64                     /* base type of data */
    244                   };
    245                   CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
    246                 }
     214            struct dict_avp_data    data = {
     215                416,                                    /* Code */
     216                0,                                      /* Vendor */
     217                "CC-Request-Type",                      /* Name */
     218                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     219                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     220                AVP_TYPE_INTEGER32                      /* base type of data */
     221            };
     222            /* Create the Enumerated type, and then the AVP */
     223            CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
     224            CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);
     225            CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
     226            CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL);
     227            CHECK_dict_new( DICT_ENUMVAL, &t_4 , type, NULL);
     228            CHECK_dict_new( DICT_AVP, &data , type, NULL);
     229        }
     230               
     231
     232        /* CC-Service-Specific-Units */
     233        {
     234            /*
     235               Unsigned64.
     236            */
     237            struct dict_avp_data data = {
     238                417,                                    /* Code */
     239                0,                                      /* Vendor */
     240                "CC-Service-Specific-Units",            /* Name */
     241                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     242                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     243                AVP_TYPE_UNSIGNED64                     /* base type of data */
     244            };
     245            CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
     246        }
    247247   
    248                 /* CC-Session-Failover */
    249                 {
    250                   /*
    251                     Enumerated.
    252                   */
    253 
    254                   struct dict_object              *type;
    255                   struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(CC-Session-Failover)" , NULL, NULL, NULL };
    256                   struct dict_enumval_data        t_1 = { "FAILOVER_NOT_SUPPORTED", { .i32 = 0 }};
    257                   struct dict_enumval_data        t_2 = { "FAILOVER_SUPPORTED", { .i32 = 1 }};
     248        /* CC-Session-Failover */
     249        {
     250            /*
     251               Enumerated.
     252            */
     253
     254            struct dict_object              *type;
     255            struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(CC-Session-Failover)" , NULL, NULL, NULL };
     256            struct dict_enumval_data        t_1 = { "FAILOVER_NOT_SUPPORTED", { .i32 = 0 }};
     257            struct dict_enumval_data        t_2 = { "FAILOVER_SUPPORTED", { .i32 = 1 }};
    258258                 
    259259
    260                   struct dict_avp_data    data = {
    261                     418,                                    /* Code */
    262                     0,                                      /* Vendor */
    263                     "CC-Session-Failover",                  /* Name */
    264                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    265                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    266                     AVP_TYPE_INTEGER32                      /* base type of data */
    267                   };
    268                   /* Create the Enumerated type, and then the AVP */
    269                   CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
    270                   CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);                 
    271                   CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
    272                   CHECK_dict_new( DICT_AVP, &data , type, NULL);
    273                 }
    274                
    275                 /* CC-Sub-Session-Id */
    276                 {
    277                   /*
    278                      Unsigned64.
    279                    */
    280                   struct dict_avp_data data = {
    281                     419,                                    /* Code */
    282                     0,                                      /* Vendor */
    283                     "CC-Sub-Session-Id",                      /* Name */
    284                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    285                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    286                     AVP_TYPE_UNSIGNED64                     /* base type of data */
    287                   };
    288                   CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
    289                 }
    290                
    291                 /* CC-Time */
    292                 {
    293                   /*
    294                      Unsigned32.
    295                    */
    296                   struct dict_avp_data data = {
    297                     420,                                    /* Code */
    298                     0,                                      /* Vendor */
    299                     "CC-Time",                              /* Name */
    300                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    301                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    302                     AVP_TYPE_UNSIGNED32                     /* base type of data */
    303                   };
    304                   CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
    305                 }
     260            struct dict_avp_data    data = {
     261                418,                                    /* Code */
     262                0,                                      /* Vendor */
     263                "CC-Session-Failover",                  /* Name */
     264                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     265                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     266                AVP_TYPE_INTEGER32                      /* base type of data */
     267            };
     268            /* Create the Enumerated type, and then the AVP */
     269            CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
     270            CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);                 
     271            CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
     272            CHECK_dict_new( DICT_AVP, &data , type, NULL);
     273        }
     274               
     275        /* CC-Sub-Session-Id */
     276        {
     277            /*
     278               Unsigned64.
     279            */
     280            struct dict_avp_data data = {
     281                419,                                    /* Code */
     282                0,                                      /* Vendor */
     283                "CC-Sub-Session-Id",                    /* Name */
     284                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     285                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     286                AVP_TYPE_UNSIGNED64                     /* base type of data */
     287            };
     288            CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
     289        }
     290               
     291        /* CC-Time */
     292        {
     293            /*
     294               Unsigned32.
     295            */
     296            struct dict_avp_data data = {
     297                420,                                    /* Code */
     298                0,                                      /* Vendor */
     299                "CC-Time",                              /* Name */
     300                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     301                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     302                AVP_TYPE_UNSIGNED32                     /* base type of data */
     303            };
     304            CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
     305        }
    306306                                     
    307                 /* CC-Total-Octets */
    308                 {
    309                   /*
    310                      Unsigned64.
    311                    */
    312                   struct dict_avp_data data = {
    313                     421,                                    /* Code */
    314                     0,                                      /* Vendor */
    315                     "CC-Total-Octets",                      /* Name */
    316                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    317                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    318                     AVP_TYPE_UNSIGNED64                     /* base type of data */
    319                   };
    320                   CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
    321                 }
    322                
    323                 /* CC-Unit-Type */
    324                 {
    325                   /*
    326                     Enumerated.
    327                   */
    328 
    329                   struct dict_object              *type;
    330                   struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(CC-Unit-Type)" , NULL, NULL, NULL };
    331                   struct dict_enumval_data        t_1 = { "TIME", { .i32 = 0 }};
    332                   struct dict_enumval_data        t_2 = { "MONEY", { .i32 = 1 }};
    333                   struct dict_enumval_data        t_3 = { "TOTAL-OCTETS", { .i32 = 2 }};
    334                   struct dict_enumval_data        t_4 = { "INPUT-OCTETS", { .i32 = 3 }};
    335                   struct dict_enumval_data        t_5 = { "OUTPUT-OCTETS", { .i32 = 4 }};
    336                   struct dict_enumval_data        t_6 = { "SERVICE-SPECIFIC-UNITS", { .i32 = 5 }};
     307        /* CC-Total-Octets */
     308        {
     309            /*
     310               Unsigned64.
     311            */
     312            struct dict_avp_data data = {
     313                421,                                    /* Code */
     314                0,                                      /* Vendor */
     315                "CC-Total-Octets",                      /* Name */
     316                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     317                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     318                AVP_TYPE_UNSIGNED64                     /* base type of data */
     319            };
     320            CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
     321        }
     322               
     323        /* CC-Unit-Type */
     324        {
     325            /*
     326               Enumerated.
     327            */
     328
     329            struct dict_object              *type;
     330            struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(CC-Unit-Type)" , NULL, NULL, NULL };
     331            struct dict_enumval_data        t_1 = { "TIME", { .i32 = 0 }};
     332            struct dict_enumval_data        t_2 = { "MONEY", { .i32 = 1 }};
     333            struct dict_enumval_data        t_3 = { "TOTAL-OCTETS", { .i32 = 2 }};
     334            struct dict_enumval_data        t_4 = { "INPUT-OCTETS", { .i32 = 3 }};
     335            struct dict_enumval_data        t_5 = { "OUTPUT-OCTETS", { .i32 = 4 }};
     336            struct dict_enumval_data        t_6 = { "SERVICE-SPECIFIC-UNITS", { .i32 = 5 }};
    337337                 
    338338
    339                   struct dict_avp_data    data = {
    340                     454,                                    /* Code */
    341                     0,                                      /* Vendor */
    342                     "CC-Unit-Type",                    /* Name */
    343                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    344                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    345                     AVP_TYPE_INTEGER32                      /* base type of data */
    346                   };
    347                   /* Create the Enumerated type, and then the AVP */
    348                   CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
    349                   CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);   
    350                   CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
    351                   CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL);
    352                   CHECK_dict_new( DICT_ENUMVAL, &t_4 , type, NULL);
    353                   CHECK_dict_new( DICT_ENUMVAL, &t_5 , type, NULL);
    354                   CHECK_dict_new( DICT_ENUMVAL, &t_6 , type, NULL);
    355                   CHECK_dict_new( DICT_AVP, &data , type, NULL);
    356                 }
    357 
    358                 /* Check-Balance-Result */
    359                 {
    360                   /*
    361                     Enumerated.
    362                   */
    363 
    364                   struct dict_object              *type;
    365                   struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Check-Balance-Result)" , NULL, NULL, NULL };
    366                   struct dict_enumval_data        t_1 = { "ENOUGH_CREDIT", { .i32 = 0 }};
    367                   struct dict_enumval_data        t_2 = { "NO_CREDIT", { .i32 = 1 }};
     339            struct dict_avp_data    data = {
     340                454,                                    /* Code */
     341                0,                                      /* Vendor */
     342                "CC-Unit-Type",                         /* Name */
     343                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     344                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     345                AVP_TYPE_INTEGER32                      /* base type of data */
     346            };
     347            /* Create the Enumerated type, and then the AVP */
     348            CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
     349            CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);   
     350            CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
     351            CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL);
     352            CHECK_dict_new( DICT_ENUMVAL, &t_4 , type, NULL);
     353            CHECK_dict_new( DICT_ENUMVAL, &t_5 , type, NULL);
     354            CHECK_dict_new( DICT_ENUMVAL, &t_6 , type, NULL);
     355            CHECK_dict_new( DICT_AVP, &data , type, NULL);
     356        }
     357
     358        /* Check-Balance-Result */
     359        {
     360            /*
     361               Enumerated.
     362            */
     363
     364            struct dict_object              *type;
     365            struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Check-Balance-Result)" , NULL, NULL, NULL };
     366            struct dict_enumval_data        t_1 = { "ENOUGH_CREDIT", { .i32 = 0 }};
     367            struct dict_enumval_data        t_2 = { "NO_CREDIT", { .i32 = 1 }};
    368368                 
    369369
    370                   struct dict_avp_data    data = {
    371                     422,                                    /* Code */
    372                     0,                                      /* Vendor */
    373                     "Check-Balance-Result",                    /* Name */
    374                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    375                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    376                     AVP_TYPE_INTEGER32                      /* base type of data */
    377                   };
    378                   /* Create the Enumerated type, and then the AVP */
    379                   CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
    380                   CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL); 
    381                   CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
    382                   CHECK_dict_new( DICT_AVP, &data , type, NULL);
    383                 }
    384                
    385                 /* Cost-Information */
    386                 {
    387                   /*
    388                     Grouped
    389                   */
    390 
    391                   struct dict_avp_data data = {
    392                     423,                                    /* Code */
    393                     0,                                      /* Vendor */
    394                     "Cost-Information",                  /* Name */
    395                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    396                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    397                     AVP_TYPE_GROUPED                        /* base type of data */
    398                   };
    399                   CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
    400                 }
    401                
    402                 /* Cost-Unit */
    403                 {
    404                   /*
    405                     UTF8String.
    406                   */
    407                   struct dict_avp_data    data = {
    408                     424,                                    /* Code */
    409                     0,                                      /* Vendor */
    410                     "Cost-Unit",                           /* Name */
    411                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    412                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    413                     AVP_TYPE_OCTETSTRING                      /* base type of data */
    414                   };
    415                   CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL);
    416                 }
    417                
    418                 /* Credit-Control */
    419                 {
    420                   /*
    421                     Enumerated.
    422                   */
    423 
    424                   struct dict_object              *type;
    425                   struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Credit-Control)" , NULL, NULL, NULL };
    426                   struct dict_enumval_data        t_1 = { "CREDIT_AUTHORIZATION", { .i32 = 0 }};
    427                   struct dict_enumval_data        t_2 = { "RE_AUTHORIZATION", { .i32 = 1 }};
     370            struct dict_avp_data    data = {
     371                422,                                    /* Code */
     372                0,                                      /* Vendor */
     373                "Check-Balance-Result",                 /* Name */
     374                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     375                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     376                AVP_TYPE_INTEGER32                      /* base type of data */
     377            };
     378            /* Create the Enumerated type, and then the AVP */
     379            CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
     380            CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL); 
     381            CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
     382            CHECK_dict_new( DICT_AVP, &data , type, NULL);
     383        }
     384               
     385        /* Cost-Information */
     386        {
     387            /*
     388              Grouped
     389            */
     390
     391            struct dict_avp_data data = {
     392                423,                                    /* Code */
     393                0,                                      /* Vendor */
     394                "Cost-Information",                     /* Name */
     395                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     396                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     397                AVP_TYPE_GROUPED                        /* base type of data */
     398            };
     399            CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
     400        }
     401               
     402        /* Cost-Unit */
     403        {
     404            /*
     405               UTF8String.
     406            */
     407            struct dict_avp_data    data = {
     408                424,                                    /* Code */
     409                0,                                      /* Vendor */
     410                "Cost-Unit",                            /* Name */
     411                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     412                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     413                AVP_TYPE_OCTETSTRING                    /* base type of data */
     414            };
     415            CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL);
     416        }
     417               
     418        /* Credit-Control */
     419        {
     420            /*
     421               Enumerated.
     422            */
     423
     424            struct dict_object              *type;
     425            struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Credit-Control)" , NULL, NULL, NULL };
     426            struct dict_enumval_data        t_1 = { "CREDIT_AUTHORIZATION", { .i32 = 0 }};
     427            struct dict_enumval_data        t_2 = { "RE_AUTHORIZATION", { .i32 = 1 }};
    428428                 
    429                   struct dict_avp_data    data = {
    430                     426,                                    /* Code */
    431                     0,                                      /* Vendor */
    432                     "Credit-Control",                       /* Name */
    433                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    434                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    435                     AVP_TYPE_INTEGER32                      /* base type of data */
    436                   };
    437                   /* Create the Enumerated type, and then the AVP */
    438                   CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
    439                   CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
    440                   CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
    441                   CHECK_dict_new( DICT_AVP, &data , type, NULL);
    442                 }
     429            struct dict_avp_data    data = {
     430                426,                                    /* Code */
     431                0,                                      /* Vendor */
     432                "Credit-Control",                       /* Name */
     433                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     434                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     435                AVP_TYPE_INTEGER32                      /* base type of data */
     436            };
     437            /* Create the Enumerated type, and then the AVP */
     438            CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
     439            CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
     440            CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
     441            CHECK_dict_new( DICT_AVP, &data , type, NULL);
     442        }
    443443   
    444                 /* Credit-Control-Failure-Handling */
    445                 {
    446                   /*
    447                     Enumerated.
    448                   */
    449 
    450                   struct dict_object              *type;
    451                   struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Credit-Control-Failure-Handling)" , NULL, NULL, NULL };
    452                   struct dict_enumval_data        t_1 = { "TERMINATE", { .i32 = 0 }};
    453                   struct dict_enumval_data        t_2 = { "CONTINUE", { .i32 = 1 }};
    454                   struct dict_enumval_data        t_3 = { "RETRY_AND_TERMINATE", { .i32 = 2 }};
     444        /* Credit-Control-Failure-Handling */
     445        {
     446            /*
     447               Enumerated.
     448            */
     449
     450            struct dict_object              *type;
     451            struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Credit-Control-Failure-Handling)" , NULL, NULL, NULL };
     452            struct dict_enumval_data        t_1 = { "TERMINATE", { .i32 = 0 }};
     453            struct dict_enumval_data        t_2 = { "CONTINUE", { .i32 = 1 }};
     454            struct dict_enumval_data        t_3 = { "RETRY_AND_TERMINATE", { .i32 = 2 }};
    455455                 
    456                   struct dict_avp_data    data = {
    457                     427,                                    /* Code */
    458                     0,                                      /* Vendor */
    459                     "Credit-Control-Failure-Handling",      /* Name */
    460                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    461                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    462                     AVP_TYPE_INTEGER32                      /* base type of data */
    463                   };
    464                   /* Create the Enumerated type, and then the AVP */
    465                   CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
    466                   CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);   
    467                   CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
    468                   CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL);
    469                   CHECK_dict_new( DICT_AVP, &data , type, NULL);
    470                 }
    471 
    472                 /* Currency-Code */
    473                 {
    474                   /*
    475                      Unsigned32.
    476                    */
    477                   struct dict_avp_data data = {
    478                     425,                                    /* Code */
    479                     0,                                      /* Vendor */
    480                     "Currency-Code",                        /* Name */
    481                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    482                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    483                     AVP_TYPE_UNSIGNED32                     /* base type of data */
    484                   };
    485                   CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
    486                 }
     456            struct dict_avp_data    data = {
     457                427,                                    /* Code */
     458                0,                                      /* Vendor */
     459                "Credit-Control-Failure-Handling",      /* Name */
     460                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     461                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     462                AVP_TYPE_INTEGER32                      /* base type of data */
     463            };
     464            /* Create the Enumerated type, and then the AVP */
     465            CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
     466            CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);   
     467            CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
     468            CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL);
     469            CHECK_dict_new( DICT_AVP, &data , type, NULL);
     470        }
     471
     472        /* Currency-Code */
     473        {
     474            /*
     475               Unsigned32.
     476            */
     477            struct dict_avp_data data = {
     478                425,                                    /* Code */
     479                0,                                      /* Vendor */
     480                "Currency-Code",                        /* Name */
     481                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     482                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     483                AVP_TYPE_UNSIGNED32                     /* base type of data */
     484            };
     485            CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
     486        }
    487487   
    488                 /* Direct-Debiting-Failure-Handling */
    489                 {
    490                   /*
    491                     Enumerated.
    492                   */
    493 
    494                   struct dict_object              *type;
    495                   struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Direct-Debiting-Failure-Handling)" , NULL, NULL, NULL };
    496                   struct dict_enumval_data        t_1 = { "TERMINATE_OR_BUFFER", { .i32 = 0 }};
    497                   struct dict_enumval_data        t_2 = { "CONTINUE", { .i32 = 1 }};
     488        /* Direct-Debiting-Failure-Handling */
     489        {
     490            /*
     491               Enumerated.
     492            */
     493
     494            struct dict_object              *type;
     495            struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Direct-Debiting-Failure-Handling)" , NULL, NULL, NULL };
     496            struct dict_enumval_data        t_1 = { "TERMINATE_OR_BUFFER", { .i32 = 0 }};
     497            struct dict_enumval_data        t_2 = { "CONTINUE", { .i32 = 1 }};
    498498                 
    499                   struct dict_avp_data    data = {
    500                     428,                                    /* Code */
    501                     0,                                      /* Vendor */
    502                     "Direct-Debiting-Failure-Handling",     /* Name */
    503                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    504                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    505                     AVP_TYPE_INTEGER32                      /* base type of data */
    506                   };
    507                   /* Create the Enumerated type, and then the AVP */
    508                   CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
    509                   CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);
    510                   CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
    511                   CHECK_dict_new( DICT_AVP, &data , type, NULL);
    512                 }
    513 
    514                 /* Exponent */
    515                 {
    516                   /*
    517                      Integer32.
    518                    */
    519                   struct dict_avp_data data = {
    520                     429,                                       /* Code */
    521                     0,                                      /* Vendor */
    522                     "Exponent",                      /* Name */
    523                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    524                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    525                     AVP_TYPE_INTEGER32                      /* base type of data */
    526                   };
    527                   CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
    528                 }
    529                
    530                 /* Final-Unit-Action */
    531                 {
    532                   /*
    533                     Enumerated.
    534                   */
    535 
    536                   struct dict_object              *type;
    537                   struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Final-Unit-Action)" , NULL, NULL, NULL };
    538                   struct dict_enumval_data        t_1 = { "TERMINATE", { .i32 = 0 }};
    539                   struct dict_enumval_data        t_2 = { "REDIRECT", { .i32 = 1 }};
    540                   struct dict_enumval_data        t_3 = { "RESTRICT_ACCESS", { .i32 = 2 }};
     499            struct dict_avp_data    data = {
     500                428,                                    /* Code */
     501                0,                                      /* Vendor */
     502                "Direct-Debiting-Failure-Handling",     /* Name */
     503                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     504                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     505                AVP_TYPE_INTEGER32                      /* base type of data */
     506            };
     507            /* Create the Enumerated type, and then the AVP */
     508            CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
     509            CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);
     510            CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
     511            CHECK_dict_new( DICT_AVP, &data , type, NULL);
     512        }
     513
     514        /* Exponent */
     515        {
     516            /*
     517               Integer32.
     518            */
     519            struct dict_avp_data data = {
     520                429,                                    /* Code */
     521                0,                                      /* Vendor */
     522                "Exponent",                             /* Name */
     523                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     524                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     525                AVP_TYPE_INTEGER32                      /* base type of data */
     526            };
     527            CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
     528        }
     529               
     530        /* Final-Unit-Action */
     531        {
     532            /*
     533               Enumerated.
     534            */
     535
     536            struct dict_object              *type;
     537            struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Final-Unit-Action)" , NULL, NULL, NULL };
     538            struct dict_enumval_data        t_1 = { "TERMINATE", { .i32 = 0 }};
     539            struct dict_enumval_data        t_2 = { "REDIRECT", { .i32 = 1 }};
     540            struct dict_enumval_data        t_3 = { "RESTRICT_ACCESS", { .i32 = 2 }};
    541541                 
    542                   struct dict_avp_data    data = {
    543                     449,                                    /* Code */
    544                     0,                                      /* Vendor */
    545                     "Final-Unit-Action",                    /* Name */
    546                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    547                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    548                     AVP_TYPE_INTEGER32                      /* base type of data */
    549                   };
    550                   /* Create the Enumerated type, and then the AVP */
    551                   CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
    552                   CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL); 
    553                   CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
    554                   CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL);
    555                   CHECK_dict_new( DICT_AVP, &data , type, NULL);
    556                 }
    557                
    558                 /* Final-Unit-Indication */
    559                 {
    560                   /*
    561                     Grouped
    562                   */
    563 
    564                   struct dict_avp_data data = {
    565                     430,                                    /* Code */
    566                     0,                                      /* Vendor */
    567                     "Final-Unit-Indication",                  /* Name */
    568                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    569                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    570                     AVP_TYPE_GROUPED                        /* base type of data */
    571                   };
    572                   CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
    573                 }
    574                
    575                 /* Granted-Service-Unit */
    576                 {
    577                   /*
    578                     Grouped
    579                   */
    580 
    581                   struct dict_avp_data data = {
    582                     431,                                    /* Code */
    583                     0,                                      /* Vendor */
    584                     "Granted-Service-Unit",                 /* Name */
    585                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    586                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    587                     AVP_TYPE_GROUPED                        /* base type of data */
    588                   };
    589                   CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
    590                 }
    591                
    592                 /* G-S-U-Pool-Identifier */
    593                 {
    594                   /*
    595                      Unsigned32.
    596                    */
    597                   struct dict_avp_data data = {
    598                     453,                                    /* Code */
    599                     0,                                      /* Vendor */
    600                     "G-S-U-Pool-Identifier",                /* Name */
    601                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    602                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    603                     AVP_TYPE_UNSIGNED32                     /* base type of data */
    604                   };
    605                   CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
    606                 }
    607                
    608                 /* G-S-U-Pool-Reference */
    609                 {
    610                   /*
    611                     Grouped
    612                   */
    613 
    614                   struct dict_avp_data data = {
    615                     457,                                    /* Code */
    616                     0,                                      /* Vendor */
    617                     "G-S-U-Pool-Reference",                 /* Name */
    618                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    619                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    620                     AVP_TYPE_GROUPED                        /* base type of data */
    621                   };
    622                   CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
    623                 }                     
    624 
    625                 /* Multiple-Services-Credit-Control */
    626                 {
    627                   /*
    628                     Grouped
    629                   */
    630 
    631                   struct dict_avp_data data = {
    632                     456,                                    /* Code */
    633                     0,                                      /* Vendor */
    634                     "Multiple-Services-Credit-Control",     /* Name */
    635                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    636                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    637                     AVP_TYPE_GROUPED                        /* base type of data */
    638                   };
    639                   CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
    640                 }
    641                
    642                 /* Multiple-Services-Indicator */
    643                 {
    644                   /*
    645                     Enumerated.
    646                   */
    647 
    648                   struct dict_object              *type;
    649                   struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Multiple-Services-Indicator)" , NULL, NULL, NULL };
    650                   struct dict_enumval_data        t_1 = { "MULTIPLE_SERVICES_NOT_SUPPORTED", { .i32 = 0 }};
    651                   struct dict_enumval_data        t_2 = { "MULTIPLE_SERVICES_SUPPORTED", { .i32 = 1 }};
     542            struct dict_avp_data    data = {
     543                449,                                    /* Code */
     544                0,                                      /* Vendor */
     545                "Final-Unit-Action",                    /* Name */
     546                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     547                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     548                AVP_TYPE_INTEGER32                      /* base type of data */
     549            };
     550            /* Create the Enumerated type, and then the AVP */
     551            CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
     552            CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL); 
     553            CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
     554            CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL);
     555            CHECK_dict_new( DICT_AVP, &data , type, NULL);
     556        }
     557               
     558        /* Final-Unit-Indication */
     559        {
     560            /*
     561              Grouped
     562            */
     563
     564            struct dict_avp_data data = {
     565                430,                                    /* Code */
     566                0,                                      /* Vendor */
     567                "Final-Unit-Indication",                /* Name */
     568                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     569                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     570                AVP_TYPE_GROUPED                        /* base type of data */
     571            };
     572            CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
     573        }
     574               
     575        /* Granted-Service-Unit */
     576        {
     577            /*
     578              Grouped
     579            */
     580
     581            struct dict_avp_data data = {
     582                431,                                    /* Code */
     583                0,                                      /* Vendor */
     584                "Granted-Service-Unit",                 /* Name */
     585                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     586                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     587                AVP_TYPE_GROUPED                        /* base type of data */
     588            };
     589            CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
     590        }
     591               
     592        /* G-S-U-Pool-Identifier */
     593        {
     594            /*
     595               Unsigned32.
     596            */
     597            struct dict_avp_data data = {
     598                453,                                    /* Code */
     599                0,                                      /* Vendor */
     600                "G-S-U-Pool-Identifier",                /* Name */
     601                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     602                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     603                AVP_TYPE_UNSIGNED32                     /* base type of data */
     604            };
     605            CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
     606        }
     607               
     608        /* G-S-U-Pool-Reference */
     609        {
     610            /*
     611              Grouped
     612            */
     613
     614            struct dict_avp_data data = {
     615                457,                                    /* Code */
     616                0,                                      /* Vendor */
     617                "G-S-U-Pool-Reference",                 /* Name */
     618                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     619                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     620                AVP_TYPE_GROUPED                        /* base type of data */
     621            };
     622            CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
     623        }                     
     624
     625        /* Multiple-Services-Credit-Control */
     626        {
     627            /*
     628              Grouped
     629            */
     630
     631            struct dict_avp_data data = {
     632                456,                                    /* Code */
     633                0,                                      /* Vendor */
     634                "Multiple-Services-Credit-Control",     /* Name */
     635                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     636                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     637                AVP_TYPE_GROUPED                        /* base type of data */
     638            };
     639            CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
     640        }
     641               
     642        /* Multiple-Services-Indicator */
     643        {
     644            /*
     645               Enumerated.
     646            */
     647
     648            struct dict_object              *type;
     649            struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Multiple-Services-Indicator)" , NULL, NULL, NULL };
     650            struct dict_enumval_data        t_1 = { "MULTIPLE_SERVICES_NOT_SUPPORTED", { .i32 = 0 }};
     651            struct dict_enumval_data        t_2 = { "MULTIPLE_SERVICES_SUPPORTED", { .i32 = 1 }};
    652652                 
    653                   struct dict_avp_data    data = {
    654                     455,                                    /* Code */
    655                     0,                                      /* Vendor */
    656                     "Multiple-Services-Indicator",                    /* Name */
    657                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    658                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    659                     AVP_TYPE_INTEGER32                      /* base type of data */
    660                   };
    661                   /* Create the Enumerated type, and then the AVP */
    662                   CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
    663                   CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);
    664                   CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
    665                   CHECK_dict_new( DICT_AVP, &data , type, NULL);
    666                 }
    667                
    668                 /* Rating-Group */
    669                 {
    670                   /*
    671                      Unsigned32.
    672                    */
    673                   struct dict_avp_data data = {
    674                     432,                                    /* Code */
    675                     0,                                      /* Vendor */
    676                     "Rating-Group",                      /* Name */
    677                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    678                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    679                     AVP_TYPE_UNSIGNED32                     /* base type of data */
    680                   };
    681                   CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
    682                 }
     653            struct dict_avp_data    data = {
     654                455,                                    /* Code */
     655                0,                                      /* Vendor */
     656                "Multiple-Services-Indicator",          /* Name */
     657                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     658                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     659                AVP_TYPE_INTEGER32                      /* base type of data */
     660            };
     661            /* Create the Enumerated type, and then the AVP */
     662            CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
     663            CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);
     664            CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
     665            CHECK_dict_new( DICT_AVP, &data , type, NULL);
     666        }
     667               
     668        /* Rating-Group */
     669        {
     670            /*
     671               Unsigned32.
     672            */
     673            struct dict_avp_data data = {
     674                432,                                    /* Code */
     675                0,                                      /* Vendor */
     676                "Rating-Group",                         /* Name */
     677                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     678                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     679                AVP_TYPE_UNSIGNED32                     /* base type of data */
     680            };
     681            CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
     682        }
    683683                                     
    684                 /* Redirect-Address-Type */
    685                 {
    686                   /*
    687                     Enumerated.
    688                   */
    689 
    690                   struct dict_object              *type;
    691                   struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Redirect-Address-Type)" , NULL, NULL, NULL };
    692                   struct dict_enumval_data        t_1 = { "IPV4_ADDRESS", { .i32 = 0 }};
    693                   struct dict_enumval_data        t_2 = { "IPV6_ADDRESS", { .i32 = 1 }};
    694                   struct dict_enumval_data        t_3 = { "URL", { .i32 = 2 }};
    695                   struct dict_enumval_data        t_4 = { "SIP_URI", { .i32 = 3 }};
     684        /* Redirect-Address-Type */
     685        {
     686            /*
     687               Enumerated.
     688            */
     689
     690            struct dict_object              *type;
     691            struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Redirect-Address-Type)" , NULL, NULL, NULL };
     692            struct dict_enumval_data        t_1 = { "IPV4_ADDRESS", { .i32 = 0 }};
     693            struct dict_enumval_data        t_2 = { "IPV6_ADDRESS", { .i32 = 1 }};
     694            struct dict_enumval_data        t_3 = { "URL", { .i32 = 2 }};
     695            struct dict_enumval_data        t_4 = { "SIP_URI", { .i32 = 3 }};
    696696                 
    697                   struct dict_avp_data    data = {
    698                     433,                                    /* Code */
    699                     0,                                      /* Vendor */
    700                     "Redirect-Address-Type",                    /* Name */
    701                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    702                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    703                     AVP_TYPE_INTEGER32                      /* base type of data */
    704                   };
    705                   /* Create the Enumerated type, and then the AVP */
    706                   CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
    707                   CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL); 
    708                   CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
    709                   CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL);
    710                   CHECK_dict_new( DICT_ENUMVAL, &t_4 , type, NULL);
    711                   CHECK_dict_new( DICT_AVP, &data , type, NULL);
    712                 }           
     697            struct dict_avp_data    data = {
     698                433,                                    /* Code */
     699                0,                                      /* Vendor */
     700                "Redirect-Address-Type",                /* Name */
     701                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     702                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     703                AVP_TYPE_INTEGER32                      /* base type of data */
     704            };
     705            /* Create the Enumerated type, and then the AVP */
     706            CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
     707            CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL); 
     708            CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
     709            CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL);
     710            CHECK_dict_new( DICT_ENUMVAL, &t_4 , type, NULL);
     711            CHECK_dict_new( DICT_AVP, &data , type, NULL);
     712        }           
    713713                                     
    714                 /* Redirect-Server */
    715                 {
    716                   /*
    717                     Grouped
    718                   */
    719 
    720                   struct dict_avp_data data = {
    721                     434,                                    /* Code */
    722                     0,                                      /* Vendor */
    723                     "Redirect-Server",                  /* Name */
    724                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    725                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    726                     AVP_TYPE_GROUPED                        /* base type of data */
    727                   };
    728                   CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
    729                 }
     714        /* Redirect-Server */
     715        {
     716            /*
     717              Grouped
     718            */
     719
     720            struct dict_avp_data data = {
     721                434,                                    /* Code */
     722                0,                                      /* Vendor */
     723                "Redirect-Server",                      /* Name */
     724                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     725                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     726                AVP_TYPE_GROUPED                        /* base type of data */
     727            };
     728            CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
     729        }
    730730                                       
    731                 /* Redirect-Server-Address */
    732                 {
    733                   /*
    734                     UTF8String.
    735                   */
    736                   struct dict_avp_data    data = {
    737                     435,                                    /* Code */
    738                     0,                                      /* Vendor */
    739                     "Redirect-Server-Address",                           /* Name */
    740                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    741                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    742                     AVP_TYPE_OCTETSTRING                      /* base type of data */
    743                   };
    744                   CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL);
    745                 }
    746                
    747                 /* Requested-Action */
    748                 {
    749                   /*
    750                     Enumerated.
    751                   */
    752 
    753                   struct dict_object              *type;
    754                   struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Requested-Action)" , NULL, NULL, NULL };
    755                   struct dict_enumval_data        t_1 = { "DIRECT_DEBITING", { .i32 = 0 }};
    756                   struct dict_enumval_data        t_2 = { "REFUND_ACCOUNT", { .i32 = 1 }};
    757                   struct dict_enumval_data        t_3 = { "CHECK_BALANCE", { .i32 = 2 }};
    758                   struct dict_enumval_data        t_4 = { "PRICE_ENQUIRY", { .i32 = 3 }};
     731        /* Redirect-Server-Address */
     732        {
     733            /*
     734               UTF8String.
     735            */
     736            struct dict_avp_data    data = {
     737                435,                                    /* Code */
     738                0,                                      /* Vendor */
     739                "Redirect-Server-Address",              /* Name */
     740                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     741                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     742                AVP_TYPE_OCTETSTRING                    /* base type of data */
     743            };
     744            CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL);
     745        }
     746               
     747        /* Requested-Action */
     748        {
     749            /*
     750               Enumerated.
     751            */
     752
     753            struct dict_object              *type;
     754            struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Requested-Action)" , NULL, NULL, NULL };
     755            struct dict_enumval_data        t_1 = { "DIRECT_DEBITING", { .i32 = 0 }};
     756            struct dict_enumval_data        t_2 = { "REFUND_ACCOUNT", { .i32 = 1 }};
     757            struct dict_enumval_data        t_3 = { "CHECK_BALANCE", { .i32 = 2 }};
     758            struct dict_enumval_data        t_4 = { "PRICE_ENQUIRY", { .i32 = 3 }};
    759759                 
    760                   struct dict_avp_data    data = {
    761                     436,                                    /* Code */
    762                     0,                                      /* Vendor */
    763                     "Requested-Action",                    /* Name */
    764                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    765                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    766                     AVP_TYPE_INTEGER32                      /* base type of data */
    767                   };
    768                   /* Create the Enumerated type, and then the AVP */
    769                   CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
    770                   CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);
    771                   CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
    772                   CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL);
    773                   CHECK_dict_new( DICT_ENUMVAL, &t_4 , type, NULL);
    774                   CHECK_dict_new( DICT_AVP, &data , type, NULL);
    775                 }
     760            struct dict_avp_data    data = {
     761                436,                                    /* Code */
     762                0,                                      /* Vendor */
     763                "Requested-Action",                     /* Name */
     764                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     765                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     766                AVP_TYPE_INTEGER32                      /* base type of data */
     767            };
     768            /* Create the Enumerated type, and then the AVP */
     769            CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
     770            CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);
     771            CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
     772            CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL);
     773            CHECK_dict_new( DICT_ENUMVAL, &t_4 , type, NULL);
     774            CHECK_dict_new( DICT_AVP, &data , type, NULL);
     775        }
    776776                                   
    777                 /* Requested-Service-Unit */
    778                 {
    779                   /*
    780                     Grouped
    781                   */
    782 
    783                   struct dict_avp_data data = {
    784                     437,                                    /* Code */
    785                     0,                                      /* Vendor */
    786                     "Requested-Service-Unit",                  /* Name */
    787                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    788                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    789                     AVP_TYPE_GROUPED                        /* base type of data */
    790                   };
    791                   CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
    792                 }
    793                
    794                 /* Restriction-Filter-Rule */
    795                 {
    796                   /*
    797                     IPFiltrRule.
    798                   */
    799                   struct dict_avp_data    data = {
    800                     438,                                    /* Code */
    801                     0,                                      /* Vendor */
    802                     "Restriction-Filter-Rule",              /* Name */
    803                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    804                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    805                     AVP_TYPE_OCTETSTRING                      /* base type of data */
    806                   };
    807                   CHECK_dict_new( DICT_AVP, &data , IPFilterRule_type, NULL);
    808                 }
    809 
    810                 /*Service-Context-Id  */
    811                 {
    812                   /*
    813                     UTF8String.
    814                   */
    815                   struct dict_avp_data    data = {
    816                     461,                                    /* Code */
    817                     0,                                      /* Vendor */
    818                     "Service-Context-Id",                           /* Name */
    819                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    820                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    821                     AVP_TYPE_OCTETSTRING                      /* base type of data */
    822                   };
    823                   CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL);
    824                 }
    825 
    826                 /* Service-Identifier */
    827                 {
    828                   /*
    829                      Unsigned32.
    830                    */
    831                   struct dict_avp_data data = {
    832                     439,                                    /* Code */
    833                     0,                                      /* Vendor */
    834                     "Service-Identifier",                      /* Name */
    835                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    836                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    837                     AVP_TYPE_UNSIGNED32                     /* base type of data */
    838                   };
    839                   CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
    840                 }                       
     777        /* Requested-Service-Unit */
     778        {
     779            /*
     780              Grouped
     781            */
     782
     783            struct dict_avp_data data = {
     784                437,                                    /* Code */
     785                0,                                      /* Vendor */
     786                "Requested-Service-Unit",               /* Name */
     787                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     788                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     789                AVP_TYPE_GROUPED                        /* base type of data */
     790            };
     791            CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
     792        }
     793               
     794        /* Restriction-Filter-Rule */
     795        {
     796            /*
     797               IPFiltrRule.
     798            */
     799            struct dict_avp_data    data = {
     800                438,                                    /* Code */
     801                0,                                      /* Vendor */
     802                "Restriction-Filter-Rule",              /* Name */
     803                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     804                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     805                AVP_TYPE_OCTETSTRING                    /* base type of data */
     806            };
     807            CHECK_dict_new( DICT_AVP, &data , IPFilterRule_type, NULL);
     808        }
     809
     810        /*Service-Context-Id  */
     811        {
     812            /*
     813               UTF8String.
     814            */
     815            struct dict_avp_data    data = {
     816                461,                                    /* Code */
     817                0,                                      /* Vendor */
     818                "Service-Context-Id",                   /* Name */
     819                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     820                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     821                AVP_TYPE_OCTETSTRING                    /* base type of data */
     822            };
     823            CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL);
     824        }
     825
     826        /* Service-Identifier */
     827        {
     828            /*
     829               Unsigned32.
     830            */
     831            struct dict_avp_data data = {
     832                439,                                    /* Code */
     833                0,                                      /* Vendor */
     834                "Service-Identifier",                   /* Name */
     835                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     836                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     837                AVP_TYPE_UNSIGNED32                     /* base type of data */
     838            };
     839            CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
     840        }                       
    841841                               
    842                 /* Service-Parameter-Info */
    843                 {
    844                   /*
    845                     Grouped
    846                   */
    847 
    848                   struct dict_avp_data data = {
    849                     440,                                    /* Code */
    850                     0,                                      /* Vendor */
    851                     "Service-Parameter-Info",               /* Name */
    852                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    853                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    854                     AVP_TYPE_GROUPED                        /* base type of data */
    855                   };
    856                   CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
    857                 }                       
     842        /* Service-Parameter-Info */
     843        {
     844            /*
     845              Grouped
     846            */
     847
     848            struct dict_avp_data data = {
     849                440,                                    /* Code */
     850                0,                                      /* Vendor */
     851                "Service-Parameter-Info",               /* Name */
     852                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     853                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     854                AVP_TYPE_GROUPED                        /* base type of data */
     855            };
     856            CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
     857        }                       
    858858                                 
    859                 /* Service-Parameter-Type */
    860                 {
    861                   /*
    862                      Unsigned32.
    863                    */
    864                   struct dict_avp_data data = {
    865                     441,                                    /* Code */
    866                     0,                                      /* Vendor */
    867                     "Service-Parameter-Type",                      /* Name */
    868                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    869                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    870                     AVP_TYPE_UNSIGNED32                     /* base type of data */
    871                   };
    872                   CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
    873                 }
    874                
    875                 /* Service-Parameter-Value */
    876                 {
    877                   /*
    878                     OctetString.
    879                   */
    880                   struct dict_avp_data data = {
    881                     442,                                    /* Code */
    882                     0,                                      /* Vendor */
    883                     "Service-Parameter-Value",              /* Name */
    884                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    885                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    886                     AVP_TYPE_OCTETSTRING                      /* base type of data */
    887                   };
    888                   CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
    889                 }
    890 
    891                 /* Subscription-Id */
    892                 {
    893                   /*
    894                     Grouped
    895                   */
    896 
    897                   struct dict_avp_data data = {
    898                     443,                                    /* Code */
    899                     0,                                      /* Vendor */
    900                     "Subscription-Id",                  /* Name */
    901                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    902                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    903                     AVP_TYPE_GROUPED                        /* base type of data */
    904                   };
    905                   CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
    906                 }
     859        /* Service-Parameter-Type */
     860        {
     861            /*
     862               Unsigned32.
     863            */
     864            struct dict_avp_data data = {
     865                441,                                    /* Code */
     866                0,                                      /* Vendor */
     867                "Service-Parameter-Type",               /* Name */
     868                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     869                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     870                AVP_TYPE_UNSIGNED32                     /* base type of data */
     871            };
     872            CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
     873        }
     874               
     875        /* Service-Parameter-Value */
     876        {
     877            /*
     878               OctetString.
     879            */
     880            struct dict_avp_data data = {
     881                442,                                    /* Code */
     882                0,                                      /* Vendor */
     883                "Service-Parameter-Value",              /* Name */
     884                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     885                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     886                AVP_TYPE_OCTETSTRING                    /* base type of data */
     887            };
     888            CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
     889        }
     890
     891        /* Subscription-Id */
     892        {
     893            /*
     894              Grouped
     895            */
     896
     897            struct dict_avp_data data = {
     898                443,                                    /* Code */
     899                0,                                      /* Vendor */
     900                "Subscription-Id",                      /* Name */
     901                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     902                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     903                AVP_TYPE_GROUPED                        /* base type of data */
     904            };
     905            CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
     906        }
    907907                               
    908                 /* Subscription-Id-Data */
    909                 {
    910                   /*
    911                     UTF8String.
    912                   */
    913                   struct dict_avp_data    data = {
    914                     444,                                    /* Code */
    915                     0,                                      /* Vendor */
    916                     "Subscription-Id-Data",                           /* Name */
    917                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    918                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    919                     AVP_TYPE_OCTETSTRING                      /* base type of data */
    920                   };
    921                   CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL);
    922                 }           
     908        /* Subscription-Id-Data */
     909        {
     910            /*
     911               UTF8String.
     912            */
     913            struct dict_avp_data    data = {
     914                444,                                    /* Code */
     915                0,                                      /* Vendor */
     916                "Subscription-Id-Data",                 /* Name */
     917                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     918                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     919                AVP_TYPE_OCTETSTRING                    /* base type of data */
     920            };
     921            CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL);
     922        }           
    923923   
    924                 /* Subscription-Id-Type */
    925                 {
    926                   /*
    927                     Enumerated.
    928                   */
    929 
    930                   struct dict_object              *type;
    931                   struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Subscription-Id-Type)" , NULL, NULL, NULL };
    932                   struct dict_enumval_data        t_1 = { "END_USER_E164", { .i32 = 0 }};
    933                   struct dict_enumval_data        t_2 = { "END_USER_IMSI", { .i32 = 1 }};
    934                   struct dict_enumval_data        t_3 = { "END_USER_SIP_URI", { .i32 = 2 }};
    935                   struct dict_enumval_data        t_4 = { "END_USER_NAI", { .i32 = 3 }};
     924        /* Subscription-Id-Type */
     925        {
     926            /*
     927               Enumerated.
     928            */
     929
     930            struct dict_object              *type;
     931            struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Subscription-Id-Type)" , NULL, NULL, NULL };
     932            struct dict_enumval_data        t_1 = { "END_USER_E164", { .i32 = 0 }};
     933            struct dict_enumval_data        t_2 = { "END_USER_IMSI", { .i32 = 1 }};
     934            struct dict_enumval_data        t_3 = { "END_USER_SIP_URI", { .i32 = 2 }};
     935            struct dict_enumval_data        t_4 = { "END_USER_NAI", { .i32 = 3 }};
    936936                 
    937                   struct dict_avp_data    data = {
    938                     450,                                    /* Code */
    939                     0,                                      /* Vendor */
    940                     "Subscription-Id-Type",                    /* Name */
    941                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    942                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    943                     AVP_TYPE_INTEGER32                      /* base type of data */
    944                   };
    945                   /* Create the Enumerated type, and then the AVP */
    946                   CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
    947                   CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);
    948                   CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
    949                   CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL);
    950                   CHECK_dict_new( DICT_ENUMVAL, &t_4 , type, NULL);
    951                   CHECK_dict_new( DICT_AVP, &data , type, NULL);
    952                 }
    953                
    954                 /* Tariff-Change-Usage */
    955                 {
    956                   /*
    957                     Enumerated.
    958                   */
    959 
    960                   struct dict_object              *type;
    961                   struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Tariff-Change-Usage)" , NULL, NULL, NULL };
    962                   struct dict_enumval_data        t_1 = { "UNIT_BEFORE_TARIFF_CHANGE", { .i32 = 0 }};
    963                   struct dict_enumval_data        t_2 = { "UNIT_AFTER_TARIFF_CHANGE", { .i32 = 1 }};
    964                   struct dict_enumval_data        t_3 = { "UNIT_INDETERMINATE", { .i32 = 2 }};
     937            struct dict_avp_data    data = {
     938                450,                                    /* Code */
     939                0,                                      /* Vendor */
     940                "Subscription-Id-Type",                 /* Name */
     941                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     942                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     943                AVP_TYPE_INTEGER32                      /* base type of data */
     944            };
     945            /* Create the Enumerated type, and then the AVP */
     946            CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
     947            CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);
     948            CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
     949            CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL);
     950            CHECK_dict_new( DICT_ENUMVAL, &t_4 , type, NULL);
     951            CHECK_dict_new( DICT_AVP, &data , type, NULL);
     952        }
     953               
     954        /* Tariff-Change-Usage */
     955        {
     956            /*
     957               Enumerated.
     958            */
     959
     960            struct dict_object              *type;
     961            struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Tariff-Change-Usage)" , NULL, NULL, NULL };
     962            struct dict_enumval_data        t_1 = { "UNIT_BEFORE_TARIFF_CHANGE", { .i32 = 0 }};
     963            struct dict_enumval_data        t_2 = { "UNIT_AFTER_TARIFF_CHANGE", { .i32 = 1 }};
     964            struct dict_enumval_data        t_3 = { "UNIT_INDETERMINATE", { .i32 = 2 }};
    965965                 
    966                   struct dict_avp_data    data = {
    967                     452,                                    /* Code */
    968                     0,                                      /* Vendor */
    969                     "Tariff-Change-Usage",                    /* Name */
    970                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    971                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    972                     AVP_TYPE_INTEGER32                      /* base type of data */
    973                   };
    974                   /* Create the Enumerated type, and then the AVP */
    975                   CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
    976                   CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);
    977                   CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
    978                   CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL);
    979                   CHECK_dict_new( DICT_AVP, &data , type, NULL);
    980                 }
    981                
    982                 /* Tariff-Time-Change */
    983                 {
    984                   /*
    985                     Time.
    986                   */
    987                   struct dict_avp_data data = {
    988                     451,                                    /* Code */
    989                     0,                                      /* Vendor */
    990                     "Tariff-Time-Change",                   /* Name */
    991                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    992                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    993                     AVP_TYPE_OCTETSTRING                    /* base type of data */
    994                   };
    995                   CHECK_dict_new( DICT_AVP, &data , Time_type, NULL);
    996                 }
     966            struct dict_avp_data    data = {
     967                452,                                    /* Code */
     968                0,                                      /* Vendor */
     969                "Tariff-Change-Usage",                  /* Name */
     970                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     971                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     972                AVP_TYPE_INTEGER32                      /* base type of data */
     973            };
     974            /* Create the Enumerated type, and then the AVP */
     975            CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
     976            CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);
     977            CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
     978            CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL);
     979            CHECK_dict_new( DICT_AVP, &data , type, NULL);
     980        }
     981               
     982        /* Tariff-Time-Change */
     983        {
     984            /*
     985              Time.
     986            */
     987            struct dict_avp_data data = {
     988                451,                                    /* Code */
     989                0,                                      /* Vendor */
     990                "Tariff-Time-Change",                   /* Name */
     991                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     992                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     993                AVP_TYPE_OCTETSTRING                    /* base type of data */
     994            };
     995            CHECK_dict_new( DICT_AVP, &data , Time_type, NULL);
     996        }
    997997                                         
    998                 /* Unit-Value */
    999                 {
    1000                   /*
    1001                     Grouped
    1002                   */
    1003 
    1004                   struct dict_avp_data data = {
    1005                     445,                                    /* Code */
    1006                     0,                                      /* Vendor */
    1007                     "Unit-Value",                  /* Name */
    1008                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    1009                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    1010                     AVP_TYPE_GROUPED                        /* base type of data */
    1011                   };
    1012                   CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
    1013                 }
    1014 
    1015                 /* Used-Service-Unit */
    1016                 {
    1017                   /*
    1018                     Grouped
    1019                   */
    1020 
    1021                   struct dict_avp_data data = {
    1022                     446,                                    /* Code */
    1023                     0,                                      /* Vendor */
    1024                     "Used-Service-Unit",                  /* Name */
    1025                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    1026                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    1027                     AVP_TYPE_GROUPED                        /* base type of data */
    1028                   };
    1029                   CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
    1030                 }
    1031 
    1032                 /* User-Equipment-Info */
    1033                 {
    1034                   /*
    1035                     Grouped
    1036                   */
    1037 
    1038                   struct dict_avp_data data = {
    1039                     458,                                    /* Code */
    1040                     0,                                      /* Vendor */
    1041                     "User-Equipment-Info",                  /* Name */
    1042                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    1043                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    1044                     AVP_TYPE_GROUPED                        /* base type of data */
    1045                   };
    1046                   CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
    1047                 }
    1048 
    1049                 /* User-Equipment-Info-Type */
    1050                 {
    1051                   /*
    1052                     Enumerated.
    1053                   */
    1054 
    1055                   struct dict_object              *type;
    1056                   struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(User-Equipment-Info-Type)" , NULL, NULL, NULL };
    1057                   struct dict_enumval_data        t_1 = { "IMEISV", { .i32 = 0 }};
    1058                   struct dict_enumval_data        t_2 = { "MAC", { .i32 = 1 }};
    1059                   struct dict_enumval_data        t_3 = { "EUI64", { .i32 = 2 }};
     998        /* Unit-Value */
     999        {
     1000            /*
     1001              Grouped
     1002            */
     1003
     1004            struct dict_avp_data data = {
     1005                445,                                    /* Code */
     1006                0,                                      /* Vendor */
     1007                "Unit-Value",                           /* Name */
     1008                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     1009                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     1010                AVP_TYPE_GROUPED                        /* base type of data */
     1011            };
     1012            CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
     1013        }
     1014
     1015        /* Used-Service-Unit */
     1016        {
     1017            /*
     1018              Grouped
     1019            */
     1020
     1021            struct dict_avp_data data = {
     1022                446,                                    /* Code */
     1023                0,                                      /* Vendor */
     1024                "Used-Service-Unit",                    /* Name */
     1025                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     1026                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     1027                AVP_TYPE_GROUPED                        /* base type of data */
     1028            };
     1029            CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
     1030        }
     1031
     1032        /* User-Equipment-Info */
     1033        {
     1034            /*
     1035              Grouped
     1036            */
     1037
     1038            struct dict_avp_data data = {
     1039                458,                                    /* Code */
     1040                0,                                      /* Vendor */
     1041                "User-Equipment-Info",                  /* Name */
     1042                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     1043                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     1044                AVP_TYPE_GROUPED                        /* base type of data */
     1045            };
     1046            CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
     1047        }
     1048
     1049        /* User-Equipment-Info-Type */
     1050        {
     1051            /*
     1052               Enumerated.
     1053            */
     1054
     1055            struct dict_object              *type;
     1056            struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(User-Equipment-Info-Type)" , NULL, NULL, NULL };
     1057            struct dict_enumval_data        t_1 = { "IMEISV", { .i32 = 0 }};
     1058            struct dict_enumval_data        t_2 = { "MAC", { .i32 = 1 }};
     1059            struct dict_enumval_data        t_3 = { "EUI64", { .i32 = 2 }};
    10601060                 
    1061                   struct dict_avp_data    data = {
    1062                     459,                                    /* Code */
    1063                     0,                                      /* Vendor */
    1064                     "User-Equipment-Info-Type",                    /* Name */
    1065                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    1066                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    1067                     AVP_TYPE_INTEGER32                      /* base type of data */
    1068                   };
    1069                   /* Create the Enumerated type, and then the AVP */
    1070                   CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
    1071                   CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);
    1072                   CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
    1073                   CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL);
    1074                   CHECK_dict_new( DICT_AVP, &data , type, NULL);
    1075                 }                           
     1061            struct dict_avp_data    data = {
     1062                459,                                    /* Code */
     1063                0,                                      /* Vendor */
     1064                "User-Equipment-Info-Type",             /* Name */
     1065                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     1066                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     1067                AVP_TYPE_INTEGER32                      /* base type of data */
     1068            };
     1069            /* Create the Enumerated type, and then the AVP */
     1070            CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
     1071            CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);
     1072            CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
     1073            CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL);
     1074            CHECK_dict_new( DICT_AVP, &data , type, NULL);
     1075        }                           
    10761076   
    1077                 /* User-Equipment-Info-Value */
    1078                 {
    1079                   /*
    1080                     OctetString.
    1081                   */
    1082                   struct dict_avp_data data = {
    1083                     460,                                    /* Code */
    1084                     0,                                      /* Vendor */
    1085                     "User-Equipment-Info-Value",            /* Name */
    1086                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    1087                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    1088                     AVP_TYPE_OCTETSTRING                      /* base type of data */
    1089                   };
    1090                   CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
    1091                 }
    1092 
    1093                 /* Value-Digits */
    1094                 {
    1095                   /*
    1096                      Integer64.
    1097                    */
    1098                   struct dict_avp_data data = {
    1099                     447,                                    /* Code */
    1100                     0,                                      /* Vendor */
    1101                     "Value-Digits",                         /* Name */
    1102                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    1103                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    1104                     AVP_TYPE_INTEGER64                      /* base type of data */
    1105                   };
    1106                   CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
    1107                 }                         
     1077        /* User-Equipment-Info-Value */
     1078        {
     1079            /*
     1080               OctetString.
     1081            */
     1082            struct dict_avp_data data = {
     1083                460,                                    /* Code */
     1084                0,                                      /* Vendor */
     1085                "User-Equipment-Info-Value",            /* Name */
     1086                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     1087                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     1088                AVP_TYPE_OCTETSTRING                    /* base type of data */
     1089            };
     1090            CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
     1091        }
     1092
     1093        /* Value-Digits */
     1094        {
     1095            /*
     1096               Integer64.
     1097            */
     1098            struct dict_avp_data data = {
     1099                447,                                    /* Code */
     1100                0,                                      /* Vendor */
     1101                "Value-Digits",                         /* Name */
     1102                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     1103                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     1104                AVP_TYPE_INTEGER64                      /* base type of data */
     1105            };
     1106            CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
     1107        }                         
    11081108                 
    1109                 /* Validity-Time */
    1110                 {
    1111                   /*
    1112                      Unsigned32.
    1113                    */
    1114                   struct dict_avp_data data = {
    1115                     448,                                    /* Code */
    1116                     0,                                      /* Vendor */
    1117                     "Validity-Time",                      /* Name */
    1118                     AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
    1119                     AVP_FLAG_MANDATORY,                     /* Fixed flag values */
    1120                     AVP_TYPE_UNSIGNED32                     /* base type of data */
    1121                   };
    1122                   CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
    1123                 }
     1109        /* Validity-Time */
     1110        {
     1111            /*
     1112               Unsigned32.
     1113            */
     1114            struct dict_avp_data data = {
     1115                448,                                    /* Code */
     1116                0,                                      /* Vendor */
     1117                "Validity-Time",                        /* Name */
     1118                AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
     1119                AVP_FLAG_MANDATORY,                     /* Fixed flag values */
     1120                AVP_TYPE_UNSIGNED32                     /* base type of data */
     1121            };
     1122            CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
     1123        }
    11241124                                                                         
    1125         }
    1126 
    1127 
    1128         /* Commands section */
    1129         {
     1125    }
     1126
     1127
     1128    /* Commands section */
     1129    {
    11301130        /* Credit-Control-Request (CCR) Command */
    11311131        {
    1132                 /*
    1133                   From RFC 4006:
    1134 
    1135                   3.1.  Credit-Control-Request (CCR) Command
     1132            /*
     1133              From RFC 4006:
     1134
     1135              3.1.  Credit-Control-Request (CCR) Command
    11361136                 
    1137                      The Credit-Control-Request message (CCR) is indicated by the
    1138                      command-code field being set to 272 and the 'R' bit being set in the
    1139                      Command Flags field.  It is used between the Diameter credit-control
    1140                      client and the credit-control server to request credit authorization
    1141                      for a given service.
     1137              The Credit-Control-Request message (CCR) is indicated by the
     1138              command-code field being set to 272 and the 'R' bit being set in the
     1139              Command Flags field.  It is used between the Diameter credit-control
     1140              client and the credit-control server to request credit authorization
     1141              for a given service.
    11421142                 
    1143                      The Auth-Application-Id MUST be set to the value 4, indicating the
    1144                      Diameter credit-control application.
     1143              The Auth-Application-Id MUST be set to the value 4, indicating the
     1144              Diameter credit-control application.
    11451145                 
    1146                      Message Format
     1146              Message Format
    11471147                 
    1148                         <Credit-Control-Request> ::= < Diameter Header: 272, REQ, PXY >
    1149                                                      < Session-Id >
    1150                                                      { Origin-Host }
    1151                                                      { Origin-Realm }
    1152                                                      { Destination-Realm }
    1153                                                      { Auth-Application-Id }
    1154                                                      { Service-Context-Id }
    1155                                                      { CC-Request-Type }
    1156                                                      { CC-Request-Number }
    1157                                                      [ Destination-Host ]
    1158                                                      [ User-Name ]
    1159                                                      [ CC-Sub-Session-Id ]
    1160                                                      [ Acct-Multi-Session-Id ]
    1161                                                      [ Origin-State-Id ]
    1162                                                      [ Event-Timestamp ]
    1163                                                     *[ Subscription-Id ]
    1164                                                      [ Service-Identifier ]
    1165                                                      [ Termination-Cause ]
    1166                                                      [ Requested-Service-Unit ]
    1167                                                      [ Requested-Action ]
    1168                                                     *[ Used-Service-Unit ]
    1169                                                      [ Multiple-Services-Indicator ]
    1170                                                     *[ Multiple-Services-Credit-Control ]
    1171                                                     *[ Service-Parameter-Info ]
    1172                                                      [ CC-Correlation-Id ]
    1173                                                      [ User-Equipment-Info ]
    1174                                                     *[ Proxy-Info ]
    1175                                                     *[ Route-Record ]
    1176                                                     *[ AVP ]
     1148              <Credit-Control-Request> ::= < Diameter Header: 272, REQ, PXY >
     1149                                          < Session-Id >
     1150                                          { Origin-Host }
     1151                                          { Origin-Realm }
     1152                                          { Destination-Realm }
     1153                                          { Auth-Application-Id }
     1154                                          { Service-Context-Id }
     1155                                          { CC-Request-Type }
     1156                                          { CC-Request-Number }
     1157                                          [ Destination-Host ]
     1158                                          [ User-Name ]
     1159                                          [ CC-Sub-Session-Id ]
     1160                                          [ Acct-Multi-Session-Id ]
     1161                                          [ Origin-State-Id ]
     1162                                          [ Event-Timestamp ]
     1163                                         *[ Subscription-Id ]
     1164                                          [ Service-Identifier ]
     1165                                          [ Termination-Cause ]
     1166                                          [ Requested-Service-Unit ]
     1167                                          [ Requested-Action ]
     1168                                         *[ Used-Service-Unit ]
     1169                                          [ Multiple-Services-Indicator ]
     1170                                         *[ Multiple-Services-Credit-Control ]
     1171                                         *[ Service-Parameter-Info ]
     1172                                          [ CC-Correlation-Id ]
     1173                                          [ User-Equipment-Info ]
     1174                                         *[ Proxy-Info ]
     1175                                         *[ Route-Record ]
     1176                                         *[ AVP ]
     1177                                                         
     1178              10.1.  Credit-Control AVP Table
    11771179                 
    1178                   10.1.  Credit-Control AVP Table
     1180              The table in this section is used to represent which credit-control
     1181              applications specific AVPs defined in this document are to be present
     1182              in the credit-control messages.
    11791183                 
    1180                      The table in this section is used to represent which credit-control
    1181                      applications specific AVPs defined in this document are to be present
    1182                      in the credit-control messages.
     1184              +-----------+
     1185              |  Command  |
     1186              |   Code    |
     1187              |-----+-----+
     1188              Attribute Name                | CCR | CCA |
     1189              ------------------------------|-----+-----+
     1190              Acct-Multi-Session-Id         | 0-1 | 0-1 |
     1191              Auth-Application-Id           | 1   | 1   |
     1192              CC-Correlation-Id             | 0-1 | 0   |
     1193              CC-Session-Failover           | 0   | 0-1 |
     1194              CC-Request-Number             | 1   | 1   |
     1195              CC-Request-Type               | 1   | 1   |
     1196              CC-Sub-Session-Id             | 0-1 | 0-1 |
     1197              Check-Balance-Result          | 0   | 0-1 |
     1198              Cost-Information              | 0   | 0-1 |
     1199              Credit-Control-Failure-       | 0   | 0-1 |
     1200              Handling                      |     |     |
     1201              Destination-Host              | 0-1 | 0   |
     1202              Destination-Realm             | 1   | 0   |
     1203              Direct-Debiting-Failure-      | 0   | 0-1 |
     1204              Handling                      |     |     |
     1205              Event-Timestamp               | 0-1 | 0-1 |
     1206              Failed-AVP                    | 0   | 0+  |
     1207              Final-Unit-Indication         | 0   | 0-1 |
     1208              Granted-Service-Unit          | 0   | 0-1 |
     1209              Multiple-Services-Credit-     | 0+  | 0+  |
     1210              Control                       |     |     |
     1211              Multiple-Services-Indicator   | 0-1 | 0   |
     1212              Origin-Host                   | 1   | 1   |
     1213              Origin-Realm                  | 1   | 1   |
     1214              Origin-State-Id               | 0-1 | 0-1 |
     1215              Proxy-Info                    | 0+  | 0+  |
     1216              Redirect-Host                 | 0   | 0+  |
     1217              Redirect-Host-Usage           | 0   | 0-1 |
     1218              Redirect-Max-Cache-Time       | 0   | 0-1 |
     1219              Requested-Action              | 0-1 | 0   |
     1220              Requested-Service-Unit        | 0-1 | 0   |
     1221              Route-Record                  | 0+  | 0+  |
     1222              Result-Code                   | 0   | 1   |
     1223              Service-Context-Id            | 1   | 0   |
     1224              Service-Identifier            | 0-1 | 0   |
     1225              Service-Parameter-Info        | 0+  | 0   |
     1226              Session-Id                    | 1   | 1   |
     1227              Subscription-Id               | 0+  | 0   |
     1228              Termination-Cause             | 0-1 | 0   |
     1229              User-Equipment-Info           | 0-1 | 0   |
     1230              Used-Service-Unit             | 0+  | 0   |
     1231              User-Name                     | 0-1 | 0-1 |
     1232              Validity-Time                 | 0   | 0-1 |
     1233              ------------------------------|-----+-----+
    11831234                 
    1184                                                          +-----------+
    1185                                                          |  Command  |
    1186                                                          |   Code    |
    1187                                                          |-----+-----+
    1188                            Attribute Name                | CCR | CCA |
    1189                            ------------------------------|-----+-----+
    1190                            Acct-Multi-Session-Id         | 0-1 | 0-1 |
    1191                            Auth-Application-Id           | 1   | 1   |
    1192                            CC-Correlation-Id             | 0-1 | 0   |
    1193                            CC-Session-Failover           | 0   | 0-1 |
    1194                            CC-Request-Number             | 1   | 1   |
    1195                            CC-Request-Type               | 1   | 1   |
    1196                            CC-Sub-Session-Id             | 0-1 | 0-1 |
    1197                            Check-Balance-Result          | 0   | 0-1 |
    1198                            Cost-Information              | 0   | 0-1 |
    1199                            Credit-Control-Failure-       | 0   | 0-1 |
    1200                               Handling                   |     |     |
    1201                            Destination-Host              | 0-1 | 0   |
    1202                            Destination-Realm             | 1   | 0   |
    1203                            Direct-Debiting-Failure-      | 0   | 0-1 |
    1204                               Handling                   |     |     |
    1205                            Event-Timestamp               | 0-1 | 0-1 |
    1206                            Failed-AVP                    | 0   | 0+  |
    1207                            Final-Unit-Indication         | 0   | 0-1 |
    1208                            Granted-Service-Unit          | 0   | 0-1 |
    1209                            Multiple-Services-Credit-     | 0+  | 0+  |
    1210                               Control                    |     |     |
    1211                            Multiple-Services-Indicator   | 0-1 | 0   |
    1212                            Origin-Host                   | 1   | 1   |
    1213                            Origin-Realm                  | 1   | 1   |
    1214                            Origin-State-Id               | 0-1 | 0-1 |
    1215                            Proxy-Info                    | 0+  | 0+  |
    1216                            Redirect-Host                 | 0   | 0+  |
    1217                            Redirect-Host-Usage           | 0   | 0-1 |
    1218                            Redirect-Max-Cache-Time       | 0   | 0-1 |
    1219                            Requested-Action              | 0-1 | 0   |
    1220                            Requested-Service-Unit        | 0-1 | 0   |
    1221                            Route-Record                  | 0+  | 0+  |
    1222                            Result-Code                   | 0   | 1   |
    1223                            Service-Context-Id            | 1   | 0   |
    1224                            Service-Identifier            | 0-1 | 0   |
    1225                            Service-Parameter-Info        | 0+  | 0   |
    1226                            Session-Id                    | 1   | 1   |
    1227                            Subscription-Id               | 0+  | 0   |
    1228                            Termination-Cause             | 0-1 | 0   |
    1229                            User-Equipment-Info           | 0-1 | 0   |
    1230                            Used-Service-Unit             | 0+  | 0   |
    1231                            User-Name                     | 0-1 | 0-1 |
    1232                            Validity-Time                 | 0   | 0-1 |
    1233                            ------------------------------|-----+-----+
     1235
     1236            */
     1237            struct dict_object * cmd;
     1238            struct dict_cmd_data data = {
     1239                272,                                    /* Code */
     1240                "Credit-Control-Request",               /* Name */
     1241                CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE,  /* Fixed flags */
     1242                CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE                   /* Fixed flag values */
     1243            };
     1244            struct local_rules_definition rules[] =
     1245                {       
     1246                    { "Session-Id", RULE_FIXED_HEAD, -1, 1 },
     1247                    { "Origin-Host", RULE_REQUIRED, -1, 1 },
     1248                    { "Origin-Realm", RULE_REQUIRED, -1, 1 },
     1249                    { "Destination-Realm", RULE_REQUIRED, -1, 1 },
     1250                    { "Auth-Application-Id", RULE_REQUIRED, -1, 1 },
     1251                    { "Service-Context-Id", RULE_REQUIRED, -1, 1 },
     1252                    { "CC-Request-Type", RULE_REQUIRED, -1, 1 },
     1253                    { "CC-Request-Number", RULE_REQUIRED, -1, 1 },
     1254                    { "Destination-Host", RULE_OPTIONAL, -1, 1 },
     1255                    { "User-Name", RULE_OPTIONAL, -1, 1 },
     1256                    { "CC-Sub-Session-Id", RULE_OPTIONAL, -1, 1 },
     1257                    { "Acct-Multi-Session-Id", RULE_OPTIONAL, -1, 1 },
     1258                    { "Origin-State-Id", RULE_OPTIONAL, -1, 1 },
     1259                    { "Event-Timestamp", RULE_OPTIONAL, -1, 1 },
     1260                    { "Subscription-Id", RULE_OPTIONAL, -1, -1 },
     1261                    { "Service-Identifier", RULE_OPTIONAL, -1, 1 },
     1262                    { "Termination-Cause", RULE_OPTIONAL, -1, 1 },
     1263                    { "Requested-Service-Unit", RULE_OPTIONAL, -1, 1 },
     1264                    { "Requested-Action", RULE_OPTIONAL, -1, 1 },
     1265                    { "Used-Service-Unit", RULE_OPTIONAL, -1, -1 },
     1266                    { "Multiple-Services-Indicator", RULE_OPTIONAL, -1, 1 },
     1267                    { "Multiple-Services-Credit-Control", RULE_OPTIONAL, -1, -1 },
     1268                    { "Service-Parameter-Info", RULE_OPTIONAL, -1, -1 },
     1269                    { "CC-Correlation-Id", RULE_OPTIONAL, -1, 1 },
     1270                    { "User-Equipment-Info", RULE_OPTIONAL, -1, 1 },
     1271                    { "Proxy-Info", RULE_OPTIONAL, -1, -1 },
     1272                    { "Route-Record", RULE_OPTIONAL, -1, -1 }
     1273                    /* plus any additional AVPs { "AVP", RULE_OPTIONAL, -1, -1 } */
     1274                };
     1275
     1276            CHECK_dict_new( DICT_COMMAND, &data, dcca, &cmd);
     1277            PARSE_loc_rules( rules, cmd );
     1278        }
     1279
     1280        /* Credit-Control-Answer (CCA) Command */
     1281        {
     1282            /*
     1283              From RFC 4006:
     1284              3.2.  Credit-Control-Answer (CCA) Command
    12341285                 
    1235 
    1236                   */
    1237                 struct dict_object * cmd;
    1238                 struct dict_cmd_data data = {
    1239                         272,                                    /* Code */
    1240                         "Credit-Control-Request",               /* Name */
    1241                         CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE,  /* Fixed flags */
    1242                         CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE                   /* Fixed flag values */
     1286              The Credit-Control-Answer message (CCA) is indicated by the command-
     1287              code field being set to 272 and the 'R' bit being cleared in the
     1288              Command Flags field.  It is used between the credit-control server
     1289              and the Diameter credit-control client to acknowledge a Credit-
     1290              Control-Request command.
     1291                 
     1292              Message Format
     1293                 
     1294              <Credit-Control-Answer> ::= < Diameter Header: 272, PXY >
     1295                                          < Session-Id >
     1296                                          { Result-Code }
     1297                                          { Origin-Host }
     1298                                          { Origin-Realm }
     1299                                          { Auth-Application-Id }
     1300                                          { CC-Request-Type }
     1301                                          { CC-Request-Number }
     1302                                          [ User-Name ]
     1303                                          [ CC-Session-Failover ]
     1304                                          [ CC-Sub-Session-Id ]
     1305                                          [ Acct-Multi-Session-Id ]
     1306                                          [ Origin-State-Id ]
     1307                                          [ Event-Timestamp ]
     1308                                          [ Granted-Service-Unit ]
     1309                                         *[ Multiple-Services-Credit-Control ]
     1310                                          [ Cost-Information]
     1311                                          [ Final-Unit-Indication ]
     1312                                          [ Check-Balance-Result ]
     1313                                          [ Credit-Control-Failure-Handling ]
     1314                                          [ Direct-Debiting-Failure-Handling ]
     1315                                          [ Validity-Time]
     1316                                         *[ Redirect-Host]
     1317                                          [ Redirect-Host-Usage ]
     1318                                          [ Redirect-Max-Cache-Time ]
     1319                                         *[ Proxy-Info ]
     1320                                         *[ Route-Record ]
     1321                                         *[ Failed-AVP ]
     1322                                         *[ AVP ]
     1323                                                         
     1324              */
     1325            struct dict_object * cmd;
     1326            struct dict_cmd_data data = {
     1327                272,                                    /* Code */
     1328                "Credit-Control-Answer",                /* Name */
     1329                CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */
     1330                CMD_FLAG_PROXIABLE                      /* Fixed flag values */
     1331            };
     1332            struct local_rules_definition rules[] =
     1333                {       
     1334                    { "Session-Id", RULE_FIXED_HEAD, -1, 1 },
     1335                    { "Result-Code", RULE_REQUIRED, -1, 1 },
     1336                    { "Origin-Host", RULE_REQUIRED, -1, 1 },
     1337                    { "Origin-Realm", RULE_REQUIRED, -1, 1 },
     1338                    { "Auth-Application-Id", RULE_REQUIRED, -1, 1 },
     1339                    { "CC-Request-Type", RULE_REQUIRED, -1, 1 },
     1340                    { "CC-Request-Number", RULE_REQUIRED, -1, 1 },
     1341                    { "User-Name", RULE_OPTIONAL, -1, 1 },
     1342                    { "CC-Session-Failover", RULE_OPTIONAL, -1, 1 },
     1343                    { "CC-Sub-Session-Id", RULE_OPTIONAL, -1, 1 },
     1344                    { "Acct-Multi-Session-Id", RULE_OPTIONAL, -1, 1 },
     1345                    { "Origin-State-Id", RULE_OPTIONAL, -1, 1 },
     1346                    { "Event-Timestamp", RULE_OPTIONAL, -1, 1 },
     1347                    { "Granted-Service-Unit", RULE_OPTIONAL, -1, 1 },
     1348                    { "Multiple-Services-Credit-Control", RULE_OPTIONAL, -1, -1 },
     1349                    { "Cost-Information", RULE_OPTIONAL, -1, 1 },
     1350                    { "Final-Unit-Indication", RULE_OPTIONAL, -1, 1 },
     1351                    { "Check-Balance-Result", RULE_OPTIONAL, -1, 1 },
     1352                    { "Credit-Control-Failure-Handling", RULE_OPTIONAL, -1, 1 },
     1353                    { "Direct-Debiting-Failure-Handling", RULE_OPTIONAL, -1, 1 },
     1354                    { "Validity-Time", RULE_OPTIONAL, -1, 1 },
     1355                    { "Redirect-Host", RULE_OPTIONAL, -1, -1 },
     1356                    { "Redirect-Host-Usage", RULE_OPTIONAL, -1, 1 },
     1357                    { "Redirect-Max-Cache-Time", RULE_OPTIONAL, -1, 1 },
     1358                    { "Proxy-Info", RULE_OPTIONAL, -1, -1 },
     1359                    { "Route-Record", RULE_OPTIONAL, -1, -1 },
     1360                    { "Failed-AVP", RULE_OPTIONAL, -1, -1 }
     1361                    /* plus any additional AVPs { "AVP", RULE_OPTIONAL, -1, -1 } */
    12431362                };
    1244                 struct local_rules_definition rules[] =
    1245                     {    { "Session-Id", RULE_FIXED_HEAD, -1, 1 },
    1246                          { "Origin-Host", RULE_REQUIRED, -1, 1 },
    1247                          { "Origin-Realm", RULE_REQUIRED, -1, 1 },
    1248                          { "Destination-Realm", RULE_REQUIRED, -1, 1 },
    1249                          { "Auth-Application-Id", RULE_REQUIRED, -1, 1 },
    1250                          { "Service-Context-Id", RULE_REQUIRED, -1, 1 },
    1251                          { "CC-Request-Type", RULE_REQUIRED, -1, 1 },
    1252                          { "CC-Request-Number", RULE_REQUIRED, -1, 1 },
    1253                          { "Destination-Host", RULE_OPTIONAL, -1, 1 },
    1254                          { "User-Name", RULE_OPTIONAL, -1, 1 },
    1255                          { "CC-Sub-Session-Id", RULE_OPTIONAL, -1, 1 },
    1256                          { "Acct-Multi-Session-Id", RULE_OPTIONAL, -1, 1 },
    1257                          { "Origin-State-Id", RULE_OPTIONAL, -1, 1 },
    1258                          { "Event-Timestamp", RULE_OPTIONAL, -1, 1 },
    1259                          { "Subscription-Id", RULE_OPTIONAL, -1, -1 },
    1260                          { "Service-Identifier", RULE_OPTIONAL, -1, 1 },
    1261                          { "Termination-Cause", RULE_OPTIONAL, -1, 1 },
    1262                          { "Requested-Service-Unit", RULE_OPTIONAL, -1, 1 },
    1263                          { "Requested-Action", RULE_OPTIONAL, -1, 1 },
    1264                          { "Used-Service-Unit", RULE_OPTIONAL, -1, -1 },
    1265                          { "Multiple-Services-Indicator", RULE_OPTIONAL, -1, 1 },
    1266                          { "Multiple-Services-Credit-Control", RULE_OPTIONAL, -1, -1 },
    1267                          { "Service-Parameter-Info", RULE_OPTIONAL, -1, -1 },
    1268                          { "CC-Correlation-Id", RULE_OPTIONAL, -1, 1 },
    1269                          { "User-Equipment-Info", RULE_OPTIONAL, -1, 1 },
    1270                          { "Proxy-Info", RULE_OPTIONAL, -1, -1 },
    1271                          { "Route-Record", RULE_OPTIONAL, -1, -1 }
    1272                          /* plus any additional AVPs { "AVP", RULE_OPTIONAL, -1, -1 } */
    1273                     };
    1274 
    1275                 CHECK_dict_new( DICT_COMMAND, &data, dcca, &cmd);
    1276                 PARSE_loc_rules( rules, cmd );
    1277         }
    1278 
    1279         /* Credit-Control-Answer (CCA) Command */
    1280         {
    1281                 /*
    1282                   From RFC 4006:
    1283                   3.2.  Credit-Control-Answer (CCA) Command
    1284                  
    1285                      The Credit-Control-Answer message (CCA) is indicated by the command-
    1286                      code field being set to 272 and the 'R' bit being cleared in the
    1287                      Command Flags field.  It is used between the credit-control server
    1288                      and the Diameter credit-control client to acknowledge a Credit-
    1289                      Control-Request command.
    1290                  
    1291                      Message Format
    1292                  
    1293                         <Credit-Control-Answer> ::= < Diameter Header: 272, PXY >
    1294                                                     < Session-Id >
    1295                                                     { Result-Code }
    1296                                                     { Origin-Host }
    1297                                                     { Origin-Realm }
    1298                                                     { Auth-Application-Id }
    1299                                                     { CC-Request-Type }
    1300                                                     { CC-Request-Number }
    1301                                                     [ User-Name ]
    1302                                                     [ CC-Session-Failover ]
    1303                                                     [ CC-Sub-Session-Id ]
    1304                                                     [ Acct-Multi-Session-Id ]
    1305                                                     [ Origin-State-Id ]
    1306                                                     [ Event-Timestamp ]
    1307                                                     [ Granted-Service-Unit ]
    1308                                                    *[ Multiple-Services-Credit-Control ]
    1309                                                     [ Cost-Information]
    1310                                                     [ Final-Unit-Indication ]
    1311                                                     [ Check-Balance-Result ]
    1312                                                     [ Credit-Control-Failure-Handling ]
    1313                                                     [ Direct-Debiting-Failure-Handling ]
    1314                                                     [ Validity-Time]
    1315                                                    *[ Redirect-Host]
    1316                                                     [ Redirect-Host-Usage ]
    1317                                                     [ Redirect-Max-Cache-Time ]
    1318                                                    *[ Proxy-Info ]
    1319                                                    *[ Route-Record ]
    1320                                                    *[ Failed-AVP ]
    1321                                                    *[ AVP ]
    1322                  
    1323                   */
    1324                 struct dict_object * cmd;
    1325                 struct dict_cmd_data data = {
    1326                         272,                                    /* Code */
    1327                         "Credit-Control-Answer",                /* Name */
    1328                         CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */
    1329                         CMD_FLAG_PROXIABLE                      /* Fixed flag values */
    1330                 };
    1331                 struct local_rules_definition rules[] =
    1332                     {    { "Session-Id", RULE_FIXED_HEAD, -1, 1 },
    1333                          { "Result-Code", RULE_REQUIRED, -1, 1 },
    1334                          { "Origin-Host", RULE_REQUIRED, -1, 1 },
    1335                          { "Origin-Realm", RULE_REQUIRED, -1, 1 },
    1336                          { "Auth-Application-Id", RULE_REQUIRED, -1, 1 },
    1337                          { "CC-Request-Type", RULE_REQUIRED, -1, 1 },
    1338                          { "CC-Request-Number", RULE_REQUIRED, -1, 1 },
    1339                          { "User-Name", RULE_OPTIONAL, -1, 1 },
    1340                          { "CC-Session-Failover", RULE_OPTIONAL, -1, 1 },
    1341                          { "CC-Sub-Session-Id", RULE_OPTIONAL, -1, 1 },
    1342                          { "Acct-Multi-Session-Id", RULE_OPTIONAL, -1, 1 },
    1343                          { "Origin-State-Id", RULE_OPTIONAL, -1, 1 },
    1344                          { "Event-Timestamp", RULE_OPTIONAL, -1, 1 },
    1345                          { "Granted-Service-Unit", RULE_OPTIONAL, -1, 1 },
    1346                          { "Multiple-Services-Credit-Control", RULE_OPTIONAL, -1, -1 },
    1347                          { "Cost-Information", RULE_OPTIONAL, -1, 1 },
    1348                          { "Final-Unit-Indication", RULE_OPTIONAL, -1, 1 },
    1349                          { "Check-Balance-Result", RULE_OPTIONAL, -1, 1 },
    1350                          { "Credit-Control-Failure-Handling", RULE_OPTIONAL, -1, 1 },
    1351                          { "Direct-Debiting-Failure-Handling", RULE_OPTIONAL, -1, 1 },
    1352                          { "Validity-Time", RULE_OPTIONAL, -1, 1 },
    1353                          { "Redirect-Host", RULE_OPTIONAL, -1, -1 },
    1354                          { "Redirect-Host-Usage", RULE_OPTIONAL, -1, 1 },
    1355                          { "Redirect-Max-Cache-Time", RULE_OPTIONAL, -1, 1 },
    1356                          { "Proxy-Info", RULE_OPTIONAL, -1, -1 },
    1357                          { "Route-Record", RULE_OPTIONAL, -1, -1 },
    1358                          { "Failed-AVP", RULE_OPTIONAL, -1, -1 }
    1359                          /* plus any additional AVPs { "AVP", RULE_OPTIONAL, -1, -1 } */
    1360                     };
    1361 
    1362                 CHECK_dict_new( DICT_COMMAND, &data, dcca, &cmd);
    1363                 PARSE_loc_rules( rules, cmd );
    1364         }
    1365         }
    1366         TRACE_DEBUG(INFO, "Extension 'Dictionary definitions for DCCA (rfc4006)' initialized");
    1367         return 0;
     1363
     1364            CHECK_dict_new( DICT_COMMAND, &data, dcca, &cmd);
     1365            PARSE_loc_rules( rules, cmd );
     1366        }
     1367    }
     1368    TRACE_DEBUG(INFO, "Extension 'Dictionary definitions for DCCA (rfc4006)' initialized");
     1369    return 0;
    13681370}
    13691371
Note: See TracChangeset for help on using the changeset viewer.