diff options
-rw-r--r-- | epan/dissectors/packet-arp.c | 5 | ||||
-rw-r--r-- | epan/dissectors/packet-isup.c | 98 | ||||
-rw-r--r-- | epan/osi-utils.c | 5 |
3 files changed, 62 insertions, 46 deletions
diff --git a/epan/dissectors/packet-arp.c b/epan/dissectors/packet-arp.c index a223bf8723..79eb542469 100644 --- a/epan/dissectors/packet-arp.c +++ b/epan/dissectors/packet-arp.c @@ -296,6 +296,11 @@ dissect_atm_number(tvbuff_t *tvb, int offset, int tl, int hf_e164, } } +/* + * XXX - shouldn't there be a centralized routine for dissecting NSAPs? + * See also "dissect_nsap()" in epan/dissectors/packet-isup.c and + * "print_nsap_net_buf()" and "print_nsap_net()" in epan/osi=utils.c. + */ void dissect_atm_nsap(tvbuff_t *tvb, int offset, int len, proto_tree *tree) { diff --git a/epan/dissectors/packet-isup.c b/epan/dissectors/packet-isup.c index 681992a791..6c8321d931 100644 --- a/epan/dissectors/packet-isup.c +++ b/epan/dissectors/packet-isup.c @@ -1939,14 +1939,20 @@ static const value_string x213_afi_value[] = { }; -/* Up-to-date information on the allocated ICP values can be found at: */ -/*http://www.iana.org/assignments/osi-nsapanumbers. */ +/* Up-to-date information on the allocated ICP values can be found in */ +/*draft-gray-rfc1888bis-01 at */ +/*http://www.ietf.org/internet-drafts/draft-gray-rfc1888bis-01.txt */ static const value_string iana_icp_values[] = { { 0x0, "IP Version 6 Address"}, { 0x1, "IP Version 4 Address"}, { 0, NULL } }; +/* + * XXX - shouldn't there be a centralized routine for dissecting NSAPs? + * See also "dissect_atm_nsap()" in epan/dissectors/packet-arp.c and + * "print_nsap_net_buf()" and "print_nsap_net()" in epan/osi_utils.c. + */ void dissect_nsap(tvbuff_t *parameter_tvb,gint offset,gint len, proto_tree *parameter_tree) { @@ -1968,12 +1974,13 @@ dissect_nsap(tvbuff_t *parameter_tvb,gint offset,gint len, proto_tree *parameter if ( icp == 0 ){ /* IPv6 addr */ proto_tree_add_text(parameter_tree, parameter_tvb, offset + 2 , 17, "DSP = %s", tvb_bytes_to_str(parameter_tvb, offset + 2, 17)); - proto_tree_add_item(parameter_tree, hf_nsap_ipv6_addr, parameter_tvb, offset, + proto_tree_add_item(parameter_tree, hf_nsap_ipv6_addr, parameter_tvb, offset + 2, 16, FALSE); } else { /* IPv4 addr */ - proto_tree_add_text(parameter_tree, parameter_tvb, offset + 2 , 3, + /* XXX - this is really only for ICP 1 */ + proto_tree_add_text(parameter_tree, parameter_tvb, offset + 2, 17, "DSP = %s", tvb_bytes_to_str(parameter_tvb, offset + 2, 17)); proto_tree_add_item(parameter_tree, hf_nsap_ipv4_addr, parameter_tvb, offset + 2, 4, FALSE); } @@ -1998,27 +2005,27 @@ dissect_nsap(tvbuff_t *parameter_tvb,gint offset,gint len, proto_tree *parameter } cc = tvb_get_ntohs(parameter_tvb, cc_offset); if (( address_digit_pair & 0xf0 ) != 0 ) - cc = cc >> 4; + cc = cc >> 4; switch ( cc & 0x0f00 ) { case 0x0 : cc_length = 1; - break; + break; case 0x0100 : cc_length = 1; - break; + break; case 0x0200 : - switch ( cc & 0x00f0 ) { + switch ( cc & 0x00f0 ) { case 0 : case 7 : cc_length = 2; - break; + break; default : cc_length = 3; } - break; + break; case 0x0300 : - switch ( cc & 0x00f0 ) { + switch ( cc & 0x00f0 ) { case 0 : case 1 : case 2 : @@ -2026,56 +2033,56 @@ dissect_nsap(tvbuff_t *parameter_tvb,gint offset,gint len, proto_tree *parameter case 4 : case 6 : case 9 : cc_length = 2; - break; + break; default : cc_length = 3; - break; + break; } - break; + break; case 0x0400 : - switch ( cc & 0x00f0 ) { + switch ( cc & 0x00f0 ) { case 2 : cc_length = 3; - break; + break; default : cc_length = 2; - break; + break; } - break; + break; case 0x0500 : - switch ( cc & 0x00f0 ) { + switch ( cc & 0x00f0 ) { case 0 : case 9 : cc_length = 3; - break; + break; default : cc_length = 2; - break; + break; } - break; + break; case 0x0600 : - switch ( cc & 0x00f0 ) { + switch ( cc & 0x00f0 ) { case 7 : case 8 : case 9 : cc_length = 3; - break; + break; default : cc_length = 2; - break; + break; } - break; + break; case 0x0700 : cc_length = 1; - break; + break; case 0x0800 : - switch ( cc & 0x00f0 ) { + switch ( cc & 0x00f0 ) { case 1 : case 2 : case 4 : case 6 : cc_length = 2; - break; + break; default : cc_length = 3; - break; + break; } - break; + break; case 0x0900 : switch ( cc & 0x00f0 ) { @@ -2086,41 +2093,40 @@ dissect_nsap(tvbuff_t *parameter_tvb,gint offset,gint len, proto_tree *parameter case 4 : case 5 : case 8 : cc_length = 2; - break; + break; default : cc_length = 3; - break; + break; } - break; + break; default: ; }/* End switch cc */ switch ( cc_length ) { case 0x1 : cc = cc >> 8; length = 1; - break; + break; case 0x2 : cc = cc >> 4; length = 1; - break; + break; default: length = 2; - break; + break; }/* end switch cc_length */ proto_tree_add_text(parameter_tree,parameter_tvb, cc_offset, length,"Country Code: %x %s length %u",cc, val_to_str(cc,E164_country_code_value,"unknown (%x)"),cc_length); switch ( cc ) { - case 0x882 : - id_code = tvb_get_ntohs(parameter_tvb, cc_offset + 1); - id_code = (id_code & 0x0fff) >> 4; - proto_tree_add_text(parameter_tree,parameter_tvb, (cc_offset + 1), 2,"Identification Code: %x %s ",id_code, - val_to_str(id_code,E164_International_Networks_vals,"unknown (%x)")); - + case 0x882 : + id_code = tvb_get_ntohs(parameter_tvb, cc_offset + 1); + id_code = (id_code & 0x0fff) >> 4; + proto_tree_add_text(parameter_tree,parameter_tvb, (cc_offset + 1), 2,"Identification Code: %x %s ",id_code, + val_to_str(id_code,E164_International_Networks_vals,"unknown (%x)")); break; - default:; - } + default:; + } proto_tree_add_text(parameter_tree,parameter_tvb, cc_offset, length,"DSP length %u(len %u -9 )",(len-9),len ); proto_tree_add_item(parameter_tree, hf_bicc_nsap_dsp, parameter_tvb, offset + 8, (len - 9),FALSE); - break; + break; default: proto_tree_add_uint(parameter_tree, hf_afi, parameter_tvb, offset, len, afi ); }/* end switch afi */ diff --git a/epan/osi-utils.c b/epan/osi-utils.c index b7a00605ef..f3045dea10 100644 --- a/epan/osi-utils.c +++ b/epan/osi-utils.c @@ -36,6 +36,11 @@ #include "osi-utils.h" #include "emem.h" +/* + * XXX - shouldn't there be a centralized routine for dissecting NSAPs? + * See also "dissect_atm_nsap()" in epan/dissectors/packet-arp.c and + * "dissect_nsap()" in epan/dissectors/packet-isup.c. + */ gchar * print_nsap_net( const guint8 *ad, int length ) { |