diameter_3gpp: add decoding of Sd feature list
authorJan Spevak <jan.spevak@nokia.com>
Mon, 14 Nov 2016 07:54:39 +0000 (08:54 +0100)
committerRoland Knall <rknall@gmail.com>
Mon, 14 Nov 2016 10:53:55 +0000 (10:53 +0000)
Change-Id: I431cb2cb39328a7aa537eaa00b1cb1ab07723d3e
Reviewed-on: https://code.wireshark.org/review/18815
Reviewed-by: Anders Broman <a.broman58@gmail.com>
Petri-Dish: Anders Broman <a.broman58@gmail.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Roland Knall <rknall@gmail.com>
epan/dissectors/packet-diameter.h
epan/dissectors/packet-diameter_3gpp.c

index df62e9dd9e88e8bb03f0a184ced3e2a3a81f7c0b..42b9ca3fae4e1880577d649d6f4bd92ab739dbd6 100644 (file)
@@ -52,4 +52,5 @@ typedef struct _diam_sub_dis_t {
 #define DIAM_APPID_3GPP_S6A_S6D 16777251
 #define DIAM_APPID_3GPP_S13    16777252
 #define DIAM_APPID_3GPP_SLH    16777291
+#define DIAM_APPID_3GPP_SD     16777303
 #define DIAM_APPID_3GPP_S7A    16777308
index 555c05bf4439a3e6e90c8f12ee7749e18079d3c8..82d03812e24969e399c70075bb8e5fdc723cd67e 100644 (file)
@@ -156,6 +156,19 @@ static int hf_diameter_3gpp_feature_list_gx_flags_bit28 = -1;
 static int hf_diameter_3gpp_feature_list_gx_flags_bit29 = -1;
 static int hf_diameter_3gpp_feature_list_gx_flags_bit30 = -1;
 static int hf_diameter_3gpp_feature_list_gx_flags_bit31 = -1;
+static int hf_diameter_3gpp_feature_list_sd_flags = -1;
+static int hf_diameter_3gpp_feature_list_sd_flags_bit0 = -1;
+static int hf_diameter_3gpp_feature_list_sd_flags_bit1 = -1;
+static int hf_diameter_3gpp_feature_list_sd_flags_bit2 = -1;
+static int hf_diameter_3gpp_feature_list_sd_flags_bit3 = -1;
+static int hf_diameter_3gpp_feature_list_sd_flags_bit4 = -1;
+static int hf_diameter_3gpp_feature_list_sd_flags_bit5 = -1;
+static int hf_diameter_3gpp_feature_list_sd_flags_bit6 = -1;
+static int hf_diameter_3gpp_feature_list_sd_flags_bit7 = -1;
+static int hf_diameter_3gpp_feature_list_sd_flags_bit8 = -1;
+static int hf_diameter_3gpp_feature_list_sd_flags_bit9 = -1;
+static int hf_diameter_3gpp_feature_list_sd_flags_bit10 = -1;
+static int hf_diameter_3gpp_feature_list_sd_flags_spare_bits = -1;
 static int hf_diameter_3gpp_cms_no_gyn_session_serv_not_allowed = -1;
 static int hf_diameter_3gpp_cms_no_gyn_session_serv_allowed = -1;
 static int hf_diameter_3gpp_cms_rating_failed = -1;
@@ -709,6 +722,23 @@ static const int *diameter_3gpp_gx_feature_list_1_fields[] = {
     NULL
 };
 
+/* 3GPP TS 29.212 V14.0.0 (2016-09) */
+static const int *diameter_3gpp_sd_feature_list_fields[] = {
+    &hf_diameter_3gpp_feature_list_sd_flags_spare_bits,
+    &hf_diameter_3gpp_feature_list_sd_flags_bit10,
+    &hf_diameter_3gpp_feature_list_sd_flags_bit9,
+    &hf_diameter_3gpp_feature_list_sd_flags_bit8,
+    &hf_diameter_3gpp_feature_list_sd_flags_bit7,
+    &hf_diameter_3gpp_feature_list_sd_flags_bit6,
+    &hf_diameter_3gpp_feature_list_sd_flags_bit5,
+    &hf_diameter_3gpp_feature_list_sd_flags_bit4,
+    &hf_diameter_3gpp_feature_list_sd_flags_bit3,
+    &hf_diameter_3gpp_feature_list_sd_flags_bit2,
+    &hf_diameter_3gpp_feature_list_sd_flags_bit1,
+    &hf_diameter_3gpp_feature_list_sd_flags_bit0,
+    NULL
+};
+
 static int
 dissect_diameter_3gpp_feature_list(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data)
 {
@@ -853,6 +883,10 @@ dissect_diameter_3gpp_feature_list(tvbuff_t *tvb, packet_info *pinfo _U_, proto_
             diameter_3gpp_feature_list_ett, diameter_3gpp_gx_feature_list_1_fields, ENC_BIG_ENDIAN, BMT_NO_APPEND);
 
         break;
+    case DIAM_APPID_3GPP_SD: /* 3GPP TS 29.212 V14.0.0 (2016-09) */
+        proto_tree_add_bitmask_with_flags(tree, tvb, 0, hf_diameter_3gpp_feature_list_sd_flags,
+            diameter_3gpp_feature_list_ett, diameter_3gpp_sd_feature_list_fields, ENC_BIG_ENDIAN, BMT_NO_APPEND);
+        break;
     default:
         break;
     }
@@ -3785,7 +3819,71 @@ proto_register_diameter_3gpp(void)
             FT_UINT32, BASE_HEX, NULL, 0xFFFFFFFE,
             NULL, HFILL }
         },
-
+        { &hf_diameter_3gpp_feature_list_sd_flags,
+        { "SD Feature-List Flags", "diameter.3gpp.sd_feature_list_flags",
+          FT_UINT32, BASE_HEX, NULL, 0x0,
+          NULL, HFILL }
+        },
+        { &hf_diameter_3gpp_feature_list_sd_flags_bit0,
+        { "UMCH", "diameter.3gpp.feature_list_sd_flags_bit0",
+          FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000001,
+          NULL, HFILL}
+        },
+        { &hf_diameter_3gpp_feature_list_sd_flags_bit1,
+        { "Trusted-WLAN", "diameter.3gpp.feature_list_sd_flags_bit1",
+          FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000002,
+          NULL, HFILL}
+        },
+        { &hf_diameter_3gpp_feature_list_sd_flags_bit2,
+        { "TimeBasedUM", "diameter.3gpp.feature_list_sd_flags_bit2",
+          FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000004,
+          NULL, HFILL}
+        },
+        { &hf_diameter_3gpp_feature_list_sd_flags_bit3,
+        { "PendingTransaction", "diameter.3gpp.feature_list_sd_flags_bit3",
+          FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000008,
+          NULL, HFILL}
+        },
+        { &hf_diameter_3gpp_feature_list_sd_flags_bit4,
+        { "ABC", "diameter.3gpp.feature_list_sd_flags_bit4",
+          FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000010,
+          NULL, HFILL}
+        },
+        { &hf_diameter_3gpp_feature_list_sd_flags_bit5,
+        { "CNO-ULI", "diameter.3gpp.feature_list_sd_flags_bit5",
+          FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000020,
+          NULL, HFILL}
+        },
+        { &hf_diameter_3gpp_feature_list_sd_flags_bit6,
+        { "ExUsage", "diameter.3gpp.feature_list_sd_flags_bit6",
+          FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000040,
+          NULL, HFILL}
+        },
+        { &hf_diameter_3gpp_feature_list_sd_flags_bit7,
+        { "DLDSCPMarking", "diameter.3gpp.feature_list_sd_flags_bit7",
+          FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000080,
+          NULL, HFILL}
+        },
+        { &hf_diameter_3gpp_feature_list_sd_flags_bit8,
+        { "TSC", "diameter.3gpp.feature_list_sd_flags_bit8",
+          FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000100,
+          NULL, HFILL}
+        },
+        { &hf_diameter_3gpp_feature_list_sd_flags_bit9,
+        { "ENB-Change", "diameter.3gpp.feature_list_sd_flags_bit9",
+          FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000200,
+          NULL, HFILL}
+        },
+        { &hf_diameter_3gpp_feature_list_sd_flags_bit10,
+        { "SponsoredConnectivity-Sd", "diameter.3gpp.feature_list_sd_flags_bit10",
+          FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000400,
+          NULL, HFILL}
+        },
+        { &hf_diameter_3gpp_feature_list_sd_flags_spare_bits,
+        { "Spare", "diameter.3gpp.feature_list_sd_flags_spare",
+          FT_UINT32, BASE_HEX, NULL, 0xFFFFF800,
+          NULL, HFILL}
+        },
 };