Ethereal-dev: [Ethereal-dev] IS-IS patch
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: Sun, 1 Sep 2002 00:30:34 +0200
hi ethereal developers, find attached a patch that opens up a new subtree for dissecting the lsp-entry TLV; the isis_lsp_decode_lsp_id() routine is removed as the same functionality is better served using print_system_id(); the patch contains also a small bugfix for print_system_id(); /hannes
Index: packet-isis-snp.c =================================================================== RCS file: /cvsroot/ethereal/packet-isis-snp.c,v retrieving revision 1.19 diff -u -r1.19 packet-isis-snp.c --- packet-isis-snp.c 2002/08/29 18:52:51 1.19 +++ packet-isis-snp.c 2002/08/31 22:24:17 @@ -55,15 +55,17 @@ proto_tree *tree, int offset, int id_length, int length); static void dissect_l2_snp_authentication_clv(tvbuff_t *tvb, proto_tree *tree, int offset, int id_length, int length); -static void dissect_snp_lsp_entries(tvbuff_t *tvb, +static void dissect_csnp_lsp_entries(tvbuff_t *tvb, proto_tree *tree, int offset, int id_length, int length); +static void dissect_psnp_lsp_entries(tvbuff_t *tvb, + proto_tree *tree, int offset, int id_length, int length); static const isis_clv_handle_t clv_l1_csnp_opts[] = { { ISIS_CLV_L1_CSNP_LSP_ENTRIES, "LSP entries", &ett_isis_csnp_lsp_entries, - dissect_snp_lsp_entries + dissect_csnp_lsp_entries }, { ISIS_CLV_L1_CSNP_AUTHENTICATION_NS, @@ -87,7 +89,7 @@ ISIS_CLV_L2_CSNP_LSP_ENTRIES, "LSP entries", &ett_isis_csnp_lsp_entries, - dissect_snp_lsp_entries + dissect_csnp_lsp_entries }, { ISIS_CLV_L2_CSNP_AUTHENTICATION_NS, @@ -111,7 +113,7 @@ ISIS_CLV_L1_PSNP_LSP_ENTRIES, "LSP entries", &ett_isis_psnp_lsp_entries, - dissect_snp_lsp_entries + dissect_psnp_lsp_entries }, { ISIS_CLV_L1_PSNP_AUTHENTICATION_NS, @@ -135,7 +137,7 @@ ISIS_CLV_L2_PSNP_LSP_ENTRIES, "LSP entries", &ett_isis_psnp_lsp_entries, - dissect_snp_lsp_entries + dissect_psnp_lsp_entries }, { ISIS_CLV_L2_PSNP_AUTHENTICATION, @@ -153,6 +155,7 @@ 0, "", NULL, NULL } }; + /* * Name: dissect_snp_lsp_entries() * @@ -175,9 +178,11 @@ * void, but we will add to proto tree if !NULL. */ static void -dissect_snp_lsp_entries(tvbuff_t *tvb, proto_tree *tree, int offset, +dissect_csnp_lsp_entries(tvbuff_t *tvb, proto_tree *tree, int offset, int id_length, int length) { + proto_tree *subtree,*ti; + while ( length > 0 ) { if ( length < 2+id_length+2+4+2 ) { isis_dissect_unknown(tvb, tree, offset, @@ -186,27 +191,77 @@ return; } - proto_tree_add_text(tree, tvb, offset, 2, "Remaining life : %d", + ti = proto_tree_add_text(tree, tvb, offset, 16, + "LSP-ID: %s, Sequence: 0x%08x, Lifetime: %5us, Checksum: 0x%04x", + print_system_id( tvb_get_ptr(tvb, offset+2, id_length+2), id_length+2 ), + tvb_get_ntohl(tvb, offset+10), + tvb_get_ntohs(tvb, offset), + tvb_get_ntohs(tvb, offset+14)); + + subtree = proto_item_add_subtree(ti,ett_isis_csnp_lsp_entries); + + proto_tree_add_text(subtree, tvb, offset+2, 8, + "LSP-ID: : %s", + print_system_id( tvb_get_ptr(tvb, offset+2, id_length+2), id_length+2 )); + + proto_tree_add_text(subtree, tvb, offset+10, 4, + "LSP Sequence Number : 0x%08x", + tvb_get_ntohl(tvb, offset+10)); + + proto_tree_add_text(subtree, tvb, offset, 2, + "Remaining Lifetime : %us", tvb_get_ntohs(tvb, offset)); - length -= 2; - offset += 2; + + proto_tree_add_text(subtree, tvb, offset+14, 2, + "LSP checksum : 0x%04x", + tvb_get_ntohs(tvb, offset+14)); + + length -= 16; + offset += 16; + } + +} +static void +dissect_psnp_lsp_entries(tvbuff_t *tvb, proto_tree *tree, int offset, + int id_length, int length) +{ + proto_tree *subtree,*ti; - isis_lsp_decode_lsp_id(tvb, tree, offset, - "LSP ID ", id_length); - length -= id_length + 2; - offset += id_length + 2; - - proto_tree_add_text(tree, tvb, offset, 4, - "LSP Sequence Number : 0x%04x", - tvb_get_ntohl(tvb, offset)); - length -= 4; - offset += 4; + while ( length > 0 ) { + if ( length < 2+id_length+2+4+2 ) { + isis_dissect_unknown(tvb, tree, offset, + "Short SNP header entry (%d vs %d)", length, + 2+id_length+2+4+2 ); + return; + } + + ti = proto_tree_add_text(tree, tvb, offset, 16, + "LSP-ID: %s, Sequence: 0x%08x, Lifetime: %5us, Checksum: 0x%04x", + print_system_id( tvb_get_ptr(tvb, offset+2, id_length+2), id_length+2 ), + tvb_get_ntohl(tvb, offset+10), + tvb_get_ntohs(tvb, offset), + tvb_get_ntohs(tvb, offset+14)); + + subtree = proto_item_add_subtree(ti,ett_isis_psnp_lsp_entries); + + proto_tree_add_text(subtree, tvb, offset+2, 8, + "LSP-ID: : %s", + print_system_id( tvb_get_ptr(tvb, offset+2, id_length+2), id_length+2 )); + + proto_tree_add_text(subtree, tvb, offset+10, 4, + "LSP Sequence Number : 0x%08x", + tvb_get_ntohl(tvb, offset+10)); - proto_tree_add_text(tree, tvb, offset, 2, - "LSP checksum : 0x%02x", + proto_tree_add_text(subtree, tvb, offset, 2, + "Remaining Lifetime : %us", tvb_get_ntohs(tvb, offset)); - length -= 2; - offset += 2; + + proto_tree_add_text(subtree, tvb, offset+14, 2, + "LSP checksum : 0x%04x", + tvb_get_ntohs(tvb, offset+14)); + + length -= 16; + offset += 16; } } @@ -263,8 +318,9 @@ offset += id_length + 1; if (tree) { - isis_lsp_decode_lsp_id(tvb, csnp_tree, offset, - "Start LSP-ID", id_length ); + proto_tree_add_text(csnp_tree, tvb, offset, id_length + 2, + "Start LSP-ID: %s", + print_system_id( tvb_get_ptr(tvb, offset, id_length+2), id_length+2 ) ); } if (check_col(pinfo->cinfo, COL_INFO)) { col_append_fstr(pinfo->cinfo, COL_INFO, ", Start LSP-ID: %s", @@ -273,8 +329,9 @@ offset += id_length + 2; if (tree) { - isis_lsp_decode_lsp_id(tvb, csnp_tree, offset, - "End LSP-ID ", id_length ); + proto_tree_add_text(csnp_tree, tvb, offset, id_length + 2, + "End LSP-ID: %s", + print_system_id( tvb_get_ptr(tvb, offset, id_length+2), id_length+2 ) ); } if (check_col(pinfo->cinfo, COL_INFO)) { col_append_fstr(pinfo->cinfo, COL_INFO, ", End LSP-ID: %s", Index: packet-isis-lsp.c =================================================================== RCS file: /cvsroot/ethereal/packet-isis-lsp.c,v retrieving revision 1.35 diff -u -r1.35 packet-isis-lsp.c --- packet-isis-lsp.c 2002/08/29 18:52:51 1.35 +++ packet-isis-lsp.c 2002/08/31 22:24:24 @@ -1479,33 +1479,6 @@ } /* - * Name: isis_lsp_decode_lsp_id() - * - * Description: - * Display a LSP id into the display tree. - * - * Input: - * tvbuff_t * : tvbuffer for packet data - * proto_tree * : tree to display into. REQUIRED - * int : offset into packet data where we are. - * char * : title string - * int : length of IDs in packet. - * - * Output: - * void, but we will add to proto tree - */ -void -isis_lsp_decode_lsp_id(tvbuff_t *tvb, proto_tree *tree, int offset, - char *tstr, int id_length) -{ - proto_tree_add_text(tree, tvb, offset, id_length + 2, - "%s: %s.%02x-%02x", tstr, - print_system_id( tvb_get_ptr(tvb, offset, id_length), id_length ), - tvb_get_guint8(tvb, offset+id_length), - tvb_get_guint8(tvb, offset+id_length+1) ); -} - -/* * Name: isis_dissect_isis_lsp() * * Description: @@ -1547,15 +1520,18 @@ offset += 2; if (tree) { - proto_tree_add_uint(lsp_tree, hf_isis_lsp_remaining_life, tvb, - offset, 2, tvb_get_ntohs(tvb, offset)); + proto_tree_add_text(lsp_tree, tvb, offset, 2, + "Remaining Lifetime: %us", + tvb_get_ntohs(tvb, offset)); } offset += 2; if (tree) { - isis_lsp_decode_lsp_id(tvb, lsp_tree, offset, - "LSP-ID", id_length); + proto_tree_add_text(lsp_tree, tvb, offset, id_length + 2, + "LSP-ID: %s", + print_system_id( tvb_get_ptr(tvb, offset, id_length+2), id_length+2 ) ); } + 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 ) ); Index: packet-isis-lsp.h =================================================================== RCS file: /cvsroot/ethereal/packet-isis-lsp.h,v retrieving revision 1.14 diff -u -r1.14 packet-isis-lsp.h --- packet-isis-lsp.h 2002/08/29 18:52:51 1.14 +++ packet-isis-lsp.h 2002/08/31 22:24:25 @@ -110,8 +110,6 @@ */ 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); extern void isis_register_lsp(int proto_isis); #endif /* _PACKET_ISIS_LSP_H */ Index: epan/osi-utils.c =================================================================== RCS file: /cvsroot/ethereal/epan/osi-utils.c,v retrieving revision 1.9 diff -u -r1.9 osi-utils.c --- osi-utils.c 2002/08/29 18:52:54 1.9 +++ osi-utils.c 2002/08/31 22:24:25 @@ -84,10 +84,10 @@ buffer[2], buffer[3], buffer[4], buffer[5] ); if ( ( 7 == length ) || ( 8 == length )) { - sprintf( cur, ".%02x", buffer[6] ); + cur += sprintf( cur, ".%02x", buffer[6] ); } if ( 8 == length ) { - sprintf( cur, "-%02x", buffer[7] ); + cur += sprintf( cur, "-%02x", buffer[7] ); } } else {
- Prev by Date: Re: [Ethereal-dev] GTK+ v2 port
- Next by Date: Re: [Ethereal-dev] Simple Extension API, patch for tethereal and rpcstat example
- Previous by thread: Re: [Ethereal-dev] Simple Extension API, patch for tethereal and rpcstat example
- Next by thread: [Ethereal-dev] NTLMSSP has problems in the challenge decode
- Index(es):