aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--epan/dissectors/packet-arp.c5
-rw-r--r--epan/dissectors/packet-isup.c98
-rw-r--r--epan/osi-utils.c5
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 )
{