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):





