diff options
author | Anders Broman <anders.broman@ericsson.com> | 2008-01-27 21:06:33 +0000 |
---|---|---|
committer | Anders Broman <anders.broman@ericsson.com> | 2008-01-27 21:06:33 +0000 |
commit | ce40fc22a49bf8b0029779203bb87b5d7408eb49 (patch) | |
tree | 32d750337f148f807b64746bfd3a9bf6bdb6734d /epan/dissectors/packet-diameter.c | |
parent | 3278775634f9872fbce3bd74c8c87d0f4f6145a9 (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.c | 21 |
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); |