diff options
author | Olivier Abad <oabad@noos.fr> | 1999-12-09 23:03:49 +0000 |
---|---|---|
committer | Olivier Abad <oabad@noos.fr> | 1999-12-09 23:03:49 +0000 |
commit | 4386d1e3523f347ba46084c3e727b76b43df5bdb (patch) | |
tree | 107ef900d4068aecb93372e9c386a28e64955376 /packet-x25.c | |
parent | 537cbc8d42b2847e1027904de4581503d5acf1fb (diff) | |
download | wireshark-4386d1e3523f347ba46084c3e727b76b43df5bdb.tar.gz wireshark-4386d1e3523f347ba46084c3e727b76b43df5bdb.tar.bz2 wireshark-4386d1e3523f347ba46084c3e727b76b43df5bdb.zip |
Class A facilities decoding :
- correct a problem with throughput class calculation
- improved the display using decode_xxx_bitfield()
svn path=/trunk/; revision=1269
Diffstat (limited to 'packet-x25.c')
-rw-r--r-- | packet-x25.c | 168 |
1 files changed, 117 insertions, 51 deletions
diff --git a/packet-x25.c b/packet-x25.c index 7bb5ebde87..16f05929c1 100644 --- a/packet-x25.c +++ b/packet-x25.c @@ -2,7 +2,7 @@ * Routines for x25 packet disassembly * Olivier Abad <abad@daba.dhis.net> * - * $Id: packet-x25.c,v 1.11 1999/12/09 13:51:08 oabad Exp $ + * $Id: packet-x25.c,v 1.12 1999/12/09 23:03:49 oabad Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -618,95 +618,161 @@ dump_facilities(proto_tree *tree, int *offset, const guint8 *p) case X25_FAC_CLASS_A: switch (*ptr) { case X25_FAC_COMP_MARK: + if (fac_tree) + proto_tree_add_text(fac_tree, *offset, 1, "Code : 00 (Marker)"); switch (ptr[1]) { case 0x00: if (fac_tree) - proto_tree_add_text(fac_tree, *offset, 2, - "Network complementary services - calling DTE"); + proto_tree_add_text(fac_tree, *offset+1, 1, + "Parameter : 00 (Network complementary " + "services - calling DTE)"); break; case 0xFF: if (fac_tree) - proto_tree_add_text(fac_tree, *offset, 2, - "Network complementary services - called DTE"); + proto_tree_add_text(fac_tree, *offset+1, 1, + "Parameter : FF (Network complementary " + "services - called DTE)"); break; case 0x0F: if (fac_tree) - proto_tree_add_text(fac_tree, *offset, 2, - "DTE complementary services"); + proto_tree_add_text(fac_tree, *offset+1, 1, + "Parameter : 0F (DTE complementary " + "services)"); break; default: if (fac_tree) - proto_tree_add_text(fac_tree, *offset, 2, - "Unknown marker"); + proto_tree_add_text(fac_tree, *offset+1, 1, + "Parameter : %02X (Unknown marker)", + ptr[1]); break; } break; case X25_FAC_REVERSE: if (fac_tree) { - if (ptr[1] & 0x01) - proto_tree_add_text(fac_tree, *offset, 2, - "Reverse Charging"); - else - proto_tree_add_text(fac_tree, *offset, 2, - "No Reverse Charging"); + proto_tree_add_text(fac_tree, *offset, 1, "Code : %02X (Reverse " + "charging / Fast select)", *ptr); + proto_tree_add_text(fac_tree, *offset+1, 1, "Parameter : %02X", + ptr[1]); if (ptr[1] & 0xC0) - proto_tree_add_text(fac_tree, *offset, 2, - "Fast select with restriction"); + proto_tree_add_text(fac_tree, *offset+1, 1, + "11.. .... = Fast select with restriction"); else if (ptr[1] & 0x80) - proto_tree_add_text(fac_tree, *offset, 2, - "Fast select - no restriction"); + proto_tree_add_text(fac_tree, *offset+1, 1, + "10.. .... = Fast select - no restriction"); else - proto_tree_add_text(fac_tree, *offset, 2, - "No Fast select"); + proto_tree_add_text(fac_tree, *offset+1, 1, + "00.. .... = Fast select not requested"); + proto_tree_add_text(fac_tree, *offset+1, 1, + decode_boolean_bitfield(ptr[1], 0x01, 1*8, + "Reverse charging requested", + "Reverse charging not requested")); } break; case X25_FAC_THROUGHPUT: if (fac_tree) { - int called_dte_throughput=0; - int calling_dte_throughput=0; + char tmpbuf[80]; - if ( (ptr[1] >> 4) >= 3 && (ptr[1] >> 4) <= 13 ) - called_dte_throughput = 75*2^((ptr[1] >> 4)-3); - if ( (ptr[1] & 0x0F) >= 3 && (ptr[1] & 0x0F) <= 13 ) - calling_dte_throughput = 75*2^((ptr[1] & 0x0F)-3); - proto_tree_add_text(fac_tree, *offset, 2, - "Throughput: called DTE: %d - calling DTE: %d", - called_dte_throughput, calling_dte_throughput); + proto_tree_add_text(fac_tree, *offset, 1, "Code : %02X (Throughput " + "class negociation)", *ptr); + switch (ptr[1] >> 4) + { + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + sprintf(tmpbuf, "From the called DTE : %%u (%d bps)", + 75*(1<<((ptr[1] >> 4)-3))); + break; + case 12: + sprintf(tmpbuf, "From the called DTE : %%u (48000 bps)"); + break; + case 13: + sprintf(tmpbuf, "From the called DTE : %%u (64000 bps)"); + break; + default: + sprintf(tmpbuf, "From the called DTE : %%u (Reserved)"); + } + proto_tree_add_text(fac_tree, *offset+1, 1, + decode_numeric_bitfield(ptr[1], 0xF0, 1*8, tmpbuf)); + switch (ptr[1] & 0x0F) + { + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + sprintf(tmpbuf, "From the calling DTE : %%u (%d bps)", + 75*(1<<((ptr[1] & 0x0F)-3))); + break; + case 12: + sprintf(tmpbuf, "From the calling DTE : %%u (48000 bps)"); + break; + case 13: + sprintf(tmpbuf, "From the calling DTE : %%u (64000 bps)"); + break; + default: + sprintf(tmpbuf, "From the calling DTE : %%u (Reserved)"); + } + proto_tree_add_text(fac_tree, *offset+1, 1, + decode_numeric_bitfield(ptr[1], 0x0F, 1*8, tmpbuf)); } break; case X25_FAC_CUG: - if (fac_tree) - proto_tree_add_text(fac_tree, *offset, 2, - "Closed user group: %d%d", - ptr[1] >> 4, ptr[1] & 0x0F); + if (fac_tree) { + proto_tree_add_text(fac_tree, *offset, 1, "Code : %02X (Closed user " + "group selection)", *ptr); + proto_tree_add_text(fac_tree, *offset+1, 1, + "Closed user group: %02X", ptr[1]); + } break; case X25_FAC_CALLED_MODIF: - if (fac_tree) + if (fac_tree) { + proto_tree_add_text(fac_tree, *offset, 1, "Code : %02X (Called " + "address modified)", *ptr); proto_tree_add_text(fac_tree, *offset, 2, - "Called address modified: %02X", - ptr[1]); + "Parameter %02X", ptr[1]); + } break; case X25_FAC_CUG_OUTGOING_ACC: - if (fac_tree) - proto_tree_add_text(fac_tree, *offset, 2, - "CUG with outgoing access: %d%d", - ptr[1]>>4, ptr[1] & 0x0F); + if (fac_tree) { + proto_tree_add_text(fac_tree, *offset, 1, "Code : %02X (Closed user " + "group with outgoing access selection)", *ptr); + proto_tree_add_text(fac_tree, *offset+1, 1, + "Closed user group: %02X", ptr[1]); + } break; case X25_FAC_THROUGHPUT_MIN: - if (fac_tree) - proto_tree_add_text(fac_tree, *offset, 2, - "Minimum throughput class"); + if (fac_tree) { + proto_tree_add_text(fac_tree, *offset, 1, "Code : %02X (Minimum " + "throughput class)", *ptr); + proto_tree_add_text(fac_tree, *offset+1, 1, + "Parameter %02X", ptr[1]); + } break; case X25_FAC_EXPRESS_DATA: - if (fac_tree) - proto_tree_add_text(fac_tree, *offset, 2, - "Negociation of express data"); + if (fac_tree) { + proto_tree_add_text(fac_tree, *offset, 1, "Code : %02X (Negociation " + "of express data)", *ptr); + proto_tree_add_text(fac_tree, *offset+1, 1, + "Parameter %02X", ptr[1]); + } break; default: - if (fac_tree) - proto_tree_add_text(fac_tree, *offset, 2, - "Unknown facility %02X, value %02X", - ptr[0], ptr[1]); + if (fac_tree) { + proto_tree_add_text(fac_tree, *offset, 1, "Code : %02X (Unknown)", + *ptr); + proto_tree_add_text(fac_tree, *offset+1, 1, + "Parameter %02X", ptr[1]); + } break; } (*offset) += 2; |