summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLucas Castro <lucas@gnuabordo.com.br>2024-11-12 15:22:24 -0300
committerLucas Castro <lucas@gnuabordo.com.br>2024-11-12 15:22:24 -0300
commit098d08cda21c1c2c32e59e613aeb043b875b7543 (patch)
tree1788e4c3f7f457ef77c2738bcf0d02eb59df5976
parent307c1de1ee4d461c0274ea73cd3f3ad9af5b515c (diff)
debian patches updated
-rw-r--r--debian/patches/ogs-freediameter.patch2165
-rw-r--r--debian/patches/series7
2 files changed, 2169 insertions, 3 deletions
diff --git a/debian/patches/ogs-freediameter.patch b/debian/patches/ogs-freediameter.patch
new file mode 100644
index 0000000..4daa2c5
--- /dev/null
+++ b/debian/patches/ogs-freediameter.patch
@@ -0,0 +1,2165 @@
+diff --git a/.dir-locals.el b/.dir-locals.el
+deleted file mode 100644
+index 28c6034..0000000
+--- a/.dir-locals.el
++++ /dev/null
+@@ -1,5 +0,0 @@
+-;;; Directory Local Variables
+-;;; For more information see (info "(emacs) Directory Variables")
+-
+-((c-mode
+- (c-basic-offset . 8)))
+diff --git a/.hgignore b/.hgignore
+deleted file mode 100644
+index fc0bffd..0000000
+--- a/.hgignore
++++ /dev/null
+@@ -1,12 +0,0 @@
+-syntax: glob
+-*.orig
+-*.rej
+-*~
+-*.log
+-*.sum
+-.hg
+-build*
+-test.*
+-GPATH
+-GRTAGS
+-GTAGS
+diff --git a/contrib/tools/diameter-rfcs.org b/contrib/tools/diameter-rfcs.org
+new file mode 100644
+index 0000000..5d92cae
+--- /dev/null
++++ b/contrib/tools/diameter-rfcs.org
+@@ -0,0 +1,188 @@
++| Attribute Name | Code | Section | Data | MUST | MAY | SHLD NOT | MUST NOT | Encr |
++| # RFC 3588 - Diameter # | | | | | | | | |
++| Acct-Interim-Interval | 85 | 9.8.2 | Unsigned32 | M | P | | V | Y |
++| Accounting-Realtime-Required | 483 | 9.8.7 | Enumerated | M | P | | V | Y |
++| Acct-Multi-Session-Id | 50 | 9.8.5 | UTF8String | M | P | | V | Y |
++| Accounting-Record-Number | 485 | 9.8.3 | Unsigned32 | M | P | | V | Y |
++| Accounting-Record-Type | 480 | 9.8.1 | Enumerated | M | P | | V | Y |
++| Accounting-Session-Id | 44 | 9.8.4 | OctetString | M | P | | V | Y |
++| Accounting-Sub-Session-Id | 287 | 9.8.6 | Unsigned64 | M | P | | V | Y |
++| Acct-Application-Id | 259 | 6.9 | Unsigned32 | M | P | | V | N |
++| Auth-Application-Id | 258 | 6.8 | Unsigned32 | M | P | | V | N |
++| Auth-Request-Type | 274 | 8.7 | Enumerated | M | P | | V | N |
++| Authorization-Lifetime | 291 | 8.9 | Unsigned32 | M | P | | V | N |
++| Auth-Grace-Period | 276 | 8.10 | Unsigned32 | M | P | | V | N |
++| Auth-Session-State | 277 | 8.11 | Enumerated | M | P | | V | N |
++| Re-Auth-Request-Type | 285 | 8.12 | Enumerated | M | P | | V | N |
++| Class | 25 | 8.20 | OctetString | M | P | | V | Y |
++| Destination-Host | 293 | 6.5 | DiamIdent | M | P | | V | N |
++| Destination-Realm | 283 | 6.6 | DiamIdent | M | P | | V | N |
++| Disconnect-Cause | 273 | 5.4.3 | Enumerated | M | P | | V | N |
++| E2E-Sequence-AVP | 300 | 6.15 | Grouped | M | P | | V | Y |
++| Error-Message | 281 | 7.3 | UTF8String | | P | | V,M | N |
++| Error-Reporting-Host | 294 | 7.4 | DiamIdent | | P | | V,M | N |
++| Event-Timestamp | 55 | 8.21 | Time | M | P | | V | N |
++| Experimental-Result | 297 | 7.6 | Grouped | M | P | | V | N |
++| Experimental-Result-Code | 298 | 7.7 | Unsigned32 | M | P | | V | N |
++| Failed-AVP | 279 | 7.5 | Grouped | M | P | | V | N |
++| Firmware-Revision | 267 | 5.3.4 | Unsigned32 | | | | P,V,M | N |
++| Host-IP-Address | 257 | 5.3.5 | Address | M | P | | V | N |
++| Inband-Security-Id | 299 | 6.10 | Unsigned32 | M | P | | V | N |
++| Multi-Round-Time-Out | 272 | 8.19 | Unsigned32 | M | P | | V | Y |
++| Origin-Host | 264 | 6.3 | DiamIdent | M | P | | V | N |
++| Origin-Realm | 296 | 6.4 | DiamIdent | M | P | | V | N |
++| Origin-State-Id | 278 | 8.16 | Unsigned32 | M | P | | V | N |
++| Product-Name | 269 | 5.3.7 | UTF8String | | | | P,V,M | N |
++| Proxy-Host | 280 | 6.7.3 | DiamIdent | M | | | P,V | N |
++| Proxy-Info | 284 | 6.7.2 | Grouped | M | | | P,V | N |
++| Proxy-State | 33 | 6.7.4 | OctetString | M | | | P,V | N |
++| Redirect-Host | 292 | 6.12 | DiamURI | M | P | | V | N |
++| Redirect-Host-Usage | 261 | 6.13 | Enumerated | M | P | | V | N |
++| Redirect-Max-Cache-Time | 262 | 6.14 | Unsigned32 | M | P | | V | N |
++| Result-Code | 268 | 7.1 | Unsigned32 | M | P | | V | N |
++| Route-Record | 282 | 6.7.1 | DiamIdent | M | | | P,V | N |
++| Session-Id | 263 | 8.8 | UTF8String | M | P | | V | Y |
++| Session-Timeout | 27 | 8.13 | Unsigned32 | M | P | | V | N |
++| Session-Binding | 270 | 8.17 | Unsigned32 | M | P | | V | Y |
++| Session-Server-Failover | 271 | 8.18 | Enumerated | M | P | | V | Y |
++| Supported-Vendor-Id | 265 | 5.3.6 | Unsigned32 | M | P | | V | N |
++| Termination-Cause | 295 | 8.15 | Enumerated | M | P | | V | N |
++| User-Name | 1 | 8.14 | UTF8String | M | P | | V | Y |
++| Vendor-Id | 266 | 5.3.3 | Unsigned32 | M | P | | V | N |
++| Vendor-Specific-Application-Id | 260 | 6.11 | Grouped | M | P | | V | N |
++| # RFC 4005 - NAS # | | | | | | | | |
++| NAS-Port | 5 | 4.2 | Unsigned32 | M | P | | V | Y |
++| NAS-Port-Id | 87 | 4.3 | UTF8String | M | P | | V | Y |
++| NAS-Port-Type | 61 | 4.4 | Enumerated | M | P | | V | Y |
++| Called-Station-Id | 30 | 4.5 | UTF8String | M | P | | V | Y |
++| Calling-Station-Id | 31 | 4.6 | UTF8String | M | P | | V | Y |
++| Connect-Info | 77 | 4.7 | UTF8String | M | P | | V | Y |
++| Originating-Line-Info | 94 | 4.8 | OctetString | | M,P | | V | Y |
++| Reply-Message | 18 | 4.9 | UTF8String | M | P | | V | Y |
++| User-Password | 2 | 5.1 | OctetString | M | P | | V | Y |
++| Password-Retry | 75 | 5.2 | Unsigned32 | M | P | | V | Y |
++| Prompt | 76 | 5.3 | Enumerated | M | P | | V | Y |
++| CHAP-Auth | 402 | 5.4 | Grouped | M | P | | V | Y |
++| CHAP-Algorithm | 403 | 5.5 | Enumerated | M | P | | V | Y |
++| CHAP-Ident | 404 | 5.6 | OctetString | M | P | | V | Y |
++| CHAP-Response | 405 | 5.7 | OctetString | M | P | | V | Y |
++| CHAP-Challenge | 60 | 5.8 | OctetString | M | P | | V | Y |
++| ARAP-Password | 70 | 5.9 | OctetString | M | P | | V | Y |
++| ARAP-Challenge-Response | 84 | 5.10 | OctetString | M | P | | V | Y |
++| ARAP-Security | 73 | 5.11 | Unsigned32 | M | P | | V | Y |
++| ARAP-Security-Data | 74 | 5.12 | OctetString | M | P | | V | Y |
++| Service-Type | 6 | 6.1 | Enumerated | M | P | | V | Y |
++| Callback-Number | 19 | 6.2 | UTF8String | M | P | | V | Y |
++| Callback-Id | 20 | 6.3 | UTF8String | M | P | | V | Y |
++| Idle-Timeout | 28 | 6.4 | Unsigned32 | M | P | | V | Y |
++| Port-Limit | 62 | 6.5 | Unsigned32 | M | P | | V | Y |
++| NAS-Filter-Rule | 400 | 6.6 | IPFltrRule | M | P | | V | Y |
++| Filter-Id | 11 | 6.7 | UTF8String | M | P | | V | Y |
++| Configuration-Token | 78 | 6.8 | OctetString | M | | | P,V | |
++| QoS-Filter-Rule | 407 | 6.9 | QoSFltrRule | | | | | |
++| Framed-Protocol | 7 | 6.10.1 | Enumerated | M | P | | V | Y |
++| Framed-Routing | 10 | 6.10.2 | Enumerated | M | P | | V | Y |
++| Framed-MTU | 12 | 6.10.3 | Unsigned32 | M | P | | V | Y |
++| Framed-Compression | 13 | 6.10.4 | Enumerated | M | P | | V | Y |
++| Framed-IP-Address | 8 | 6.11.1 | OctetString | M | P | | V | Y |
++| Framed-IP-Netmask | 9 | 6.11.2 | OctetString | M | P | | V | Y |
++| Framed-Route | 22 | 6.11.3 | UTF8String | M | P | | V | Y |
++| Framed-Pool | 88 | 6.11.4 | OctetString | M | P | | V | Y |
++| Framed-Interface-Id | 96 | 6.11.5 | Unsigned64 | M | P | | V | Y |
++| Framed-IPv6-Prefix | 97 | 6.11.6 | OctetString | M | P | | V | Y |
++| Framed-IPv6-Route | 99 | 6.11.7 | UTF8String | M | P | | V | Y |
++| Framed-IPv6-Pool | 100 | 6.11.8 | OctetString | M | P | | V | Y |
++| Framed-IPX-Network | 23 | 6.12.1 | UTF8String | M | P | | V | Y |
++| Framed-Appletalk-Link | 37 | 6.13.1 | Unsigned32 | M | P | | V | Y |
++| Framed-Appletalk-Network | 38 | 6.13.2 | Unsigned32 | M | P | | V | Y |
++| Framed-Appletalk-Zone | 39 | 6.13.3 | OctetString | M | P | | V | Y |
++| ARAP-Features | 71 | 6.14.1 | OctetString | M | P | | V | Y |
++| ARAP-Zone-Access | 72 | 6.14.2 | Enumerated | M | P | | V | Y |
++| Login-IP-Host | 14 | 6.15.1 | OctetString | M | P | | V | Y |
++| Login-IPv6-Host | 98 | 6.15.2 | OctetString | M | P | | V | Y |
++| Login-Service | 15 | 6.15.3 | Enumerated | M | P | | V | Y |
++| Login-TCP-Port | 16 | 6.16.1 | Unsigned32 | M | P | | V | Y |
++| Login-LAT-Service | 34 | 6.17.1 | OctetString | M | P | | V | Y |
++| Login-LAT-Node | 35 | 6.17.2 | OctetString | M | P | | V | Y |
++| Login-LAT-Group | 36 | 6.17.3 | OctetString | M | P | | V | Y |
++| Login-LAT-Port | 63 | 6.17.4 | OctetString | M | P | | V | Y |
++| Tunneling | 401 | 7.1 | Grouped | M | P | | V | N |
++| Tunnel-Type | 64 | 7.2 | Enumerated | M | P | | V | Y |
++| Tunnel-Medium-Type | 65 | 7.3 | Enumerated | M | P | | V | Y |
++| Tunnel-Client-Endpoint | 66 | 7.4 | UTF8String | M | P | | V | Y |
++| Tunnel-Server-Endpoint | 67 | 7.5 | UTF8String | M | P | | V | Y |
++| Tunnel-Password | 69 | 7.6 | OctetString | M | P | | V | Y |
++| Tunnel-Private-Group-Id | 81 | 7.7 | OctetString | M | P | | V | Y |
++| Tunnel-Assignment-Id | 82 | 7.8 | OctetString | M | P | | V | Y |
++| Tunnel-Preference | 83 | 7.9 | Unsigned32 | M | P | | V | Y |
++| Tunnel-Client-Auth-Id | 90 | 7.10 | UTF8String | M | P | | V | Y |
++| Tunnel-Server-Auth-Id | 91 | 7.11 | UTF8String | M | P | | V | Y |
++| Accounting-Input-Octets | 363 | 8.1 | Unsigned64 | M | P | | V | Y |
++| Accounting-Output-Octets | 364 | 8.2 | Unsigned64 | M | P | | V | Y |
++| Accounting-Input-Packets | 365 | 8.3 | Unsigned64 | M | P | | V | Y |
++| Accounting-Output-Packets | 366 | 8.4 | Unsigned64 | M | P | | V | Y |
++| Acct-Session-Time | 46 | 8.5 | Unsigned32 | M | P | | V | Y |
++| Acct-Authentic | 45 | 8.6 | Enumerated | M | P | | V | Y |
++| Acounting-Auth-Method | 406 | 8.7 | Enumerated | M | P | | V | Y |
++| Acct-Delay-Time | 41 | 8.8 | Unsigned32 | M | P | | V | Y |
++| Acct-Link-Count | 51 | 8.9 | Unsigned32 | M | P | | V | Y |
++| Acct-Tunnel-Connection | 68 | 8.10 | OctetString | M | P | | V | Y |
++| Acct-Tunnel-Packets-Lost | 86 | 8.11 | Unsigned32 | M | P | | V | Y |
++| NAS-Identifier | 32 | 9.3.1 | UTF8String | M | P | | V | Y |
++| NAS-IP-Address | 4 | 9.3.2 | OctetString | M | P | | V | Y |
++| NAS-IPv6-Address | 95 | 9.3.3 | OctetString | M | P | | V | Y |
++| State | 24 | 9.3.4 | OctetString | M | P | | V | Y |
++| Termination-Cause | 295 | 9.3.5 | Enumerated | M | P | | V | Y |
++| Origin-AAA-Protocol | 408 | 9.3.6 | Enumerated | M | P | | V | Y |
++| # RFC 4006 - DCCA # | | | | | | | | |
++| CC-Correlation-Id | 411 | 8.1 | OctetString | | P,M | | V | Y |
++| CC-Input-Octets | 412 | 8.24 | Unsigned64 | M | P | | V | Y |
++| CC-Money | 413 | 8.22 | Grouped | M | P | | V | Y |
++| CC-Output-Octets | 414 | 8.25 | Unsigned64 | M | P | | V | Y |
++| CC-Request-Number | 415 | 8.2 | Unsigned32 | M | P | | V | Y |
++| CC-Request-Type | 416 | 8.3 | Enumerated | M | P | | V | Y |
++| CC-Service-Specific-Units | 417 | 8.26 | Unsigned64 | M | P | | V | Y |
++| CC-Session-Failover | 418 | 8.4 | Enumerated | M | P | | V | Y |
++| CC-Sub-Session-Id | 419 | 8.5 | Unsigned64 | M | P | | V | Y |
++| CC-Time | 420 | 8.21 | Unsigned32 | M | P | | V | Y |
++| CC-Total-Octets | 421 | 8.23 | Unsigned64 | M | P | | V | Y |
++| CC-Unit-Type | 454 | 8.32 | Enumerated | M | P | | V | Y |
++| Check-Balance-Result | 422 | 8.6 | Enumerated | M | P | | V | Y |
++| Cost-Information | 423 | 8.7 | Grouped | M | P | | V | Y |
++| Cost-Unit | 424 | 8.12 | UTF8String | M | P | | V | Y |
++| Credit-Control | 426 | 8.13 | Enumerated | M | P | | V | Y |
++| Credit-Control-Failure-Handling | 427 | 8.14 | Enumerated | M | P | | V | Y |
++| Currency-Code | 425 | 8.11 | Unsigned32 | M | P | | V | Y |
++| Direct-Debiting-Failure-Handling | 428 | 8.15 | Enumerated | M | P | | V | Y |
++| Exponent | 429 | 8.9 | Integer32 | M | P | | V | Y |
++| Final-Unit-Action | 449 | 8.35 | Enumerated | M | P | | V | Y |
++| Final-Unit-Indication | 430 | 8.34 | Grouped | M | P | | V | Y |
++| Granted-Service-Unit | 431 | 8.17 | Grouped | M | P | | V | Y |
++| G-S-U-Pool-Identifier | 453 | 8.31 | Unsigned32 | M | P | | V | Y |
++| G-S-U-Pool-Reference | 457 | 8.30 | Grouped | M | P | | V | Y |
++| Multiple-Services-Credit-Control | 456 | 8.16 | Grouped | M | P | | V | Y |
++| Multiple-Services-Indicator | 455 | 8.40 | Enumerated | M | P | | V | Y |
++| Rating-Group | 432 | 8.29 | Unsigned32 | M | P | | V | Y |
++| Redirect-Address-Type | 433 | 8.38 | Enumerated | M | P | | V | Y |
++| Redirect-Server | 434 | 8.37 | Grouped | M | P | | V | Y |
++| Redirect-Server-Address | 435 | 8.39 | UTF8String | M | P | | V | Y |
++| Requested-Action | 436 | 8.41 | Enumerated | M | P | | V | Y |
++| Requested-Service-Unit | 437 | 8.18 | Grouped | M | P | | V | Y |
++| Restriction-Filter-Rule | 438 | 8.36 | IPFiltrRule | M | P | | V | Y |
++| Service-Context-Id | 461 | 8.42 | UTF8String | M | P | | V | Y |
++| Service-Identifier | 439 | 8.28 | Unsigned32 | M | P | | V | Y |
++| Service-Parameter-Info | 440 | 8.43 | Grouped | | P,M | | V | Y |
++| Service-Parameter-Type | 441 | 8.44 | Unsigned32 | | P,M | | V | Y |
++| Service-Parameter-Value | 442 | 8.45 | OctetString | | P,M | | V | Y |
++| Subscription-Id | 443 | 8.46 | Grouped | M | P | | V | Y |
++| Subscription-Id-Data | 444 | 8.48 | UTF8String | M | P | | V | Y |
++| Subscription-Id-Type | 450 | 8.47 | Enumerated | M | P | | V | Y |
++| Tariff-Change-Usage | 452 | 8.27 | Enumerated | M | P | | V | Y |
++| Tariff-Time-Change | 451 | 8.20 | Time | M | P | | V | Y |
++| Unit-Value | 445 | 8.8 | Grouped | M | P | | V | Y |
++| Used-Service-Unit | 446 | 8.19 | Grouped | M | P | | V | Y |
++| User-Equipment-Info | 458 | 8.49 | Grouped | | P,M | | V | Y |
++| User-Equipment-Info-Type | 459 | 8.50 | Enumerated | | P,M | | V | Y |
++| User-Equipment-Info-Value | 460 | 8.51 | OctetString | | P,M | | V | Y |
++| Value-Digits | 447 | 8.10 | Integer64 | M | P | | V | Y |
++| Validity-Time | 448 | 8.33 | Unsigned32 | M | P | | V | Y |
+diff --git a/extensions/acl_wl/aw_conf.y b/extensions/acl_wl/aw_conf.y
+index 3825aa2..43255cb 100644
+--- a/extensions/acl_wl/aw_conf.y
++++ b/extensions/acl_wl/aw_conf.y
+@@ -39,14 +39,14 @@
+
+ /* For development only : */
+ %debug
+-%error-verbose
++%define parse.error verbose
+
+ /* The parser receives the configuration file filename as parameter */
+ %parse-param {char * conffile}
+
+ /* Keep track of location */
+ %locations
+-%pure-parser
++%define api.pure
+
+ %{
+ #include "acl_wl.h"
+diff --git a/extensions/acl_wl/meson.build b/extensions/acl_wl/meson.build
+new file mode 100644
+index 0000000..6619ec6
+--- /dev/null
++++ b/extensions/acl_wl/meson.build
+@@ -0,0 +1,21 @@
++lgen = generator(flex,
++ output : 'lex.@BASENAME@.c',
++ arguments : ['-p', '-Cem', '-Paw_conf', '-o', '@OUTPUT@', '@INPUT@'])
++lfiles = lgen.process('aw_conf.l')
++
++pgen = generator(bison,
++ output : ['@BASENAME@.tab.c', '@BASENAME@.tab.h'],
++ arguments : ['-p', 'aw_conf', '-d',
++ '@INPUT@', '--defines=@OUTPUT1@', '--output=@OUTPUT0@'])
++pfiles = pgen.process('aw_conf.y')
++
++shared_module('acl_wl',
++ sources : [lfiles, pfiles, files(
++ 'acl_wl.c',
++ 'aw_tree.c')],
++ include_directories : freeDiameter_includes,
++ dependencies : libfdcore_dep,
++ name_prefix : '',
++ name_suffix : 'fdx',
++ install : true,
++ install_dir : freeDiameter_extensionsdir)
+diff --git a/extensions/dict_dcca/dict_dcca.c b/extensions/dict_dcca/dict_dcca.c
+index 5d94603..8ab5a97 100644
+--- a/extensions/dict_dcca/dict_dcca.c
++++ b/extensions/dict_dcca/dict_dcca.c
+@@ -69,11 +69,16 @@ static int dict_dcca_entry(char * conffile)
+
+ /* Applications section */
+ {
+- /* DCCA */
+- {
+- struct dict_application_data data = { 4, "Diameter Credit Control Application" };
+- CHECK_dict_new( DICT_APPLICATION, &data, NULL, &dcca);
+- }
++ {
++ struct dict_vendor_data vendor_data = { 10415, "3GPP" };
++ CHECK_FCT(fd_dict_new(fd_g_config->cnf_dict, DICT_VENDOR, &vendor_data, NULL, NULL));
++ }
++ {
++ struct dict_object * vendor;
++ CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_VENDOR, VENDOR_BY_NAME, "3GPP", &vendor, ENOENT));
++ struct dict_application_data app_data = { 16777238, "Gx" };
++ CHECK_FCT(fd_dict_new(fd_g_config->cnf_dict, DICT_APPLICATION, &app_data, vendor, &dcca));
++ }
+ }
+
+ /* Result codes */
+@@ -1362,7 +1367,7 @@ static int dict_dcca_entry(char * conffile)
+ { "Origin-Realm", RULE_REQUIRED, -1, 1 },
+ { "Destination-Realm", RULE_REQUIRED, -1, 1 },
+ { "Auth-Application-Id", RULE_REQUIRED, -1, 1 },
+- { "Service-Context-Id", RULE_REQUIRED, -1, 1 },
++ { "Service-Context-Id", RULE_OPTIONAL, -1, 1 },
+ { "CC-Request-Type", RULE_REQUIRED, -1, 1 },
+ { "CC-Request-Number", RULE_REQUIRED, -1, 1 },
+ { "Destination-Host", RULE_OPTIONAL, -1, 1 },
+diff --git a/extensions/dict_dcca_3gpp/dict_dcca_3gpp.c b/extensions/dict_dcca_3gpp/dict_dcca_3gpp.c
+index 3d58cf6..038e707 100644
+--- a/extensions/dict_dcca_3gpp/dict_dcca_3gpp.c
++++ b/extensions/dict_dcca_3gpp/dict_dcca_3gpp.c
+@@ -153,10 +153,6 @@ static int dict_dcca_3gpp_entry(char * conffile)
+
+ {
+ /* Create the vendors */
+- {
+- struct dict_vendor_data vendor_data = { 10415, "3GPP" };
+- CHECK_FCT(fd_dict_new(fd_g_config->cnf_dict, DICT_VENDOR, &vendor_data, NULL, NULL));
+- }
+ {
+ struct dict_vendor_data vendor_data = { 5535, "3GPP2" };
+ CHECK_FCT(fd_dict_new(fd_g_config->cnf_dict, DICT_VENDOR, &vendor_data, NULL, NULL));
+diff --git a/extensions/dict_dcca_3gpp/dict_dcca_3gpp.org b/extensions/dict_dcca_3gpp/dict_dcca_3gpp.org
+new file mode 100644
+index 0000000..90a2b70
+--- /dev/null
++++ b/extensions/dict_dcca_3gpp/dict_dcca_3gpp.org
+@@ -0,0 +1,785 @@
++| Attribute Name | Code | Section defined | Value Type | MUST | MAY | SHLD NOT | MUST NOT | Encr |
++| # 3GPP 29.061-c00 (12.0.0 2012.12.20) | | | | | | | | |
++| # 3GPP 29.061 is not very clear and self-inconsistent about M | | | | | | | | |
++| # for this reason, other sources are assumed more trustworthy | | | | | | | | |
++| # M inconsistently specified | | | | | | | | |
++| 3GPP-IMSI | 1 | 16.4.7 | UTF8String | M,V | P | | | |
++| # 29.061 says OctetString; dumps say UInt32; manually changed | | | | | | | | |
++| # 29.061 says MUST NOT M; dumps say MUST | | | | | | | | |
++| 3GPP-Charging-Id | 2 | 16.4.7 | Unsigned32 | M,V | P | | | |
++| # 29.061 says MUST NOT M; dumps say MUST | | | | | | | | |
++| 3GPP-PDP-Type | 3 | 16.4.7 | Enumerated | M,V | P | | | |
++| 3GPP-CG-Address | 4 | 16.4.7 | OctetString | V | P | | M | |
++| # 29.061 says MUST NOT M; old contrib/3gpp says MUST | | | | | | | | |
++| 3GPP-GPRS-Negotiated-QoS-Profile | 5 | 16.4.7 | UTF8String | M,V | P | | | |
++| # M inconsistently specified; old contrib/3gg says MUST NOT | | | | | | | | |
++| 3GPP-SGSN-Address | 6 | 16.4.7 | OctetString | V | P | | M | |
++| 3GPP-GGSN-Address | 7 | 16.4.7 | OctetString | V | P | | M | |
++| # 29.061 says MUST NOT M; dumps say MUST | | | | | | | | |
++| 3GPP-IMSI-MCC-MNC | 8 | 16.4.7 | UTF8String | M,V | P | | | |
++| # 29.061 says MUST NOT M; old contrib/3gpp says MUST | | | | | | | | |
++| 3GPP-GGSN-MCC-MNC | 9 | 16.4.7 | UTF8String | M,V | P | | | |
++| # 29.061 says MUST NOT M; old contrib/3gpp says MUST | | | | | | | | |
++| 3GPP-NSAPI | 10 | 16.4.7 | OctetString | M,V | P | | | |
++| # added manually, missing in AVP table | | | | | | | | |
++| 3GPP-Session-Stop-Indicator | 11 | 16.4.7 | OctetString | V | P | | M | |
++| # 29.061 says MUST NOT M; old contrib/3gpp says MUST | | | | | | | | |
++| 3GPP-Selection-Mode | 12 | 16.4.7 | UTF8String | M,V | P | | | |
++| # 29.061 says MUST NOT M; old contrib/3gpp says MUST | | | | | | | | |
++| 3GPP-Charging-Characteristics | 13 | 16.4.7 | UTF8String | M,V | P | | | |
++| # 29.061 says MUST NOT M; old contrib/3gpp says MUST | | | | | | | | |
++| 3GPP-CG-IPv6-Address | 14 | 16.4.7 | OctetString | M,V | P | | | |
++| # M inconsistently specified | | | | | | | | |
++| # 29.061 says MUST NOT M; old contrib/3gpp says MUST | | | | | | | | |
++| 3GPP-SGSN-IPv6-Address | 15 | 16.4.7 | OctetString | M,V | P | | | |
++| # 29.061 says MUST NOT M; old contrib/3gpp says MUST | | | | | | | | |
++| 3GPP-GGSN-IPv6-Address | 16 | 16.4.7 | OctetString | M,V | P | | | |
++| # 29.061 says MUST NOT M; old contrib/3gpp says MUST | | | | | | | | |
++| 3GPP-IPv6-DNS-Servers | 17 | 16.4.7 | OctetString | M,V | P | | | |
++| # 29.061 says MUST NOT M; old contrib/3gpp says MUST | | | | | | | | |
++| 3GPP-SGSN-MCC-MNC | 18 | 16.4.7 | UTF8String | M,V | P | | | |
++| # M inconsistently specified | | | | | | | | |
++| 3GPP-IMEISV | 20 | 16.4.7 | OctetString | M,V | P | | | |
++| # M inconsistently specified | | | | | | | | |
++| 3GPP-RAT-Type | 21 | 16.4.7 | OctetString | M,V | P | | | |
++| # M inconsistently specified | | | | | | | | |
++| 3GPP-User-Location-Info | 22 | 16.4.7 | OctetString | M,V | P | | | |
++| # M inconsistently specified | | | | | | | | |
++| 3GPP-MS-TimeZone | 23 | 16.4.7 | OctetString | M,V | P | | | |
++| 3GPP-CAMEL-Charging-Info | 24 | 16.4.7 | OctetString | V | P | | M | |
++| 3GPP-Packet-Filter | 25 | 16.4.7 | OctetString | V | P | | M | |
++| 3GPP-Negotiated-DSCP | 26 | 16.4.7 | OctetString | V | P | | M | |
++| 3GPP-Allocate-IP-Type | 27 | 16.4.7 | OctetString | V | P | | M | |
++| # added manually, missing in AVP table | | | | | | | | |
++| External-Identifier | 28 | 16.4.7 | OctetString | V | P | | M | |
++| TMGI | 900 | 17.07.02 | OctetString | M,V | P | | | |
++| Required-MBMS-Bearer-Capabilities | 901 | 17.07.03 | UTF8String | M,V | P | | | |
++| MBMS-StartStop-Indication | 902 | 17.07.05 | Enumerated | M,V | P | | | |
++| MBMS-Service-Area | 903 | 17.07.06 | OctetString | M,V | P | | | |
++| MBMS-Session-Duration | 904 | 17.07.07 | OctetString | M,V | P | | | |
++| Alternative-APN | 905 | 17.07.08 | UTF8String | M,V | P | | | |
++| MBMS-Service-Type | 906 | 17.07.09 | Enumerated | M,V | P | | | |
++| MBMS-2G-3G-Indicator | 907 | 17.07.10 | Enumerated | M,V | P | | | |
++| MBMS-Session-Identity | 908 | 17.07.11 | OctetString | M,V | P | | | |
++| RAI | 909 | 17.07.12 | UTF8String | M,V | P | | | |
++| Additional-MBMS-Trace-Info | 910 | 17.07.13 | OctetString | M,V | P | | | |
++| MBMS-Time-To-Data-Transfer | 911 | 17.07.14 | OctetString | M,V | P | | | |
++| MBMS-Session-Repetition-Number | 912 | 17.07.15 | OctetString | M,V | P | | | |
++| MBMS-Required-QoS | 913 | 17.07.16 | UTF8String | M,V | P | | | |
++| MBMS-Counting-Information | 914 | 17.07.17 | Enumerated | M,V | P | | | |
++| MBMS-User-Data-Mode-Indication | 915 | 17.07.18 | Enumerated | M,V | P | | | |
++| MBMS-GGSN-Address | 916 | 17.07.19 | OctetString | M,V | P | | | |
++| MBMS-GGSN-IPv6-Address | 917 | 17.07.20 | OctetString | M,V | P | | | |
++| MBMS-BMSC-SSM-IP-Address | 918 | 17.07.21 | OctetString | M,V | P | | | |
++| MBMS-BMSC-SSM-IPv6-Address | 919 | 17.07.22 | OctetString | M,V | P | | | |
++| MBMS-Flow-Identifier | 920 | 17.7.23 | OctetString | M,V | P | | | |
++| CN-IP-Multicast-Distribution | 921 | 17.7.24 | Enumerated | M,V | P | | | |
++| MBMS-HC-Indicator | 922 | 17.7.25 | Enumerated | M,V | P | | | |
++| # 3GPP 29.140-700 (7.0.0 2007.07.05) | | | | | | | | |
++| Served-User-Identity | 1100 | 6.3.1 | Grouped | M,V | | | | N |
++| # reuses: MSISDN | 701 | 6.3.2 | OctetString | M,V | | | | N |
++| VASP-ID | 1101 | 6.3.3 | UTF8String | M,V | | | | N |
++| VAS-ID | 1102 | 6.3.4 | UTF8String | M,V | | | | N |
++| Trigger-Event | 1103 | 6.3.5 | Enumerated | M,V | | | | N |
++| # reuses: 3GPP-IMSI | 1 | 6.3.6 | UTF8String | M,V | | | | N |
++| Sender-Address | 1104 | 6.3.7 | UTF8String | M,V | | | | N |
++| Initial-Recipient-Address | 1105 | 6.3.8 | Grouped | M,V | | | | N |
++| Result-Recipient-Address | 1106 | 6.3.9 | Grouped | M,V | | | | N |
++| # conflicts with one in (more common) 32.329 | | | | | | | | |
++| Sequence-Number-29.140 | 1107 | 6.3.10 | Unsigned32 | M,V | | | | N |
++| # conflicts with one in (more common) 32.299 | | | | | | | | |
++| Recipient-Address-29.140 | 1108 | 6.3.11 | UTF8String | M,V | | | | N |
++| Routeing-Address | 1109 | 6.3.12 | UTF8String | M,V | | | | N |
++| Originating-Interface | 1110 | 6.3.13 | Enumerated | M,V | | | | N |
++| Delivery-Report | 1111 | 6.3.14 | Enumerated | M,V | | | | N |
++| Read-Reply | 1112 | 6.3.15 | Enumerated | M,V | | | | N |
++| Sender-Visibility | 1113 | 6.3.16 | Enumerated | M,V | | | | N |
++| Service-Key | 1114 | 6.3.17 | UTF8String | M,V | | | | N |
++| Billing-Information | 1115 | 6.3.18 | UTF8String | M,V | | | | N |
++| # conflicts with one in (more common) 32.299 | | | | | | | | |
++| Status-29.140 | 1116 | 6.3.19 | Grouped | M,V | | | | N |
++| Status-Code | 1117 | 6.3.20 | UTF8String | M,V | | | | N |
++| Status-Text | 1118 | 6.3.21 | UTF8String | M,V | | | | N |
++| Routeing-Address-Resolution | 1119 | 6.3.22 | Enumerated | M,V | | | | N |
++| # 3GPP 29.173-c00 (12.0.0 2013.03.13) | | | | | | | | |
++| LMSI | 2400 | 6.4.2 | OctetString | M,V | | | | N |
++| Serving-Node | 2401 | 6.4.3 | Grouped | M,V | | | | N |
++| MME-Name | 2402 | 6.4.4 | DiameterIdentity | M,V | | | | N |
++| MSC-Number | 2403 | 6.4.5 | OctetString | M,V | | | | N |
++| LCS-Capabilities-Sets | 2404 | 6.4.6 | Unsigned32 | M,V | | | | N |
++| GMLC-Address | 2405 | 6.4.7 | Address | M,V | | | | N |
++| Additional-Serving-Node | 2406 | 6.4.8 | Grouped | M,V | | | | N |
++| PPR-Address | 2407 | 6.4.9 | Address | M,V | | | | N |
++| MME-Realm | 2408 | 6.4.12 | DiameterIdentity | V | | | M | N |
++| SGSN-Name | 2409 | 6.4.13 | DiameterIdentity | V | | | M | N |
++| SGSN-Realm | 2410 | 6.4.14 | DiameterIdentity | V | | | M | N |
++| # 3GPP 29.210-670 (6.7.0 2006-12-18) | | | | | | | | |
++| PDP-Session-Operation | 1015 | 5.2.21 | Enumerated | M,V | P | | | Y |
++| # 3GPP 29.212-c00 (12.0.0 2013.03.15) | | | | | | | | |
++| # Gx-specific | | | | | | | | |
++| ADC-Revalidation-Time | 2801 | 5.3.93 | Time | V | P | | M | Y |
++| ADC-Rule-Install | 1092 | 5.3.85 | Grouped | V | P | | M | Y |
++| ADC-Rule-Remove | 1093 | 5.3.86 | Grouped | V | P | | M | Y |
++| ADC-Rule-Definition | 1094 | 5.3.87 | Grouped | V | P | | M | Y |
++| ADC-Rule-Base-Name | 1095 | 5.3.88 | UTF8String | V | P | | M | Y |
++| ADC-Rule-Name | 1096 | 5.3.89 | OctetString | V | P | | M | Y |
++| ADC-Rule-Report | 1097 | 5.3.90 | Grouped | V | P | | M | Y |
++| Application-Detection-Information | 1098 | 5.3.91 | Grouped | V | P | | M | Y |
++| Access-Network-Charging-Identifier-Gx | 1022 | 5.3.22 | Grouped | M,V | P | | | Y |
++| Allocation-Retention-Priority | 1034 | 5.3.32 | Grouped | V | P | | M | Y |
++| AN-GW-Address | 1050 | 5.3.49 | Address | V | P | | M | Y |
++| APN-Aggregate-Max-Bitrate-DL | 1040 | 5.3.39 | Unsigned32 | V | P | | M | Y |
++| APN-Aggregate-Max-Bitrate-UL | 1041 | 5.3.40 | Unsigned32 | V | P | | M | Y |
++| Bearer-Control-Mode | 1023 | 5.3.23 | Enumerated | M,V | P | | | Y |
++| Bearer-Identifier | 1020 | 5.3.20 | OctetString | M,V | P | | | Y |
++| Bearer-Operation | 1021 | 5.3.21 | Enumerated | M,V | P | | | Y |
++| Bearer-Usage | 1000 | 5.3.1 | Enumerated | M,V | P | | | Y |
++| Charging-Rule-Install | 1001 | 5.3.2 | Grouped | M,V | P | | | Y |
++| Charging-Rule-Remove | 1002 | 5.3.3 | Grouped | M,V | P | | | Y |
++| Charging-Rule-Definition | 1003 | 5.3.4 | Grouped | M,V | P | | | Y |
++| Charging-Rule-Base-Name | 1004 | 5.3.5 | UTF8String | M,V | P | | | Y |
++| Charging-Rule-Name | 1005 | 5.3.6 | OctetString | M,V | P | | | Y |
++| Charging-Rule-Report | 1018 | 5.3.18 | Grouped | M,V | P | | | Y |
++| Charging-Correlation-Indicator | 1073 | 5.3.67 | Enumerated | V | P | | M | Y |
++| CoA-IP-Address | 1035 | 5.3.33 | Address | V | P | | M | Y |
++| CoA-Information | 1039 | 5.3.37 | Grouped | V | P | | M | Y |
++| CSG-Information-Reporting | 1071 | 5.3.64 | Enumerated | V | P | | M | Y |
++| Default-EPS-Bearer-QoS | 1049 | 5.3.48 | Grouped | V | P | | M | Y |
++| Event-Report-Indication | 1033 | 5.3.30 | Grouped | V | P | | M | Y |
++| Event-Trigger | 1006 | 5.3.7 | Enumerated | M,V | P | | | Y |
++| Flow-Direction | 1080 | 5.3.65 | Enumerated | V | P | | M | Y |
++| Flow-Information | 1058 | 5.3.53 | Grouped | V | P | | M | Y |
++| Flow-Label | 1057 | 5.3.52 | OctetString | V | P | | M | Y |
++| IP-CAN-Type | 1027 | 5.3.27 | Enumerated | M,V | P | | | Y |
++| Guaranteed-Bitrate-DL | 1025 | 5.3.25 | Unsigned32 | M,V | P | | | Y |
++| Guaranteed-Bitrate-UL | 1026 | 5.3.26 | Unsigned32 | M,V | P | | | Y |
++| HeNB-Local-IP-Address | 2804 | 5.3.95 | Address | V | P | | M | Y |
++| Metering-Method | 1007 | 5.3.8 | Enumerated | M,V | P | | | Y |
++| Monitoring-Key | 1066 | 5.3.59 | OctetString | V | P | | M | Y |
++| Mute-Notification | 2809 | 5.3.98 | Enumerated | V | P | | M | Y |
++| Monitoring-Time | 2810 | 5.3.99 | Time | V | P | | M | Y |
++| Network-Request-Support | 1024 | 5.3.24 | Enumerated | M,V | P | | | Y |
++| Offline | 1008 | 5.3.9 | Enumerated | M,V | P | | | Y |
++| Online | 1009 | 5.3.10 | Enumerated | M,V | P | | | Y |
++| Packet-Filter-Content | 1059 | 5.3.54 | IPFilterRule | V | P | | M | Y |
++| Packet-Filter-Identifier | 1060 | 5.3.55 | OctetString | V | P | | M | Y |
++| Packet-Filter-Information | 1061 | 5.3.56 | Grouped | V | P | | M | Y |
++| Packet-Filter-Operation | 1062 | 5.3.57 | Enumerated | V | P | | M | Y |
++| Packet-Filter-Usage | 1072 | 5.3.66 | Enumerated | V | P | | M | Y |
++| PDN-Connection-ID | 1065 | 5.3.58 | OctetString | V | P | | | Y |
++| Precedence | 1010 | 5.3.11 | Unsigned32 | M,V | P | | | Y |
++| Pre-emption-Capability | 1047 | 5.3.46 | Enumerated | V | P | | M | Y |
++| Pre-emption-Vulnerability | 1048 | 5.3.47 | Enumerated | V | P | | M | Y |
++| Priority-Level | 1046 | 5.3.45 | Unsigned32 | V | P | | M | Y |
++| Redirect-Information | 1085 | 5.3.82 | Grouped | V | P | | M | Y |
++| Redirect-Support | 1086 | 5.3.83 | Enumerated | V | P | | M | Y |
++| Reporting-Level | 1011 | 5.3.12 | Enumerated | M,V | P | | | Y |
++| Routing-Filter | 1078 | 5.3.72 | Grouped | V | P | | M | Y |
++| Routing-IP-Address | 1079 | 5.3.73 | Address | V | P | | M | Y |
++| Routing-Rule-Definition | 1076 | 5.3.70 | Grouped | V | P | | M | Y |
++| Routing-Rule-Identifier | 1077 | 5.3.71 | OctetString | V | P | | M | Y |
++| Routing-Rule-Install | 1081 | 5.3.68 | Grouped | V | P | | M | Y |
++| Routing-Rule-Remove | 1075 | 5.3.69 | Grouped | V | P | | M | Y |
++| PCC-Rule-Status | 1019 | 5.3.19 | Enumerated | M,V | P | | | Y |
++| Session-Release-Cause | 1045 | 5.3.44 | Enumerated | M,V | P | | | Y |
++| TDF-Information | 1087 | 5.3.78 | Grouped | V | P | | M | Y |
++| TDF-Application-Identifier | 1088 | 5.3.77 | OctetString | V | P | | M | Y |
++| TDF-Application-Instance-Identifier | 2802 | 5.3.92 | OctetString | V | P | | M | Y |
++| TDF-Destination-Host | 1089 | 5.3.80 | DiameterIdentity | V | P | | M | Y |
++| TDF-Destination-Realm | 1090 | 5.3.79 | DiameterIdentity | V | P | | M | Y |
++| TDF-IP-Address | 1091 | 5.3.81 | Address | V | P | | M | Y |
++| QoS-Class-Identifier | 1028 | 5.3.17 | Enumerated | M,V | P | | | Y |
++| QoS-Information | 1016 | 5.3.16 | Grouped | M,V | P | | | Y |
++| QoS-Negotiation | 1029 | 5.3.28 | Enumerated | M,V | P | | | Y |
++| QoS-Upgrade | 1030 | 5.3.29 | Enumerated | M,V | P | | | Y |
++| PS-to-CS-Session-Continuity | 1099 | 5.3.84 | Enumerated | V | P | | | Y |
++| Resource-Allocation-Notification | 1063 | 5.3.50 | Enumerated | V | P | | M | Y |
++| Rule-Failure-Code | 1031 | 5.3.38 | Enumerated | M,V | P | | | Y |
++| Security-Parameter-Index | 1056 | 5.3.51 | OctetString | V | P | | M | Y |
++| TFT-Filter | 1012 | 5.3.13 | IPFilterRule | M,V | P | | | Y |
++| TFT-Packet-Filter-Information | 1013 | 5.3.14 | Grouped | M,V | P | | | Y |
++| ToS-Traffic-Class | 1014 | 5.3.15 | OctetString | M,V | P | | | Y |
++| Tunnel-Header-Filter | 1036 | 5.3.34 | IPFilterRule | V | P | | M | Y |
++| Tunnel-Header-Length | 1037 | 5.3.35 | Unsigned32 | V | P | | M | Y |
++| Tunnel-Information | 1038 | 5.3.36 | Grouped | V | P | | M | Y |
++| RAT-Type | 1032 | 5.3.31 | Enumerated | V | P | | M | Y |
++| Revalidation-Time | 1042 | 5.3.41 | Time | M,V | P | | | Y |
++| Rule-Activation-Time | 1043 | 5.3.42 | Time | M,V | P | | | Y |
++| UDP-Source-Port | 2806 | 5.3.97 | Unsigned32 | V | P | | M | Y |
++| UE-Local-IP-Address | 2805 | 5.3.96 | Address | V | P | | M | Y |
++| Usage-Monitoring-Information | 1067 | 5.3.60 | Grouped | V | P | | M | Y |
++| Rule-Deactivation-Time | 1044 | 5.3.43 | Time | M,V | P | | | Y |
++| Usage-Monitoring-Level | 1068 | 5.3.61 | Enumerated | V | P | | M | Y |
++| Usage-Monitoring-Report | 1069 | 5.3.62 | Enumerated | V | P | | M | Y |
++| Usage-Monitoring-Support | 1070 | 5.3.63 | Enumerated | V | P | | M | Y |
++| # Gxx-specific | | | | | | | | |
++| QoS-Rule-Install | 1051 | 5a.3.1 | Grouped | M,V | P | | | Y |
++| QoS-Rule-Remove | 1052 | 5a.3.2 | Grouped | M,V | P | | | Y |
++| QoS-Rule-Definition | 1053 | 5a.3.3 | Grouped | M,V | P | | | Y |
++| QoS-Rule-Name | 1054 | 5a.3.4 | OctetString | M,V | P | | | Y |
++| QoS-Rule-Base-Name | 1074 | 5a.3.7 | UTF8String | V | P | | M | Y |
++| QoS-Rule-Report | 1055 | 5a.3.5 | Grouped | M,V | P | | | Y |
++| Session-Linking-Indicator | 1064 | 5a.3.6 | Enumerated | M,V | P | | | Y |
++| # S15-specific | | | | | | | | |
++| CS-Service-Qos-Request-Identifier | 2807 | E.6.3.2 | OctetString | M,V | P | | | Y |
++| CS-Service-QoS-Request-Operation | 2808 | E.6.3.3 | Enumerated | M,V | P | | | Y |
++| # 3GPP 29.214-b80 (11.8.0 2013.03.15) | | | | | | | | |
++| Abort-Cause | 500 | 5.3.1 | Enumerated | M,V | P | | | Y |
++| Access-Network-Charging-Address | 501 | 5.3.2 | Address | M,V | P | | | Y |
++| Access-Network-Charging-Identifier | 502 | 5.3.3 | Grouped | M,V | P | | | Y |
++| Access-Network-Charging-Identifier-Value | 503 | 5.3.4 | OctetString | M,V | P | | | Y |
++| Acceptable-Service-Info | 526 | 5.3.24 | Grouped | M,V | P | | | Y |
++| AF-Application-Identifier | 504 | 5.3.5 | OctetString | M,V | P | | | Y |
++| AF-Charging-Identifier | 505 | 5.3.6 | OctetString | M,V | P | | | Y |
++| Application-Service-Provider-Identity | 532 | 5.3.29 | UTF8String | V | P | | M | Y |
++| Codec-Data | 524 | 5.3.7 | OctetString | M,V | P | | | Y |
++| Flow-Description | 507 | 5.3.8 | IPFilterRule | M,V | P | | | Y |
++| Flow-Number | 509 | 5.3.9 | Unsigned32 | M,V | P | | | Y |
++| Flows | 510 | 5.3.10 | Grouped | M,V | P | | | Y |
++| Flow-Status | 511 | 5.3.11 | Enumerated | M,V | P | | | Y |
++| Flow-Usage | 512 | 5.3.12 | Enumerated | M,V | P | | | Y |
++| Service-URN | 525 | 5.3.23 | OctetString | M,V | P | | | Y |
++| Specific-Action | 513 | 5.3.13 | Enumerated | M,V | P | | | Y |
++| Max-Requested-Bandwidth-DL | 515 | 5.3.14 | Unsigned32 | M,V | P | | | Y |
++| Max-Requested-Bandwidth-UL | 516 | 5.3.15 | Unsigned32 | M,V | P | | | Y |
++| Media-Component-Description | 517 | 5.3.16 | Grouped | M,V | P | | | Y |
++| Media-Component-Number | 518 | 5.3.17 | Unsigned32 | M,V | P | | | Y |
++| Media-Sub-Component | 519 | 5.3.18 | Grouped | M,V | P | | | Y |
++| Media-Type | 520 | 5.3.19 | Enumerated | M,V | P | | | Y |
++| MPS-Identifier | 528 | 5.3.30 | OctetString | V | P | | M | Y |
++| Min-Requested-Bandwidth-DL | 534 | 5.3.32 | Unsigned32 | V | P | | M | Y |
++| Min-Requested-Bandwidth-UL | 535 | 5.3.33 | Unsigned32 | V | P | | M | Y |
++| RR-Bandwidth | 521 | 5.3.20 | Unsigned32 | M,V | P | | | Y |
++| RS-Bandwidth | 522 | 5.3.21 | Unsigned32 | M,V | P | | | Y |
++| Service-Info-Status | 527 | 5.3.25 | Enumerated | M,V | P | | | Y |
++| SIP-Forking-Indication | 523 | 5.3.22 | Enumerated | M,V | P | | | Y |
++| Sponsor-Identity | 531 | 5.3.28 | UTF8String | V | P | | M | Y |
++| Sponsored-Connectivity-Data | 530 | 5.3.27 | Grouped | V | P | | M | Y |
++| AF-Signalling-Protocol | 529 | 5.3.26 | Enumerated | V | P | | M | Y |
++| Required-Access-Info | 536 | 5.3.34 | Enumerated | V | P | | M | Y |
++| Rx-Request-Type | 533 | 5.3.31 | Enumerated | V | P | | M | Y |
++| IP-Domain-Id | 537 | 5.3.35 | OctetString | V | P | | M | Y |
++| # 3GPP 29.229-b20 (11.2.0 2012.12.21) | | | | | | | | |
++| Associated-Identities | 632 | 6.3.33 | Grouped | V | | | M | N |
++| Associated-Registered-Identities | 647 | 6.3.50 | Grouped | V | | | M | N |
++| Call-ID-SIP-Header | 643 | 6.3.49.1 | OctetString | V | | | M | N |
++| Charging-Information | 618 | 6.3.19 | Grouped | M,V | | | | N |
++| Confidentiality-Key | 625 | 6.3.27 | OctetString | M,V | | | | N |
++| Contact | 641 | 6.3.48 | OctetString | V | | | M | N |
++| Deregistration-Reason | 615 | 6.3.16 | Grouped | M,V | | | | N |
++| Feature-List | 630 | 6.3.31 | Unsigned32 | V | | | M | N |
++| Feature-List-ID | 629 | 6.3.30 | Unsigned32 | V | | | M | N |
++| From-SIP-Header | 644 | 6.3.49.2 | OctetString | V | | | M | N |
++| Identity-with-Emergency-Registration | 651 | 6.3.57 | Grouped | V | | | M | N |
++| Integrity-Key | 626 | 6.3.28 | OctetString | M,V | | | | N |
++| LIA-Flags | 653 | 6.3.59 | Unsigned32 | V | | | M | N |
++| Loose-Route-Indication | 638 | 6.3.45 | Enumerated | V | | | M | N |
++| Mandatory-Capability | 604 | 6.3.5 | Unsigned32 | M,V | | | | N |
++| Multiple-Registration-Indication | 648 | 6.3.51 | Enumerated | V | | | M | N |
++| Optional-Capability | 605 | 6.3.6 | Unsigned32 | M,V | | | | N |
++| Originating-Request | 633 | 6.3.34 | Enumerated | M,V | | | | N |
++| Path | 640 | 6.3.47 | OctetString | V | | | M | N |
++| Primary-Charging-Collection-Function-Name | 621 | 6.3.22 | DiameterURI | M,V | | | | N |
++| Primary-Event-Charging-Function-Name | 619 | 6.3.20 | DiameterURI | M,V | | | | N |
++| Priviledged-Sender-Indication | 652 | 6.3.58 | Enumerated | V | | | M | N |
++| Public-Identity | 601 | 6.3.2 | UTF8String | M,V | | | | N |
++| Reason-Code | 616 | 6.3.17 | Enumerated | M,V | | | | N |
++| Reason-Info | 617 | 6.3.18 | UTF8String | M,V | | | | N |
++| Record-Route | 646 | 6.3.49.4 | OctetString | V | | | M | N |
++| Restoration-Info | 649 | 6.3.52 | Grouped | V | | | M | N |
++| SCSCF-Restoration-Info | 639 | 6.3.46 | Grouped | V | | | M | N |
++| SIP-Auth-Data-Item | 612 | 6.3.13 | Grouped | M,V | | | | N |
++| SIP-Authenticate | 609 | 6.3.10 | OctetString | M,V | | | | N |
++| SIP-Authentication-Context | 611 | 6.3.12 | OctetString | M,V | | | | N |
++| SIP-Authentication-Scheme | 608 | 6.3.9 | UTF8String | M,V | | | | N |
++| SIP-Authorization | 610 | 6.3.11 | OctetString | M,V | | | | N |
++| SIP-Digest-Authenticate | 635 | 6.3.36 | Grouped | V | | | M | N |
++| SIP-Item-Number | 613 | 6.3.14 | Unsigned32 | M,V | | | | N |
++| SIP-Number-Auth-Items | 607 | 6.3.8 | Unsigned32 | M,V | | | | N |
++| Secondary-Charging-Collection-Function-Name | 622 | 6.3.23 | DiameterURI | M,V | | | | N |
++| Secondary-Event-Charging-Function-Name | 620 | 6.3.21 | DiameterURI | M,V | | | | N |
++| Server-Assignment-Type | 614 | 6.3.15 | Enumerated | M,V | | | | N |
++| Server-Capabilities | 603 | 6.3.4 | Grouped | M,V | | | | N |
++| Server-Name | 602 | 6.3.3 | UTF8String | M,V | | | | N |
++| Session-Priority | 650 | 6.3.56 | Enumerated | V | | | M | N |
++| Subscription-Info | 642 | 6.3.49 | Grouped | V | | | M | N |
++| Supported-Applications | 631 | 6.3.32 | Grouped | V | | | M | N |
++| Supported-Features | 628 | 6.3.29 | Grouped | V | M | | | N |
++| To-SIP-Header | 645 | 6.3.49.3 | OctetString | V | | | M | N |
++| UAR-Flags | 637 | 6.3.44 | Unsigned32 | V | | | M | N |
++| User-Authorization-Type | 623 | 6.3.24 | Enumerated | M,V | | | | N |
++| User-Data | 606 | 6.3.7 | OctetString | M,V | | | | N |
++| User-Data-Already-Available | 624 | 6.3.26 | Enumerated | M,V | | | | N |
++| Visited-Network-Identifier | 600 | 6.3.1 | OctetString | M,V | | | | N |
++| Wildcarded-Public-Identity | 634 | 6.3.35 | UTF8String | V | | | M | N |
++| # 3GPP 32.299-b60 (11.6.0 2012.12.21) | | | | | | | | |
++| AF-Correlation-Information | 1276 | | Grouped | M,V | P | | | N |
++| Access-Network-Information | 1263 | | OctetString | M,V | P | | | N |
++| Access-Transfer-Information | 2709 | | Grouped | M,V | P | | | N |
++| Access-Transfer-Type | 2710 | | Enumerated | M,V | P | | | N |
++| Account-Expiration | 2309 | | Time | M,V | P | | | N |
++| Accumulated-Cost | 2052 | | Grouped | M,V | P | | | N |
++| Adaptations | 1217 | | Enumerated | M,V | P | | | N |
++| Additional-Content-Information | 1207 | | Grouped | M,V | P | | | N |
++| Additional-Type-Information | 1205 | | UTF8String | M,V | P | | | N |
++| Address-Data | 897 | | UTF8String | M,V | P | | | N |
++| Address-Domain | 898 | | Grouped | M,V | P | | | N |
++| Address-Type | 899 | | Enumerated | M,V | P | | | N |
++| Addressee-Type | 1208 | | Enumerated | M,V | P | | | N |
++| Alternate-Charged-Party-Address | 1280 | | UTF8String | M,V | P | | | N |
++| AoC-Cost-Information | 2053 | | Grouped | M,V | P | | | N |
++| AoC-Format | 2310 | | Enumerated | M,V | P | | | N |
++| AoC-Information | 2054 | | Grouped | M,V | P | | | N |
++| AoC-Request-Type | 2055 | | Enumerated | M,V | P | | | N |
++| AoC-Service | 2311 | | Grouped | M,V | P | | | N |
++| AoC-Service-Obligatory-Type | 2312 | | Enumerated | M,V | P | | | N |
++| AoC-Service-Type | 2313 | | Enumerated | M,V | P | | | N |
++| AoC-Subscription-Information | 2314 | | Grouped | M,V | P | | | N |
++| Applic-ID | 1218 | | UTF8String | M,V | P | | | N |
++| Application-Server | 836 | | UTF8String | M,V | P | | | N |
++| Application-Server-Information | 850 | | Grouped | M,V | P | | | N |
++| Application-Provided-Called-Party-Address | 837 | | UTF8String | M,V | P | | | N |
++| Associated-Party-Address | 2035 | | UTF8String | M,V | P | | | N |
++| Associated-URI | 856 | | UTF8String | M,V | P | | | N |
++| Aux-Applic-Info | 1219 | | UTF8String | M,V | P | | | N |
++| Base-Time-Interval | 1265 | | Unsigned32 | M,V | P | | | N |
++| Bearer-Service | 854 | | OctetString | M,V | P | | | N |
++| CG-Address | 846 | | Address | M,V | P | | | Y |
++| CSG-Access-Mode | 2317 | | Enumerated | M,V | P | | | N |
++| CSG-Membership-Indication | 2318 | | Enumerated | M,V | P | | | N |
++| CUG-Information | 2304 | | OctetString | M,V | P | | | N |
++| Called-Asserted-Identity | 1250 | | UTF8String | M,V | P | | | N |
++| Called-Party-Address | 832 | | UTF8String | M,V | P | | | N |
++| Calling-Party-Address | 831 | | UTF8String | M,V | P | | | N |
++| Carrier-Select-Routing-Information | 2023 | | UTF8String | M,V | P | | | N |
++| Cause-Code | 861 | | Integer32 | M,V | P | | | N |
++| Change-Condition | 2037 | | Integer32 | M,V | P | | | N |
++| Change-Time | 2038 | | Time | M,V | P | | | N |
++| Charge-Reason-Code | 2118 | | Enumerated | M,V | P | | | N |
++| Charged-Party | 857 | | UTF8String | M,V | P | | | N |
++| Charging-Characteristics-Selection-Mode | 2066 | | Enumerated | M,V | P | | | N |
++| Class-Identifier | 1214 | | Enumerated | M,V | P | | | N |
++| Client-Address | 2018 | | Address | M,V | P | | | N |
++| Content-Class | 1220 | | Enumerated | M,V | P | | | N |
++| Content-Disposition | 828 | | UTF8String | M,V | P | | | N |
++| Content-Length | 827 | | Unsigned32 | M,V | P | | | N |
++| Content-Size | 1206 | | Unsigned32 | M,V | P | | | N |
++| Content-Type | 826 | | UTF8String | M,V | P | | | N |
++| Current-Tariff | 2056 | | Grouped | M,V | P | | | N |
++| DRM-Content | 1221 | | Enumerated | M,V | P | | | N |
++| Data-Coding-Scheme | 2001 | | Integer32 | M,V | P | | | N |
++| Deferred-Location-Event-Type | 1230 | | UTF8String | M,V | P | | | N |
++| Delivery-Report-Requested | 1216 | | Enumerated | M,V | P | | | N |
++| Destination-Interface | 2002 | | Grouped | M,V | P | | | N |
++| Diagnostics | 2039 | | Integer32 | M,V | P | | | N |
++| Domain-Name | 1200 | | UTF8String | M,V | P | | | N |
++| Dynamic-Address-Flag | 2051 | | Enumerated | M,V | P | | | N |
++| Dynamic-Address-Flag-Extension | 2068 | | Enumerated | M,V | P | | | N |
++| Early-Media-Description | 1272 | | Grouped | M,V | P | | | N |
++| Envelope | 1266 | | Grouped | M,V | P | | | N |
++| Envelope-End-Time | 1267 | | Time | M,V | P | | | N |
++| Envelope-Reporting | 1268 | | Enumerated | M,V | P | | | N |
++| Envelope-Start-Time | 1269 | | Time | M,V | P | | | N |
++| Event | 825 | | UTF8String | M,V | P | | | N |
++| Event-Charging-TimeStamp | 1258 | | Time | M,V | P | | | N |
++| Event-Type | 823 | | Grouped | M,V | P | | | N |
++| Expires | 888 | | Unsigned32 | M,V | P | | | N |
++| File-Repair-Supported | 1224 | | Enumerated | M,V | P | | | Y |
++| From-Address | 2708 | | UTF8String | M,V | P | | | N |
++| GGSN-Address | 847 | | Address | M,V | P | | | N |
++| IMS-Application-Reference-Identifier | 2601 | | UTF8String | M,V | P | | | N |
++| IMS-Charging-Identifier | 841 | | UTF8String | M,V | P | | | N |
++| IMS-Communication-Service-Identifier | 1281 | | UTF8String | M,V | P | | | N |
++| IMS-Emergency-Indicator | 2322 | | Enumerated | M,V | P | | | N |
++| IMS-Information | 876 | | Grouped | M,V | P | | | N |
++| IMSI-Unauthenticated-Flag | 2308 | | Enumerated | M,V | P | | | N |
++| IP-Realm-Default-Indication | 2603 | | Enumerated | M,V | P | | | N |
++| Incoming-Trunk-Group-Id | 852 | | UTF8String | M,V | P | | | N |
++| Incremental-Cost | 2062 | | Grouped | M,V | P | | | N |
++| Initial-IMS-Charging-Identifier | 2321 | | UTF8String | M,V | P | | | N |
++| Inter-Operator-Identifier | 838 | | Grouped | M,V | P | | | N |
++| Interface-Id | 2003 | | UTF8String | M,V | P | | | N |
++| Interface-Port | 2004 | | UTF8String | M,V | P | | | N |
++| Interface-Text | 2005 | | UTF8String | M,V | P | | | N |
++| Interface-Type | 2006 | | Enumerated | M,V | P | | | N |
++| LCS-APN | 1231 | | UTF8String | M,V | P | | | N |
++| LCS-Client-Dialed-By-MS | 1233 | | UTF8String | M,V | P | | | N |
++| LCS-Client-External-ID | 1234 | | UTF8String | M,V | P | | | N |
++| LCS-Client-Id | 1232 | | Grouped | M,V | P | | | N |
++| LCS-Client-Name | 1235 | | Grouped | M,V | P | | | N |
++| LCS-Client-Type | 1241 | | Enumerated | M,V | P | | | N |
++| LCS-Data-Coding-Scheme | 1236 | | UTF8String | M,V | P | | | N |
++| LCS-Format-Indicator | 1237 | | Enumerated | M,V | P | | | N |
++| LCS-Information | 878 | | Grouped | M,V | P | | | N |
++| LCS-Name-String | 1238 | | UTF8String | M,V | P | | | N |
++| LCS-Requestor-Id | 1239 | | Grouped | M,V | P | | | N |
++| LCS-Requestor-Id-String | 1240 | | UTF8String | M,V | P | | | N |
++| Local-GW-Inserted-Indication | 2604 | | Enumerated | M,V | P | | | N |
++| Local-Sequence-Number | 2063 | | Unsigned32 | M,V | P | | | N |
++| Location-Estimate | 1242 | | OctetString | M,V | P | | | N |
++| Location-Estimate-Type | 1243 | | Enumerated | M,V | P | | | N |
++| Location-Type | 1244 | | Grouped | M,V | P | | | N |
++| Low-Balance-Indication | 2020 | | Enumerated | M,V | P | | | N |
++| Low-Priority-Indicator | 2602 | | Enumerated | M,V | P | | | N |
++| MBMS GW-Address | 2307 | | Address | M,V | P | | | N |
++| MBMS-Information | 880 | | Grouped | M,V | P | | | N |
++| MBMS-User-Service-Type | 1225 | | Enumerated | M,V | P | | | Y |
++| MM-Content-Type | 1203 | | Grouped | M,V | P | | | N |
++| MMBox-Storage-Requested | 1248 | | Enumerated | M,V | P | | | N |
++| MMS-Information | 877 | | Grouped | M,V | P | | | N |
++| MMTel-Information | 2030 | | Grouped | M,V | P | | | N |
++| MMTel-SService-Type | 2031 | | Unsigned32 | M,V | P | | | N |
++| Media-Initiator-Flag | 882 | | Enumerated | M,V | P | | | N |
++| Media-Initiator-Party | 1288 | | UTF8String | M,V | P | | | N |
++| Message-Body | 889 | | Grouped | M,V | P | | | N |
++| Message-Class | 1213 | | Grouped | M,V | P | | | N |
++| Message-ID | 1210 | | UTF8String | M,V | P | | | N |
++| Message-Size | 1212 | | Unsigned32 | M,V | P | | | N |
++| Message-Type | 1211 | | Enumerated | M,V | P | | | N |
++| NNI-Information | 2703 | | Grouped | M,V | P | | | N |
++| NNI-Type | 2704 | | Enumerated | M,V | P | | | N |
++| Neighbour-Node-Address | 2705 | | Address | M,V | P | | | N |
++| Next-Tariff | 2057 | | Grouped | M,V | P | | | N |
++| Node-Functionality | 862 | | Enumerated | M,V | P | | | N |
++| Node-Id | 2064 | | UTF8String | M,V | P | | | N |
++| Number-Of-Diversions | 2034 | | Unsigned32 | M,V | P | | | N |
++| Number-Of-Messages-Sent | 2019 | | Unsigned32 | M,V | P | | | N |
++| Number-Of-Participants | 885 | | Unsigned32 | M,V | P | | | N |
++| Number-Of-Received-Talk-Bursts | 1282 | | Unsigned32 | M,V | P | | | N |
++| Number-Of-Talk-Bursts | 1283 | | Unsigned32 | M,V | P | | | N |
++| Number-Portability-Routing-Information | 2024 | | UTF8String | M,V | P | | | N |
++| Offline-Charging | 1278 | | Grouped | M,V | P | | | N |
++| Online-Charging-Flag | 2303 | | Enumerated | M,V | P | | | N |
++| Originating-IOI | 839 | | UTF8String | M,V | P | | | N |
++| Originator | 864 | | Enumerated | M,V | P | | | N |
++| Originator-Address | 886 | | Grouped | M,V | P | | | N |
++| Originator-Interface | 2009 | | Grouped | M,V | P | | | N |
++| Originator-Received-Address | 2027 | | Grouped | M,V | P | | | N |
++| Originator-SCCP-Address | 2008 | | Address | M,V | P | | | N |
++| Outgoing-Session-Id | 2320 | | UTF8String | M,V | P | | | N |
++| Outgoing-Trunk-Group-Id | 853 | | UTF8String | M,V | P | | | N |
++| PDG-Address | 895 | | Address | M,V | P | | | N |
++| PDG-Charging-Id | 896 | | Unsigned32 | M,V | P | | | N |
++| PDN-Connection-Charging-ID | 2050 | | Unsigned32 | M,V | P | | | N |
++| PDP-Address | 1227 | | Address | M,V | P | | | Y |
++| PDP-Address-Prefix-Length | 2606 | | Unsigned32 | M,V | P | | | Y |
++| PDP-Context-Type | 1247 | | Enumerated | M,V | P | | | N |
++| PS-Append-Free-Format-Data | 867 | | Enumerated | M,V | P | | | N |
++| PS-Free-Format-Data | 866 | | OctetString | M,V | P | | | N |
++| PS-Furnish-Charging-Information | 865 | | Grouped | M,V | P | | | N |
++| PS-Information | 874 | | Grouped | M,V | P | | | N |
++| Participant-Access-Priority | 1259 | | Enumerated | M,V | P | | | N |
++| Participant-Action-Type | 2049 | | Enumerated | M,V | P | | | N |
++| Participant-Group | 1260 | | Grouped | M,V | P | | | N |
++| Participants-Involved | 887 | | UTF8String | M,V | P | | | N |
++| PoC-Change-Condition | 1261 | | Enumerated | M,V | P | | | N |
++| PoC-Change-Time | 1262 | | Time | M,V | P | | | N |
++| PoC-Controlling-Address | 858 | | UTF8String | M,V | P | | | N |
++| PoC-Event-Type | 2025 | | Enumerated | M,V | P | | | N |
++| PoC-Group-Name | 859 | | UTF8String | M,V | P | | | N |
++| PoC-Information | 879 | | Grouped | M,V | P | | | N |
++| PoC-Server-Role | 883 | | Enumerated | M,V | P | | | N |
++| PoC-Session-Id | 1229 | | UTF8String | M,V | P | | | N |
++| PoC-Session-Initiation-type | 1277 | | Enumerated | M,V | P | | | N |
++| PoC-Session-Type | 884 | | Enumerated | M,V | P | | | N |
++| PoC-User-Role | 1252 | | Grouped | M,V | P | | | N |
++| PoC-User-Role-IDs | 1253 | | UTF8String | M,V | P | | | N |
++| PoC-User-Role-info-Units | 1254 | | Enumerated | M,V | P | | | N |
++| Positioning-Data | 1245 | | UTF8String | M,V | P | | | N |
++| Preferred-AoC-Currency | 2315 | | Unsigned32 | M,V | P | | | N |
++| Priority | 1209 | | Enumerated | M,V | P | | | N |
++| Quota-Consumption-Time | 881 | | Unsigned32 | M,V | P | | | N |
++| Quota-Holding-Time | 871 | | Unsigned32 | M,V | P | | | N |
++| Rate-Element | 2058 | | Grouped | M,V | P | | | N |
++| Read-Reply-Report-Requested | 1222 | | Enumerated | M,V | P | | | N |
++| Real-Time-Tariff-Information | 2305 | | Grouped | M,V | P | | | N |
++| Received-Talk-Burst-Time | 1284 | | Unsigned32 | M,V | P | | | N |
++| Received-Talk-Burst-Volume | 1285 | | Unsigned32 | M,V | P | | | N |
++| Recipient-Address | 1201 | | Grouped | M,V | P | | | N |
++| Recipient-Info | 2026 | | Grouped | M,V | P | | | N |
++| Recipient-Received-Address | 2028 | | Grouped | M,V | P | | | N |
++| Recipient-SCCP-Address | 2010 | | Address | M,V | P | | | N |
++| Refund-Information | 2022 | | OctetString | M,V | P | | | N |
++| Relationship-Mode | 2706 | | Enumerated | M,V | P | | | N |
++| Remaining-Balance | 2021 | | Grouped | M,V | P | | | N |
++| Reply-Applic-ID | 1223 | | UTF8String | M,V | P | | | N |
++| Reply-Path-Requested | 2011 | | Enumerated | M,V | P | | | N |
++| Reporting-Reason | 872 | | Enumerated | M,V | P | | | N |
++| Requested-Party-Address | 1251 | | UTF8String | M,V | P | | | N |
++| Role-Of-Node | 829 | | Enumerated | M,V | P | | | N |
++| SDP-Answer-Timestamp | 1275 | | Time | M,V | P | | | N |
++| SDP-Media-Component | 843 | | Grouped | M,V | P | | | N |
++| SDP-Media-Description | 845 | | UTF8String | M,V | P | | | N |
++| SDP-Media-Name | 844 | | UTF8String | M,V | P | | | N |
++| SDP-Offer-Timestamp | 1274 | | Time | M,V | P | | | N |
++| SDP-Session-Description | 842 | | UTF8String | M,V | P | | | N |
++| SDP-TimeStamps | 1273 | | Grouped | M,V | P | | | N |
++| SDP-Type | 2036 | | Enumerated | M,V | P | | | N |
++| SGSN-Address | 1228 | | Address | M,V | P | | | N |
++| SGW-Address | 2067 | | Address | M,V | P | | | N |
++| SGW-Change | 2065 | | Enumerated | M,V | P | | | N |
++| SIP-Method | 824 | | UTF8String | M,V | P | | | N |
++| SIP-Request-Timestamp | 834 | | Time | M,V | P | | | N |
++| SIP-Request-Timestamp-Fraction | 2301 | | Unsigned32 | M,V | P | | | N |
++| SIP-Response-Timestamp | 835 | | Time | M,V | P | | | N |
++| SIP-Response-Timestamp-Fraction | 2302 | | Unsigned32 | M,V | P | | | N |
++| SM-Discharge-Time | 2012 | | Time | M,V | P | | | N |
++| SM-Message-Type | 2007 | | Enumerated | M,V | P | | | N |
++| SM-Protocol-ID | 2013 | | OctetString | M,V | P | | | N |
++| SM-Service-Type | 2029 | | Enumerated | M,V | P | | | N |
++| SM-Status | 2014 | | OctetString | M,V | P | | | N |
++| SM-User-Data-Header | 2015 | | OctetString | M,V | P | | | N |
++| SMS-Information | 2000 | | Grouped | M,V | P | | | N |
++| SMS-Node | 2016 | | Enumerated | M,V | P | | | N |
++| SMSC-Address | 2017 | | Address | M,V | P | | | N |
++| Scale-Factor | 2059 | | Grouped | M,V | P | | | N |
++| Served-Party-IP-Address | 848 | | Address | M,V | P | | | N |
++| Service-Data-Container | 2040 | | Grouped | M,V | P | | | N |
++| Service-Id | 855 | | UTF8String | M,V | P | | | N |
++| Service-Information | 873 | | Grouped | M,V | P | | | N |
++| Service-Mode | 2032 | | Unsigned32 | M,V | P | | | N |
++| Service-Specific-Data | 863 | | UTF8String | M,V | P | | | N |
++| Service-Specific-Info | 1249 | | Grouped | M,V | P | | | N |
++| Service-Specific-Type | 1257 | | Unsigned32 | M,V | P | | | N |
++| Serving-Node-Type | 2047 | | Enumerated | M,V | P | | | N |
++| Session-Direction | 2707 | | Enumerated | M,V | P | | | N |
++| Start-Time | 2041 | | Time | M,V | P | | | N |
++| Status | 2702 | | Enumerated | M,V | P | | | N |
++| Stop-Time | 2042 | | Time | M,V | P | | | N |
++| Submission-Time | 1202 | | Time | M,V | P | | | N |
++| Subscriber-Role | 2033 | | Enumerated | M,V | P | | | N |
++| Supplementary-Service | 2048 | | Grouped | M,V | P | | | N |
++| Talk-Burst-Exchange | 1255 | | Grouped | M,V | P | | | N |
++| Talk-Burst-Time | 1286 | | Unsigned32 | M,V | P | | | N |
++| Talk-Burst-Volume | 1287 | | Unsigned32 | M,V | P | | | N |
++| Tariff-Information | 2060 | | Grouped | M,V | P | | | N |
++| Tariff-XML | 2306 | | UTF8String | M,V | P | | | N |
++| Terminating-IOI | 840 | | UTF8String | M,V | P | | | N |
++| Time-First-Usage | 2043 | | Time | M,V | P | | | N |
++| Time-Last-Usage | 2044 | | Time | M,V | P | | | N |
++| Time-Quota-Mechanism | 1270 | | Grouped | M,V | P | | | N |
++| Time-Quota-Threshold | 868 | | Unsigned32 | M,V | P | | | N |
++| Time-Quota-Type | 1271 | | Enumerated | M,V | P | | | N |
++| Time-Stamps | 833 | | Grouped | M,V | P | | | N |
++| Time-Usage | 2045 | | Unsigned32 | M,V | P | | | N |
++| Token-Text | 1215 | | UTF8String | M,V | P | | | N |
++| Traffic-Data-Volumes | 2046 | | Grouped | M,V | P | | | N |
++| Transcoder-Inserted-Indication | 2605 | | Enumerated | M,V | P | | | N |
++| Transit-IOI-List | 2701 | | UTF8String | M,V | P | | | N |
++| Trigger | 1264 | | Grouped | M,V | P | | | N |
++| Trigger-Type | 870 | | Enumerated | M,V | P | | | N |
++| Trunk-Group-Id | 851 | | Grouped | M,V | P | | | N |
++| Type-Number | 1204 | | Enumerated | M,V | P | | | N |
++| Unit-Cost | 2061 | | Grouped | M,V | P | | | N |
++| Unit-Quota-Threshold | 1226 | | Unsigned32 | M,V | P | | | N |
++| User-CSG-Information | 2319 | | Grouped | M,V | P | | | N |
++| User-Participating-Type | 1279 | | Enumerated | M,V | P | | | N |
++| User-Session-Id | 830 | | UTF8String | M,V | P | | | N |
++| Volume-Quota-Threshold | 869 | | Unsigned32 | M,V | P | | | N |
++| WAG-Address | 890 | | Address | M,V | P | | | N |
++| WAG-PLMN-Id | 891 | | OctetString | M,V | P | | | N |
++| WLAN-Information | 875 | | Grouped | M,V | P | | | N |
++| WLAN-Radio-Container | 892 | | Grouped | M,V | P | | | N |
++| WLAN-Session-Id | 1246 | | UTF8String | M,V | P | | | N |
++| WLAN-Technology | 893 | | Unsigned32 | M,V | P | | | N |
++| WLAN-UE-Local-IPAddress | 894 | | Address | M,V | P | | | N |
++| # 3GPP 29.272-c00 (12.0.0 2013.03.13) | | | | | | | | |
++| Subscription-Data | 1400 | 7.3.2 | Grouped | M,V | | | | N |
++| Terminal-Information | 1401 | 7.3.3 | Grouped | M,V | | | | N |
++| IMEI | 1402 | 7.3.4 | UTF8String | M,V | | | | N |
++| Software-Version | 1403 | 7.3.5 | UTF8String | M,V | | | | N |
++| QoS-Subscribed | 1404 | 7.3.77 | OctetString | M,V | | | | N |
++| ULR-Flags | 1405 | 7.3.7 | Unsigned32 | M,V | | | | N |
++| ULA-Flags | 1406 | 7.3.8 | Unsigned32 | M,V | | | | N |
++| Visited-PLMN-Id | 1407 | 7.3.9 | OctetString | M,V | | | | N |
++| Requested-EUTRAN-Authentication-Info | 1408 | 7.3.11 | Grouped | M,V | | | | N |
++| Requested-UTRAN- GERAN-Authentication-Info | 1409 | 7.3.12 | Grouped | M,V | | | | N |
++| Number-Of-Requested-Vectors | 1410 | 7.3.14 | Unsigned32 | M,V | | | | N |
++| Re-Synchronization-Info | 1411 | 7.3.15 | OctetString | M,V | | | | N |
++| Immediate-Response-Preferred | 1412 | 7.3.16 | Unsigned32 | M,V | | | | N |
++| Authentication-Info | 1413 | 7.3.17 | Grouped | M,V | | | | N |
++| E-UTRAN-Vector | 1414 | 7.3.18 | Grouped | M,V | | | | N |
++| UTRAN-Vector | 1415 | 7.3.19 | Grouped | M,V | | | | N |
++| GERAN-Vector | 1416 | 7.3.20 | Grouped | M,V | | | | N |
++| Network-Access-Mode | 1417 | 7.3.21 | Enumerated | M,V | | | | N |
++| HPLMN-ODB | 1418 | 7.3.22 | Unsigned32 | M,V | | | | N |
++| Item-Number | 1419 | 7.3.23 | Unsigned32 | M,V | | | | N |
++| Cancellation-Type | 1420 | 7.3.24 | Enumerated | M,V | | | | N |
++| DSR-Flags | 1421 | 7.3.25 | Unsigned32 | M,V | | | | N |
++| DSA-Flags | 1422 | 7.3.26 | Unsigned32 | M,V | | | | N |
++| Context-Identifier | 1423 | 7.3.27 | Unsigned32 | M,V | | | | N |
++| Subscriber-Status | 1424 | 7.3.29 | Enumerated | M,V | | | | N |
++| Operator-Determined-Barring | 1425 | 7.3.30 | Unsigned32 | M,V | | | | N |
++| Access-Restriction-Data | 1426 | 7.3.31 | Unsigned32 | M,V | | | | N |
++| APN-OI-Replacement | 1427 | 7.3.32 | UTF8String | M,V | | | | N |
++| All-APN-Configurations-Included-Indicator | 1428 | 7.3.33 | Enumerated | M,V | | | | N |
++| APN-Configuration-Profile | 1429 | 7.3.34 | Grouped | M,V | | | | N |
++| APN-Configuration | 1430 | 7.3.35 | Grouped | M,V | | | | N |
++| EPS-Subscribed-QoS-Profile | 1431 | 7.3.37 | Grouped | M,V | | | | N |
++| VPLMN-Dynamic-Address-Allowed | 1432 | 7.3.38 | Enumerated | M,V | | | | N |
++| STN-SR | 1433 | 7.3.39 | OctetString | M,V | | | | N |
++| Alert-Reason | 1434 | 7.3.83 | Enumerated | M,V | | | | N |
++| AMBR | 1435 | 7.3.41 | Grouped | M,V | | | | N |
++| CSG-Subscription-Data | 1436 | 7.3.78 | Grouped | M,V | | | | N |
++| CSG-Id | 1437 | 7.3.79 | Unsigned32 | M,V | | | | N |
++| PDN-GW-Allocation-Type | 1438 | 7.3.44 | Enumerated | M,V | | | | N |
++| Expiration-Date | 1439 | 7.3.80 | Time | M,V | | | | N |
++| RAT-Frequency-Selection-Priority-ID | 1440 | 7.3.46 | Unsigned32 | M,V | | | | N |
++| IDA-Flags | 1441 | 7.3.47 | Unsigned32 | M,V | | | | N |
++| PUA-Flags | 1442 | 7.3.48 | Unsigned32 | M,V | | | | N |
++| NOR-Flags | 1443 | 7.3.49 | Unsigned32 | M,V | | | | N |
++| User-Id | 1444 | 7.3.50 | UTF8String | V | | | M | N |
++| Equipment-Status | 1445 | 7.3.51 | Enumerated | M,V | | | | N |
++| Regional-Subscription-Zone-Code | 1446 | 7.3.52 | OctetString | M,V | | | | N |
++| RAND | 1447 | 7.3.53 | OctetString | M,V | | | | N |
++| XRES | 1448 | 7.3.54 | OctetString | M,V | | | | N |
++| AUTN | 1449 | 7.3.55 | OctetString | M,V | | | | N |
++| KASME | 1450 | 7.3.56 | OctetString | M,V | | | | N |
++| Trace-Collection-Entity | 1452 | 7.3.98 | Address | M,V | | | | N |
++| Kc | 1453 | 7.3.59 | OctetString | M,V | | | | N |
++| SRES | 1454 | 7.3.60 | OctetString | M,V | | | | N |
++| PDN-Type | 1456 | 7.3.62 | Enumerated | M,V | | | | N |
++| Roaming-Restricted-Due-To-Unsupported-Feature | 1457 | 7.3.81 | Enumerated | M,V | | | | N |
++| Trace-Data | 1458 | 7.3.63 | Grouped | M,V | | | | N |
++| Trace-Reference | 1459 | 7.3.64 | OctetString | M,V | | | | N |
++| Trace-Depth | 1462 | 7.3.67 | Enumerated | M,V | | | | N |
++| Trace-NE-Type-List | 1463 | 7.3.68 | OctetString | M,V | | | | N |
++| Trace-Interface-List | 1464 | 7.3.69 | OctetString | M,V | | | | N |
++| Trace-Event-List | 1465 | 7.3.70 | OctetString | M,V | | | | N |
++| OMC-Id | 1466 | 7.3.71 | OctetString | M,V | | | | N |
++| GPRS-Subscription-Data | 1467 | 7.3.72 | Grouped | M,V | | | | N |
++| Complete-Data-List-Included-Indicator | 1468 | 7.3.73 | Enumerated | M,V | | | | N |
++| PDP-Context | 1469 | 7.3.74 | Grouped | M,V | | | | N |
++| PDP-Type | 1470 | 7.3.75 | OctetString | M,V | | | | N |
++| 3GPP2-MEID | 1471 | 7.3.6 | OctetString | M,V | | | | N |
++| Specific-APN-Info | 1472 | 7.3.82 | Grouped | M,V | | | | N |
++| LCS-Info | 1473 | 7.3.84 | Grouped | M,V | | | | N |
++| GMLC-Number | 1474 | 7.3.85 | OctetString | M,V | | | | N |
++| LCS-PrivacyException | 1475 | 7.3.86 | Grouped | M,V | | | | N |
++| SS-Code | 1476 | 7.3.87 | OctetString | M,V | | | | N |
++| SS-Status | 1477 | 7.3.88 | Grouped | M,V | | | | N |
++| Notification-To-UE-User | 1478 | 7.3.89 | Enumerated | M,V | | | | N |
++| External-Client | 1479 | 7.3.90 | Grouped | M,V | | | | N |
++| Client-Identity | 1480 | 7.3.91 | OctetString | M,V | | | | N |
++| GMLC-Restriction | 1481 | 7.3.92 | Enumerated | M,V | | | | N |
++| PLMN-Client | 1482 | 7.3.93 | Enumerated | M,V | | | | N |
++| Service-Type | 1483 | 7.3.94 | Grouped | M,V | | | | N |
++| ServiceTypeIdentity | 1484 | 7.3.95 | Unsigned32 | M,V | | | | N |
++| MO-LR | 1485 | 7.3.96 | Grouped | M,V | | | | N |
++| Teleservice-List | 1486 | 7.3.99 | Grouped | M,V | | | | N |
++| TS-Code | 1487 | 7.3.100 | OctetString | M,V | | | | N |
++| Call-Barring-Infor-List | 1488 | 7.3.101 | Grouped | M,V | | | | N |
++| SGSN-Number | 1489 | 7.3.102 | OctetString | M,V | | | | N |
++| IDR-Flags | 1490 | 7.3.103 | Unsigned32 | M,V | | | | N |
++| ICS-Indicator | 1491 | 7.3.104 | Enumerated | V | | | M | N |
++| IMS-Voice-Over-PS-Sessions-Supported | 1492 | 7.3.106 | Enumerated | V | | | M | N |
++| Homogeneous-Support-of-IMS-Voice-Over-PS-Sessions | 1493 | 7.3.107 | Enumerated | V | | | M | N |
++| Last-UE-Activity-Time | 1494 | 7.3.108 | Time | V | | | M | N |
++| EPS-User-State | 1495 | 7.3.110 | Grouped | V | | | M | N |
++| EPS-Location-Information | 1496 | 7.3.111 | Grouped | V | | | M | N |
++| MME-User-State | 1497 | 7.3.112 | Grouped | V | | | M | N |
++| SGSN-User-State | 1498 | 7.3.113 | Grouped | V | | | M | N |
++| User-State | 1499 | 7.3.114 | Enumerated | V | | | M | N |
++| MME-Location Information | 1600 | 7.3.115 | Grouped | V | | | M | N |
++| SGSN-Location-Information | 1601 | 7.3.116 | Grouped | V | | | M | N |
++| E-UTRAN-Cell-Global-Identity | 1602 | 7.3.117 | OctetString | V | | | M | N |
++| Tracking-Area-Identity | 1603 | 7.3.118 | OctetString | V | | | M | N |
++| Cell-Global-Identity | 1604 | 7.3.119 | OctetString | V | | | M | N |
++| Routing-Area-Identity | 1605 | 7.3.120 | OctetString | V | | | M | N |
++| Location-Area-Identity | 1606 | 7.3.121 | OctetString | V | | | M | N |
++| Service-Area-Identity | 1607 | 7.3.122 | OctetString | V | | | M | N |
++| Geographical-Information | 1608 | 7.3.123 | OctetString | V | | | M | N |
++| Geodetic-Information | 1609 | 7.3.124 | OctetString | V | | | M | N |
++| Current-Location-Retrieved | 1610 | 7.3.125 | Enumerated | V | | | M | N |
++| Age-Of-Location-Information | 1611 | 7.3.126 | Unsigned32 | V | | | M | N |
++| Active-APN | 1612 | 7.3.127 | Grouped | V | | | M | N |
++| Error-Diagnostic | 1614 | 7.3.128 | Enumerated | V | | | M | N |
++| Ext-PDP-Address | 1621 | 7.3.129 | Address | V | | | M | N |
++| UE-SRVCC-Capability | 1615 | 7.3.130 | Enumerated | V | | | M | N |
++| MPS-Priority | 1616 | 7.3.131 | Unsigned32 | V | | | M | N |
++| VPLMN-LIPA-Allowed | 1617 | 7.3.132 | Enumerated | V | | | M | N |
++| LIPA-Permission | 1618 | 7.3.133 | Enumerated | V | | | M | N |
++| Subscribed-Periodic-RAU-TAU-Timer | 1619 | 7.3.134 | Unsigned32 | V | | | M | N |
++| Ext-PDP-Type | 1620 | 7.3.75A | OctetString | V | | | M | N |
++| SIPTO-Permission | 1613 | 7.3.135 | Enumerated | V | | | M | N |
++| MDT-Configuration | 1622 | 7.3.136 | Grouped | V | | | M | N |
++| Job-Type | 1623 | 7.3.137 | Enumerated | V | | | M | N |
++| Area-Scope | 1624 | 7.3.138 | Grouped | V | | | M | N |
++| List-Of-Measurements | 1625 | 7.3.139 | Unsigned32 | V | | | M | N |
++| Reporting-Trigger | 1626 | 7.3.140 | Unsigned32 | V | | | M | N |
++| Report-Interval | 1627 | 7.3.141 | Enumerated | V | | | M | N |
++| Report-Amount | 1628 | 7.3.142 | Enumerated | V | | | M | N |
++| Event-Threshold-RSRP | 1629 | 7.3.143 | Unsigned32 | V | | | M | N |
++| Event-Threshold-RSRQ | 1630 | 7.3.144 | Unsigned32 | V | | | M | N |
++| Logging-Interval | 1631 | 7.3.145 | Enumerated | V | | | M | N |
++| Logging-Duration | 1632 | 7.3.146 | Enumerated | V | | | M | N |
++| Relay-Node-Indicator | 1633 | 7.3.147 | Enumerated | V | | | M | N |
++| MDT-User-Consent | 1634 | 7.3.148 | Enumerated | V | | | M | N |
++| PUR-Flags | 1635 | 7.3.149 | Unsigned32 | V | | | M | N |
++| Subscribed-VSRVCC | 1636 | 7.3.150 | Enumerated | V | | | M | N |
++| Equivalent-PLMN-List | 1637 | 7.3.151 | Grouped | V | | | M | N |
++| CLR-Flags | 1638 | 7.3.152 | Unsigned32 | V | | | M | N |
++| UVR-Flags | 1639 | 7.3.153 | Unsigned32 | M,V | | | | N |
++| UVA-Flags | 1640 | 7.3.154 | Unsigned32 | M,V | | | | N |
++| VPLMN-CSG-Subscription-Data | 1641 | 7.3.155 | Grouped | M,V | | | | N |
++| Time-Zone | 1642 | 7.3.163 | UTF8String | V | | | M | N |
++| A-MSISDN | 1643 | 7.3.157 | OctetString | V | | | M | N |
++| MME-Number-for-MT-SMS | 1645 | 7.3.159 | OctetString | V | | | M | N |
++| SMS-Register-Request | 1648 | 7.3.162 | Enumerated | V | | | M | N |
++| Local-Time-Zone | 1649 | 7.3.156 | Grouped | V | | | M | N |
++| Daylight-Saving-Time | 1650 | 7.3.164 | Enumerated | V | | | M | N |
++| Subscription-Data-Flags | 1654 | 7.3.165 | Unsigned32 | V | | | M | N |
++| Measurement-Period-UMTS | 1655 | 7.3.166 | Enumerated | V | | | M | N |
++| Measurement-Period-LTE | 1656 | 7.3.167 | Enumerated | V | | | M | N |
++| Collection-Period-RRM-LTE | 1657 | 7.3.168 | Enumerated | V | | | M | N |
++| Collection-Period-RRM-UMTS | 1658 | 7.3.169 | Enumerated | V | | | M | N |
++| Positioning-Method | 1659 | 7.3.170 | OctetString | V | | | M | N |
++| Measurement-Quantity | 1660 | 7.3.171 | OctetString | V | | | M | N |
++| Event-Threshold-Event-1F | 1661 | 7.3.172 | Integer32 | V | | | M | N |
++| Event-Threshold-Event-1I | 1662 | 7.3.173 | Integer32 | V | | | M | N |
++| # 3GPP 29.329-b50 (11.5.0 2012.12.21) | | | | | | | | |
++| User-Identity | 700 | 6.3.1 | Grouped | M,V | | | | N |
++| MSISDN | 701 | 6.3.2 | OctetString | M,V | | | | N |
++| # Name conflict with 29.229 User-Data (606), renamed | | | | | | | | |
++| User-Data-29.329 | 702 | 6.3.3 | OctetString | M,V | | | | N |
++| Data-Reference | 703 | 6.3.4 | Enumerated | M,V | | | | N |
++| Service-Indication | 704 | 6.3.5 | OctetString | M,V | | | | N |
++| Subs-Req-Type | 705 | 6.3.6 | Enumerated | M,V | | | | N |
++| Requested-Domain | 706 | 6.3.7 | Enumerated | M,V | | | | N |
++| Current-Location | 707 | 6.3.8 | Enumerated | M,V | | | | N |
++| Identity-Set | 708 | 6.3.10 | Enumerated | V | | | M | N |
++| Expiry-Time | 709 | 6.3.16 | Time | V | | | M | N |
++| Send-Data-Indication | 710 | 6.3.17 | Enumerated | V | | | M | N |
++| # in 29.229 | | | | | | | | |
++| # Server-Name | 602 | 6.3.9 | UTF8String | M,V | | | | N |
++| # Supported-Features | 628 | 6.3.11 | Grouped | V | M | | | N |
++| # Feature-List-ID | 629 | 6.3.12 | Unsigned32 | V | | | M | N |
++| # Feature-List | 630 | 6.3.13 | Unsigned32 | V | | | M | N |
++| # Supported-Applications | 631 | 6.3.14 | Grouped | V | | | M | N |
++| # Public-Identity | 601 | 6.3.15 | UTF8String | M,V | | | | N |
++| DSAI-Tag | 711 | 6.3.18 | OctetString | M,V | | | | N |
++| # in 29.229 | | | | | | | | |
++| # Wildcarded-Public-Identity | 634 | 6.3.19 | UTF8String | V | | | M | N |
++| Wildcarded-IMPU | 636 | 6.3.20 | UTF8String | V | | | M | N |
++| # in 29.229 | | | | | | | | |
++| # Session-Priority | 650 | 6.3.21 | Enumerated | V | | | M | N |
++| One-Time-Notification | 712 | 6.3.22 | Enumerated | V | | | M | N |
++| Requested-Nodes | 713 | 6.3.7A | Unsigned32 | V | | | M | N |
++| Serving-Node-Indication | 714 | 6.3.23 | Enumerated | V | | | M | N |
++| Repository-Data-ID | 715 | 6.3.24 | Grouped | V | | | M | N |
++| Sequence-Number | 716 | 6.3.25 | Unsigned32 | V | | | M | N |
++| UDR-Flags | 719 | 6.3.28 | Unsigned32 | V | | | M | N |
++| # OMA DDS Charging_Data V1.0 20110201-A | | | | | | | | |
++| Application-Server-Id | 2101 | 8.4 | UTF8String | M,V | | | | Y |
++| Application-Service-Type | 2102 | 8.4 | UTF8String | M,V | | | | Y |
++| Application-Session-Id | 2103 | 8.4 | UTF8String | M,V | | | | Y |
++| Content-ID | 2116 | 8.4 | UTF8String | M,V | | | | Y |
++| Content-provider-ID | 2117 | 8.4 | UTF8String | M,V | | | | Y |
++| DCD-Information | 2115 | 8.5.5 | Grouped | M,V | | | | Y |
++| Delivery-Status | 2104 | 8.4 | UTF8String | M,V | | | | Y |
++| IM-Information | 2110 | 8.5.6 | Grouped | M,V | | | | Y |
++| Number-Of-Messages-Successfully-Exploded | 2111 | 8.4 | Unsigned32 | M,V | | | | Y |
++| Number-Of-Messages-Successfully-Sent | 2112 | 8.4 | Unsigned32 | M,V | | | | Y |
++| Service-Generic-Information | 1256 | 8.5.10 | Grouped | M,V | | | | Y |
++| Total-Number-Of-Messages-Exploded | 2113 | 8.4 | Unsigned32 | M,V | | | | Y |
++| Total-Number-Of-Messages-Sent | 2114 | 8.4 | Unsigned32 | M,V | | | | Y |
+diff --git a/extensions/dict_dcca_3gpp/meson.build b/extensions/dict_dcca_3gpp/meson.build
+new file mode 100644
+index 0000000..95e3569
+--- /dev/null
++++ b/extensions/dict_dcca_3gpp/meson.build
+@@ -0,0 +1,10 @@
++shared_module('dict_dcca_3gpp',
++ sources : [files(
++ 'dict_dcca_3gpp.c',
++ 'add_avps.c')],
++ include_directories : freeDiameter_includes,
++ dependencies : libfdcore_dep,
++ name_prefix : '',
++ name_suffix : 'fdx',
++ install : true,
++ install_dir : freeDiameter_extensionsdir)
+diff --git a/extensions/dict_dcca_starent/dict_dcca_starent.org b/extensions/dict_dcca_starent/dict_dcca_starent.org
+new file mode 100644
+index 0000000..7514d9f
+--- /dev/null
++++ b/extensions/dict_dcca_starent/dict_dcca_starent.org
+@@ -0,0 +1,31 @@
++| Attribute Name | Code | Section defined | Value Type | MUST | MAY | SHLD NOT | MUST NOT | Encr |
++| # Cisco ASR 5000 Series AAA Interface | | | | | | | | |
++| # Administration and Reference | | | | | | | | |
++| # Release 8.x and 9.0 | | | | | | | | |
++| # Last Updated June 30, 2010 | | | | | | | | |
++| # updated using v15 docs from Jan 2014 | | | | | | | | |
++| # www.cisco.com/c/dam/en/us/td/docs/wireless/asr_5000/15-0/15-0-AAA-Reference.pdf | | | | | | | | |
++| SN-Volume-Quota-Threshold | 501 | | Unsigned32 | M,V | | | | |
++| SN-Unit-Quota-Threshold | 502 | | Unsigned32 | M,V | | | | |
++| SN-Time-Quota-Threshold | 503 | | Unsigned32 | M,V | | | | |
++| SN-Total-Used-Service-Unit | 504 | | Grouped | V | | | | |
++| SN-Absolute-Validity-Time | 505 | | Time | V | | | | |
++| SN-Bandwidth-Control | 512 | | Enumerated | M,V | | | | |
++| SN-Transparent-Data | 513 | | OctetString | V | | | | |
++| SN-Traffic-Policy | 514 | | UTF8String | V | | | | |
++| SN-Firewall-Policy | 515 | | UTF8String | V | | | | |
++| SN-Usage-Monitoring-Control | 517 | | Grouped | V | | | | |
++| SN-Monitoring-Key | 518 | | Unsigned32 | V | | | | |
++| SN-Usage-Volume | 519 | | Unsigned64 | V | | | | |
++| SN-Service-Flow-Detection | 520 | | Enumerated | V | | | | |
++| SN-Usage-Monitoring | 521 | | Enumerated | V | | | | |
++| SN-Session-Start-Indicator | 522 | | OctetString | M,V | | | | |
++| SN-Phase0-PSAPName | 523 | | UTF8String | V | | | | |
++| SN-Charging-Id | 525 | | OctetString | V | | | | |
++| SN-Remaining-Service-Unit | 526 | | Grouped | V | | | | |
++| SN-Service-Start-Timestamp | 527 | | Time | V | | | | |
++| SN-Rulebase-Id | 528 | | UTF8String | M,V | | | | |
++| SN-CF-Policy-ID | 529 | | Unsigned32 | M,V | | | | |
++| SN-Charging-Collection-Function-Name | 530 | | UTF8String | V | | | | |
++| SN-Fast-Reauth-Username | 11010 | | OctetString | M,V | | | | |
++| SN-Pseudonym-Username | 11011 | | OctetString | M,V | | | | |
+diff --git a/extensions/dict_nasreq/dict_nasreq.c b/extensions/dict_nasreq/dict_nasreq.c
+index 0878ae1..5bf13c5 100644
+--- a/extensions/dict_nasreq/dict_nasreq.c
++++ b/extensions/dict_nasreq/dict_nasreq.c
+@@ -3013,7 +3013,7 @@ static int dnr_entry(char * conffile)
+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 }
+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 }
+ ,{ "Destination-Realm", RULE_REQUIRED, -1, 1 }
+- ,{ "Auth-Request-Type", RULE_REQUIRED, -1, 1 }
++ ,{ "Auth-Request-Type", RULE_OPTIONAL, -1, 1 }
+ ,{ "Destination-Host", RULE_OPTIONAL, -1, 1 }
+ ,{ "NAS-Identifier", RULE_OPTIONAL, -1, 1 }
+ ,{ "NAS-IP-Address", RULE_OPTIONAL, -1, 1 }
+@@ -3169,7 +3169,9 @@ static int dnr_entry(char * conffile)
+ { { "Session-Id", RULE_FIXED_HEAD, -1, 1 }
+ ,{ "Auth-Application-Id", RULE_REQUIRED, -1, 1 }
+ ,{ "Auth-Request-Type", RULE_REQUIRED, -1, 1 }
++#if 0 /* modified by acetcom */
+ ,{ "Result-Code", RULE_REQUIRED, -1, 1 }
++#endif
+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 }
+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 }
+ ,{ "User-Name", RULE_OPTIONAL, -1, 1 }
+diff --git a/extensions/meson.build b/extensions/meson.build
+new file mode 100644
+index 0000000..68ddb1c
+--- /dev/null
++++ b/extensions/meson.build
+@@ -0,0 +1,41 @@
++# Copyright (C) 2019 by Sukchan Lee <acetcom@gmail.com>
++
++# This file is part of Open5GS.
++
++# This program is free software: you can redistribute it and/or modify
++# it under the terms of the GNU Affero General Public License as published by
++# the Free Software Foundation, either version 3 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program. If not, see <https://www.gnu.org/licenses/>.
++
++fd_ext_sources = ('''
++ dbg_msg_dumps
++ dict_rfc5777
++ dict_mip6i
++ dict_nasreq
++ dict_nas_mipv6
++ dict_dcca
++'''.split())
++
++foreach s : fd_ext_sources
++ shared_module(s,
++ sources : [files(join_paths(s, s+'.c'))],
++ include_directories : freeDiameter_includes,
++ dependencies : libfdcore_dep,
++ name_prefix : '',
++ name_suffix : 'fdx',
++ install : true,
++ install_dir : freeDiameter_extensionsdir)
++endforeach
++
++subdir('dict_dcca_3gpp')
++subdir('acl_wl')
++subdir('rt_redirect')
++subdir('rt_default')
+diff --git a/extensions/rt_default/meson.build b/extensions/rt_default/meson.build
+new file mode 100644
+index 0000000..0d75877
+--- /dev/null
++++ b/extensions/rt_default/meson.build
+@@ -0,0 +1,35 @@
++conf_data = configuration_data()
++if cc.has_header_symbol('regex.h', 'REG_STARTEND')
++ conf_data.set('HAVE_REG_STARTEND', 1)
++endif
++configure_file(output : 'rt_default-host.h',
++ configuration : conf_data)
++
++
++lgen = generator(flex,
++ output : 'lex.@BASENAME@.c',
++ arguments : ['-p', '-Cem', '-Prtd_conf', '-o', '@OUTPUT@', '@INPUT@']
++ )
++lfiles = lgen.process('rtd_conf.l')
++
++pgen = generator(bison,
++ output : ['@BASENAME@.tab.c', '@BASENAME@.tab.h'],
++ arguments : ['-p', 'rtd_conf', '-d',
++ '@INPUT@', '--defines=@OUTPUT1@', '--output=@OUTPUT0@'])
++pfiles = pgen.process('rtd_conf.y')
++
++# List of source files
++rt_default_src = files(
++ 'rt_default.c',
++ 'rt_default.h',
++ 'rtd_rules.c',
++)
++
++shared_module('rt_default',
++ sources : [rt_default_src, lfiles, pfiles],
++ include_directories : freeDiameter_includes,
++ dependencies : libfdcore_dep,
++ name_prefix : '',
++ name_suffix : 'fdx',
++ install : true,
++ install_dir : freeDiameter_extensionsdir)
+diff --git a/extensions/rt_default/rtd_conf.y b/extensions/rt_default/rtd_conf.y
+index e02303c..1ef24ab 100644
+--- a/extensions/rt_default/rtd_conf.y
++++ b/extensions/rt_default/rtd_conf.y
+@@ -39,14 +39,14 @@
+
+ /* For development only : */
+ %debug
+-%error-verbose
++%define parse.error verbose
+
+ /* The parser receives the configuration file filename as parameter */
+ %parse-param {char * conffile}
+
+ /* Keep track of location */
+ %locations
+-%pure-parser
++%define api.pure
+
+ %{
+ #include "rt_default.h"
+diff --git a/extensions/rt_redirect/meson.build b/extensions/rt_redirect/meson.build
+new file mode 100644
+index 0000000..8a5bfe4
+--- /dev/null
++++ b/extensions/rt_redirect/meson.build
+@@ -0,0 +1,16 @@
++shared_module('rt_redirect',
++ sources : [files(
++ 'rt_redir.h',
++ 'rt_redir.c',
++ 'redir_entries.c',
++ 'redir_expiry.c',
++ 'redir_fwd.c',
++ 'redir_out.c',
++ 'uthash.h'
++ )],
++ include_directories : freeDiameter_includes,
++ dependencies : libfdcore_dep,
++ name_prefix : '',
++ name_suffix : 'fdx',
++ install : true,
++ install_dir : freeDiameter_extensionsdir)
+\ No newline at end of file
+diff --git a/include/freeDiameter/libfdproto.h b/include/freeDiameter/libfdproto.h
+index 66f4b3b..26f8617 100644
+--- a/include/freeDiameter/libfdproto.h
++++ b/include/freeDiameter/libfdproto.h
+@@ -298,7 +298,7 @@ static char * file_bname_init(char * full) { file_bname = basename(full); return
+
+
+ /* In DEBUG mode, we add meta-information along each trace. This makes multi-threading problems easier to debug. */
+-#if (defined(DEBUG) && defined(DEBUG_WITH_META))
++#if 1 /* Open5GS : enable log file and line number */
+ # define STD_TRACE_FMT_STRING "pid:%s in %s@%s:%d: "
+ # define STD_TRACE_FMT_ARGS , ((char *)pthread_getspecific(fd_log_thname) ?: "unnamed"), __PRETTY_FUNCTION__, __STRIPPED_FILE__, __LINE__
+ #else /* DEBUG && DEBUG_WITH_META */
+diff --git a/include/freeDiameter/meson.build b/include/freeDiameter/meson.build
+new file mode 100644
+index 0000000..5497d7d
+--- /dev/null
++++ b/include/freeDiameter/meson.build
+@@ -0,0 +1,185 @@
++# Copyright (C) 2019 by Sukchan Lee <acetcom@gmail.com>
++
++# This file is part of Open5GS.
++
++# This program is free software: you can redistribute it and/or modify
++# it under the terms of the GNU Affero General Public License as published by
++# the Free Software Foundation, either version 3 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program. If not, see <https://www.gnu.org/licenses/>.
++#
++
++freeDiameter_host_conf = configuration_data()
++freeDiameter_version_conf = configuration_data()
++
++freeDiameter_sysconfdir = join_paths(sysconfdir, 'freeDiameter')
++freeDiameter_extensionsdir = join_paths(libdir, 'freeDiameter')
++
++# Informations to display in daemon's help
++freeDiameter_host_conf.set_quoted('FD_PROJECT_BINARY', meson.project_name() + 'd')
++freeDiameter_host_conf.set_quoted('FD_PROJECT_NAME', meson.project_name())
++freeDiameter_host_conf.set_quoted('FD_PROJECT_VERSION', freeDiameter_version)
++freeDiameter_host_conf.set_quoted('FD_PROJECT_COPYRIGHT', 'Copyright (c) 2008-2015, WIDE Project (www.wide.ad.jp) and NICT (www.nict.go.jp)')
++
++# Version of the source code
++version_arr = freeDiameter_version.split('.')
++freeDiameter_host_conf.set('FD_PROJECT_VERSION_MAJOR', version_arr[0].to_int())
++freeDiameter_host_conf.set('FD_PROJECT_VERSION_MINOR', version_arr[1].to_int())
++freeDiameter_host_conf.set('FD_PROJECT_VERSION_REV', version_arr[2].to_int())
++
++# Version of the API with the library
++freeDiameter_host_conf.set('FD_PROJECT_VERSION_API', 6)
++freeDiameter_host_conf.set_quoted('DEFAULT_CONF_PATH',
++ freeDiameter_sysconfdir)
++freeDiameter_host_conf.set_quoted('DEFAULT_EXTENSIONS_PATH',
++ freeDiameter_extensionsdir)
++freeDiameter_host_conf.set_quoted('FD_DEFAULT_CONF_FILENAME',
++ 'freeDiameter.conf')
++
++if host_machine.endian() == 'big'
++ freeDiameter_host_conf.set('HOST_BIG_ENDIAN', 1)
++endif
++
++freeDiameter_host_conf.set('FD_IS_CONFIG', true)
++freeDiameter_host_conf.set('_GNU_SOURCE', true)
++freeDiameter_host_conf.set('FD_HOOK_HANDLE_LIMIT', 5)
++
++freeDiameter_headers = ('''
++ malloc.h
++ signalent.h
++'''.split())
++
++foreach h : freeDiameter_headers
++ if cc.has_header(h)
++ define = 'HAVE_' + h.underscorify().to_upper()
++ freeDiameter_host_conf.set(define, 1)
++ endif
++endforeach
++
++freeDiameter_functions = ('''
++ strndup
++ getopt_long
++ getifaddrs
++'''.split())
++
++foreach f : freeDiameter_functions
++ if cc.has_function(f)
++ define = 'HAVE_' + f.underscorify().to_upper()
++ freeDiameter_host_conf.set(define, 1)
++ set_variable('have_func_' + f, true)
++ else
++ set_variable('have_func_' + f, false)
++ endif
++endforeach
++
++# Check for ntohll
++if cc.has_header_symbol('netinet/in.h', 'ntohll')
++ freeDiameter_host_conf.set('HAVE_NTOHLL', 1)
++endif
++
++# Check for AI_ADDRCONFIG
++if cc.has_header_symbol('netdb.h', 'AI_ADDRCONFIG')
++ freeDiameter_host_conf.set('HAVE_AI_ADDRCONFIG', 1)
++endif
++
++# Determination of thread implementation
++threads = []
++if host_system == 'windows' and not get_option('force_posix_threads')
++else
++ threads = dependency('threads')
++ if cc.has_header_symbol('pthread.h', 'pthread_barrier_wait')
++ freeDiameter_host_conf.set('HAVE_PTHREAD_BAR', 1)
++ endif
++endif
++
++# Check for clock_gettime()
++clock_gettime_test_code = '''
++ #include <time.h>
++ struct timespec t;
++ int main (int argc, char ** argv) {
++ return clock_gettime(CLOCK_REALTIME, &t);
++ }'''
++librt = []
++if cc.links(clock_gettime_test_code, name : 'clock_gettime()')
++ freeDiameter_host_conf.set('HAVE_CLOCK_GETTIME', 1)
++elif cc.links(clock_gettime_test_code, args : '-lrt', name : 'clock_gettime() in librt')
++ freeDiameter_host_conf.set('HAVE_CLOCK_GETTIME', 1)
++ librt = cc.find_library('rt')
++elif cc.links(clock_gettime_test_code, args : '-lposix4', name : 'clock_gettime() in libposix4')
++ freeDiameter_host_conf.set('HAVE_CLOCK_GETTIME', 1)
++ librt = cc.find_library('posix4')
++else
++ error('Could not find clock_gettime()')
++endif
++
++# Check for dlopen()
++dlopen_dlsym_test_code = '''
++ #include <dlfcn.h>
++ int underscore_test (void) { return 42; }
++ int main (int argc, char ** argv) {
++ void *f1 = (void*)0, *f2 = (void*)0, *handle;
++ handle = dlopen ((void*)0, 0);
++ if (handle) {
++ f1 = dlsym (handle, "underscore_test");
++ f2 = dlsym (handle, "_underscore_test");
++ }
++ return (!f2 || f1);
++ }'''
++libdl = []
++if cc.links(dlopen_dlsym_test_code, name : 'dlopen() and dlsym() in system libraries')
++ freeDiameter_host_conf.set('HAVE_DLOPEN', 1)
++elif cc.links(dlopen_dlsym_test_code, args : '-ldl', name : 'dlopen() and dlsym() in libdl')
++ freeDiameter_host_conf.set('HAVE_DLOPEN', 1)
++ libdl = cc.find_library('dl')
++else
++ error('Could not find dlopen()')
++endif
++
++# Check for gcrypt/idn library
++libgcrypt = cc.find_library('gcrypt')
++libidn = cc.find_library('idn')
++
++# Check for gnutls library
++libgnutls = cc.find_library('gnutls')
++if cc.has_function('gnutls_hash', args : '-lgnutls')
++ freeDiameter_host_conf.set('GNUTLS_VERSION_210', 1)
++endif
++if cc.has_function('gnutls_transport_set_vec_push_function', args : '-lgnutls')
++ freeDiameter_host_conf.set('GNUTLS_VERSION_212', 1)
++endif
++if cc.has_function('gnutls_x509_trust_list_verify_crt', args : '-lgnutls')
++ freeDiameter_host_conf.set('GNUTLS_VERSION_300', 1)
++endif
++if cc.has_function('gnutls_handshake_set_timeout', args : '-lgnutls')
++ freeDiameter_host_conf.set('GNUTLS_VERSION_310', 1)
++endif
++
++# Check for SCTP
++libsctp = cc.find_library('sctp', required : false)
++if libsctp.found()
++ if cc.compiles('''#include <unistd.h>
++ #include <netinet/sctp.h>
++ int main (int argc, char ** argv) {
++ sctp_connectx(0, NULL, 0, NULL);
++ }''', name : 'sctp_connectx() accepts 4 arguments')
++ freeDiameter_host_conf.set('SCTP_CONNECTX_4_ARGS', 1)
++ endif
++ if host_system == 'freebsd'
++ freeDiameter_host_conf.set('SCTP_USE_MAPPED_ADDRESSES', 1)
++ endif
++else
++ freeDiameter_host_conf.set('DISABLE_SCTP', 1)
++endif
++
++configure_file(output : 'freeDiameter-host.h',
++ configuration : freeDiameter_host_conf)
++
++configure_file(output : 'version.h',
++ configuration : freeDiameter_version_conf)
+diff --git a/libfdcore/dict_base_proto.c b/libfdcore/dict_base_proto.c
+index 5eb7c58..a40c329 100644
+--- a/libfdcore/dict_base_proto.c
++++ b/libfdcore/dict_base_proto.c
+@@ -2940,7 +2940,9 @@ int fd_dict_base_protocol(struct dictionary * dict)
+ };
+ struct local_rules_definition rules[] =
+ { { "Session-Id", RULE_FIXED_HEAD, -1, 1 }
++#if 0 /* modified by acetcom */
+ ,{ "Result-Code", RULE_REQUIRED, -1, 1 }
++#endif
+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 }
+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 }
+ ,{ "User-Name", RULE_OPTIONAL, -1, 1 }
+@@ -3058,7 +3060,9 @@ int fd_dict_base_protocol(struct dictionary * dict)
+ };
+ struct local_rules_definition rules[] =
+ { { "Session-Id", RULE_FIXED_HEAD, -1, 1 }
++#if 0 /* modified by acetcom */
+ ,{ "Result-Code", RULE_REQUIRED, -1, 1 }
++#endif
+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 }
+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 }
+ ,{ "User-Name", RULE_OPTIONAL, -1, 1 }
+@@ -3173,7 +3177,9 @@ int fd_dict_base_protocol(struct dictionary * dict)
+ };
+ struct local_rules_definition rules[] =
+ { { "Session-Id", RULE_FIXED_HEAD, -1, 1 }
++#if 0 /* modified by acetcom */
+ ,{ "Result-Code", RULE_REQUIRED, -1, 1 }
++#endif
+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 }
+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 }
+ ,{ "User-Name", RULE_OPTIONAL, -1, 1 }
+diff --git a/libfdcore/endpoints.c b/libfdcore/endpoints.c
+index e80c2a3..4c1f537 100644
+--- a/libfdcore/endpoints.c
++++ b/libfdcore/endpoints.c
+@@ -64,7 +64,6 @@ int fd_ep_add_merge( struct fd_list * list, sSA * sa, socklen_t sl, uint32_t fla
+ case AF_INET:
+ if (! (flags & EP_ACCEPTALL)) {
+ if (IN_IS_ADDR_UNSPECIFIED(&ptr.sin->sin_addr)
+- || IN_IS_ADDR_LOOPBACK(&ptr.sin->sin_addr)
+ /* the next one filters both EXPERIMENTAL, BADCLASS and MULTICAST. */
+ || ((ntohl(ptr.sin->sin_addr.s_addr) & 0xe0000000) == 0xe0000000)
+ || (ptr.sin->sin_addr.s_addr == INADDR_BROADCAST)) {
+@@ -78,10 +77,7 @@ int fd_ep_add_merge( struct fd_list * list, sSA * sa, socklen_t sl, uint32_t fla
+ case AF_INET6:
+ if (! (flags & EP_ACCEPTALL)) {
+ if (IN6_IS_ADDR_UNSPECIFIED(&ptr.sin6->sin6_addr)
+- || IN6_IS_ADDR_LOOPBACK(&ptr.sin6->sin6_addr)
+- || IN6_IS_ADDR_MULTICAST(&ptr.sin6->sin6_addr)
+- || IN6_IS_ADDR_LINKLOCAL(&ptr.sin6->sin6_addr)
+- || IN6_IS_ADDR_SITELOCAL(&ptr.sin6->sin6_addr)) {
++ || IN6_IS_ADDR_MULTICAST(&ptr.sin6->sin6_addr)) {
+ LOG_A(" DEBUG:fd_ep_add_merge Address was ignored, not added.");
+ return 0;
+ }
+diff --git a/libfdcore/fdd.y b/libfdcore/fdd.y
+index 9b36887..1a9729e 100644
+--- a/libfdcore/fdd.y
++++ b/libfdcore/fdd.y
+@@ -43,13 +43,13 @@
+
+ /* For development only : */
+ %debug
+-%error-verbose
++%define parse.error verbose
+
+ %parse-param {struct fd_config * conf}
+
+ /* Keep track of location */
+ %locations
+-%pure-parser
++%define api.pure
+
+ %{
+ #include "fdcore-internal.h"
+diff --git a/libfdcore/meson.build b/libfdcore/meson.build
+new file mode 100644
+index 0000000..5a26558
+--- /dev/null
++++ b/libfdcore/meson.build
+@@ -0,0 +1,79 @@
++# Copyright (C) 2019 by Sukchan Lee <acetcom@gmail.com>
++
++# This file is part of Open5GS.
++
++# This program is free software: you can redistribute it and/or modify
++# it under the terms of the GNU Affero General Public License as published by
++# the Free Software Foundation, either version 3 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program. If not, see <https://www.gnu.org/licenses/>.
++
++fdcore_sources = files('''
++ fdcore-internal.h
++ apps.c
++ cnxctx.h
++ config.c
++ core.c
++ cnxctx.c
++ endpoints.c
++ events.c
++ extensions.c
++ fifo_stats.c
++ hooks.c
++ dict_base_proto.c
++ messages.c
++ queues.c
++ peers.c
++ p_ce.c
++ p_cnx.c
++ p_dw.c
++ p_dp.c
++ p_expiry.c
++ p_out.c
++ p_psm.c
++ p_sr.c
++ routing_dispatch.c
++ server.c
++ tcp.c
++ version.c
++'''.split())
++
++if libsctp.found()
++fdcore_sources += files('sctp.c', 'sctp3436.c', 'sctp_compat.c')
++endif
++
++lgen = generator(flex,
++ output : '@PLAINNAME@.yy.c',
++ arguments : ['-p', '-Cem', '-Pfdd', '-o', '@OUTPUT@', '@INPUT@'])
++
++lfiles = lgen.process('fdd.l')
++
++pgen = generator(bison,
++ output : ['@BASENAME@.tab.c', '@BASENAME@.tab.h'],
++ arguments : ['-p', 'fdd', '-d',
++ '@INPUT@', '--defines=@OUTPUT1@', '--output=@OUTPUT0@'])
++
++pfiles = pgen.process('fdd.y')
++
++libfdcore = library('fdcore',
++ sources : [lfiles, pfiles, fdcore_sources],
++ version : freeDiameter_version,
++ soversion : freeDiameter_soversion,
++ c_args : '-DDISABLE_PEER_EXPIRY',
++ include_directories : freeDiameter_includes,
++ dependencies : [libfdproto_dep,
++ libdl, libsctp, libgcrypt, libgnutls],
++ install : true)
++
++libfdcore_dep = declare_dependency(
++ link_with : libfdcore,
++ include_directories : freeDiameter_includes,
++ dependencies : [libfdproto_dep,
++ libdl, libsctp, libgcrypt, libgnutls])
+diff --git a/libfdcore/p_psm.c b/libfdcore/p_psm.c
+index 755e133..6368bb0 100644
+--- a/libfdcore/p_psm.c
++++ b/libfdcore/p_psm.c
+@@ -891,7 +891,7 @@ psm_end:
+ if ((cur_state == STATE_CLOSING) || (cur_state == STATE_CLOSING_GRACE)) {
+ LOG_N("%s: Going to ZOMBIE state (no more activity) after normal shutdown", peer->p_hdr.info.pi_diamid);
+ } else {
+- LOG_E("%s: Going to ZOMBIE state (no more activity) after abnormal shutdown", peer->p_hdr.info.pi_diamid);
++ LOG_N("%s: Going to ZOMBIE state (no more activity) after abnormal shutdown", peer->p_hdr.info.pi_diamid);
+ }
+ fd_psm_cleanup(peer, 1);
+ TRACE_DEBUG(INFO, "'%s'\t-> 'STATE_ZOMBIE' (terminated)\t'%s'",
+diff --git a/libfdcore/peers.c b/libfdcore/peers.c
+index 5ac9ccf..456638f 100644
+--- a/libfdcore/peers.c
++++ b/libfdcore/peers.c
+@@ -397,7 +397,11 @@ int fd_peer_fini()
+ wait_until.tv_nsec = now.tv_nsec;
+ }
+
++#if 0 /* Open5GS : not stable to finish freeDiameter */
+ while ((!list_empty) && (TS_IS_INFERIOR(&now, &wait_until))) {
++#else
++ if (!list_empty) {
++#endif
+
+ /* Allow the PSM(s) to execute */
+ usleep(100000);
+diff --git a/libfdcore/sctp-internal.h b/libfdcore/sctp-internal.h
+new file mode 100644
+index 0000000..128d8df
+--- /dev/null
++++ b/libfdcore/sctp-internal.h
+@@ -0,0 +1,18 @@
++#ifndef _SCTP_INTERNAL_H
++#define _SCTP_INTERNAL_H
++
++extern int sctp_sockopt_event_subscribe_size;
++extern int sctp_sockopt_paddrparams_size;
++
++struct sctp_event_subscribe;
++struct sctp_paddrparams;
++
++int determine_sctp_sockopt_event_subscribe_size(void);
++int determine_sctp_sockopt_paddrparams_size(void);
++
++int sctp_setsockopt_event_subscribe_workaround(
++ int fd, const struct sctp_event_subscribe *event_subscribe);
++int sctp_setsockopt_paddrparams_workaround(
++ int fd, const struct sctp_paddrparams *paddrparams);
++
++#endif /* _SCTP_INTERNAL_H */
+diff --git a/libfdcore/sctp.c b/libfdcore/sctp.c
+index 9305b31..4d376c9 100644
+--- a/libfdcore/sctp.c
++++ b/libfdcore/sctp.c
+@@ -39,6 +39,10 @@
+ #include <netinet/sctp.h>
+ #include <sys/uio.h>
+
++#if 1 /* Open5GS : for SCTP patch */
++#include "sctp-internal.h"
++#endif
++
+ /* Size of buffer to receive ancilliary data. May need to be enlarged if more sockopt are set... */
+ #ifndef CMSG_BUF_LEN
+ #define CMSG_BUF_LEN 1024
+@@ -48,7 +52,7 @@
+ /* #define OLD_SCTP_SOCKET_API */
+
+ /* Automatically fallback to old API if some of the new symbols are not defined */
+-#if (!defined(SCTP_CONNECTX_4_ARGS) || (!defined(SCTP_RECVRCVINFO)) || (!defined(SCTP_SNDINFO)) || (!defined(SCTP_SEND_FAILED_EVENT)))
++#if (!defined(SCTP_CONNECTX_4_ARGS) || (!defined(SCTP_RECVRCVINFO)) || (!defined(SCTP_SNDINFO)) || (!defined(SCTP_SEND_FAILED_EVENT)) || (!defined(SCTP_NOTIFICATIONS_STOPPED_EVENT)))
+ # define OLD_SCTP_SOCKET_API
+ #endif
+
+@@ -341,13 +345,24 @@ static int fd_setsockopt_prebind(int sk)
+
+ /* Some kernel versions need this to be set */
+ parms.spp_address.ss_family = AF_INET;
++
++#if 1 /* Open5GS : workaround for SCTP */
++ if (determine_sctp_sockopt_paddrparams_size() < 0) {
++ LOG_E("Cannot determine SCTP_EVENTS socket option size");
++ return -1;
++ }
++#endif
+
+ if (TRACE_BOOL(ANNOYING)) {
+ sz = sizeof(parms);
+
+ /* Read socket defaults */
+ CHECK_SYS( sctp_opt_info(sk, 0, SCTP_PEER_ADDR_PARAMS, &parms, &sz) );
++#if 0 /* Open5GS : workaround for SCTP */
+ if (sz != sizeof(parms))
++#else
++ if (sz != sizeof(parms) && sz != sctp_sockopt_paddrparams_size)
++#endif
+ {
+ TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(parms));
+ return ENOTSUP;
+@@ -371,7 +386,11 @@ static int fd_setsockopt_prebind(int sk)
+ #endif /* ADJUST_RTX_PARAMS */
+
+ /* Set the option to the socket */
++#if 0 /* Open5GS : workaround for SCTP */
+ CHECK_SYS( setsockopt(sk, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, &parms, sizeof(parms)) );
++#else
++ CHECK_SYS( sctp_setsockopt_paddrparams_workaround(sk, &parms) );
++#endif
+
+ if (TRACE_BOOL(ANNOYING)) {
+ /* Check new values */
+@@ -410,12 +429,20 @@ static int fd_setsockopt_prebind(int sk)
+ // event.sctp_authentication_event = 0; /* when new key is made active */
+
+ /* Set the option to the socket */
++#if 0 /* Open5GS : workaround for SCTP */
+ CHECK_SYS( setsockopt(sk, IPPROTO_SCTP, SCTP_EVENTS, &event, sizeof(event)) );
++#else
++ CHECK_SYS( sctp_setsockopt_event_subscribe_workaround(sk, &event) );
++#endif
+
+ if (TRACE_BOOL(ANNOYING)) {
+ sz = sizeof(event);
+ CHECK_SYS( getsockopt(sk, IPPROTO_SCTP, SCTP_EVENTS, &event, &sz) );
++#if 0 /* Open5GS : workaround for SCTP */
+ if (sz != sizeof(event))
++#else
++ if (sz != sizeof(event) && sz != sctp_sockopt_event_subscribe_size)
++#endif
+ {
+ TRACE_DEBUG(INFO, "Invalid size of socket option: %d / %d", sz, (socklen_t)sizeof(event));
+ return ENOTSUP;
+@@ -1138,10 +1165,12 @@ ssize_t fd_sctp_sendstrv(struct cnxctx * conn, uint16_t strid, const struct iove
+ hdr->cmsg_type = SCTP_SNDRCV;
+ sndrcv = (struct sctp_sndrcvinfo *)CMSG_DATA(hdr);
+ sndrcv->sinfo_stream = strid;
++ sndrcv->sinfo_ppid = htonl(46);
+ #else /* OLD_SCTP_SOCKET_API */
+ hdr->cmsg_type = SCTP_SNDINFO;
+ sndinf = (struct sctp_sndinfo *)CMSG_DATA(hdr);
+ sndinf->snd_sid = strid;
++ sndinf->snd_ppid = htonl(46);
+ #endif /* OLD_SCTP_SOCKET_API */
+ /* note : we could store other data also, for example in .sinfo_ppid for remote peer or in .sinfo_context for errors. */
+
+diff --git a/libfdcore/sctp_compat.c b/libfdcore/sctp_compat.c
+new file mode 100644
+index 0000000..9c7c922
+--- /dev/null
++++ b/libfdcore/sctp_compat.c
+@@ -0,0 +1,193 @@
++#include "fdcore-internal.h"
++#include "sctp-internal.h"
++
++#include <netinet/sctp.h>
++
++int sctp_sockopt_event_subscribe_size = 0;
++int sctp_sockopt_paddrparams_size = 0;
++
++/* is any of the bytes from offset .. u8_size in 'u8' non-zero? return offset
++ * or -1 if all zero */
++static int byte_nonzero(
++ const uint8_t *u8, unsigned int offset, unsigned int u8_size)
++{
++ int j;
++
++ for (j = offset; j < u8_size; j++) {
++ if (u8[j] != 0)
++ return j;
++ }
++
++ return -1;
++}
++
++int determine_sctp_sockopt_event_subscribe_size(void)
++{
++ uint8_t buf[256];
++ socklen_t buf_len = sizeof(buf);
++ int sd, rc;
++
++ /* only do this once */
++ if (sctp_sockopt_event_subscribe_size != 0)
++ return 0;
++
++ sd = socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP);
++ if (sd < 0)
++ return sd;
++
++ memset(buf, 0, sizeof(buf));
++ rc = getsockopt(sd, IPPROTO_SCTP, SCTP_EVENTS, buf, &buf_len);
++ close(sd);
++ if (rc < 0) {
++ LOG_E("getsockopt(SCTP_PEER_ADDR_PARAMS) failed [%d:%s]",
++ rc, strerror(errno));
++ return rc;
++ }
++
++ sctp_sockopt_event_subscribe_size = buf_len;
++
++ LOG_D("sizes of 'struct sctp_event_subscribe': "
++ "compile-time %zu, kernel: %u",
++ sizeof(struct sctp_event_subscribe),
++ sctp_sockopt_event_subscribe_size);
++ return 0;
++}
++
++/*
++ * The workaround is stolen from libosmo-netif.
++ * - http://osmocom.org/projects/libosmo-netif/repository/revisions/master/entry/src/stream.c
++ *
++ * Attempt to work around Linux kernel ABI breakage
++ *
++ * The Linux kernel ABI for the SCTP_EVENTS socket option has been broken
++ * repeatedly.
++ * - until commit 35ea82d611da59f8bea44a37996b3b11bb1d3fd7 ( kernel < 4.11),
++ * the size is 10 bytes
++ * - in 4.11 it is 11 bytes
++ * - in 4.12 .. 5.4 it is 13 bytes
++ * - in kernels >= 5.5 it is 14 bytes
++ *
++ * This wouldn't be a problem if the kernel didn't have a "stupid" assumption
++ * that the structure size passed by userspace will match 1:1 the length
++ * of the structure at kernel compile time. In an ideal world, it would just
++ * use the known first bytes and assume the remainder is all zero.
++ * But as it doesn't do that, let's try to work around this */
++int sctp_setsockopt_event_subscribe_workaround(
++ int fd, const struct sctp_event_subscribe *event_subscribe)
++{
++ const unsigned int compiletime_size = sizeof(*event_subscribe);
++ int rc;
++
++ if (determine_sctp_sockopt_event_subscribe_size() < 0) {
++ LOG_E("Cannot determine SCTP_EVENTS socket option size");
++ return -1;
++ }
++
++ if (compiletime_size == sctp_sockopt_event_subscribe_size) {
++ /* no kernel workaround needed */
++ return setsockopt(fd, IPPROTO_SCTP, SCTP_EVENTS,
++ event_subscribe, compiletime_size);
++ } else if (compiletime_size < sctp_sockopt_event_subscribe_size) {
++ /* we are using an older userspace with a more modern kernel
++ * and hence need to pad the data */
++ uint8_t buf[256];
++ ASSERT(sctp_sockopt_event_subscribe_size <= sizeof(buf));
++
++ memcpy(buf, event_subscribe, compiletime_size);
++ memset(buf + sizeof(*event_subscribe),
++ 0, sctp_sockopt_event_subscribe_size - compiletime_size);
++ return setsockopt(fd, IPPROTO_SCTP, SCTP_EVENTS,
++ buf, sctp_sockopt_event_subscribe_size);
++ } else /* if (compiletime_size > sctp_sockopt_event_subscribe_size) */ {
++ /* we are using a newer userspace with an older kernel and hence
++ * need to truncate the data - but only if the caller didn't try
++ * to enable any of the events of the truncated portion */
++ rc = byte_nonzero((const uint8_t *)event_subscribe,
++ sctp_sockopt_event_subscribe_size, compiletime_size);
++ if (rc >= 0) {
++ LOG_E("Kernel only supports sctp_event_subscribe of %u bytes, "
++ "but caller tried to enable more modern event at offset %u",
++ sctp_sockopt_event_subscribe_size, rc);
++ return -1;
++ }
++
++ return setsockopt(fd, IPPROTO_SCTP, SCTP_EVENTS, event_subscribe,
++ sctp_sockopt_event_subscribe_size);
++ }
++}
++
++int determine_sctp_sockopt_paddrparams_size(void)
++{
++ uint8_t buf[256];
++ socklen_t buf_len = sizeof(buf);
++ int sd, rc;
++
++ /* only do this once */
++ if (sctp_sockopt_paddrparams_size != 0)
++ return 0;
++
++ sd = socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP);
++ if (sd < 0)
++ return sd;
++
++ memset(buf, 0, sizeof(buf));
++ rc = getsockopt(sd, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, buf, &buf_len);
++ close(sd);
++ if (rc < 0) {
++ LOG_E("getsockopt(SCTP_PEER_ADDR_PARAMS) failed [%d:%s]",
++ rc, strerror(errno));
++ return rc;
++ }
++
++ sctp_sockopt_paddrparams_size = buf_len;
++
++ LOG_D("sizes of 'struct sctp_event_subscribe': "
++ "compile-time %zu, kernel: %u",
++ sizeof(struct sctp_event_subscribe),
++ sctp_sockopt_event_subscribe_size);
++ return 0;
++}
++
++int sctp_setsockopt_paddrparams_workaround(
++ int fd, const struct sctp_paddrparams *paddrparams)
++{
++ const unsigned int compiletime_size = sizeof(*paddrparams);
++ int rc;
++
++ if (determine_sctp_sockopt_paddrparams_size() < 0) {
++ LOG_E("Cannot determine SCTP_EVENTS socket option size");
++ return -1;
++ }
++
++ if (compiletime_size == sctp_sockopt_paddrparams_size) {
++ /* no kernel workaround needed */
++ return setsockopt(fd, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS,
++ paddrparams, compiletime_size);
++ } else if (compiletime_size < sctp_sockopt_paddrparams_size) {
++ /* we are using an older userspace with a more modern kernel
++ * and hence need to pad the data */
++ uint8_t buf[256];
++ ASSERT(sctp_sockopt_paddrparams_size <= sizeof(buf));
++
++ memcpy(buf, paddrparams, compiletime_size);
++ memset(buf + sizeof(*paddrparams),
++ 0, sctp_sockopt_paddrparams_size - compiletime_size);
++ return setsockopt(fd, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS,
++ buf, sctp_sockopt_paddrparams_size);
++ } else /* if (compiletime_size > sctp_sockopt_paddrparams_size) */ {
++ /* we are using a newer userspace with an older kernel and hence
++ * need to truncate the data - but only if the caller didn't try
++ * to enable any of the events of the truncated portion */
++ rc = byte_nonzero((const uint8_t *)paddrparams,
++ sctp_sockopt_paddrparams_size, compiletime_size);
++ if (rc >= 0) {
++ LOG_E("Kernel only supports sctp_event_subscribe of %u bytes, "
++ "but caller tried to enable more modern event at offset %u",
++ sctp_sockopt_paddrparams_size, rc);
++ return -1;
++ }
++
++ return setsockopt(fd, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, paddrparams,
++ sctp_sockopt_paddrparams_size);
++ }
++}
+diff --git a/libfdproto/meson.build b/libfdproto/meson.build
+new file mode 100644
+index 0000000..1bf0963
+--- /dev/null
++++ b/libfdproto/meson.build
+@@ -0,0 +1,48 @@
++# Copyright (C) 2019 by Sukchan Lee <acetcom@gmail.com>
++
++# This file is part of Open5GS.
++
++# This program is free software: you can redistribute it and/or modify
++# it under the terms of the GNU Affero General Public License as published by
++# the Free Software Foundation, either version 3 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program. If not, see <https://www.gnu.org/licenses/>.
++
++fdproto_sources = files('''
++ fdproto-internal.h
++ dictionary.c
++ dictionary_functions.c
++ dispatch.c
++ fifo.c
++ init.c
++ lists.c
++ log.c
++ messages.c
++ ostr.c
++ portability.c
++ rt_data.c
++ sessions.c
++ utils.c
++ version.c
++'''.split())
++
++libfdproto = library('fdproto',
++ sources : [fdproto_sources],
++ version : freeDiameter_version,
++ soversion : freeDiameter_soversion,
++ include_directories : freeDiameter_includes,
++ dependencies : [threads, librt, libidn ],
++ install : true)
++
++libfdproto_dep = declare_dependency(
++ link_with : libfdproto,
++ include_directories : freeDiameter_includes,
++ dependencies : [threads, librt, libidn ],
++)
+diff --git a/meson.build b/meson.build
+new file mode 100644
+index 0000000..42a45b5
+--- /dev/null
++++ b/meson.build
+@@ -0,0 +1,71 @@
++# Copyright (C) 2019 by Sukchan Lee <acetcom@gmail.com>
++
++# This file is part of Open5GS.
++
++# This program is free software: you can redistribute it and/or modify
++# it under the terms of the GNU Affero General Public License as published by
++# the Free Software Foundation, either version 3 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program. If not, see <https://www.gnu.org/licenses/>.
++
++project('freediameter', 'c',
++ version : '1.5.0',
++ license : 'BSD-3-clause',
++ meson_version : '>= 0.43.0',
++ default_options : [
++ 'warning_level=1',
++ 'c_std=gnu89',
++ 'prefix=/usr',
++ ],
++)
++
++freeDiameter_version = meson.project_version()
++freeDiameter_soversion = '7'
++
++prefix = get_option('prefix')
++bindir = join_paths(prefix, get_option('bindir'))
++libdir = join_paths(prefix, get_option('libdir'))
++sysconfdir = join_paths(prefix, get_option('sysconfdir'))
++localstatedir = join_paths(prefix, get_option('localstatedir'))
++
++cc = meson.get_compiler('c')
++host_system = host_machine.system()
++
++flex = find_program('flex')
++bison = find_program('bison')
++
++# Compiler flags
++if cc.get_id() == 'gcc' or cc.get_id() == 'clang'
++ possible_cc_flags = [
++ '-Werror',
++
++ '-Wno-unused-variable',
++ '-Wno-unused-but-set-variable',
++ '-Wno-maybe-uninitialized',
++ '-Wno-format-truncation',
++ '-Wno-stringop-truncation',
++ ]
++else
++ possible_cc_flags = []
++endif
++
++add_project_arguments(
++ cc.get_supported_arguments(possible_cc_flags),
++ language : 'c')
++
++freeDiameter_includes = include_directories('''
++ include
++ .
++'''.split())
++
++subdir('include/freeDiameter')
++subdir('libfdproto')
++subdir('libfdcore')
++subdir('extensions')
diff --git a/debian/patches/series b/debian/patches/series
index abf5952..93b529b 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,6 +1,7 @@
0001-Fix-some-spelling-errors.patch
0002-install-extensions-in-usr-lib-freeDiameter.-Do-not-i.patch
0003-Set-default-debian-location-for-freeDiameter-configu.patch
-0004-Disable-running-tests-that-require-the-kernel-module.patch
-0007-Result-Code-changes-to-Optional.patch
-0015-compile-rt_default-rt_redirect-extension-3.patch
+ogs-freediameter.patch
+#0004-Disable-running-tests-that-require-the-kernel-module.patch
+#0007-Result-Code-changes-to-Optional.patch
+#0015-compile-rt_default-rt_redirect-extension-3.patch