Ethereal-dev: [Ethereal-dev] more verbose IS-IS dissector ...
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Hannes Gredler <hannes@xxxxxxxxxxx>
Date: Thu, 29 Aug 2002 11:20:38 +0200
hi ethereal dedvelopers, pls find attached a patch that makes IS-IS more verbose in the INFO field; specifically for IIHs the System-ID of the Hello LSPs the LSP-ID, Sequence #, Lifetime CSNPs the LAN-ID, Start LSP-ID, End LSP-ID /hannes
? epan/COS-TEst-RSVP.doc Index: packet-esis.c =================================================================== RCS file: /cvsroot/ethereal/packet-esis.c,v retrieving revision 1.26 diff -u -r1.26 packet-esis.c --- packet-esis.c 2002/08/02 23:35:49 1.26 +++ packet-esis.c 2002/08/28 13:19:36 @@ -32,6 +32,7 @@ #include <string.h> #include <glib.h> #include <epan/packet.h> +#include <epan/resolv.h> #include "nlpid.h" #include "packet-osi.h" #include "packet-osi-options.h" @@ -442,4 +443,7 @@ esis_handle = create_dissector_handle(dissect_esis, proto_esis); dissector_add("osinl", NLPID_ISO9542_ESIS, esis_handle); + + /* lets register the well-known MAC address */ + add_eth_byname("\x09\x00\x2b\x00\x00\x04","AllESs"); } Index: packet-isis-hello.c =================================================================== RCS file: /cvsroot/ethereal/packet-isis-hello.c,v retrieving revision 1.31 diff -u -r1.31 packet-isis-hello.c --- packet-isis-hello.c 2002/08/02 23:35:51 1.31 +++ packet-isis-hello.c 2002/08/28 13:19:40 @@ -625,7 +625,7 @@ * void, will modify proto_tree if not NULL. */ void -isis_dissect_isis_hello(tvbuff_t *tvb, proto_tree *tree, int offset, +isis_dissect_isis_hello(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int hello_type, int header_length, int id_length) { proto_item *ti; @@ -656,9 +656,13 @@ source_id = tvb_get_ptr(tvb, offset, id_length); proto_tree_add_bytes_format(hello_tree, hf_isis_hello_source_id, tvb, offset, id_length, source_id, - "SystemID{ Sender of PDU } : %s", + "System-ID {Sender of PDU} : %s", print_system_id( source_id, id_length ) ); } + if (check_col(pinfo->cinfo, COL_INFO)) { + col_append_fstr(pinfo->cinfo, COL_INFO, ", System-ID: %s", + print_system_id( tvb_get_ptr(tvb, offset, id_length), id_length ) ); + } offset += id_length; if (tree) { @@ -696,7 +700,7 @@ lan_id = tvb_get_ptr(tvb, offset, id_length+1); proto_tree_add_bytes_format(hello_tree, hf_isis_hello_lan_id, tvb, offset, id_length + 1, lan_id, - "SystemID{ Designated IS } : %s", + "System-ID {Designated IS} : %s", print_system_id( lan_id, id_length + 1 ) ); } offset += id_length + 1; Index: packet-isis-hello.h =================================================================== RCS file: /cvsroot/ethereal/packet-isis-hello.h,v retrieving revision 1.8 diff -u -r1.8 packet-isis-hello.h --- packet-isis-hello.h 2002/04/07 22:36:55 1.8 +++ packet-isis-hello.h 2002/08/28 13:19:40 @@ -105,7 +105,7 @@ * Published API functions. NOTE, this are "local" API functions and * are only valid from with isis decodes. */ -extern void isis_dissect_isis_hello(tvbuff_t *tvb, proto_tree *tree, +extern void isis_dissect_isis_hello(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int hello_type, int header_length,int id_length); extern void isis_register_hello(int proto_isis); Index: packet-isis-lsp.c =================================================================== RCS file: /cvsroot/ethereal/packet-isis-lsp.c,v retrieving revision 1.33 diff -u -r1.33 packet-isis-lsp.c --- packet-isis-lsp.c 2002/08/04 09:08:03 1.33 +++ packet-isis-lsp.c 2002/08/28 13:19:48 @@ -1524,7 +1524,7 @@ * void, but we will add to proto tree if !NULL. */ void -isis_dissect_isis_lsp(tvbuff_t *tvb, proto_tree *tree, int offset, +isis_dissect_isis_lsp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int lsp_type, int header_length, int id_length) { proto_item *ti; @@ -1554,8 +1554,12 @@ if (tree) { isis_lsp_decode_lsp_id(tvb, lsp_tree, offset, - "LSP ID", id_length); + "LSP-ID", id_length); } + if (check_col(pinfo->cinfo, COL_INFO)) { + col_append_fstr(pinfo->cinfo, COL_INFO, ", LSP-ID: %s", + print_system_id( tvb_get_ptr(tvb, offset, id_length+2), id_length+2 ) ); + } offset += id_length + 2; if (tree) { @@ -1563,6 +1567,11 @@ offset, 4, tvb_get_ntohl(tvb, offset)); } + if (check_col(pinfo->cinfo, COL_INFO)) { + col_append_fstr(pinfo->cinfo, COL_INFO, ", Sequence: 0x%08x, Lifetime: %5us", + tvb_get_ntohl(tvb, offset), + tvb_get_ntohs(tvb, offset - (id_length+2+2))); + } offset += 4; if (tree) { Index: packet-isis-lsp.h =================================================================== RCS file: /cvsroot/ethereal/packet-isis-lsp.h,v retrieving revision 1.12 diff -u -r1.12 packet-isis-lsp.h --- packet-isis-lsp.h 2002/04/07 22:36:55 1.12 +++ packet-isis-lsp.h 2002/08/28 13:19:49 @@ -108,7 +108,7 @@ * Published API functions. NOTE, this are "local" API functions and * are only valid from with isis decodes. */ -extern void isis_dissect_isis_lsp(tvbuff_t *tvb, proto_tree *tree, +extern void isis_dissect_isis_lsp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int hello_type, int header_length, int id_length); extern void isis_lsp_decode_lsp_id(tvbuff_t *tvb, proto_tree *tree, int offset, char *tstr, int id_length); Index: packet-isis-snp.c =================================================================== RCS file: /cvsroot/ethereal/packet-isis-snp.c,v retrieving revision 1.17 diff -u -r1.17 packet-isis-snp.c --- packet-isis-snp.c 2002/08/02 23:35:52 1.17 +++ packet-isis-snp.c 2002/08/28 13:19:51 @@ -230,7 +230,7 @@ * void, but we will add to proto tree if !NULL. */ void -isis_dissect_isis_csnp(tvbuff_t *tvb, proto_tree *tree, int offset, +isis_dissect_isis_csnp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int type, int header_length, int id_length) { proto_item *ti; @@ -253,21 +253,33 @@ if (tree) { proto_tree_add_text(csnp_tree, tvb, offset, id_length + 1, - "Source id : %s", + "Source-ID: %s", print_system_id( tvb_get_ptr(tvb, offset, id_length+1), id_length+1 ) ); } + if (check_col(pinfo->cinfo, COL_INFO)) { + col_append_fstr(pinfo->cinfo, COL_INFO, ", Source-ID: %s", + print_system_id( tvb_get_ptr(tvb, offset, id_length+1), id_length+1 ) ); + } offset += id_length + 1; if (tree) { isis_lsp_decode_lsp_id(tvb, csnp_tree, offset, - "Start LSP id ", id_length ); + "Start LSP-ID", id_length ); } + if (check_col(pinfo->cinfo, COL_INFO)) { + col_append_fstr(pinfo->cinfo, COL_INFO, ", Start LSP-ID: %s", + print_system_id( tvb_get_ptr(tvb, offset, id_length+2), id_length+2 ) ); + } offset += id_length + 2; if (tree) { isis_lsp_decode_lsp_id(tvb, csnp_tree, offset, - "End LSP id ", id_length ); + "End LSP-ID ", id_length ); } + if (check_col(pinfo->cinfo, COL_INFO)) { + col_append_fstr(pinfo->cinfo, COL_INFO, ", End LSP-ID: %s", + print_system_id( tvb_get_ptr(tvb, offset, id_length+2), id_length+2 ) ); + } offset += id_length + 2; len = pdu_length - header_length; @@ -305,7 +317,7 @@ * void, but we will add to proto tree if !NULL. */ void -isis_dissect_isis_psnp(tvbuff_t *tvb, proto_tree *tree, int offset, +isis_dissect_isis_psnp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int type, int header_length, int id_length) { proto_item *ti; @@ -328,9 +340,13 @@ if (tree) { proto_tree_add_text(psnp_tree, tvb, offset, id_length + 1, - "Source id: %s", + "Source-ID: %s", print_system_id( tvb_get_ptr(tvb, offset, id_length+1), id_length + 1 ) ); } + if (check_col(pinfo->cinfo, COL_INFO)) { + col_append_fstr(pinfo->cinfo, COL_INFO, ", Source-ID: %s", + print_system_id( tvb_get_ptr(tvb, offset, id_length+1), id_length+1 ) ); + } offset += id_length + 1; len = pdu_length - header_length; Index: packet-isis-snp.h =================================================================== RCS file: /cvsroot/ethereal/packet-isis-snp.h,v retrieving revision 1.5 diff -u -r1.5 packet-isis-snp.h --- packet-isis-snp.h 2002/04/07 22:36:55 1.5 +++ packet-isis-snp.h 2002/08/28 13:19:51 @@ -63,10 +63,10 @@ * Published API functions. NOTE, this are "local" API functions and * are only valid from with isis decodes. */ -extern void isis_dissect_isis_csnp(tvbuff_t *tvb, proto_tree *tree, +extern void isis_dissect_isis_csnp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int type, int header_length, int id_length); extern void isis_register_csnp(int proto_isis); -extern void isis_dissect_isis_psnp(tvbuff_t *tvb, proto_tree *tree, +extern void isis_dissect_isis_psnp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int type, int header_length, int id_length); extern void isis_register_psnp(int proto_isis); Index: packet-isis.c =================================================================== RCS file: /cvsroot/ethereal/packet-isis.c,v retrieving revision 1.32 diff -u -r1.32 packet-isis.c --- packet-isis.c 2002/08/02 23:35:52 1.32 +++ packet-isis.c 2002/08/28 13:19:52 @@ -32,6 +32,7 @@ #include <string.h> #include <glib.h> #include <epan/packet.h> +#include <epan/resolv.h> #include "nlpid.h" #include "packet-osi.h" #include "packet-isis.h" @@ -221,22 +222,22 @@ case ISIS_TYPE_L1_HELLO: case ISIS_TYPE_L2_HELLO: case ISIS_TYPE_PTP_HELLO: - isis_dissect_isis_hello(tvb, isis_tree, offset, + isis_dissect_isis_hello(tvb, pinfo, isis_tree, offset, isis_type, isis_header_length, isis_system_id_len); break; case ISIS_TYPE_L1_LSP: case ISIS_TYPE_L2_LSP: - isis_dissect_isis_lsp(tvb, isis_tree, offset, + isis_dissect_isis_lsp(tvb, pinfo, isis_tree, offset, isis_type, isis_header_length, isis_system_id_len); break; case ISIS_TYPE_L1_CSNP: case ISIS_TYPE_L2_CSNP: - isis_dissect_isis_csnp(tvb, isis_tree, offset, + isis_dissect_isis_csnp(tvb, pinfo, isis_tree, offset, isis_type, isis_header_length, isis_system_id_len); break; case ISIS_TYPE_L1_PSNP: case ISIS_TYPE_L2_PSNP: - isis_dissect_isis_psnp(tvb, isis_tree, offset, + isis_dissect_isis_psnp(tvb, pinfo, isis_tree, offset, isis_type, isis_header_length, isis_system_id_len); break; default: @@ -326,4 +327,9 @@ isis_handle = create_dissector_handle(dissect_isis, proto_isis); dissector_add("osinl", NLPID_ISO10589_ISIS, isis_handle); + + /* lets register the well-known MAC addresses */ + add_eth_byname("\x01\x80\xc2\x00\x00\x14","AllL1ISs"); + add_eth_byname("\x01\x80\xc2\x00\x00\x15","AllL2ISs"); + add_eth_byname("\x09\x00\x2b\x00\x00\x05","AllISs"); } Index: epan/osi-utils.c =================================================================== RCS file: /cvsroot/ethereal/epan/osi-utils.c,v retrieving revision 1.7 diff -u -r1.7 osi-utils.c --- osi-utils.c 2002/08/02 21:29:39 1.7 +++ osi-utils.c 2002/08/28 13:19:56 @@ -77,11 +77,17 @@ } cur = str; - if ( ( 6 == length ) || ( 7 == length ) ) { /* Special case, print as MAC */ + if ( ( 6 == length ) || /* System-ID */ + ( 7 == length ) || /* LAN-ID */ + ( 8 == length )) { /* LSP-ID */ cur += sprintf(cur, "%02x%02x.%02x%02x.%02x%02x", buffer[0], buffer[1], buffer[2], buffer[3], buffer[4], buffer[5] ); - if ( 7 == length ) { - sprintf( cur, ".%02x", buffer[6] ); + if ( ( 7 == length ) || + ( 8 == length )) { + sprintf( cur, ".%02x", buffer[6] ); + } + if ( 8 == length ) { + sprintf( cur, "-%02x", buffer[7] ); } } else { Index: epan/resolv.c =================================================================== RCS file: /cvsroot/ethereal/epan/resolv.c,v retrieving revision 1.24 diff -u -r1.24 resolv.c --- resolv.c 2002/08/02 21:29:40 1.24 +++ resolv.c 2002/08/28 13:20:01 @@ -1300,6 +1300,12 @@ } /* add_ether_byip */ +extern void add_eth_byname(const guint8 *addr, const guchar *name) +{ + add_eth_name(addr, name); + +} /* add_eth_byname */ + extern const guchar *get_ipxnet_name(const guint32 addr) { Index: epan/resolv.h =================================================================== RCS file: /cvsroot/ethereal/epan/resolv.h,v retrieving revision 1.8 diff -u -r1.8 resolv.h --- resolv.h 2002/01/13 20:35:10 1.8 +++ resolv.h 2002/08/28 13:20:01 @@ -102,6 +102,9 @@ /* add ethernet address / name corresponding to IP address */ extern void add_ether_byip(guint ip, const guint8 *eth); +/* add wellknown ethernet address */ +extern void add_eth_byname(const guint8 *addr, const guchar *name); + /* Translates a string representing the hostname or dotted-decimal IP address * into a numeric IP address value, returning TRUE if it succeeds and * FALSE if it fails. */ @@ -115,3 +118,4 @@ gboolean get_host_ipaddr6(const char *host, struct e_in6_addr *addrp); #endif /* __RESOLV_H__ */ +
- Follow-Ups:
- Re: [Ethereal-dev] more verbose IS-IS dissector ...
- From: Guy Harris
- Re: [Ethereal-dev] more verbose IS-IS dissector ...
- Prev by Date: [Ethereal-dev] Difference between Frame and Packet?
- Next by Date: Re: [Ethereal-dev] DCOM implementation, first try!
- Previous by thread: RE: [Ethereal-dev] Difference between Frame and Packet?
- Next by thread: Re: [Ethereal-dev] more verbose IS-IS dissector ...
- Index(es):