aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-diameter.c
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2008-01-27 21:06:33 +0000
committerAnders Broman <anders.broman@ericsson.com>2008-01-27 21:06:33 +0000
commitce40fc22a49bf8b0029779203bb87b5d7408eb49 (patch)
tree32d750337f148f807b64746bfd3a9bf6bdb6734d /epan/dissectors/packet-diameter.c
parent3278775634f9872fbce3bd74c8c87d0f4f6145a9 (diff)
Make it possible to do subdissection of Diameter AVP:s and add dissection
of some 3GPP AVP:s. svn path=/trunk/; revision=24211
Diffstat (limited to 'epan/dissectors/packet-diameter.c')
-rw-r--r--epan/dissectors/packet-diameter.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/epan/dissectors/packet-diameter.c b/epan/dissectors/packet-diameter.c
index 1d05016a59..7ce6a45ba5 100644
--- a/epan/dissectors/packet-diameter.c
+++ b/epan/dissectors/packet-diameter.c
@@ -268,6 +268,10 @@ static range_t *diameter_tcp_port_range;
/* desegmentation of Diameter over TCP */
static gboolean gbl_diameter_desegment = TRUE;
+/* Dissector tables */
+#define VND_3GPP 10415
+static dissector_table_t diameter_3gpp_avp_dissector_table;
+
static const char* avpflags_str[] = {
"---",
"--P",
@@ -398,6 +402,20 @@ static int dissect_diameter_avp(diam_ctx_t* c, tvbuff_t* tvb, int offset) {
if (avp_str) proto_item_append_text(avp_item," val=%s", avp_str);
+ /* Call subdissectors for AVP:s */
+ switch (vendorid){
+ case 0:
+ break;
+ case VND_3GPP:
+ dissector_try_port(diameter_3gpp_avp_dissector_table, code, subtvb, c->pinfo, avp_tree);
+ break;
+ default:
+ break;
+ }
+ /* Debug
+ proto_tree_add_text(avp_tree, subtvb, 0, -1, "AVP %u data, Vendor Id %u ",code,vendorid);
+ */
+
return len;
}
@@ -1342,6 +1360,9 @@ proto_register_diameter(void)
/* Allow dissector to find be found by name. */
new_register_dissector("diameter", dissect_diameter, proto_diameter);
+
+ /* Register dissector table(s) to do sub dissection of AVP:s ( OctetStrings) */
+ diameter_3gpp_avp_dissector_table = register_dissector_table("diameter.3gpp", "DIAMETER_3GPP_AVPS", FT_UINT32, BASE_DEC);
/* Set default TCP ports */
range_convert_str(&global_diameter_tcp_port_range, DEFAULT_DIAMETER_PORT_RANGE, MAX_UDP_PORT);