Index: extensions/dict_dcca_3gpp/dict_dcca_3gpp.c
===================================================================
--- extensions/dict_dcca_3gpp/dict_dcca_3gpp.c	(revision 1485)
+++ extensions/dict_dcca_3gpp/dict_dcca_3gpp.c	(revision 1486)
@@ -369,10 +369,16 @@
 
 	/*==================================================================*/
-	/* 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      */
+	/* 3GPP TS 29.061 V15.5.0 (2018-12)                                 */
+	/* From 3GPP 29061-f50.doc                                          */
 	/*==================================================================*/
 
-	/* M inconsistently specified                                       */
+	/*==================================================================*/
+	/* 3GPP TS 29.061 Table 9a: Gi/Sgi specific AVPs                    */
+
+	/* Note: 3GPP TS 29.061 is unclear and inconsistent about M.        */
+	/* For this reason, other sources are assumed more trustworthy.     */
+	/*==================================================================*/
+
+	/* Note: 3GPP-IMSI (1) changed to Must M.                           */
 	/* 3GPP-IMSI, UTF8String, code 1, section 16.4.7                    */
 	{
@@ -388,6 +394,6 @@
 	};
 
-	/* 29.061 says OctetString; dumps say UInt32; manually changed      */
-	/* 29.061 says MUST NOT M; dumps say MUST                           */
+	/* Note: 3GPP-Charging-Id (2) type changed from OctetString to Unsigned32, */
+	/* per 3GPP TS 29.061 clause 16.4.7.2/2 and packet dumps.           */
 	/* 3GPP-Charging-Id, Unsigned32, code 2, section 16.4.7             */
 	{
@@ -403,5 +409,5 @@
 	};
 
-	/* 29.061 says MUST NOT M; dumps say MUST                           */
+	/* Note: 3GPP-PDP-Type (3) changed to Must M.                       */
 	/* 3GPP-PDP-Type, Enumerated, code 3, section 16.4.7                */
 	{
@@ -433,5 +439,5 @@
 	};
 
-	/* 29.061 says MUST NOT M; old contrib/3gpp says MUST               */
+	/* Note: 3GPP-GPRS-Negotiated-QoS-Profile (5) changed to Must M per contrib/3gpp. */
 	/* 3GPP-GPRS-Negotiated-QoS-Profile, UTF8String, code 5, section 16.4.7 */
 	{
@@ -447,5 +453,4 @@
 	};
 
-	/* M inconsistently specified; old contrib/3gg says MUST NOT        */
 	/* 3GPP-SGSN-Address, OctetString, code 6, section 16.4.7           */
 	{
@@ -474,5 +479,5 @@
 	};
 
-	/* 29.061 says MUST NOT M; dumps say MUST                           */
+	/* Note: 3GPP-IMSI-MCC-MNC (8) changed to Must M per packet dumps.  */
 	/* 3GPP-IMSI-MCC-MNC, UTF8String, code 8, section 16.4.7            */
 	{
@@ -488,5 +493,5 @@
 	};
 
-	/* 29.061 says MUST NOT M; old contrib/3gpp says MUST               */
+	/* Note: 3GPP-GGSN-MCC-MNC (9) changed to Must M per contrib/3gpp.  */
 	/* 3GPP-GGSN-MCC-MNC, UTF8String, code 9, section 16.4.7            */
 	{
@@ -502,5 +507,5 @@
 	};
 
-	/* 29.061 says MUST NOT M; old contrib/3gpp says MUST               */
+	/* Note: 3GPP-NSAPI (10) changed to Must M per contrib/3gpp.        */
 	/* 3GPP-NSAPI, OctetString, code 10, section 16.4.7                 */
 	{
@@ -516,5 +521,7 @@
 	};
 
-	/* added manually, missing in AVP table                             */
+	/* Note: 3GPP TS 29.061 table 9a does not define                    */
+	/* 3GPP-Session-Stop-Indicator (11) even when it is referenced      */
+	/* by other 3GPP Diameter AVPs including PS-Information (874).      */
 	/* 3GPP-Session-Stop-Indicator, OctetString, code 11, section 16.4.7 */
 	{
@@ -530,5 +537,5 @@
 	};
 
-	/* 29.061 says MUST NOT M; old contrib/3gpp says MUST               */
+	/* Note: 3GPP-Selection-Mode (12) changed to Must M per contrib/3gpp. */
 	/* 3GPP-Selection-Mode, UTF8String, code 12, section 16.4.7         */
 	{
@@ -544,5 +551,5 @@
 	};
 
-	/* 29.061 says MUST NOT M; old contrib/3gpp says MUST               */
+	/* Note: 3GPP-Charging-Characteristics (13) changed to Must M per contrib/3gpp. */
 	/* 3GPP-Charging-Characteristics, UTF8String, code 13, section 16.4.7 */
 	{
@@ -558,5 +565,8 @@
 	};
 
-	/* 29.061 says MUST NOT M; old contrib/3gpp says MUST               */
+	/* Note: 3GPP TS 29.061 V12.6.0 (2014-06) renamed                   */
+	/* 3GPP-CG-IPv6-Address (14) to 3GPP-CG-Ipv6-Address.               */
+	/* This rename was not applied.                                     */
+	/* 3GPP-CG-IPv6-Address (14) changed to Must M per contrib/3gpp.    */
 	/* 3GPP-CG-IPv6-Address, OctetString, code 14, section 16.4.7       */
 	{
@@ -572,6 +582,8 @@
 	};
 
-	/* M inconsistently specified                                       */
-	/* 29.061 says MUST NOT M; old contrib/3gpp says MUST               */
+	/* Note: 3GPP TS 29.061 V12.6.0 (2014-06) renamed                   */
+	/* 3GPP-SGSN-IPv6-Address (15) to 3GPP-SGSN-Ipv6-Address.           */
+	/* This rename was not applied.                                     */
+	/* 3GPP-SGSN-IPv6-Address (15) changed to Must M per contrib/3gpp.  */
 	/* 3GPP-SGSN-IPv6-Address, OctetString, code 15, section 16.4.7     */
 	{
@@ -587,5 +599,8 @@
 	};
 
-	/* 29.061 says MUST NOT M; old contrib/3gpp says MUST               */
+	/* Note: 3GPP TS 29.061 V12.6.0 (2014-06) renamed                   */
+	/* 3GPP-GGSN-IPv6-Address (16) to 3GPP-GGSN-Ipv6-Address.           */
+	/* This rename was not applied.                                     */
+	/* 3GPP-GGSN-IPv6-Address (16) changed to Must M per contrib/3gpp.  */
 	/* 3GPP-GGSN-IPv6-Address, OctetString, code 16, section 16.4.7     */
 	{
@@ -601,5 +616,8 @@
 	};
 
-	/* 29.061 says MUST NOT M; old contrib/3gpp says MUST               */
+	/* Note: 3GPP TS 29.061 V12.6.0 (2014-06) renamed                   */
+	/* 3GPP-IPv6-DNS-Servers (17) to 3GPP-Ipv6-DNS-Servers.             */
+	/* This rename was not applied.                                     */
+	/* 3GPP-IPv6-DNS-Servers (17) changed to Must M per contrib/3gpp.   */
 	/* 3GPP-IPv6-DNS-Servers, OctetString, code 17, section 16.4.7      */
 	{
@@ -615,5 +633,5 @@
 	};
 
-	/* 29.061 says MUST NOT M; old contrib/3gpp says MUST               */
+	/* Note: 3GPP-SGSN-MCC-MNC (18) changed to Must M per contrib/3gpp. */
 	/* 3GPP-SGSN-MCC-MNC, UTF8String, code 18, section 16.4.7           */
 	{
@@ -629,5 +647,5 @@
 	};
 
-	/* M inconsistently specified                                       */
+	/* Note: 3GPP-IMEISV (20) changed to Must M.                        */
 	/* 3GPP-IMEISV, OctetString, code 20, section 16.4.7                */
 	{
@@ -643,5 +661,5 @@
 	};
 
-	/* M inconsistently specified                                       */
+	/* Note: 3GPP-RAT-Type (21) changed to Must M.                      */
 	/* 3GPP-RAT-Type, OctetString, code 21, section 16.4.7              */
 	{
@@ -657,5 +675,5 @@
 	};
 
-	/* M inconsistently specified                                       */
+	/* Note: 3GPP-User-Location-Info (22) changed to Must M.            */
 	/* 3GPP-User-Location-Info, OctetString, code 22, section 16.4.7    */
 	{
@@ -671,5 +689,5 @@
 	};
 
-	/* M inconsistently specified                                       */
+	/* Note: 3GPP-MS-TimeZone (23) changed to Must M.                   */
 	/* 3GPP-MS-TimeZone, OctetString, code 23, section 16.4.7           */
 	{
@@ -745,5 +763,49 @@
 	/* External-Identifier (3111) UTF8String.                           */
 
-	/* TMGI, OctetString, code 900, section 17.07.02                    */
+
+	/* TWAN-Identifier, OctetString, code 29, section 16.4.7            */
+	{
+		struct dict_avp_data data = {
+			29,	/* Code */
+			10415,	/* Vendor */
+			"TWAN-Identifier",	/* Name */
+			AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY,	/* Fixed flags */
+			AVP_FLAG_VENDOR,	/* Fixed flag values */
+			AVP_TYPE_OCTETSTRING	/* base type of data */
+		};
+		CHECK_dict_new(DICT_AVP, &data, NULL, NULL);
+	};
+
+	/* 3GPP-User-Location-Info-Time, OctetString, code 30, section 16.4.7 */
+	{
+		struct dict_avp_data data = {
+			30,	/* Code */
+			10415,	/* Vendor */
+			"3GPP-User-Location-Info-Time",	/* Name */
+			AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY,	/* Fixed flags */
+			AVP_FLAG_VENDOR,	/* Fixed flag values */
+			AVP_TYPE_OCTETSTRING	/* base type of data */
+		};
+		CHECK_dict_new(DICT_AVP, &data, NULL, NULL);
+	};
+
+	/* 3GPP-Secondary-RAT-Usage, OctetString, code 31, section 16.4.7   */
+	{
+		struct dict_avp_data data = {
+			31,	/* Code */
+			10415,	/* Vendor */
+			"3GPP-Secondary-RAT-Usage",	/* Name */
+			AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY,	/* Fixed flags */
+			AVP_FLAG_VENDOR,	/* Fixed flag values */
+			AVP_TYPE_OCTETSTRING	/* base type of data */
+		};
+		CHECK_dict_new(DICT_AVP, &data, NULL, NULL);
+	};
+
+	/*==================================================================*/
+	/* 3GPP TS 29.061 Table 10: Gmb specific AVPs                       */
+	/*==================================================================*/
+
+	/* TMGI, OctetString, code 900, section 17.7.2                      */
 	{
 		struct dict_avp_data data = {
@@ -758,5 +820,5 @@
 	};
 
-	/* Required-MBMS-Bearer-Capabilities, UTF8String, code 901, section 17.07.03 */
+	/* Required-MBMS-Bearer-Capabilities, UTF8String, code 901, section 17.7.3 */
 	{
 		struct dict_avp_data data = {
@@ -771,5 +833,5 @@
 	};
 
-	/* MBMS-StartStop-Indication, Enumerated, code 902, section 17.07.05 */
+	/* MBMS-StartStop-Indication, Enumerated, code 902, section 17.7.5  */
 	{
 		struct dict_avp_data data = {
@@ -787,5 +849,5 @@
 	};
 
-	/* MBMS-Service-Area, OctetString, code 903, section 17.07.06       */
+	/* MBMS-Service-Area, OctetString, code 903, section 17.7.6         */
 	{
 		struct dict_avp_data data = {
@@ -800,5 +862,5 @@
 	};
 
-	/* MBMS-Session-Duration, OctetString, code 904, section 17.07.07   */
+	/* MBMS-Session-Duration, OctetString, code 904, section 17.7.7     */
 	{
 		struct dict_avp_data data = {
@@ -813,5 +875,5 @@
 	};
 
-	/* Alternative-APN, UTF8String, code 905, section 17.07.08          */
+	/* Alternative-APN, UTF8String, code 905, section 17.7.8            */
 	{
 		struct dict_avp_data data = {
@@ -826,5 +888,5 @@
 	};
 
-	/* MBMS-Service-Type, Enumerated, code 906, section 17.07.09        */
+	/* MBMS-Service-Type, Enumerated, code 906, section 17.7.9          */
 	{
 		struct dict_avp_data data = {
@@ -842,5 +904,5 @@
 	};
 
-	/* MBMS-2G-3G-Indicator, Enumerated, code 907, section 17.07.10     */
+	/* MBMS-2G-3G-Indicator, Enumerated, code 907, section 17.7.10      */
 	{
 		struct dict_avp_data data = {
@@ -858,5 +920,5 @@
 	};
 
-	/* MBMS-Session-Identity, OctetString, code 908, section 17.07.11   */
+	/* MBMS-Session-Identity, OctetString, code 908, section 17.7.11    */
 	{
 		struct dict_avp_data data = {
@@ -871,5 +933,5 @@
 	};
 
-	/* RAI, UTF8String, code 909, section 17.07.12                      */
+	/* RAI, UTF8String, code 909, section 17.7.12                       */
 	{
 		struct dict_avp_data data = {
@@ -884,5 +946,5 @@
 	};
 
-	/* Additional-MBMS-Trace-Info, OctetString, code 910, section 17.07.13 */
+	/* Additional-MBMS-Trace-Info, OctetString, code 910, section 17.7.13 */
 	{
 		struct dict_avp_data data = {
@@ -897,5 +959,5 @@
 	};
 
-	/* MBMS-Time-To-Data-Transfer, OctetString, code 911, section 17.07.14 */
+	/* MBMS-Time-To-Data-Transfer, OctetString, code 911, section 17.7.14 */
 	{
 		struct dict_avp_data data = {
@@ -910,5 +972,5 @@
 	};
 
-	/* MBMS-Session-Repetition-Number, OctetString, code 912, section 17.07.15 */
+	/* MBMS-Session-Repetition-Number, OctetString, code 912, section 17.7.15 */
 	{
 		struct dict_avp_data data = {
@@ -923,5 +985,5 @@
 	};
 
-	/* MBMS-Required-QoS, UTF8String, code 913, section 17.07.16        */
+	/* MBMS-Required-QoS, UTF8String, code 913, section 17.7.16         */
 	{
 		struct dict_avp_data data = {
@@ -936,5 +998,5 @@
 	};
 
-	/* MBMS-Counting-Information, Enumerated, code 914, section 17.07.17 */
+	/* MBMS-Counting-Information, Enumerated, code 914, section 17.7.17 */
 	{
 		struct dict_avp_data data = {
@@ -952,5 +1014,5 @@
 	};
 
-	/* MBMS-User-Data-Mode-Indication, Enumerated, code 915, section 17.07.18 */
+	/* MBMS-User-Data-Mode-Indication, Enumerated, code 915, section 17.7.18 */
 	{
 		struct dict_avp_data data = {
@@ -968,5 +1030,5 @@
 	};
 
-	/* MBMS-GGSN-Address, OctetString, code 916, section 17.07.19       */
+	/* MBMS-GGSN-Address, OctetString, code 916, section 17.7.19        */
 	{
 		struct dict_avp_data data = {
@@ -981,5 +1043,8 @@
 	};
 
-	/* MBMS-GGSN-IPv6-Address, OctetString, code 917, section 17.07.20  */
+	/* Note: 3GPP TS 29.061 V12.6.0 (2014-06) renamed                   */
+	/* MBMS-GGSN-IPv6-Address (917) to MBMS-GGSN-Ipv6-Address.          */
+	/* This rename was not applied.                                     */
+	/* MBMS-GGSN-IPv6-Address, OctetString, code 917, section 17.7.20   */
 	{
 		struct dict_avp_data data = {
@@ -994,5 +1059,5 @@
 	};
 
-	/* MBMS-BMSC-SSM-IP-Address, OctetString, code 918, section 17.07.21 */
+	/* MBMS-BMSC-SSM-IP-Address, OctetString, code 918, section 17.7.21 */
 	{
 		struct dict_avp_data data = {
@@ -1007,5 +1072,8 @@
 	};
 
-	/* MBMS-BMSC-SSM-IPv6-Address, OctetString, code 919, section 17.07.22 */
+	/* Note: 3GPP TS 29.061 V12.6.0 (2014-06) renamed                   */
+	/* MBMS-BMSC-SSM-IPv6-Address (919) to MBMS-BMSC-SSM-Ipv6-Address.  */
+	/* This rename was not applied.                                     */
+	/* MBMS-BMSC-SSM-IPv6-Address, OctetString, code 919, section 17.7.22 */
 	{
 		struct dict_avp_data data = {
@@ -1063,4 +1131,173 @@
 		CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type);
 		CHECK_dict_new(DICT_AVP, &data, type, NULL);
+	};
+
+	/*==================================================================*/
+	/* 3GPP TS 29.061 Table 20.5a.1: SGmb specific AVPs                 */
+	/*==================================================================*/
+
+	/* MBMS-Access-Indicator, Enumerated, code 923, section 20.5a.1     */
+	{
+		struct dict_avp_data data = {
+			923,	/* Code */
+			10415,	/* Vendor */
+			"MBMS-Access-Indicator",	/* Name */
+			AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY,	/* Fixed flags */
+			AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY,	/* Fixed flag values */
+			AVP_TYPE_INTEGER32	/* base type of data */
+		};
+		struct dict_object	*type;
+		struct dict_type_data	 tdata = { AVP_TYPE_INTEGER32, "Enumerated(3GPP/MBMS-Access-Indicator)", NULL, NULL, NULL };
+		CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type);
+		CHECK_dict_new(DICT_AVP, &data, type, NULL);
+	};
+
+	/* MBMS-GW-SSM-IP-Address, OctetString, code 924, section 20.5a.2   */
+	{
+		struct dict_avp_data data = {
+			924,	/* Code */
+			10415,	/* Vendor */
+			"MBMS-GW-SSM-IP-Address",	/* Name */
+			AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY,	/* Fixed flags */
+			AVP_FLAG_VENDOR,	/* Fixed flag values */
+			AVP_TYPE_OCTETSTRING	/* base type of data */
+		};
+		CHECK_dict_new(DICT_AVP, &data, NULL, NULL);
+	};
+
+	/* Note: 3GPP TS 29.061 V12.6.0 (2014-06) renamed                   */
+	/* MBMS-GW-SSM-IPv6-Address (925) to MBMS-GW-SSM-Ipv6-Address.      */
+	/* This rename was not applied.                                     */
+	/* MBMS-GW-SSM-IPv6-Address, OctetString, code 925, section 20.5a.3 */
+	{
+		struct dict_avp_data data = {
+			925,	/* Code */
+			10415,	/* Vendor */
+			"MBMS-GW-SSM-IPv6-Address",	/* Name */
+			AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY,	/* Fixed flags */
+			AVP_FLAG_VENDOR,	/* Fixed flag values */
+			AVP_TYPE_OCTETSTRING	/* base type of data */
+		};
+		CHECK_dict_new(DICT_AVP, &data, NULL, NULL);
+	};
+
+	/* MBMS-BMSC-SSM-UDP-Port, OctetString, code 926, section 20.5a.4   */
+	{
+		struct dict_avp_data data = {
+			926,	/* Code */
+			10415,	/* Vendor */
+			"MBMS-BMSC-SSM-UDP-Port",	/* Name */
+			AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY,	/* Fixed flags */
+			AVP_FLAG_VENDOR,	/* Fixed flag values */
+			AVP_TYPE_OCTETSTRING	/* base type of data */
+		};
+		CHECK_dict_new(DICT_AVP, &data, NULL, NULL);
+	};
+
+	/* MBMS-GW-UDP-Port, OctetString, code 927, section 20.5a.5         */
+	{
+		struct dict_avp_data data = {
+			927,	/* Code */
+			10415,	/* Vendor */
+			"MBMS-GW-UDP-Port",	/* Name */
+			AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY,	/* Fixed flags */
+			AVP_FLAG_VENDOR,	/* Fixed flag values */
+			AVP_TYPE_OCTETSTRING	/* base type of data */
+		};
+		CHECK_dict_new(DICT_AVP, &data, NULL, NULL);
+	};
+
+	/* MBMS-GW-UDP-Port-Indicator, Enumerated, code 928, section 20.5a.6 */
+	{
+		struct dict_avp_data data = {
+			928,	/* Code */
+			10415,	/* Vendor */
+			"MBMS-GW-UDP-Port-Indicator",	/* Name */
+			AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY,	/* Fixed flags */
+			AVP_FLAG_VENDOR,	/* Fixed flag values */
+			AVP_TYPE_INTEGER32	/* base type of data */
+		};
+		struct dict_object	*type;
+		struct dict_type_data	 tdata = { AVP_TYPE_INTEGER32, "Enumerated(3GPP/MBMS-GW-UDP-Port-Indicator)", NULL, NULL, NULL };
+		CHECK_dict_new(DICT_TYPE, &tdata, NULL, &type);
+		CHECK_dict_new(DICT_AVP, &data, type, NULL);
+	};
+
+	/* MBMS-Data-Transfer-Start, Unsigned64, code 929, section 20.5a.7  */
+	{
+		struct dict_avp_data data = {
+			929,	/* Code */
+			10415,	/* Vendor */
+			"MBMS-Data-Transfer-Start",	/* Name */
+			AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY,	/* Fixed flags */
+			AVP_FLAG_VENDOR,	/* Fixed flag values */
+			AVP_TYPE_UNSIGNED64	/* base type of data */
+		};
+		CHECK_dict_new(DICT_AVP, &data, NULL, NULL);
+	};
+
+	/* MBMS-Data-Transfer-Stop, Unsigned64, code 930, section 20.5a.8   */
+	{
+		struct dict_avp_data data = {
+			930,	/* Code */
+			10415,	/* Vendor */
+			"MBMS-Data-Transfer-Stop",	/* Name */
+			AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY,	/* Fixed flags */
+			AVP_FLAG_VENDOR,	/* Fixed flag values */
+			AVP_TYPE_UNSIGNED64	/* base type of data */
+		};
+		CHECK_dict_new(DICT_AVP, &data, NULL, NULL);
+	};
+
+	/* MBMS-Flag, Unsigned32, code 931, section 20.5a.9                 */
+	{
+		struct dict_avp_data data = {
+			931,	/* Code */
+			10415,	/* Vendor */
+			"MBMS-Flag",	/* Name */
+			AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY,	/* Fixed flags */
+			AVP_FLAG_VENDOR,	/* Fixed flag values */
+			AVP_TYPE_UNSIGNED32	/* base type of data */
+		};
+		CHECK_dict_new(DICT_AVP, &data, NULL, NULL);
+	};
+
+	/* Restart-Counter, Unsigned32, code 932, section 20.5a.10          */
+	{
+		struct dict_avp_data data = {
+			932,	/* Code */
+			10415,	/* Vendor */
+			"Restart-Counter",	/* Name */
+			AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY,	/* Fixed flags */
+			AVP_FLAG_VENDOR,	/* Fixed flag values */
+			AVP_TYPE_UNSIGNED32	/* base type of data */
+		};
+		CHECK_dict_new(DICT_AVP, &data, NULL, NULL);
+	};
+
+	/* Diagnostic-Info, Unsigned32, code 933, section 20.5a.11          */
+	{
+		struct dict_avp_data data = {
+			933,	/* Code */
+			10415,	/* Vendor */
+			"Diagnostic-Info",	/* Name */
+			AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY,	/* Fixed flags */
+			AVP_FLAG_VENDOR,	/* Fixed flag values */
+			AVP_TYPE_UNSIGNED32	/* base type of data */
+		};
+		CHECK_dict_new(DICT_AVP, &data, NULL, NULL);
+	};
+
+	/* MBMS-Cell-List, OctetString, code 934, section 20.5a.12          */
+	{
+		struct dict_avp_data data = {
+			934,	/* Code */
+			10415,	/* Vendor */
+			"MBMS-Cell-List",	/* Name */
+			AVP_FLAG_VENDOR |AVP_FLAG_MANDATORY,	/* Fixed flags */
+			AVP_FLAG_VENDOR,	/* Fixed flag values */
+			AVP_TYPE_OCTETSTRING	/* base type of data */
+		};
+		CHECK_dict_new(DICT_AVP, &data, NULL, NULL);
 	};
 
@@ -1640,4 +1877,5 @@
 
 	/* Note: Name conflict with 3GPP TS 32.299 Status (2702).           */
+	/* Status (1116) renamed to Status-29.140 (1116).                   */
 	/* Status-29.140, Grouped, code 1116, section 6.3.19                */
 	{
@@ -4879,4 +5117,6 @@
 	/*==================================================================*/
 	/* 3GPP TS 29.229 Table 6.3.1: Diameter Multimedia Application AVPs */
+	/*                                                                  */
+	/* Note: AVPs referenced from other sources are not added here.     */
 	/*==================================================================*/
 
@@ -5381,9 +5621,4 @@
 	};
 
-	/* Note: Uses RFC 4590 Digest-Realm (104).                          */
-	/* Note: Uses RFC 4590 Digest-Algorithm (111).                      */
-	/* Note: Uses RFC 4590 Digest-QoP (110).                            */
-	/* Note: Uses RFC 4590 Digest-HA1 (121).                            */
-
 	/* UAR-Flags, Unsigned32, code 637, section 6.3.44                  */
 	{
@@ -5619,7 +5854,4 @@
 	};
 
-	/* Note: Uses RFC 7683 OC-Supported-Features (621).                 */
-	/* Note: Uses RFC 7683 OC-OLR (623).                                */
-
 	/* Initial-CSeq-Sequence-Number, Unsigned32, code 654, section 6.3.62 */
 	{
@@ -5686,7 +5918,4 @@
 		CHECK_dict_new(DICT_AVP, &data, UTF8String_type, NULL);
 	};
-
-	/* Note: Uses RFC 7944 DRMP (301).                                  */
-	/* Note: Uses RFC 8583 Load (650).                                  */
 
 	/* RTR-Flags, Unsigned32, code 659, section 6.3.69                  */
@@ -6699,5 +6928,5 @@
 	/* Note: 3GPP TS 29.272 V12.5.0 (2014-06) table 7.3.1/1             */
 	/* changed row SS-Status (1477) to be OctetString instead of Grouped. */
-	/* Clause 7.3.88 already described SS-Status as OctetString.        */
+	/* Clause 7.3.88 already described SS-Status (1147) as OctetString. */
 	/* SS-Status, OctetString, code 1477, section 7.3.88                */
 	{
@@ -8421,4 +8650,6 @@
 	/*==================================================================*/
 	/* 3GPP TS 29.329 Table 6.3.1: Table 6.3.1: Diameter Multimedia Application AVPs */
+	/*                                                                  */
+	/* Note: AVPs referenced from other sources are not added here.     */
 	/*==================================================================*/
 
@@ -8450,4 +8681,5 @@
 
 	/* Note: Name conflict with 3GPP TS 29.229 User-Data (606).         */
+	/* User-Data (702) renamed to User-Data-29.329 (702).               */
 	/* User-Data-29.329, OctetString, code 702, section 6.3.3           */
 	{
@@ -8585,11 +8817,4 @@
 	};
 
-	/* Note: Uses 3GPP TS 29.229 Server-Name (602).                     */
-	/* Note: Uses 3GPP TS 29.229 Supported-Features (628).              */
-	/* Note: Uses 3GPP TS 29.229 Feature-List-ID (629).                 */
-	/* Note: Uses 3GPP TS 29.229 Feature-List (630).                    */
-	/* Note: Uses 3GPP TS 29.229 Supported-Applications (631).          */
-	/* Note: Uses 3GPP TS 29.229 Public-Identity (601).                 */
-
 	/* DSAI-Tag, OctetString, code 711, section 6.3.18                  */
 	{
@@ -8604,8 +8829,4 @@
 		CHECK_dict_new(DICT_AVP, &data, NULL, NULL);
 	};
-
-	/* Note: Uses 3GPP TS 29.229 Wildcarded-Public-Identity (634).      */
-	/* Note: Uses 3GPP TS 29.229 Wildcarded-IMPU (636).                 */
-	/* Note: Uses 3GPP TS 29.229 Session-Priority (650).                */
 
 	/* One-Time-Notification, Enumerated, code 712, section 6.3.22      */
@@ -8840,4 +9061,5 @@
 
 	/* Note: Name conflict with 3GPP TS 29.212 3GPP-PS-Data-Off-Status (2847). */
+	/* 3GPP-PS-Data-Off-Status (4406) renamed to 3GPP-PS-Data-Off-Status-32.299 (4406). */
 	/* 3GPP-PS-Data-Off-Status-32.299, Enumerated, code 4406            */
 	{
Index: extensions/dict_dcca_3gpp/dict_dcca_3gpp.csv
===================================================================
--- extensions/dict_dcca_3gpp/dict_dcca_3gpp.csv	(revision 1485)
+++ extensions/dict_dcca_3gpp/dict_dcca_3gpp.csv	(revision 1486)
@@ -4,57 +4,75 @@
 @standard,3GPP TS 29.061,,,,,,,
 #=,,,,,,,,
-# 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 TS 29.061 V15.5.0 (2018-12),,,,,,,,
+# From 3GPP 29061-f50.doc,,,,,,,,
+#=,,,,,,,,
+#,,,,,,,,
+#=,,,,,,,,
+# 3GPP TS 29.061 Table 9a: Gi/Sgi specific AVPs,,,,,,,,
+#,,,,,,,,
+# Note: 3GPP TS 29.061 is unclear and inconsistent about M.,,,,,,,,
+"# For this reason, other sources are assumed more trustworthy.",,,,,,,,
+#=,,,,,,,,
+#,,,,,,,,
+# Note: 3GPP-IMSI (1) changed to Must M.,,,,,,,,
+3GPP-IMSI,1,16.4.7,UTF8String,"M,V",P,,,Y
+"# Note: 3GPP-Charging-Id (2) type changed from OctetString to Unsigned32,",,,,,,,,
+# per 3GPP TS 29.061 clause 16.4.7.2/2 and packet dumps.,,,,,,,,
+3GPP-Charging-Id,2,16.4.7,Unsigned32,"M,V",P,,,Y
+# Note: 3GPP-PDP-Type (3) changed to Must M.,,,,,,,,
+3GPP-PDP-Type,3,16.4.7,Enumerated,"M,V",P,,,Y
+3GPP-CG-Address,4,16.4.7,OctetString,V,P,,M,Y
+# Note: 3GPP-GPRS-Negotiated-QoS-Profile (5) changed to Must M per contrib/3gpp.,,,,,,,,
+3GPP-GPRS-Negotiated-QoS-Profile,5,16.4.7,UTF8String,"M,V",P,,,Y
+3GPP-SGSN-Address,6,16.4.7,OctetString,V,P,,M,Y
+3GPP-GGSN-Address,7,16.4.7,OctetString,V,P,,M,Y
+# Note: 3GPP-IMSI-MCC-MNC (8) changed to Must M per packet dumps.,,,,,,,,
+3GPP-IMSI-MCC-MNC,8,16.4.7,UTF8String,"M,V",P,,,Y
+# Note: 3GPP-GGSN-MCC-MNC (9) changed to Must M per contrib/3gpp.,,,,,,,,
+3GPP-GGSN-MCC-MNC,9,16.4.7,UTF8String,"M,V",P,,,Y
+# Note: 3GPP-NSAPI (10) changed to Must M per contrib/3gpp.,,,,,,,,
+3GPP-NSAPI,10,16.4.7,OctetString,"M,V",P,,,Y
+# Note: 3GPP TS 29.061 table 9a does not define,,,,,,,,
+# 3GPP-Session-Stop-Indicator (11) even when it is referenced,,,,,,,,
+# by other 3GPP Diameter AVPs including PS-Information (874).,,,,,,,,
 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,
+# Note: 3GPP-Selection-Mode (12) changed to Must M per contrib/3gpp.,,,,,,,,
+3GPP-Selection-Mode,12,16.4.7,UTF8String,"M,V",P,,,Y
+# Note: 3GPP-Charging-Characteristics (13) changed to Must M per contrib/3gpp.,,,,,,,,
+3GPP-Charging-Characteristics,13,16.4.7,UTF8String,"M,V",P,,,Y
+# Note: 3GPP TS 29.061 V12.6.0 (2014-06) renamed,,,,,,,,
+# 3GPP-CG-IPv6-Address (14) to 3GPP-CG-Ipv6-Address.,,,,,,,,
+# This rename was not applied.,,,,,,,,
+# 3GPP-CG-IPv6-Address (14) changed to Must M per contrib/3gpp.,,,,,,,,
+3GPP-CG-IPv6-Address,14,16.4.7,OctetString,"M,V",P,,,Y
+# Note: 3GPP TS 29.061 V12.6.0 (2014-06) renamed,,,,,,,,
+# 3GPP-SGSN-IPv6-Address (15) to 3GPP-SGSN-Ipv6-Address.,,,,,,,,
+# This rename was not applied.,,,,,,,,
+# 3GPP-SGSN-IPv6-Address (15) changed to Must M per contrib/3gpp.,,,,,,,,
+3GPP-SGSN-IPv6-Address,15,16.4.7,OctetString,"M,V",P,,,Y
+# Note: 3GPP TS 29.061 V12.6.0 (2014-06) renamed,,,,,,,,
+# 3GPP-GGSN-IPv6-Address (16) to 3GPP-GGSN-Ipv6-Address.,,,,,,,,
+# This rename was not applied.,,,,,,,,
+# 3GPP-GGSN-IPv6-Address (16) changed to Must M per contrib/3gpp.,,,,,,,,
+3GPP-GGSN-IPv6-Address,16,16.4.7,OctetString,"M,V",P,,,Y
+# Note: 3GPP TS 29.061 V12.6.0 (2014-06) renamed,,,,,,,,
+# 3GPP-IPv6-DNS-Servers (17) to 3GPP-Ipv6-DNS-Servers.,,,,,,,,
+# This rename was not applied.,,,,,,,,
+# 3GPP-IPv6-DNS-Servers (17) changed to Must M per contrib/3gpp.,,,,,,,,
+3GPP-IPv6-DNS-Servers,17,16.4.7,OctetString,"M,V",P,,,Y
+# Note: 3GPP-SGSN-MCC-MNC (18) changed to Must M per contrib/3gpp.,,,,,,,,
+3GPP-SGSN-MCC-MNC,18,16.4.7,UTF8String,"M,V",P,,,Y
+# Note: 3GPP-IMEISV (20) changed to Must M.,,,,,,,,
+3GPP-IMEISV,20,16.4.7,OctetString,"M,V",P,,,Y
+# Note: 3GPP-RAT-Type (21) changed to Must M.,,,,,,,,
+3GPP-RAT-Type,21,16.4.7,OctetString,"M,V",P,,,Y
+# Note: 3GPP-User-Location-Info (22) changed to Must M.,,,,,,,,
+3GPP-User-Location-Info,22,16.4.7,OctetString,"M,V",P,,,Y
+# Note: 3GPP-MS-TimeZone (23) changed to Must M.,,,,,,,,
+3GPP-MS-TimeZone,23,16.4.7,OctetString,"M,V",P,,,Y
+3GPP-CAMEL-Charging-Info,24,16.4.7,OctetString,V,P,,M,Y
+3GPP-Packet-Filter,25,16.4.7,OctetString,V,P,,M,Y
+3GPP-Negotiated-DSCP,26,16.4.7,OctetString,V,P,,M,Y
+3GPP-Allocate-IP-Type,27,16.4.7,OctetString,V,P,,M,Y
 # Note: 3GPP TS 29.061 table 9a does not define,,,,,,,,
 # External-Identifier (28) for Diameter.,,,,,,,,
@@ -65,27 +83,61 @@
 # External-Identifier (3111) UTF8String.,,,,,,,,
 #,,,,,,,,
-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,,,
+#,,,,,,,,
+TWAN-Identifier,29,16.4.7,OctetString,V,P,,M,Y
+3GPP-User-Location-Info-Time,30,16.4.7,OctetString,V,P,,M,Y
+3GPP-Secondary-RAT-Usage,31,16.4.7,OctetString,V,P,,M,Y
+#=,,,,,,,,
+# 3GPP TS 29.061 Table 10: Gmb specific AVPs,,,,,,,,
+#=,,,,,,,,
+#,,,,,,,,
+TMGI,900,17.7.2,OctetString,"M,V",P,,,Y
+Required-MBMS-Bearer-Capabilities,901,17.7.3,UTF8String,"M,V",P,,,Y
+MBMS-StartStop-Indication,902,17.7.5,Enumerated,"M,V",P,,,Y
+MBMS-Service-Area,903,17.7.6,OctetString,"M,V",P,,,Y
+MBMS-Session-Duration,904,17.7.7,OctetString,"M,V",P,,,Y
+Alternative-APN,905,17.7.8,UTF8String,"M,V",P,,,Y
+MBMS-Service-Type,906,17.7.9,Enumerated,"M,V",P,,,Y
+MBMS-2G-3G-Indicator,907,17.7.10,Enumerated,"M, V",P,,,Y
+MBMS-Session-Identity,908,17.7.11,OctetString,"M,V",P,,,Y
+RAI,909,17.7.12,UTF8String,"M, V",P,,,Y
+Additional-MBMS-Trace-Info,910,17.7.13,OctetString,"M,V",P,,,Y
+MBMS-Time-To-Data-Transfer,911,17.7.14,OctetString,"M,V",P,,,Y
+MBMS-Session-Repetition-Number,912,17.7.15,OctetString,"M,V",P,,,Y
+MBMS-Required-QoS,913,17.7.16,UTF8String,"M,V",P,,,Y
+MBMS-Counting-Information,914,17.7.17,Enumerated,"M,V",P,,,Y
+MBMS-User-Data-Mode-Indication,915,17.7.18,Enumerated,"M,V",P,,,Y
+MBMS-GGSN-Address,916,17.7.19,OctetString,"M,V",P,,,Y
+# Note: 3GPP TS 29.061 V12.6.0 (2014-06) renamed,,,,,,,,
+# MBMS-GGSN-IPv6-Address (917) to MBMS-GGSN-Ipv6-Address.,,,,,,,,
+# This rename was not applied.,,,,,,,,
+MBMS-GGSN-IPv6-Address,917,17.7.20,OctetString,"M,V",P,,,Y
+MBMS-BMSC-SSM-IP-Address,918,17.7.21,OctetString,"M,V",P,,,Y
+# Note: 3GPP TS 29.061 V12.6.0 (2014-06) renamed,,,,,,,,
+# MBMS-BMSC-SSM-IPv6-Address (919) to MBMS-BMSC-SSM-Ipv6-Address.,,,,,,,,
+# This rename was not applied.,,,,,,,,
+MBMS-BMSC-SSM-IPv6-Address,919,17.7.22,OctetString,"M,V",P,,,Y
+MBMS-Flow-Identifier,920,17.7.23,OctetString,"M,V",P,,,Y
+CN-IP-Multicast-Distribution,921,17.7.24,Enumerated,"M,V",P,,,Y
+MBMS-HC-Indicator,922,17.7.25,Enumerated,"M,V",P,,,Y
+,,,,,,,,
+#=,,,,,,,,
+# 3GPP TS 29.061 Table 20.5a.1: SGmb specific AVPs,,,,,,,,
+#=,,,,,,,,
+#,,,,,,,,
+MBMS-Access-Indicator,923,20.5a.1,Enumerated,"M,V",P,,,Y
+MBMS-GW-SSM-IP-Address,924,20.5a.2,OctetString,V,P,,M,Y
+# Note: 3GPP TS 29.061 V12.6.0 (2014-06) renamed,,,,,,,,
+# MBMS-GW-SSM-IPv6-Address (925) to MBMS-GW-SSM-Ipv6-Address.,,,,,,,,
+# This rename was not applied.,,,,,,,,
+MBMS-GW-SSM-IPv6-Address,925,20.5a.3,OctetString,V,P,,M,Y
+MBMS-BMSC-SSM-UDP-Port,926,20.5a.4,OctetString,V,P,,M,Y
+MBMS-GW-UDP-Port,927,20.5a.5,OctetString,V,P,,M,Y
+MBMS-GW-UDP-Port-Indicator,928,20.5a.6,Enumerated,V,P,,M,Y
+MBMS-Data-Transfer-Start,929,20.5a.7,Unsigned64,V,P,,M,Y
+MBMS-Data-Transfer-Stop,930,20.5a.8,Unsigned64,V,P,,M,Y
+MBMS-Flag,931,20.5a.9,Unsigned32,V,P,,M,Y
+Restart-Counter,932,20.5a.10,Unsigned32,V,P,,M,Y
+Diagnostic-Info,933,20.5a.11,Unsigned32,V,P,,M,Y
+MBMS-Cell-List,934,20.5a.12,OctetString,V,P,,M,Y
 ,,,,,,,,
 @standard,3GPP TS 29.129,,,,,,,
