aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--epan/dissectors/packet-isis-clv.c674
-rw-r--r--epan/dissectors/packet-isis-hello.c1130
-rw-r--r--epan/dissectors/packet-isis-lsp.c3822
-rw-r--r--epan/dissectors/packet-isis-snp.c618
-rw-r--r--epan/dissectors/packet-isis.c174
-rw-r--r--epan/dissectors/packet-isis.h6
6 files changed, 3261 insertions, 3163 deletions
diff --git a/epan/dissectors/packet-isis-clv.c b/epan/dissectors/packet-isis-clv.c
index a701048b5e..6608cbfc14 100644
--- a/epan/dissectors/packet-isis-clv.c
+++ b/epan/dissectors/packet-isis-clv.c
@@ -37,70 +37,70 @@
* Name: isis_dissect_area_address_clv()
*
* Description:
- * Take an area address CLV and display it pieces. An area address
- * CLV is n, x byte hex strings.
+ * Take an area address CLV and display it pieces. An area address
+ * CLV is n, x byte hex strings.
*
* Input:
- * tvbuff_t * : tvbuffer for packet data
- * proto_tree * : protocol display tree to fill out. May be NULL
- * int : offset into packet data where we are.
- * int : length of clv we are decoding
+ * tvbuff_t * : tvbuffer for packet data
+ * proto_tree * : protocol display tree to fill out. May be NULL
+ * int : offset into packet data where we are.
+ * int : length of clv we are decoding
*
* Output:
- * void, but we will add to proto tree if !NULL.
+ * void, but we will add to proto tree if !NULL.
*/
void
isis_dissect_area_address_clv(proto_tree *tree, packet_info* pinfo, tvbuff_t *tvb,
expert_field* expert, int offset, int length)
{
- int arealen,area_idx;
-
- while ( length > 0 ) {
- arealen = tvb_get_guint8(tvb, offset);
- length--;
- if (length<=0) {
- proto_tree_add_expert_format(tree, pinfo, expert, tvb, offset, -1,
- "short address (no length for payload)");
- return;
- }
- if ( arealen > length) {
- proto_tree_add_expert_format(tree, pinfo, expert, tvb, offset, -1,
- "short address, packet says %d, we have %d left",
- arealen, length );
- return;
- }
-
- if ( tree ) {
- proto_item *ti;
-
- /*
- * Throw an exception rather than putting in a
- * partial address.
- */
- tvb_ensure_bytes_exist ( tvb, offset, arealen + 1 );
-
- ti = proto_tree_add_text ( tree, tvb, offset, arealen + 1,
- "Area address (%d): ", arealen );
-
- /*
- * Lets turn the area address into "standard"
- * xx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx format string.
- * this is a private routine as the print_nsap_net in
- * epan/osi_utils.c is incomplete and we need only
- * a subset - actually some nice placing of dots ....
- */
- for (area_idx = 0; area_idx < arealen; area_idx++) {
- proto_item_append_text(ti, "%02x",
- tvb_get_guint8(tvb, offset+area_idx+1));
- if (((area_idx & 1) == 0) &&
- (area_idx + 1 < arealen)) {
- proto_item_append_text(ti, ".");
- }
- }
- }
- offset += arealen + 1;
- length -= arealen; /* length already adjusted for len fld*/
- }
+ int arealen,area_idx;
+
+ while ( length > 0 ) {
+ arealen = tvb_get_guint8(tvb, offset);
+ length--;
+ if (length<=0) {
+ proto_tree_add_expert_format(tree, pinfo, expert, tvb, offset, -1,
+ "short address (no length for payload)");
+ return;
+ }
+ if ( arealen > length) {
+ proto_tree_add_expert_format(tree, pinfo, expert, tvb, offset, -1,
+ "short address, packet says %d, we have %d left",
+ arealen, length );
+ return;
+ }
+
+ if ( tree ) {
+ proto_item *ti;
+
+ /*
+ * Throw an exception rather than putting in a
+ * partial address.
+ */
+ tvb_ensure_bytes_exist ( tvb, offset, arealen + 1 );
+
+ ti = proto_tree_add_text ( tree, tvb, offset, arealen + 1,
+ "Area address (%d): ", arealen );
+
+ /*
+ * Lets turn the area address into "standard"
+ * xx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx format string.
+ * this is a private routine as the print_nsap_net in
+ * epan/osi_utils.c is incomplete and we need only
+ * a subset - actually some nice placing of dots ....
+ */
+ for (area_idx = 0; area_idx < arealen; area_idx++) {
+ proto_item_append_text(ti, "%02x",
+ tvb_get_guint8(tvb, offset+area_idx+1));
+ if (((area_idx & 1) == 0) &&
+ (area_idx + 1 < arealen)) {
+ proto_item_append_text(ti, ".");
+ }
+ }
+ }
+ offset += arealen + 1;
+ length -= arealen; /* length already adjusted for len fld*/
+ }
}
@@ -108,77 +108,77 @@ isis_dissect_area_address_clv(proto_tree *tree, packet_info* pinfo, tvbuff_t *tv
* Name: isis_dissect_authentication_clv()
*
* Description:
- * Take apart the CLV that hold authentication information. This
- * is currently 1 octet auth type.
+ * Take apart the CLV that hold authentication information. This
+ * is currently 1 octet auth type.
* the two defined authentication types
- * are 1 for a clear text password and
+ * are 1 for a clear text password and
* 54 for a HMAC-MD5 digest
*
* Input:
- * tvbuff_t * : tvbuffer for packet data
- * proto_tree * : protocol display tree to fill out. May be NULL
- * int : offset into packet data where we are.
- * int : length of clv we are decoding
+ * tvbuff_t * : tvbuffer for packet data
+ * proto_tree * : protocol display tree to fill out. May be NULL
+ * int : offset into packet data where we are.
+ * int : length of clv we are decoding
*
* Output:
- * void, but we will add to proto tree if !NULL.
+ * void, but we will add to proto tree if !NULL.
*/
void
isis_dissect_authentication_clv(proto_tree *tree, packet_info* pinfo, tvbuff_t *tvb,
expert_field* auth_expert, int offset, int length)
{
- guchar pw_type;
- int auth_unsupported;
- proto_item *ti;
-
- if ( length <= 0 ) {
- return;
- }
-
- pw_type = tvb_get_guint8(tvb, offset);
- offset += 1;
- length--;
- auth_unsupported = FALSE;
-
- switch (pw_type) {
- case 1:
- ti = proto_tree_add_text ( tree, tvb, offset - 1, length + 1,
- "clear text (1), password (length %d) = ", length);
- if ( length > 0 ) {
- proto_item_append_text(ti, "%s",
- tvb_format_text(tvb, offset, length));
+ guchar pw_type;
+ int auth_unsupported;
+ proto_item *ti;
+
+ if ( length <= 0 ) {
+ return;
+ }
+
+ pw_type = tvb_get_guint8(tvb, offset);
+ offset += 1;
+ length--;
+ auth_unsupported = FALSE;
+
+ switch (pw_type) {
+ case 1:
+ ti = proto_tree_add_text ( tree, tvb, offset - 1, length + 1,
+ "clear text (1), password (length %d) = ", length);
+ if ( length > 0 ) {
+ proto_item_append_text(ti, "%s",
+ tvb_format_text(tvb, offset, length));
} else {
- proto_item_append_text(ti, "no clear-text password found!!!");
- }
- break;
- case 54:
- ti = proto_tree_add_text ( tree, tvb, offset - 1, length + 1,
- "hmac-md5 (54), password (length %d) = ", length);
-
- if ( length == 16 ) {
- proto_item_append_text(ti, "0x%02x", tvb_get_guint8(tvb, offset));
- offset += 1;
- length--;
- while (length > 0) {
- proto_item_append_text(ti, "%02x", tvb_get_guint8(tvb, offset));
- offset += 1;
- length--;
- }
- } else {
- proto_item_append_text(ti,
- "illegal hmac-md5 digest format (must be 16 bytes)");
- }
- break;
- default:
- proto_tree_add_text ( tree, tvb, offset - 1, length + 1,
- "type 0x%02x (0x%02x): ", pw_type, length );
- auth_unsupported=TRUE;
- break;
- }
-
- if ( auth_unsupported ) {
- proto_tree_add_expert(tree, pinfo, auth_expert, tvb, offset, -1);
- }
+ proto_item_append_text(ti, "no clear-text password found!!!");
+ }
+ break;
+ case 54:
+ ti = proto_tree_add_text ( tree, tvb, offset - 1, length + 1,
+ "hmac-md5 (54), password (length %d) = ", length);
+
+ if ( length == 16 ) {
+ proto_item_append_text(ti, "0x%02x", tvb_get_guint8(tvb, offset));
+ offset += 1;
+ length--;
+ while (length > 0) {
+ proto_item_append_text(ti, "%02x", tvb_get_guint8(tvb, offset));
+ offset += 1;
+ length--;
+ }
+ } else {
+ proto_item_append_text(ti,
+ "illegal hmac-md5 digest format (must be 16 bytes)");
+ }
+ break;
+ default:
+ proto_tree_add_text ( tree, tvb, offset - 1, length + 1,
+ "type 0x%02x (0x%02x): ", pw_type, length );
+ auth_unsupported=TRUE;
+ break;
+ }
+
+ if ( auth_unsupported ) {
+ proto_tree_add_expert(tree, pinfo, auth_expert, tvb, offset, -1);
+ }
}
/*
@@ -201,7 +201,7 @@ isis_dissect_authentication_clv(proto_tree *tree, packet_info* pinfo, tvbuff_t *
void
isis_dissect_ip_authentication_clv(tvbuff_t *tvb, proto_tree *tree, int offset,
- int length)
+ int length)
{
if ( !tree ) return; /* nothing to do! */
@@ -234,7 +234,7 @@ isis_dissect_ip_authentication_clv(tvbuff_t *tvb, proto_tree *tree, int offset,
void
isis_dissect_hostname_clv(tvbuff_t *tvb, proto_tree *tree, int offset,
- int length, int tree_id)
+ int length, int tree_id)
{
if ( !tree ) return; /* nothing to do! */
@@ -242,9 +242,9 @@ isis_dissect_hostname_clv(tvbuff_t *tvb, proto_tree *tree, int offset,
proto_tree_add_text ( tree, tvb, offset, length,
"Hostname: --none--" );
} else {
- const char* value = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, length, ENC_ASCII);
+ const char* value = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, length, ENC_ASCII);
proto_tree_add_string_format ( tree, tree_id,
- tvb, offset, length,
+ tvb, offset, length,
value, "Hostname: %.*s", length, value);
}
}
@@ -254,54 +254,54 @@ isis_dissect_hostname_clv(tvbuff_t *tvb, proto_tree *tree, int offset,
void
isis_dissect_mt_clv(tvbuff_t *tvb, proto_tree *tree, int offset, int length,
- int tree_id)
+ int tree_id)
{
- guint16 mt_block;
- const char *mt_desc;
-
- while (length>0) {
- /* length can only be a multiple of 2, otherwise there is
- something broken -> so decode down until length is 1 */
- if (length!=1) {
- /* fetch two bytes */
- mt_block=tvb_get_ntohs(tvb, offset);
-
- /* mask out the lower 12 bits */
- switch(mt_block&0x0fff) {
- case 0:
- mt_desc="IPv4 unicast";
- break;
- case 1:
- mt_desc="In-Band Management";
- break;
- case 2:
- mt_desc="IPv6 unicast";
- break;
- case 3:
- mt_desc="Multicast";
- break;
- case 4095:
- mt_desc="Development, Experimental or Proprietary";
- break;
- default:
- mt_desc="Reserved for IETF Consensus";
- break;
- }
- proto_tree_add_uint_format ( tree, tree_id, tvb, offset, 2,
- mt_block,
- "%s Topology (0x%03x), %ssubTLVs present%s",
- mt_desc,
- mt_block&0xfff,
- (mt_block&0x8000) ? "" : "no ",
- (mt_block&0x4000) ? ", ATT bit set" : "" );
- } else {
- proto_tree_add_text ( tree, tvb, offset, 1,
- "malformed MT-ID");
- break;
- }
- length -= 2;
- offset += 2;
- }
+ guint16 mt_block;
+ const char *mt_desc;
+
+ while (length>0) {
+ /* length can only be a multiple of 2, otherwise there is
+ something broken -> so decode down until length is 1 */
+ if (length!=1) {
+ /* fetch two bytes */
+ mt_block=tvb_get_ntohs(tvb, offset);
+
+ /* mask out the lower 12 bits */
+ switch(mt_block&0x0fff) {
+ case 0:
+ mt_desc="IPv4 unicast";
+ break;
+ case 1:
+ mt_desc="In-Band Management";
+ break;
+ case 2:
+ mt_desc="IPv6 unicast";
+ break;
+ case 3:
+ mt_desc="Multicast";
+ break;
+ case 4095:
+ mt_desc="Development, Experimental or Proprietary";
+ break;
+ default:
+ mt_desc="Reserved for IETF Consensus";
+ break;
+ }
+ proto_tree_add_uint_format ( tree, tree_id, tvb, offset, 2,
+ mt_block,
+ "%s Topology (0x%03x), %ssubTLVs present%s",
+ mt_desc,
+ mt_block&0xfff,
+ (mt_block&0x8000) ? "" : "no ",
+ (mt_block&0x4000) ? ", ATT bit set" : "" );
+ } else {
+ proto_tree_add_text ( tree, tvb, offset, 1,
+ "malformed MT-ID");
+ break;
+ }
+ length -= 2;
+ offset += 2;
+ }
}
@@ -309,86 +309,86 @@ isis_dissect_mt_clv(tvbuff_t *tvb, proto_tree *tree, int offset, int length,
* Name: isis_dissect_ip_int_clv()
*
* Description:
- * Take apart the CLV that lists all the IP interfaces. The
- * meaning of which is slightly different for the different base packet
- * types, but the display is not different. What we have is n ip
- * addresses, plain and simple.
+ * Take apart the CLV that lists all the IP interfaces. The
+ * meaning of which is slightly different for the different base packet
+ * types, but the display is not different. What we have is n ip
+ * addresses, plain and simple.
*
* Input:
- * tvbuff_t * : tvbuffer for packet data
- * proto_tree * : protocol display tree to fill out. May be NULL
- * int : offset into packet data where we are.
- * int : length of clv we are decoding
- * int : tree id to use for proto tree.
+ * tvbuff_t * : tvbuffer for packet data
+ * proto_tree * : protocol display tree to fill out. May be NULL
+ * int : offset into packet data where we are.
+ * int : length of clv we are decoding
+ * int : tree id to use for proto tree.
*
* Output:
- * void, but we will add to proto tree if !NULL.
+ * void, but we will add to proto tree if !NULL.
*/
void
isis_dissect_ip_int_clv(proto_tree *tree, packet_info* pinfo, tvbuff_t *tvb, expert_field* expert,
int offset, int length, int tree_id)
{
- if ( length <= 0 ) {
- return;
- }
-
- while ( length > 0 ) {
- if ( length < 4 ) {
- proto_tree_add_expert_format(tree, pinfo, expert, tvb, offset, -1,
- "Short IP interface address (%d vs 4)",length );
- return;
- }
-
- if ( tree ) {
- proto_tree_add_item(tree, tree_id, tvb, offset, 4, ENC_BIG_ENDIAN);
- }
- offset += 4;
- length -= 4;
- }
+ if ( length <= 0 ) {
+ return;
+ }
+
+ while ( length > 0 ) {
+ if ( length < 4 ) {
+ proto_tree_add_expert_format(tree, pinfo, expert, tvb, offset, -1,
+ "Short IP interface address (%d vs 4)",length );
+ return;
+ }
+
+ if ( tree ) {
+ proto_tree_add_item(tree, tree_id, tvb, offset, 4, ENC_BIG_ENDIAN);
+ }
+ offset += 4;
+ length -= 4;
+ }
}
/*
* Name: isis_dissect_ipv6_int_clv()
*
* Description:
- * Take apart the CLV that lists all the IPv6 interfaces. The
- * meaning of which is slightly different for the different base packet
- * types, but the display is not different. What we have is n ip
- * addresses, plain and simple.
+ * Take apart the CLV that lists all the IPv6 interfaces. The
+ * meaning of which is slightly different for the different base packet
+ * types, but the display is not different. What we have is n ip
+ * addresses, plain and simple.
*
* Input:
- * tvbuff_t * : tvbuffer for packet data
- * proto_tree * : protocol display tree to fill out. May be NULL
- * int : offset into packet data where we are.
- * int : length of clv we are decoding
- * int : tree id to use for proto tree.
+ * tvbuff_t * : tvbuffer for packet data
+ * proto_tree * : protocol display tree to fill out. May be NULL
+ * int : offset into packet data where we are.
+ * int : length of clv we are decoding
+ * int : tree id to use for proto tree.
*
* Output:
- * void, but we will add to proto tree if !NULL.
+ * void, but we will add to proto tree if !NULL.
*/
void
isis_dissect_ipv6_int_clv(proto_tree *tree, packet_info* pinfo, tvbuff_t *tvb, expert_field* expert,
int offset, int length, int tree_id)
{
- guint8 addr [16];
-
- if ( length <= 0 ) {
- return;
- }
-
- while ( length > 0 ) {
- if ( length < 16 ) {
- proto_tree_add_expert_format(tree, pinfo, expert, tvb, offset, -1,
- "Short IPv6 interface address (%d vs 16)",length );
- return;
- }
- tvb_memcpy(tvb, addr, offset, sizeof(addr));
- if ( tree ) {
- proto_tree_add_ipv6(tree, tree_id, tvb, offset, 16, addr);
- }
- offset += 16;
- length -= 16;
- }
+ guint8 addr [16];
+
+ if ( length <= 0 ) {
+ return;
+ }
+
+ while ( length > 0 ) {
+ if ( length < 16 ) {
+ proto_tree_add_expert_format(tree, pinfo, expert, tvb, offset, -1,
+ "Short IPv6 interface address (%d vs 16)",length );
+ return;
+ }
+ tvb_memcpy(tvb, addr, offset, sizeof(addr));
+ if ( tree ) {
+ proto_tree_add_ipv6(tree, tree_id, tvb, offset, 16, addr);
+ }
+ offset += 16;
+ length -= 16;
+ }
}
@@ -414,155 +414,155 @@ void
isis_dissect_te_router_id_clv(proto_tree *tree, packet_info* pinfo, tvbuff_t *tvb, expert_field* expert,
int offset, int length, int tree_id)
{
- if ( length <= 0 ) {
- return;
- }
+ if ( length <= 0 ) {
+ return;
+ }
- if ( length != 4 ) {
- proto_tree_add_expert_format(tree, pinfo, expert, tvb, offset, -1,
- "malformed Traffic Engineering Router ID (%d vs 4)",length );
- return;
- }
+ if ( length != 4 ) {
+ proto_tree_add_expert_format(tree, pinfo, expert, tvb, offset, -1,
+ "malformed Traffic Engineering Router ID (%d vs 4)",length );
+ return;
+ }
- proto_tree_add_item(tree, tree_id, tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, tree_id, tvb, offset, 4, ENC_BIG_ENDIAN);
}
/*
* Name: isis_dissect_nlpid_clv()
*
* Description:
- * Take apart a NLPID packet and display it. The NLPID (for intergrated
- * ISIS, contains n network layer protocol IDs that the box supports.
- * We max out at 256 entries.
+ * Take apart a NLPID packet and display it. The NLPID (for intergrated
+ * ISIS, contains n network layer protocol IDs that the box supports.
+ * We max out at 256 entries.
*
* Input:
- * tvbuff_t * : tvbuffer for packet data
- * proto_tree * : protocol display tree to fill out. May be NULL
- * int : offset into packet data where we are.
- * int : length of clv we are decoding
+ * tvbuff_t * : tvbuffer for packet data
+ * proto_tree * : protocol display tree to fill out. May be NULL
+ * int : offset into packet data where we are.
+ * int : length of clv we are decoding
*
* Output:
- * void, but we will add to proto tree if !NULL.
+ * void, but we will add to proto tree if !NULL.
*/
#define TRUNCATED_TEXT " [truncated]"
void
isis_dissect_nlpid_clv(tvbuff_t *tvb, proto_tree *tree, int offset, int length)
{
- gboolean first;
- proto_item *ti;
-
- if ( !tree ) return; /* nothing to do! */
-
- /*
- * Throw an exception rather than putting in a
- * partial address.
- */
- tvb_ensure_bytes_exist ( tvb, offset, length );
-
- if (length <= 0) {
- proto_tree_add_text (tree, tvb, offset, length,
- "NLPID(s): --none--");
- } else {
- first = TRUE;
- ti = proto_tree_add_text (tree, tvb, offset, length,
- "NLPID(s): ");
- while (length-- > 0 ) {
- if (!first) {
- proto_item_append_text(ti, ", ");
- }
- proto_item_append_text(ti, "%s (0x%02x)",
- /* NLPID_IEEE_8021AQ conflicts with NLPID_SNDCF.
- * In this context, we want the former.
- */
- (tvb_get_guint8(tvb, offset) == NLPID_IEEE_8021AQ
- ? "IEEE 802.1aq (SPB)"
- : val_to_str_const(tvb_get_guint8(tvb, offset), nlpid_vals, "Unknown")),
- tvb_get_guint8(tvb, offset));
- offset++;
- first = FALSE;
- }
- }
+ gboolean first;
+ proto_item *ti;
+
+ if ( !tree ) return; /* nothing to do! */
+
+ /*
+ * Throw an exception rather than putting in a
+ * partial address.
+ */
+ tvb_ensure_bytes_exist ( tvb, offset, length );
+
+ if (length <= 0) {
+ proto_tree_add_text (tree, tvb, offset, length,
+ "NLPID(s): --none--");
+ } else {
+ first = TRUE;
+ ti = proto_tree_add_text (tree, tvb, offset, length,
+ "NLPID(s): ");
+ while (length-- > 0 ) {
+ if (!first) {
+ proto_item_append_text(ti, ", ");
+ }
+ proto_item_append_text(ti, "%s (0x%02x)",
+ /* NLPID_IEEE_8021AQ conflicts with NLPID_SNDCF.
+ * In this context, we want the former.
+ */
+ (tvb_get_guint8(tvb, offset) == NLPID_IEEE_8021AQ
+ ? "IEEE 802.1aq (SPB)"
+ : val_to_str_const(tvb_get_guint8(tvb, offset), nlpid_vals, "Unknown")),
+ tvb_get_guint8(tvb, offset));
+ offset++;
+ first = FALSE;
+ }
+ }
}
/*
* Name: isis_dissect_clvs()
*
* Description:
- * Dispatch routine to shred all the CLVs in a packet. We just
- * walk through the clv entries in the packet. For each one, we
- * search the passed in valid clv's for this protocol (opts) for
- * a matching code. If found, we add to the display tree and
- * then call the dissector. If it is not, we just post an
- * "unknown" clv entry using the passed in unknown clv tree id.
+ * Dispatch routine to shred all the CLVs in a packet. We just
+ * walk through the clv entries in the packet. For each one, we
+ * search the passed in valid clv's for this protocol (opts) for
+ * a matching code. If found, we add to the display tree and
+ * then call the dissector. If it is not, we just post an
+ * "unknown" clv entry using the passed in unknown clv tree id.
*
* Input:
- * tvbuff_t * : tvbuffer for packet data
- * proto_tree * : protocol display tree to fill out. May be NULL
- * int : offset into packet data where we are.
- * isis_clv_handle_t * : NULL dissector terminated array of codes
- * and handlers (along with tree text and tree id's).
- * int : length of CLV area.
- * int : length of IDs in packet.
- * int : unknown clv tree id
+ * tvbuff_t * : tvbuffer for packet data
+ * proto_tree * : protocol display tree to fill out. May be NULL
+ * int : offset into packet data where we are.
+ * isis_clv_handle_t * : NULL dissector terminated array of codes
+ * and handlers (along with tree text and tree id's).
+ * int : length of CLV area.
+ * int : length of IDs in packet.
+ * int : unknown clv tree id
*
* Output:
- * void, but we will add to proto tree if !NULL.
+ * void, but we will add to proto tree if !NULL.
*/
void
isis_dissect_clvs(tvbuff_t *tvb, packet_info* pinfo, proto_tree *tree, int offset,
- const isis_clv_handle_t *opts, expert_field* expert_short_len, int len, int id_length,
- int unknown_tree_id _U_)
+ const isis_clv_handle_t *opts, expert_field* expert_short_len, int len, int id_length,
+ int unknown_tree_id _U_)
{
- guint8 code;
- guint8 length;
- int q;
- proto_tree *clv_tree;
-
- while ( len > 0 ) {
- code = tvb_get_guint8(tvb, offset);
- offset += 1;
- len -= 1;
- if (len == 0)
- break;
-
- length = tvb_get_guint8(tvb, offset);
- offset += 1;
- len -= 1;
- if (len == 0)
- break;
-
- if ( len < length ) {
- proto_tree_add_expert_format(tree, pinfo, expert_short_len, tvb, offset, -1,
- "Short CLV header (%d vs %d)",
- length, len );
- return;
- }
- q = 0;
- while ((opts[q].dissect != NULL )&&( opts[q].optcode != code )){
- q++;
- }
- if ( opts[q].dissect ) {
- /* adjust by 2 for code/len octets */
- clv_tree = proto_tree_add_subtree_format(tree, tvb, offset - 2,
- length + 2, *opts[q].tree_id, NULL, "%s (%u)",
- opts[q].tree_text, length );
- opts[q].dissect(tvb, pinfo, clv_tree, offset,
- id_length, length);
- } else {
+ guint8 code;
+ guint8 length;
+ int q;
+ proto_tree *clv_tree;
+
+ while ( len > 0 ) {
+ code = tvb_get_guint8(tvb, offset);
+ offset += 1;
+ len -= 1;
+ if (len == 0)
+ break;
+
+ length = tvb_get_guint8(tvb, offset);
+ offset += 1;
+ len -= 1;
+ if (len == 0)
+ break;
+
+ if ( len < length ) {
+ proto_tree_add_expert_format(tree, pinfo, expert_short_len, tvb, offset, -1,
+ "Short CLV header (%d vs %d)",
+ length, len );
+ return;
+ }
+ q = 0;
+ while ((opts[q].dissect != NULL )&&( opts[q].optcode != code )){
+ q++;
+ }
+ if ( opts[q].dissect ) {
+ /* adjust by 2 for code/len octets */
+ clv_tree = proto_tree_add_subtree_format(tree, tvb, offset - 2,
+ length + 2, *opts[q].tree_id, NULL, "%s (%u)",
+ opts[q].tree_text, length );
+ opts[q].dissect(tvb, pinfo, clv_tree, offset,
+ id_length, length);
+ } else {
#if 0 /* XXX: Left as commented out in case info about "unknown code" is ever to be displayed under a sub-tree */
- clv_tree = proto_tree_add_subtree_format(tree, tvb, offset - 2,
- length + 2, unknown_tree_id, NULL, "Unknown code %u (%u)",
- code, length);
+ clv_tree = proto_tree_add_subtree_format(tree, tvb, offset - 2,
+ length + 2, unknown_tree_id, NULL, "Unknown code %u (%u)",
+ code, length);
#else
- if (tree) {
- proto_tree_add_text(tree, tvb, offset - 2,
- length + 2, "Unknown code %u (%u)",
- code, length);
- }
+ if (tree) {
+ proto_tree_add_text(tree, tvb, offset - 2,
+ length + 2, "Unknown code %u (%u)",
+ code, length);
+ }
#endif
- }
- offset += length;
- len -= length;
- }
+ }
+ offset += length;
+ len -= length;
+ }
}
diff --git a/epan/dissectors/packet-isis-hello.c b/epan/dissectors/packet-isis-hello.c
index 7bdb8183a2..9b06bf069e 100644
--- a/epan/dissectors/packet-isis-hello.c
+++ b/epan/dissectors/packet-isis-hello.c
@@ -36,15 +36,15 @@
/*
* Declarations for L1/L2 hello base header.
*/
-#define ISIS_HELLO_CTYPE_MASK 0x03
-#define ISIS_HELLO_CT_RESERVED_MASK 0xfc
-#define ISIS_HELLO_PRIORITY_MASK 0x7f
-#define ISIS_HELLO_P_RESERVED_MASK 0x80
+#define ISIS_HELLO_CTYPE_MASK 0x03
+#define ISIS_HELLO_CT_RESERVED_MASK 0xfc
+#define ISIS_HELLO_PRIORITY_MASK 0x7f
+#define ISIS_HELLO_P_RESERVED_MASK 0x80
-#define ISIS_HELLO_TYPE_RESERVED 0
-#define ISIS_HELLO_TYPE_LEVEL_1 1
-#define ISIS_HELLO_TYPE_LEVEL_2 2
-#define ISIS_HELLO_TYPE_LEVEL_12 3
+#define ISIS_HELLO_TYPE_RESERVED 0
+#define ISIS_HELLO_TYPE_LEVEL_1 1
+#define ISIS_HELLO_TYPE_LEVEL_2 2
+#define ISIS_HELLO_TYPE_LEVEL_12 3
/*
* misc. bittest macros
@@ -132,11 +132,11 @@ static expert_field ei_isis_hello_subtlv = EI_INIT;
static expert_field ei_isis_hello_authentication = EI_INIT;
static const value_string isis_hello_circuit_type_vals[] = {
- { ISIS_HELLO_TYPE_RESERVED, "Reserved 0 (discard PDU)"},
- { ISIS_HELLO_TYPE_LEVEL_1, "Level 1 only"},
- { ISIS_HELLO_TYPE_LEVEL_2, "Level 2 only"},
- { ISIS_HELLO_TYPE_LEVEL_12, "Level 1 and 2"},
- { 0, NULL} };
+ { ISIS_HELLO_TYPE_RESERVED, "Reserved 0 (discard PDU)"},
+ { ISIS_HELLO_TYPE_LEVEL_1, "Level 1 only"},
+ { ISIS_HELLO_TYPE_LEVEL_2, "Level 2 only"},
+ { ISIS_HELLO_TYPE_LEVEL_12, "Level 1 and 2"},
+ { 0, NULL} };
static void
@@ -309,136 +309,136 @@ dissect_hello_mt_port_cap_clv(tvbuff_t *tvb, packet_info* pinfo,
* Name: dissect_hello_restart_clv()
*
* Description:
- * Decode for a restart clv - only found in IIHs
+ * Decode for a restart clv - only found in IIHs
* hence no call in the common clv dissector
*
*/
static void
dissect_hello_restart_clv(tvbuff_t *tvb, packet_info* pinfo _U_,
- proto_tree *tree, int offset, int id_length, int length)
+ proto_tree *tree, int offset, int id_length, int length)
{
- int restart_options=0;
- proto_tree *flags_tree;
- proto_item *restart_flags_item;
- proto_item *hold_time_item;
- const char *sep;
-
- if (length >= 1) {
- restart_options = tvb_get_guint8(tvb, offset);
- restart_flags_item = proto_tree_add_uint ( tree, hf_isis_hello_clv_restart_flags,
- tvb, offset, 1, restart_options);
- flags_tree = proto_item_add_subtree(restart_flags_item, ett_isis_hello_clv_restart_flags);
- proto_tree_add_boolean (flags_tree, hf_isis_hello_clv_restart_flags_sa,
- tvb, offset, 1, restart_options );
- proto_tree_add_boolean (flags_tree, hf_isis_hello_clv_restart_flags_ra,
- tvb, offset, 1, restart_options );
- proto_tree_add_boolean (flags_tree, hf_isis_hello_clv_restart_flags_rr,
- tvb, offset, 1, restart_options );
-
- /* Append an indication of which flags are set in the restart
- * options
- */
- sep = initial_sep;
- APPEND_BOOLEAN_FLAG(ISIS_MASK_RESTART_SA(restart_options), restart_flags_item, "%sSA");
- APPEND_BOOLEAN_FLAG(ISIS_MASK_RESTART_RA(restart_options), restart_flags_item, "%sRA");
- APPEND_BOOLEAN_FLAG(ISIS_MASK_RESTART_RR(restart_options), restart_flags_item, "%sRR");
- if (sep != initial_sep)
- {
- proto_item_append_text (restart_flags_item, ")");
- }
-
- }
-
- /* The Remaining Time field should only be present if the RA flag is
- * set
- */
- if (length >= 3 && ISIS_MASK_RESTART_RA(restart_options)) {
- hold_time_item = proto_tree_add_item( tree, hf_isis_hello_clv_restart_remain_time,
- tvb, offset+1, 2, ENC_BIG_ENDIAN );
- proto_item_append_text( hold_time_item, "s" );
- }
-
- /* The Restarting Neighbor ID should only be present if the RA flag is
- * set.
- */
- if (length >= 3 + id_length && ISIS_MASK_RESTART_RA(restart_options)) {
- proto_tree_add_item( tree, hf_isis_hello_clv_restart_neighbor, tvb, offset+3, id_length, ENC_NA);
- }
+ int restart_options=0;
+ proto_tree *flags_tree;
+ proto_item *restart_flags_item;
+ proto_item *hold_time_item;
+ const char *sep;
+
+ if (length >= 1) {
+ restart_options = tvb_get_guint8(tvb, offset);
+ restart_flags_item = proto_tree_add_uint ( tree, hf_isis_hello_clv_restart_flags,
+ tvb, offset, 1, restart_options);
+ flags_tree = proto_item_add_subtree(restart_flags_item, ett_isis_hello_clv_restart_flags);
+ proto_tree_add_boolean (flags_tree, hf_isis_hello_clv_restart_flags_sa,
+ tvb, offset, 1, restart_options );
+ proto_tree_add_boolean (flags_tree, hf_isis_hello_clv_restart_flags_ra,
+ tvb, offset, 1, restart_options );
+ proto_tree_add_boolean (flags_tree, hf_isis_hello_clv_restart_flags_rr,
+ tvb, offset, 1, restart_options );
+
+ /* Append an indication of which flags are set in the restart
+ * options
+ */
+ sep = initial_sep;
+ APPEND_BOOLEAN_FLAG(ISIS_MASK_RESTART_SA(restart_options), restart_flags_item, "%sSA");
+ APPEND_BOOLEAN_FLAG(ISIS_MASK_RESTART_RA(restart_options), restart_flags_item, "%sRA");
+ APPEND_BOOLEAN_FLAG(ISIS_MASK_RESTART_RR(restart_options), restart_flags_item, "%sRR");
+ if (sep != initial_sep)
+ {
+ proto_item_append_text (restart_flags_item, ")");
+ }
+
+ }
+
+ /* The Remaining Time field should only be present if the RA flag is
+ * set
+ */
+ if (length >= 3 && ISIS_MASK_RESTART_RA(restart_options)) {
+ hold_time_item = proto_tree_add_item( tree, hf_isis_hello_clv_restart_remain_time,
+ tvb, offset+1, 2, ENC_BIG_ENDIAN );
+ proto_item_append_text( hold_time_item, "s" );
+ }
+
+ /* The Restarting Neighbor ID should only be present if the RA flag is
+ * set.
+ */
+ if (length >= 3 + id_length && ISIS_MASK_RESTART_RA(restart_options)) {
+ proto_tree_add_item( tree, hf_isis_hello_clv_restart_neighbor, tvb, offset+3, id_length, ENC_NA);
+ }
}
/*
* Name: dissect_hello_nlpid_clv()
*
* Description:
- * Decode for a hello packets NLPID clv. Calls into the
- * clv common one.
+ * Decode for a hello packets NLPID clv. Calls into the
+ * clv common one.
*
* Input:
- * tvbuff_t * : tvbuffer for packet data
- * proto_tree * : proto tree to build on (may be null)
- * int : current offset into packet data
- * int : length of IDs in packet.
- * int : length of this clv
+ * tvbuff_t * : tvbuffer for packet data
+ * proto_tree * : proto tree to build on (may be null)
+ * int : current offset into packet data
+ * int : length of IDs in packet.
+ * int : length of this clv
*
* Output:
- * void, will modify proto_tree if not null.
+ * void, will modify proto_tree if not null.
*/
static void
dissect_hello_nlpid_clv(tvbuff_t *tvb, packet_info* pinfo _U_,
- proto_tree *tree, int offset, int id_length _U_, int length)
+ proto_tree *tree, int offset, int id_length _U_, int length)
{
- isis_dissect_nlpid_clv(tvb, tree, offset, length);
+ isis_dissect_nlpid_clv(tvb, tree, offset, length);
}
/*
* Name: dissect_hello_mt_clv()
*
* Description:
- * Decode for a hello packets Multi Topology clv. Calls into the
- * clv common one.
+ * Decode for a hello packets Multi Topology clv. Calls into the
+ * clv common one.
*
* Input:
- * tvbuff_t * : tvbuffer for packet data
- * proto_tree * : proto tree to build on (may be null)
- * int : current offset into packet data
- * int : length of IDs in packet.
- * int : length of this clv
+ * tvbuff_t * : tvbuffer for packet data
+ * proto_tree * : proto tree to build on (may be null)
+ * int : current offset into packet data
+ * int : length of IDs in packet.
+ * int : length of this clv
*
* Output:
- * void, will modify proto_tree if not null.
+ * void, will modify proto_tree if not null.
*/
static void
dissect_hello_mt_clv(tvbuff_t *tvb, packet_info* pinfo _U_,
- proto_tree *tree, int offset, int id_length _U_, int length)
+ proto_tree *tree, int offset, int id_length _U_, int length)
{
- isis_dissect_mt_clv(tvb, tree, offset, length,
- hf_isis_hello_clv_mt );
+ isis_dissect_mt_clv(tvb, tree, offset, length,
+ hf_isis_hello_clv_mt );
}
/*
* Name: dissect_hello_ip_int_addr_clv()
*
* Description:
- * Decode for a hello packets ip interface addr clv. Calls into the
- * clv common one.
+ * Decode for a hello packets ip interface addr clv. Calls into the
+ * clv common one.
*
* Input:
- * tvbuff_t * : tvbuffer for packet data
- * proto_tree * : proto tree to build on (may be null)
- * int : current offset into packet data
- * int : length of IDs in packet.
- * int : length of this clv
+ * tvbuff_t * : tvbuffer for packet data
+ * proto_tree * : proto tree to build on (may be null)
+ * int : current offset into packet data
+ * int : length of IDs in packet.
+ * int : length of this clv
*
* Output:
- * void, will modify proto_tree if not null.
+ * void, will modify proto_tree if not null.
*/
static void
dissect_hello_ip_int_addr_clv(tvbuff_t *tvb, packet_info* pinfo,
- proto_tree *tree, int offset, int id_length _U_, int length)
+ proto_tree *tree, int offset, int id_length _U_, int length)
{
- isis_dissect_ip_int_clv(tree, pinfo, tvb, &ei_isis_hello_short_packet,
+ isis_dissect_ip_int_clv(tree, pinfo, tvb, &ei_isis_hello_short_packet,
offset, length, hf_isis_hello_clv_ipv4_int_addr );
}
@@ -446,24 +446,24 @@ dissect_hello_ip_int_addr_clv(tvbuff_t *tvb, packet_info* pinfo,
* Name: dissect_hello_ipv6_int_addr_clv()
*
* Description:
- * Decode for a hello packets ipv6 interface addr clv. Calls into the
- * clv common one.
+ * Decode for a hello packets ipv6 interface addr clv. Calls into the
+ * clv common one.
*
* Input:
- * tvbuff_t * : tvbuffer for packet data
- * proto_tree * : proto tree to build on (may be null)
- * int : current offset into packet data
- * int : length of IDs in packet.
- * int : length of this clv
+ * tvbuff_t * : tvbuffer for packet data
+ * proto_tree * : proto tree to build on (may be null)
+ * int : current offset into packet data
+ * int : length of IDs in packet.
+ * int : length of this clv
*
* Output:
- * void, will modify proto_tree if not null.
+ * void, will modify proto_tree if not null.
*/
static void
dissect_hello_ipv6_int_addr_clv(tvbuff_t *tvb, packet_info* pinfo,
- proto_tree *tree, int offset, int id_length _U_, int length)
+ proto_tree *tree, int offset, int id_length _U_, int length)
{
- isis_dissect_ipv6_int_clv(tree, pinfo, tvb, &ei_isis_hello_short_packet,
+ isis_dissect_ipv6_int_clv(tree, pinfo, tvb, &ei_isis_hello_short_packet,
offset, length, hf_isis_hello_clv_ipv6_int_addr );
}
@@ -471,48 +471,48 @@ dissect_hello_ipv6_int_addr_clv(tvbuff_t *tvb, packet_info* pinfo,
* Name: dissect_hello_authentication_clv()
*
* Description:
- * Decode for a hello packets authenticaion clv.
+ * Decode for a hello packets authenticaion clv.
* Calls into the CLV common one.
*
* Input:
- * tvbuff_t * : tvbuffer for packet data
- * proto_tree * : proto tree to build on (may be null)
- * int : current offset into packet data
- * int : length of IDs in packet.
- * int : length of this clv
+ * tvbuff_t * : tvbuffer for packet data
+ * proto_tree * : proto tree to build on (may be null)
+ * int : current offset into packet data
+ * int : length of IDs in packet.
+ * int : length of this clv
*
* Output:
- * void, will modify proto_tree if not null.
+ * void, will modify proto_tree if not null.
*/
static void
dissect_hello_authentication_clv(tvbuff_t *tvb, packet_info* pinfo,
- proto_tree *tree, int offset, int id_length _U_, int length)
+ proto_tree *tree, int offset, int id_length _U_, int length)
{
- isis_dissect_authentication_clv(tree, pinfo, tvb, &ei_isis_hello_authentication, offset, length);
+ isis_dissect_authentication_clv(tree, pinfo, tvb, &ei_isis_hello_authentication, offset, length);
}
/*
* Name: dissect_hello_ip_authentication_clv()
*
* Description:
- * Decode for a hello packets IP authenticaion clv.
+ * Decode for a hello packets IP authenticaion clv.
* Calls into the CLV common one.
*
* Input:
- * tvbuff_t * : tvbuffer for packet data
- * proto_tree * : proto tree to build on (may be null)
- * int : current offset into packet data
- * int : length of IDs in packet.
- * int : length of this clv
+ * tvbuff_t * : tvbuffer for packet data
+ * proto_tree * : proto tree to build on (may be null)
+ * int : current offset into packet data
+ * int : length of IDs in packet.
+ * int : length of this clv
*
* Output:
- * void, will modify proto_tree if not null.
+ * void, will modify proto_tree if not null.
*/
static void
dissect_hello_ip_authentication_clv(tvbuff_t *tvb, packet_info* pinfo _U_,
- proto_tree *tree, int offset, int id_length _U_, int length)
+ proto_tree *tree, int offset, int id_length _U_, int length)
{
- isis_dissect_ip_authentication_clv(tvb, tree, offset, length);
+ isis_dissect_ip_authentication_clv(tvb, tree, offset, length);
}
/*
@@ -585,24 +585,24 @@ dissect_hello_checksum_clv(tvbuff_t *tvb, packet_info* pinfo,
* Name: dissect_hello_area_address_clv()
*
* Description:
- * Decode for a hello packets area address clv.
+ * Decode for a hello packets area address clv.
* Calls into the CLV common one.
*
* Input:
- * tvbuff_t * : tvbuffer for packet data
- * proto_tree * : proto tree to build on (may be null)
- * int : current offset into packet data
- * int : length of IDs in packet.
- * int : length of this clv
+ * tvbuff_t * : tvbuffer for packet data
+ * proto_tree * : proto tree to build on (may be null)
+ * int : current offset into packet data
+ * int : length of IDs in packet.
+ * int : length of this clv
*
* Output:
- * void, will modify proto_tree if not null.
+ * void, will modify proto_tree if not null.
*/
static void
dissect_hello_area_address_clv(tvbuff_t *tvb, packet_info* pinfo _U_,
- proto_tree *tree, int offset, int id_length _U_, int length)
+ proto_tree *tree, int offset, int id_length _U_, int length)
{
- isis_dissect_area_address_clv(tree, pinfo, tvb, &ei_isis_hello_short_packet, offset, length);
+ isis_dissect_area_address_clv(tree, pinfo, tvb, &ei_isis_hello_short_packet, offset, length);
}
static const value_string adj_state_vals[] = {
@@ -614,7 +614,7 @@ static const value_string adj_state_vals[] = {
static void
dissect_hello_ptp_adj_clv(tvbuff_t *tvb, packet_info* pinfo,
- proto_tree *tree, int offset, int id_length, int length)
+ proto_tree *tree, int offset, int id_length, int length)
{
switch(length)
{
@@ -646,487 +646,487 @@ dissect_hello_ptp_adj_clv(tvbuff_t *tvb, packet_info* pinfo,
* Name: isis_dissect_is_neighbors_clv()
*
* Description:
- * Take apart a IS neighbor packet. A neighbor is n 6 byte packets.
- * (they tend to be an 802.3 MAC address, but it's not required).
+ * Take apart a IS neighbor packet. A neighbor is n 6 byte packets.
+ * (they tend to be an 802.3 MAC address, but it's not required).
*
* Input:
- * tvbuff_t * : tvbuffer for packet data
- * proto_tree * : protocol display tree to fill out. May be NULL
- * int : offset into packet data where we are.
- * int : length of IDs in packet.
- * int : length of clv we are decoding
+ * tvbuff_t * : tvbuffer for packet data
+ * proto_tree * : protocol display tree to fill out. May be NULL
+ * int : offset into packet data where we are.
+ * int : length of IDs in packet.
+ * int : length of clv we are decoding
*
* Output:
- * void, but we will add to proto tree if !NULL.
+ * void, but we will add to proto tree if !NULL.
*/
static void
dissect_hello_is_neighbors_clv(tvbuff_t *tvb, packet_info* pinfo, proto_tree *tree, int offset,
- int id_length _U_, int length)
+ int id_length _U_, int length)
{
- while ( length > 0 ) {
- if (length<6) {
- proto_tree_add_expert_format(tree, pinfo, &ei_isis_hello_short_packet, tvb, offset, -1,
- "short is neighbor (%d vs 6)", length );
- return;
- }
- /*
- * Lets turn the area address into "standard" 0000.0000.etc
- * format string.
- */
- proto_tree_add_item(tree, hf_isis_hello_is_neighbor, tvb, offset, 6, ENC_NA);
- offset += 6;
- length -= 6;
- }
+ while ( length > 0 ) {
+ if (length<6) {
+ proto_tree_add_expert_format(tree, pinfo, &ei_isis_hello_short_packet, tvb, offset, -1,
+ "short is neighbor (%d vs 6)", length );
+ return;
+ }
+ /*
+ * Lets turn the area address into "standard" 0000.0000.etc
+ * format string.
+ */
+ proto_tree_add_item(tree, hf_isis_hello_is_neighbor, tvb, offset, 6, ENC_NA);
+ offset += 6;
+ length -= 6;
+ }
}
/*
* Name: dissect_hello_padding_clv()
*
* Description:
- * Decode for a hello packet's padding clv. Padding does nothing,
- * so we just return.
+ * Decode for a hello packet's padding clv. Padding does nothing,
+ * so we just return.
*
* Input:
- * tvbuff_t * : tvbuffer for packet data
- * proto_tree * : proto tree to build on (may be null)
- * int : current offset into packet data
- * int : length of IDs in packet.
- * int : length of this clv
+ * tvbuff_t * : tvbuffer for packet data
+ * proto_tree * : proto tree to build on (may be null)
+ * int : current offset into packet data
+ * int : length of IDs in packet.
+ * int : length of this clv
*
* Output:
- * void
+ * void
*/
static void
dissect_hello_padding_clv(tvbuff_t *tvb _U_, packet_info* pinfo _U_, proto_tree *tree _U_, int offset _U_,
- int id_length _U_, int length _U_)
+ int id_length _U_, int length _U_)
{
- /* nothing to do here! */
+ /* nothing to do here! */
}
static const isis_clv_handle_t clv_l1_hello_opts[] = {
- {
- ISIS_CLV_AREA_ADDRESS,
- "Area address(es)",
- &ett_isis_hello_clv_area_addr,
- dissect_hello_area_address_clv
- },
- {
- ISIS_CLV_IS_NEIGHBORS,
- "IS Neighbor(s)",
- &ett_isis_hello_clv_is_neighbors,
- dissect_hello_is_neighbors_clv
- },
- {
- ISIS_CLV_PADDING,
- "Padding",
- &ett_isis_hello_clv_padding,
- dissect_hello_padding_clv
- },
- {
- ISIS_CLV_PROTOCOLS_SUPPORTED,
- "Protocols Supported",
- &ett_isis_hello_clv_nlpid,
- dissect_hello_nlpid_clv
- },
- {
- ISIS_CLV_IP_ADDR,
- "IP Interface address(es)",
- &ett_isis_hello_clv_ipv4_int_addr,
- dissect_hello_ip_int_addr_clv
- },
- {
- ISIS_CLV_IP6_ADDR,
- "IPv6 Interface address(es)",
- &ett_isis_hello_clv_ipv6_int_addr,
- dissect_hello_ipv6_int_addr_clv
- },
- {
- ISIS_CLV_RESTART,
- "Restart Signaling",
- &ett_isis_hello_clv_restart,
- dissect_hello_restart_clv
- },
- {
- ISIS_CLV_AUTHENTICATION,
- "Authentication",
- &ett_isis_hello_clv_authentication,
- dissect_hello_authentication_clv
- },
- {
- ISIS_CLV_IP_AUTHENTICATION,
- "IP Authentication",
- &ett_isis_hello_clv_ip_authentication,
- dissect_hello_ip_authentication_clv
- },
- {
- ISIS_CLV_MT_SUPPORTED,
- "Multi Topology",
- &ett_isis_hello_clv_mt,
- dissect_hello_mt_clv
- },
- {
- ISIS_CLV_CHECKSUM,
- "Checksum",
- &ett_isis_hello_clv_checksum,
- dissect_hello_checksum_clv
- },
- {
- 0,
- "",
- NULL,
- NULL
- }
+ {
+ ISIS_CLV_AREA_ADDRESS,
+ "Area address(es)",
+ &ett_isis_hello_clv_area_addr,
+ dissect_hello_area_address_clv
+ },
+ {
+ ISIS_CLV_IS_NEIGHBORS,
+ "IS Neighbor(s)",
+ &ett_isis_hello_clv_is_neighbors,
+ dissect_hello_is_neighbors_clv
+ },
+ {
+ ISIS_CLV_PADDING,
+ "Padding",
+ &ett_isis_hello_clv_padding,
+ dissect_hello_padding_clv
+ },
+ {
+ ISIS_CLV_PROTOCOLS_SUPPORTED,
+ "Protocols Supported",
+ &ett_isis_hello_clv_nlpid,
+ dissect_hello_nlpid_clv
+ },
+ {
+ ISIS_CLV_IP_ADDR,
+ "IP Interface address(es)",
+ &ett_isis_hello_clv_ipv4_int_addr,
+ dissect_hello_ip_int_addr_clv
+ },
+ {
+ ISIS_CLV_IP6_ADDR,
+ "IPv6 Interface address(es)",
+ &ett_isis_hello_clv_ipv6_int_addr,
+ dissect_hello_ipv6_int_addr_clv
+ },
+ {
+ ISIS_CLV_RESTART,
+ "Restart Signaling",
+ &ett_isis_hello_clv_restart,
+ dissect_hello_restart_clv
+ },
+ {
+ ISIS_CLV_AUTHENTICATION,
+ "Authentication",
+ &ett_isis_hello_clv_authentication,
+ dissect_hello_authentication_clv
+ },
+ {
+ ISIS_CLV_IP_AUTHENTICATION,
+ "IP Authentication",
+ &ett_isis_hello_clv_ip_authentication,
+ dissect_hello_ip_authentication_clv
+ },
+ {
+ ISIS_CLV_MT_SUPPORTED,
+ "Multi Topology",
+ &ett_isis_hello_clv_mt,
+ dissect_hello_mt_clv
+ },
+ {
+ ISIS_CLV_CHECKSUM,
+ "Checksum",
+ &ett_isis_hello_clv_checksum,
+ dissect_hello_checksum_clv
+ },
+ {
+ 0,
+ "",
+ NULL,
+ NULL
+ }
};
static const isis_clv_handle_t clv_l2_hello_opts[] = {
- {
- ISIS_CLV_AREA_ADDRESS,
- "Area address(es)",
- &ett_isis_hello_clv_area_addr,
- dissect_hello_area_address_clv
- },
- {
- ISIS_CLV_IS_NEIGHBORS,
- "IS Neighbor(s)",
- &ett_isis_hello_clv_is_neighbors,
- dissect_hello_is_neighbors_clv
- },
- {
- ISIS_CLV_PADDING,
- "Padding",
- &ett_isis_hello_clv_padding,
- dissect_hello_padding_clv
- },
- {
- ISIS_CLV_PROTOCOLS_SUPPORTED,
- "Protocols Supported",
- &ett_isis_hello_clv_nlpid,
- dissect_hello_nlpid_clv
- },
- {
- ISIS_CLV_IP_ADDR,
- "IP Interface address(es)",
- &ett_isis_hello_clv_ipv4_int_addr,
- dissect_hello_ip_int_addr_clv
- },
- {
- ISIS_CLV_IP6_ADDR,
- "IPv6 Interface address(es)",
- &ett_isis_hello_clv_ipv6_int_addr,
- dissect_hello_ipv6_int_addr_clv
- },
- {
- ISIS_CLV_AUTHENTICATION,
- "Authentication",
- &ett_isis_hello_clv_authentication,
- dissect_hello_authentication_clv
- },
- {
- ISIS_CLV_IP_AUTHENTICATION,
- "IP Authentication",
- &ett_isis_hello_clv_ip_authentication,
- dissect_hello_ip_authentication_clv
- },
- {
- ISIS_CLV_RESTART,
- "Restart Signaling",
- &ett_isis_hello_clv_restart,
- dissect_hello_restart_clv
- },
- {
- ISIS_CLV_MT_SUPPORTED,
- "Multi Topology",
- &ett_isis_hello_clv_mt,
- dissect_hello_mt_clv
- },
- {
- ISIS_CLV_CHECKSUM,
- "Checksum",
- &ett_isis_hello_clv_checksum,
- dissect_hello_checksum_clv
- },
- {
- 0,
- "",
- NULL,
- NULL
- }
+ {
+ ISIS_CLV_AREA_ADDRESS,
+ "Area address(es)",
+ &ett_isis_hello_clv_area_addr,
+ dissect_hello_area_address_clv
+ },
+ {
+ ISIS_CLV_IS_NEIGHBORS,
+ "IS Neighbor(s)",
+ &ett_isis_hello_clv_is_neighbors,
+ dissect_hello_is_neighbors_clv
+ },
+ {
+ ISIS_CLV_PADDING,
+ "Padding",
+ &ett_isis_hello_clv_padding,
+ dissect_hello_padding_clv
+ },
+ {
+ ISIS_CLV_PROTOCOLS_SUPPORTED,
+ "Protocols Supported",
+ &ett_isis_hello_clv_nlpid,
+ dissect_hello_nlpid_clv
+ },
+ {
+ ISIS_CLV_IP_ADDR,
+ "IP Interface address(es)",
+ &ett_isis_hello_clv_ipv4_int_addr,
+ dissect_hello_ip_int_addr_clv
+ },
+ {
+ ISIS_CLV_IP6_ADDR,
+ "IPv6 Interface address(es)",
+ &ett_isis_hello_clv_ipv6_int_addr,
+ dissect_hello_ipv6_int_addr_clv
+ },
+ {
+ ISIS_CLV_AUTHENTICATION,
+ "Authentication",
+ &ett_isis_hello_clv_authentication,
+ dissect_hello_authentication_clv
+ },
+ {
+ ISIS_CLV_IP_AUTHENTICATION,
+ "IP Authentication",
+ &ett_isis_hello_clv_ip_authentication,
+ dissect_hello_ip_authentication_clv
+ },
+ {
+ ISIS_CLV_RESTART,
+ "Restart Signaling",
+ &ett_isis_hello_clv_restart,
+ dissect_hello_restart_clv
+ },
+ {
+ ISIS_CLV_MT_SUPPORTED,
+ "Multi Topology",
+ &ett_isis_hello_clv_mt,
+ dissect_hello_mt_clv
+ },
+ {
+ ISIS_CLV_CHECKSUM,
+ "Checksum",
+ &ett_isis_hello_clv_checksum,
+ dissect_hello_checksum_clv
+ },
+ {
+ 0,
+ "",
+ NULL,
+ NULL
+ }
};
static const isis_clv_handle_t clv_ptp_hello_opts[] = {
- {
- ISIS_CLV_AREA_ADDRESS,
- "Area address(es)",
- &ett_isis_hello_clv_area_addr,
- dissect_hello_area_address_clv
- },
- {
- ISIS_CLV_PADDING,
- "Padding",
- &ett_isis_hello_clv_padding,
- dissect_hello_padding_clv
- },
- {
- ISIS_CLV_PROTOCOLS_SUPPORTED,
- "Protocols Supported",
- &ett_isis_hello_clv_nlpid,
- dissect_hello_nlpid_clv
- },
- {
- ISIS_CLV_IP_ADDR,
- "IP Interface address(es)",
- &ett_isis_hello_clv_ipv4_int_addr,
- dissect_hello_ip_int_addr_clv
- },
- {
- ISIS_CLV_IP6_ADDR,
- "IPv6 Interface address(es)",
- &ett_isis_hello_clv_ipv6_int_addr,
- dissect_hello_ipv6_int_addr_clv
- },
- {
- ISIS_CLV_AUTHENTICATION,
- "Authentication",
- &ett_isis_hello_clv_authentication,
- dissect_hello_authentication_clv
- },
- {
- ISIS_CLV_IP_AUTHENTICATION,
- "IP Authentication",
- &ett_isis_hello_clv_ip_authentication,
- dissect_hello_ip_authentication_clv
- },
- {
- ISIS_CLV_MT_PORT_CAP,
- "MT Port Capability",
- &ett_isis_hello_clv_mt_port_cap,
- dissect_hello_mt_port_cap_clv
- },
- {
- ISIS_CLV_RESTART,
- "Restart Option",
- &ett_isis_hello_clv_restart,
- dissect_hello_restart_clv
- },
- {
- ISIS_CLV_PTP_ADJ_STATE,
- "Point-to-point Adjacency State",
- &ett_isis_hello_clv_ptp_adj,
- dissect_hello_ptp_adj_clv
- },
- {
- ISIS_CLV_MT_SUPPORTED,
- "Multi Topology",
- &ett_isis_hello_clv_mt,
- dissect_hello_mt_clv
- },
- {
- ISIS_CLV_CHECKSUM,
- "Checksum",
- &ett_isis_hello_clv_checksum,
- dissect_hello_checksum_clv
- },
- {
- 0,
- "",
- NULL,
- NULL
- }
+ {
+ ISIS_CLV_AREA_ADDRESS,
+ "Area address(es)",
+ &ett_isis_hello_clv_area_addr,
+ dissect_hello_area_address_clv
+ },
+ {
+ ISIS_CLV_PADDING,
+ "Padding",
+ &ett_isis_hello_clv_padding,
+ dissect_hello_padding_clv
+ },
+ {
+ ISIS_CLV_PROTOCOLS_SUPPORTED,
+ "Protocols Supported",
+ &ett_isis_hello_clv_nlpid,
+ dissect_hello_nlpid_clv
+ },
+ {
+ ISIS_CLV_IP_ADDR,
+ "IP Interface address(es)",
+ &ett_isis_hello_clv_ipv4_int_addr,
+ dissect_hello_ip_int_addr_clv
+ },
+ {
+ ISIS_CLV_IP6_ADDR,
+ "IPv6 Interface address(es)",
+ &ett_isis_hello_clv_ipv6_int_addr,
+ dissect_hello_ipv6_int_addr_clv
+ },
+ {
+ ISIS_CLV_AUTHENTICATION,
+ "Authentication",
+ &ett_isis_hello_clv_authentication,
+ dissect_hello_authentication_clv
+ },
+ {
+ ISIS_CLV_IP_AUTHENTICATION,
+ "IP Authentication",
+ &ett_isis_hello_clv_ip_authentication,
+ dissect_hello_ip_authentication_clv
+ },
+ {
+ ISIS_CLV_MT_PORT_CAP,
+ "MT Port Capability",
+ &ett_isis_hello_clv_mt_port_cap,
+ dissect_hello_mt_port_cap_clv
+ },
+ {
+ ISIS_CLV_RESTART,
+ "Restart Option",
+ &ett_isis_hello_clv_restart,
+ dissect_hello_restart_clv
+ },
+ {
+ ISIS_CLV_PTP_ADJ_STATE,
+ "Point-to-point Adjacency State",
+ &ett_isis_hello_clv_ptp_adj,
+ dissect_hello_ptp_adj_clv
+ },
+ {
+ ISIS_CLV_MT_SUPPORTED,
+ "Multi Topology",
+ &ett_isis_hello_clv_mt,
+ dissect_hello_mt_clv
+ },
+ {
+ ISIS_CLV_CHECKSUM,
+ "Checksum",
+ &ett_isis_hello_clv_checksum,
+ dissect_hello_checksum_clv
+ },
+ {
+ 0,
+ "",
+ NULL,
+ NULL
+ }
};
/*
* Name: isis_dissect_isis_hello()
*
* Description:
- * This procedure rips apart the various types of ISIS hellos. L1H and
- * L2H's are identical for the most part, while the PTP hello has
- * a shorter header.
+ * This procedure rips apart the various types of ISIS hellos. L1H and
+ * L2H's are identical for the most part, while the PTP hello has
+ * a shorter header.
*/
static void
dissect_isis_hello(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
- const isis_clv_handle_t *opts, int header_length, int id_length)
+ const isis_clv_handle_t *opts, int header_length, int id_length)
{
- proto_item *ti;
- proto_tree *hello_tree;
- int pdu_length;
-
- col_set_str(pinfo->cinfo, COL_PROTOCOL, "ISIS HELLO");
-
- ti = proto_tree_add_item(tree, proto_isis_hello, tvb, offset, -1, ENC_NA);
- hello_tree = proto_item_add_subtree(ti, ett_isis_hello);
-
- proto_tree_add_item(hello_tree, hf_isis_hello_circuit, tvb, offset, 1, ENC_NA);
- proto_tree_add_item(hello_tree, hf_isis_hello_circuit_reserved, tvb, offset, 1, ENC_NA);
- offset += 1;
-
- proto_tree_add_item(hello_tree, hf_isis_hello_source_id, tvb, offset, id_length, ENC_NA);
- col_append_fstr(pinfo->cinfo, COL_INFO, ", System-ID: %s", tvb_print_system_id( tvb, offset, id_length ));
-
- offset += id_length;
-
- proto_tree_add_item(hello_tree, hf_isis_hello_holding_timer, tvb,
- offset, 2, ENC_BIG_ENDIAN);
- offset += 2;
-
- pdu_length = tvb_get_ntohs(tvb, offset);
- proto_tree_add_uint(hello_tree, hf_isis_hello_pdu_length, tvb,
- offset, 2, pdu_length);
- offset += 2;
-
- if (opts == clv_ptp_hello_opts) {
- proto_tree_add_item(hello_tree, hf_isis_hello_local_circuit_id, tvb,
- offset, 1, ENC_BIG_ENDIAN );
- offset += 1;
- } else {
- proto_tree_add_item(hello_tree, hf_isis_hello_priority, tvb, offset, 1, ENC_NA);
- proto_tree_add_item(hello_tree, hf_isis_hello_priority_reserved, tvb, offset, 1, ENC_NA);
- offset += 1;
-
- proto_tree_add_item(hello_tree, hf_isis_hello_lan_id, tvb, offset, id_length + 1, ENC_NA);
- offset += id_length + 1;
- }
-
- pdu_length -= header_length;
- if (pdu_length < 0) {
- expert_add_info_format(pinfo, ti, &ei_isis_hello_long_packet,
- "Packet header length %d went beyond packet", header_length );
- return;
- }
- /*
- * Now, we need to decode our CLVs. We need to pass in
- * our list of valid ones!
- */
- isis_dissect_clvs(tvb, pinfo, hello_tree, offset,
- opts, &ei_isis_hello_short_packet, pdu_length, id_length,
- ett_isis_hello_clv_unknown);
+ proto_item *ti;
+ proto_tree *hello_tree;
+ int pdu_length;
+
+ col_set_str(pinfo->cinfo, COL_PROTOCOL, "ISIS HELLO");
+
+ ti = proto_tree_add_item(tree, proto_isis_hello, tvb, offset, -1, ENC_NA);
+ hello_tree = proto_item_add_subtree(ti, ett_isis_hello);
+
+ proto_tree_add_item(hello_tree, hf_isis_hello_circuit, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(hello_tree, hf_isis_hello_circuit_reserved, tvb, offset, 1, ENC_NA);
+ offset += 1;
+
+ proto_tree_add_item(hello_tree, hf_isis_hello_source_id, tvb, offset, id_length, ENC_NA);
+ col_append_fstr(pinfo->cinfo, COL_INFO, ", System-ID: %s", tvb_print_system_id( tvb, offset, id_length ));
+
+ offset += id_length;
+
+ proto_tree_add_item(hello_tree, hf_isis_hello_holding_timer, tvb,
+ offset, 2, ENC_BIG_ENDIAN);
+ offset += 2;
+
+ pdu_length = tvb_get_ntohs(tvb, offset);
+ proto_tree_add_uint(hello_tree, hf_isis_hello_pdu_length, tvb,
+ offset, 2, pdu_length);
+ offset += 2;
+
+ if (opts == clv_ptp_hello_opts) {
+ proto_tree_add_item(hello_tree, hf_isis_hello_local_circuit_id, tvb,
+ offset, 1, ENC_BIG_ENDIAN );
+ offset += 1;
+ } else {
+ proto_tree_add_item(hello_tree, hf_isis_hello_priority, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(hello_tree, hf_isis_hello_priority_reserved, tvb, offset, 1, ENC_NA);
+ offset += 1;
+
+ proto_tree_add_item(hello_tree, hf_isis_hello_lan_id, tvb, offset, id_length + 1, ENC_NA);
+ offset += id_length + 1;
+ }
+
+ pdu_length -= header_length;
+ if (pdu_length < 0) {
+ expert_add_info_format(pinfo, ti, &ei_isis_hello_long_packet,
+ "Packet header length %d went beyond packet", header_length );
+ return;
+ }
+ /*
+ * Now, we need to decode our CLVs. We need to pass in
+ * our list of valid ones!
+ */
+ isis_dissect_clvs(tvb, pinfo, hello_tree, offset,
+ opts, &ei_isis_hello_short_packet, pdu_length, id_length,
+ ett_isis_hello_clv_unknown);
}
static int
dissect_isis_l1_hello(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
{
- isis_data_t* isis = (isis_data_t*)data;
- dissect_isis_hello(tvb, pinfo, tree, 0,
- clv_l1_hello_opts, isis->header_length, isis->system_id_len);
- return tvb_length(tvb);
+ isis_data_t* isis = (isis_data_t*)data;
+ dissect_isis_hello(tvb, pinfo, tree, 0,
+ clv_l1_hello_opts, isis->header_length, isis->system_id_len);
+ return tvb_length(tvb);
}
static int
dissect_isis_l2_hello(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
{
- isis_data_t* isis = (isis_data_t*)data;
- dissect_isis_hello(tvb, pinfo, tree, 0,
- clv_l2_hello_opts, isis->header_length, isis->system_id_len);
- return tvb_length(tvb);
+ isis_data_t* isis = (isis_data_t*)data;
+ dissect_isis_hello(tvb, pinfo, tree, 0,
+ clv_l2_hello_opts, isis->header_length, isis->system_id_len);
+ return tvb_length(tvb);
}
static int
dissect_isis_ptp_hello(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
{
- isis_data_t* isis = (isis_data_t*)data;
- dissect_isis_hello(tvb, pinfo, tree, 0,
- clv_ptp_hello_opts, isis->header_length, isis->system_id_len);
- return tvb_length(tvb);
+ isis_data_t* isis = (isis_data_t*)data;
+ dissect_isis_hello(tvb, pinfo, tree, 0,
+ clv_ptp_hello_opts, isis->header_length, isis->system_id_len);
+ return tvb_length(tvb);
}
/*
* Name: isis_register_hello()
*
* Description:
- * Register our protocol sub-sets with protocol manager.
+ * Register our protocol sub-sets with protocol manager.
*
* Input:
- * int : protocol index for the ISIS protocol
+ * int : protocol index for the ISIS protocol
*
* Output:
- * void
+ * void
*/
void
proto_register_isis_hello(void)
{
- static hf_register_info hf[] = {
- { &hf_isis_hello_circuit,
- { "Circuit type", "isis.hello.circuit_type",
- FT_UINT8, BASE_HEX, VALS(isis_hello_circuit_type_vals), ISIS_HELLO_CTYPE_MASK, NULL, HFILL }},
+ static hf_register_info hf[] = {
+ { &hf_isis_hello_circuit,
+ { "Circuit type", "isis.hello.circuit_type",
+ FT_UINT8, BASE_HEX, VALS(isis_hello_circuit_type_vals), ISIS_HELLO_CTYPE_MASK, NULL, HFILL }},
- { &hf_isis_hello_circuit_reserved,
- { "Reserved", "isis.hello.reserved",
- FT_UINT8, BASE_HEX, NULL, ISIS_HELLO_CT_RESERVED_MASK, NULL, HFILL }},
+ { &hf_isis_hello_circuit_reserved,
+ { "Reserved", "isis.hello.reserved",
+ FT_UINT8, BASE_HEX, NULL, ISIS_HELLO_CT_RESERVED_MASK, NULL, HFILL }},
- { &hf_isis_hello_source_id,
- { "SystemID {Sender of PDU}", "isis.hello.source_id",
- FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_hello_source_id,
+ { "SystemID {Sender of PDU}", "isis.hello.source_id",
+ FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_hello_holding_timer,
- { "Holding timer", "isis.hello.holding_timer",
- FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_hello_holding_timer,
+ { "Holding timer", "isis.hello.holding_timer",
+ FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_hello_pdu_length,
- { "PDU length", "isis.hello.pdu_length",
- FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_hello_pdu_length,
+ { "PDU length", "isis.hello.pdu_length",
+ FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_hello_priority,
- { "Priority", "isis.hello.priority",
- FT_UINT8, BASE_DEC, NULL, ISIS_HELLO_PRIORITY_MASK, NULL, HFILL }},
+ { &hf_isis_hello_priority,
+ { "Priority", "isis.hello.priority",
+ FT_UINT8, BASE_DEC, NULL, ISIS_HELLO_PRIORITY_MASK, NULL, HFILL }},
- { &hf_isis_hello_priority_reserved,
- { "Reserved", "isis.hello.reserved",
- FT_UINT8, BASE_DEC, NULL, ISIS_HELLO_P_RESERVED_MASK, NULL, HFILL }},
+ { &hf_isis_hello_priority_reserved,
+ { "Reserved", "isis.hello.reserved",
+ FT_UINT8, BASE_DEC, NULL, ISIS_HELLO_P_RESERVED_MASK, NULL, HFILL }},
- { &hf_isis_hello_lan_id,
- { "SystemID {Designated IS}", "isis.hello.lan_id",
- FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_hello_lan_id,
+ { "SystemID {Designated IS}", "isis.hello.lan_id",
+ FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_hello_local_circuit_id,
- { "Local circuit ID", "isis.hello.local_circuit_id",
- FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_hello_local_circuit_id,
+ { "Local circuit ID", "isis.hello.local_circuit_id",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_hello_clv_ipv4_int_addr,
- { "IPv4 interface address", "isis.hello.clv_ipv4_int_addr",
- FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_hello_clv_ipv4_int_addr,
+ { "IPv4 interface address", "isis.hello.clv_ipv4_int_addr",
+ FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_hello_clv_ipv6_int_addr,
- { "IPv6 interface address", "isis.hello.clv_ipv6_int_addr",
- FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_hello_clv_ipv6_int_addr,
+ { "IPv6 interface address", "isis.hello.clv_ipv6_int_addr",
+ FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL }},
#if 0
- { &hf_isis_hello_clv_ptp_adj,
- { "Point-to-point Adjacency", "isis.hello.clv_ptp_adj",
- FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_hello_clv_ptp_adj,
+ { "Point-to-point Adjacency", "isis.hello.clv_ptp_adj",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
#endif
- { &hf_isis_hello_clv_mt,
- { "MT-ID", "isis.hello.clv_mt",
- FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_hello_clv_mt,
+ { "MT-ID", "isis.hello.clv_mt",
+ FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_hello_clv_restart_flags,
- { "Restart Signaling Flags", "isis.hello.clv_restart_flags",
- FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_hello_clv_restart_flags,
+ { "Restart Signaling Flags", "isis.hello.clv_restart_flags",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_hello_clv_restart_flags_rr,
- { "Restart Request", "isis.hello.clv_restart_flags.rr",
- FT_BOOLEAN, 8, TFS(&tfs_true_false), ISIS_RESTART_RR,
- "When set, the router is beginning a graceful restart", HFILL }},
+ { &hf_isis_hello_clv_restart_flags_rr,
+ { "Restart Request", "isis.hello.clv_restart_flags.rr",
+ FT_BOOLEAN, 8, TFS(&tfs_true_false), ISIS_RESTART_RR,
+ "When set, the router is beginning a graceful restart", HFILL }},
- { &hf_isis_hello_clv_restart_flags_ra,
- { "Restart Acknowledgment", "isis.hello.clv_restart_flags.ra",
- FT_BOOLEAN, 8, TFS(&tfs_true_false), ISIS_RESTART_RA,
- "When set, the router is willing to enter helper mode", HFILL }},
+ { &hf_isis_hello_clv_restart_flags_ra,
+ { "Restart Acknowledgment", "isis.hello.clv_restart_flags.ra",
+ FT_BOOLEAN, 8, TFS(&tfs_true_false), ISIS_RESTART_RA,
+ "When set, the router is willing to enter helper mode", HFILL }},
- { &hf_isis_hello_clv_restart_flags_sa,
- { "Suppress Adjacency", "isis.hello.clv_restart_flags.sa",
- FT_BOOLEAN, 8, TFS(&tfs_true_false), ISIS_RESTART_SA,
- "When set, the router is starting as opposed to restarting", HFILL }},
+ { &hf_isis_hello_clv_restart_flags_sa,
+ { "Suppress Adjacency", "isis.hello.clv_restart_flags.sa",
+ FT_BOOLEAN, 8, TFS(&tfs_true_false), ISIS_RESTART_SA,
+ "When set, the router is starting as opposed to restarting", HFILL }},
- { &hf_isis_hello_clv_restart_remain_time,
- { "Remaining holding time", "isis.hello.clv_restart.remain_time",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "How long the helper router will maintain the existing adjacency", HFILL }},
+ { &hf_isis_hello_clv_restart_remain_time,
+ { "Remaining holding time", "isis.hello.clv_restart.remain_time",
+ FT_UINT16, BASE_DEC, NULL, 0x0,
+ "How long the helper router will maintain the existing adjacency", HFILL }},
- { &hf_isis_hello_clv_restart_neighbor,
- { "Restarting Neighbor ID", "isis.hello.clv_restart.neighbor",
- FT_SYSTEM_ID, BASE_NONE, NULL, 0x0,
- "The System ID of the restarting neighbor", HFILL }},
+ { &hf_isis_hello_clv_restart_neighbor,
+ { "Restarting Neighbor ID", "isis.hello.clv_restart.neighbor",
+ FT_SYSTEM_ID, BASE_NONE, NULL, 0x0,
+ "The System ID of the restarting neighbor", HFILL }},
/* Generated from convert_proto_tree_add_text.pl */
{ &hf_isis_hello_mcid, { "MCID", "isis.hello.mcid", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
@@ -1139,53 +1139,53 @@ proto_register_isis_hello(void)
{ &hf_isis_hello_neighbor_systemid, { "Neighbor SystemID", "isis.hello.neighbor_systemid", FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, NULL, HFILL }},
{ &hf_isis_hello_neighbor_extended_local_circuit_id, { "Neighbor Extended Local circuit ID", "isis.hello.neighbor_extended_local_circuit_id", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
{ &hf_isis_hello_is_neighbor, { "IS Neighbor", "isis.hello.is_neighbor", FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
- };
-
- static gint *ett[] = {
- &ett_isis_hello,
- &ett_isis_hello_clv_area_addr,
- &ett_isis_hello_clv_is_neighbors,
- &ett_isis_hello_clv_padding,
- &ett_isis_hello_clv_unknown,
- &ett_isis_hello_clv_nlpid,
- &ett_isis_hello_clv_authentication,
- &ett_isis_hello_clv_ip_authentication,
- &ett_isis_hello_clv_ipv4_int_addr,
- &ett_isis_hello_clv_ipv6_int_addr,
- &ett_isis_hello_clv_ptp_adj,
- &ett_isis_hello_clv_mt,
- &ett_isis_hello_clv_restart,
- &ett_isis_hello_clv_restart_flags,
- &ett_isis_hello_clv_mt_port_cap,
- &ett_isis_hello_clv_mt_port_cap_spb_mcid,
- &ett_isis_hello_clv_mt_port_cap_spb_aux_mcid,
- &ett_isis_hello_clv_mt_port_cap_spb_digest,
- &ett_isis_hello_clv_mt_port_cap_spb_bvid_tuples,
- &ett_isis_hello_clv_checksum
- };
-
- static ei_register_info ei[] = {
- { &ei_isis_hello_short_packet, { "isis.hello.short_packet", PI_MALFORMED, PI_ERROR, "Short packet", EXPFILL }},
- { &ei_isis_hello_long_packet, { "isis.hello.long_packet", PI_MALFORMED, PI_ERROR, "Long packet", EXPFILL }},
- { &ei_isis_hello_subtlv, { "isis.hello.subtlv.unknown", PI_PROTOCOL, PI_WARN, "Unknown SubTLV", EXPFILL }},
- { &ei_isis_hello_authentication, { "isis.hello.authentication.unknown", PI_PROTOCOL, PI_WARN, "Unknown authentication type", EXPFILL }},
- };
-
- expert_module_t* expert_isis_hello;
-
- /* Register the protocol name and description */
- proto_isis_hello = proto_register_protocol("ISIS HELLO", "ISIS HELLO", "isis.hello");
-
- proto_register_field_array(proto_isis_hello, hf, array_length(hf));
- proto_register_subtree_array(ett, array_length(ett));
- expert_isis_hello = expert_register_protocol(proto_isis_hello);
- expert_register_field_array(expert_isis_hello, ei, array_length(ei));
+ };
+
+ static gint *ett[] = {
+ &ett_isis_hello,
+ &ett_isis_hello_clv_area_addr,
+ &ett_isis_hello_clv_is_neighbors,
+ &ett_isis_hello_clv_padding,
+ &ett_isis_hello_clv_unknown,
+ &ett_isis_hello_clv_nlpid,
+ &ett_isis_hello_clv_authentication,
+ &ett_isis_hello_clv_ip_authentication,
+ &ett_isis_hello_clv_ipv4_int_addr,
+ &ett_isis_hello_clv_ipv6_int_addr,
+ &ett_isis_hello_clv_ptp_adj,
+ &ett_isis_hello_clv_mt,
+ &ett_isis_hello_clv_restart,
+ &ett_isis_hello_clv_restart_flags,
+ &ett_isis_hello_clv_mt_port_cap,
+ &ett_isis_hello_clv_mt_port_cap_spb_mcid,
+ &ett_isis_hello_clv_mt_port_cap_spb_aux_mcid,
+ &ett_isis_hello_clv_mt_port_cap_spb_digest,
+ &ett_isis_hello_clv_mt_port_cap_spb_bvid_tuples,
+ &ett_isis_hello_clv_checksum
+ };
+
+ static ei_register_info ei[] = {
+ { &ei_isis_hello_short_packet, { "isis.hello.short_packet", PI_MALFORMED, PI_ERROR, "Short packet", EXPFILL }},
+ { &ei_isis_hello_long_packet, { "isis.hello.long_packet", PI_MALFORMED, PI_ERROR, "Long packet", EXPFILL }},
+ { &ei_isis_hello_subtlv, { "isis.hello.subtlv.unknown", PI_PROTOCOL, PI_WARN, "Unknown SubTLV", EXPFILL }},
+ { &ei_isis_hello_authentication, { "isis.hello.authentication.unknown", PI_PROTOCOL, PI_WARN, "Unknown authentication type", EXPFILL }},
+ };
+
+ expert_module_t* expert_isis_hello;
+
+ /* Register the protocol name and description */
+ proto_isis_hello = proto_register_protocol("ISIS HELLO", "ISIS HELLO", "isis.hello");
+
+ proto_register_field_array(proto_isis_hello, hf, array_length(hf));
+ proto_register_subtree_array(ett, array_length(ett));
+ expert_isis_hello = expert_register_protocol(proto_isis_hello);
+ expert_register_field_array(expert_isis_hello, ei, array_length(ei));
}
void
proto_reg_handoff_isis_hello(void)
{
- dissector_add_uint("isis.type", ISIS_TYPE_L1_HELLO, new_create_dissector_handle(dissect_isis_l1_hello, proto_isis_hello));
- dissector_add_uint("isis.type", ISIS_TYPE_L2_HELLO, new_create_dissector_handle(dissect_isis_l2_hello, proto_isis_hello));
- dissector_add_uint("isis.type", ISIS_TYPE_PTP_HELLO, new_create_dissector_handle(dissect_isis_ptp_hello, proto_isis_hello));
+ dissector_add_uint("isis.type", ISIS_TYPE_L1_HELLO, new_create_dissector_handle(dissect_isis_l1_hello, proto_isis_hello));
+ dissector_add_uint("isis.type", ISIS_TYPE_L2_HELLO, new_create_dissector_handle(dissect_isis_l2_hello, proto_isis_hello));
+ dissector_add_uint("isis.type", ISIS_TYPE_PTP_HELLO, new_create_dissector_handle(dissect_isis_ptp_hello, proto_isis_hello));
}
diff --git a/epan/dissectors/packet-isis-lsp.c b/epan/dissectors/packet-isis-lsp.c
index d3c0d94f90..efd47bbe93 100644
--- a/epan/dissectors/packet-isis-lsp.c
+++ b/epan/dissectors/packet-isis-lsp.c
@@ -65,14 +65,14 @@
#define ISIS_LSP_IS_TYPE_MASK 0x03
#define ISIS_LSP_IS_TYPE(info) ((info) & ISIS_LSP_IS_TYPE_MASK)
-#define ISIS_LSP_MT_MSHIP_RES_MASK 0xF000
-#define ISIS_LSP_MT_MSHIP_ID_MASK 0x0FFF
+#define ISIS_LSP_MT_MSHIP_RES_MASK 0xF000
+#define ISIS_LSP_MT_MSHIP_ID_MASK 0x0FFF
-#define ISIS_LSP_TYPE_UNUSED0 0
-#define ISIS_LSP_TYPE_LEVEL_1 1
-#define ISIS_LSP_TYPE_UNUSED2 2
-#define ISIS_LSP_TYPE_LEVEL_2 3
+#define ISIS_LSP_TYPE_UNUSED0 0
+#define ISIS_LSP_TYPE_LEVEL_1 1
+#define ISIS_LSP_TYPE_UNUSED2 2
+#define ISIS_LSP_TYPE_LEVEL_2 3
#define ISIS_LSP_ATTACHED_NONE 0
#define ISIS_LSP_ATTACHED_DEFAULT 1
@@ -81,11 +81,11 @@
#define ISIS_LSP_ATTACHED_ERROR 8
-#define ISIS_LSP_CLV_METRIC_SUPPORTED(x) ((x)&0x80)
+#define ISIS_LSP_CLV_METRIC_SUPPORTED(x) ((x)&0x80)
#define ISIS_LSP_CLV_METRIC_IE(x) ((x)&0x40)
-#define ISIS_LSP_CLV_METRIC_RESERVED(x) ((x)&0x40)
+#define ISIS_LSP_CLV_METRIC_RESERVED(x) ((x)&0x40)
#define ISIS_LSP_CLV_METRIC_UPDOWN(x) ((x)&0x80)
-#define ISIS_LSP_CLV_METRIC_VALUE(x) ((x)&0x3f)
+#define ISIS_LSP_CLV_METRIC_VALUE(x) ((x)&0x3f)
/* Sub-TLVs under Router Capability TLV
As per RFC 6326 section 2.3 */
@@ -278,11 +278,11 @@ static expert_field ei_isis_lsp_subtlv = EI_INIT;
static expert_field ei_isis_lsp_authentication = EI_INIT;
static const value_string isis_lsp_istype_vals[] = {
- { ISIS_LSP_TYPE_UNUSED0, "Unused 0x0 (invalid)"},
- { ISIS_LSP_TYPE_LEVEL_1, "Level 1"},
- { ISIS_LSP_TYPE_UNUSED2, "Unused 0x2 (invalid)"},
- { ISIS_LSP_TYPE_LEVEL_2, "Level 2"},
- { 0, NULL } };
+ { ISIS_LSP_TYPE_UNUSED0, "Unused 0x0 (invalid)"},
+ { ISIS_LSP_TYPE_LEVEL_1, "Level 1"},
+ { ISIS_LSP_TYPE_UNUSED2, "Unused 0x2 (invalid)"},
+ { ISIS_LSP_TYPE_LEVEL_2, "Level 2"},
+ { 0, NULL } };
static const true_false_string tfs_up_down = { "Up", "Down" };
static const true_false_string tfs_notsupported_supported = { "Not Supported", "Supported" };
@@ -292,63 +292,63 @@ static const true_false_string tfs_external_internal = { "External", "Internal"
static void
fp_get_hmac_addr (guint64 hmac, guint16 *swid, guint16 *sswid, guint16 *lid) {
- if (!swid || !sswid || !lid) {
- return;
- }
+ if (!swid || !sswid || !lid) {
+ return;
+ }
- *swid = (guint16) ((hmac & FP_HMAC_SWID_MASK) >> 32);
- *sswid = (guint16) ((hmac & FP_HMAC_SSWID_MASK) >> 16);
- *lid = (guint16) (hmac & FP_HMAC_LID_MASK);
+ *swid = (guint16) ((hmac & FP_HMAC_SWID_MASK) >> 32);
+ *sswid = (guint16) ((hmac & FP_HMAC_SSWID_MASK) >> 16);
+ *lid = (guint16) (hmac & FP_HMAC_LID_MASK);
}
/*
* Name: dissect_lsp_mt_id()
*
* Description:
- * dissect and display the multi-topology ID value
+ * dissect and display the multi-topology ID value
*
* Input:
- * tvbuff_t * : tvbuffer for packet data
- * proto_tree * : protocol display tree to fill out. CAN'T BE NULL
- * int : offset into packet data where we are.
+ * tvbuff_t * : tvbuffer for packet data
+ * proto_tree * : protocol display tree to fill out. CAN'T BE NULL
+ * int : offset into packet data where we are.
*
* Output:
- * void, but we will add to proto tree.
+ * void, but we will add to proto tree.
*/
static void
dissect_lsp_mt_id(tvbuff_t *tvb, proto_tree *tree, int offset)
{
- int mt_block, mt_id;
- const char *mt_desc="";
-
- /* fetch two bytes */
- mt_block = tvb_get_ntohs(tvb, offset);
-
- proto_tree_add_item(tree, hf_isis_lsp_mt_id_reserved, tvb, offset, 2, ENC_NA);
-
- mt_id = mt_block & ISIS_LSP_MT_MSHIP_ID_MASK;
- /*mask out the lower 12 bits */
- switch(mt_id) {
- case 0:
- mt_desc="'standard' topology";
- break;
- case 1:
- mt_desc="IPv4 In-Band Management purposes";
- break;
- case 2:
- mt_desc="IPv6 routing topology";
- break;
- case 3:
- mt_desc="IPv4 multicast routing topology";
- break;
- case 4:
- mt_desc="IPv6 multicast routing topology";
- break;
- default:
- mt_desc=((mt_block & 0x0fff) < 3996) ? "Reserved for IETF Consensus" : "Development, Experimental and Proprietary features";
- }
-
- proto_tree_add_uint_format( tree, hf_isis_lsp_mt_id, tvb, offset, 2,
- mt_id, "%s (%d)", mt_desc, mt_id);
+ int mt_block, mt_id;
+ const char *mt_desc="";
+
+ /* fetch two bytes */
+ mt_block = tvb_get_ntohs(tvb, offset);
+
+ proto_tree_add_item(tree, hf_isis_lsp_mt_id_reserved, tvb, offset, 2, ENC_NA);
+
+ mt_id = mt_block & ISIS_LSP_MT_MSHIP_ID_MASK;
+ /*mask out the lower 12 bits */
+ switch(mt_id) {
+ case 0:
+ mt_desc="'standard' topology";
+ break;
+ case 1:
+ mt_desc="IPv4 In-Band Management purposes";
+ break;
+ case 2:
+ mt_desc="IPv6 routing topology";
+ break;
+ case 3:
+ mt_desc="IPv4 multicast routing topology";
+ break;
+ case 4:
+ mt_desc="IPv6 multicast routing topology";
+ break;
+ default:
+ mt_desc=((mt_block & 0x0fff) < 3996) ? "Reserved for IETF Consensus" : "Development, Experimental and Proprietary features";
+ }
+
+ proto_tree_add_uint_format( tree, hf_isis_lsp_mt_id, tvb, offset, 2,
+ mt_id, "%s (%d)", mt_desc, mt_id);
}
@@ -356,131 +356,131 @@ dissect_lsp_mt_id(tvbuff_t *tvb, proto_tree *tree, int offset)
* Name: dissect_metric()
*
* Description:
- * Display a metric prefix portion. ISIS has the concept of multple
- * metric per prefix (default, delay, expense, and error). This
- * routine assists other dissectors by adding a single one of
- * these to the display tree..
- *
- * The 8th(msbit) bit in the metric octet is the "supported" bit. The
- * "default" support is required, so we support a "force_supported"
- * flag that tells us that it MUST be zero (zero==supported,
- * so it really should be a "not supported" in the boolean sense)
- * and to display a protocol failure accordingly. Notably,
- * Cisco IOS 12(6) blows this!
- * The 7th bit must be zero (reserved).
+ * Display a metric prefix portion. ISIS has the concept of multple
+ * metric per prefix (default, delay, expense, and error). This
+ * routine assists other dissectors by adding a single one of
+ * these to the display tree..
+ *
+ * The 8th(msbit) bit in the metric octet is the "supported" bit. The
+ * "default" support is required, so we support a "force_supported"
+ * flag that tells us that it MUST be zero (zero==supported,
+ * so it really should be a "not supported" in the boolean sense)
+ * and to display a protocol failure accordingly. Notably,
+ * Cisco IOS 12(6) blows this!
+ * The 7th bit must be zero (reserved).
*
* Input:
- * tvbuff_t * : tvbuffer for packet data
- * proto_tree * : protocol display tree to fill out. May be NULL
- * int : offset into packet data where we are.
- * guint8 : value of the metric.
- * char * : string giving type of the metric.
- * int : force supported. True is the supported bit MUST be zero.
+ * tvbuff_t * : tvbuffer for packet data
+ * proto_tree * : protocol display tree to fill out. May be NULL
+ * int : offset into packet data where we are.
+ * guint8 : value of the metric.
+ * char * : string giving type of the metric.
+ * int : force supported. True is the supported bit MUST be zero.
*
* Output:
- * void, but we will add to proto tree if !NULL.
+ * void, but we will add to proto tree if !NULL.
*/
static void
-dissect_metric(tvbuff_t *tvb, proto_tree *tree, int offset, guint8 value,
- const char *pstr, int force_supported )
+dissect_metric(tvbuff_t *tvb, proto_tree *tree, int offset, guint8 value,
+ const char *pstr, int force_supported )
{
- int s;
+ int s;
- if ( !tree ) return;
+ if ( !tree ) return;
- s = ISIS_LSP_CLV_METRIC_SUPPORTED(value);
- proto_tree_add_text(tree, tvb, offset, 1,
- "%s Metric: %s%s %s%d:%d", pstr,
- s ? "Not supported" : "Supported",
- (s && force_supported) ? "(but is required to be)":"",
- ISIS_LSP_CLV_METRIC_RESERVED(value) ? "(reserved bit != 0)":"",
- ISIS_LSP_CLV_METRIC_VALUE(value), value );
+ s = ISIS_LSP_CLV_METRIC_SUPPORTED(value);
+ proto_tree_add_text(tree, tvb, offset, 1,
+ "%s Metric: %s%s %s%d:%d", pstr,
+ s ? "Not supported" : "Supported",
+ (s && force_supported) ? "(but is required to be)":"",
+ ISIS_LSP_CLV_METRIC_RESERVED(value) ? "(reserved bit != 0)":"",
+ ISIS_LSP_CLV_METRIC_VALUE(value), value );
}
/*
* Name: dissect_lsp_ip_reachability_clv()
*
* Description:
- * Decode an IP reachability CLV. This can be either internal or
- * external (the clv format does not change and which type we are
- * displaying is put there by the dispatcher). All of these
- * are a metric block followed by an IP addr and mask.
+ * Decode an IP reachability CLV. This can be either internal or
+ * external (the clv format does not change and which type we are
+ * displaying is put there by the dispatcher). All of these
+ * are a metric block followed by an IP addr and mask.
*
* Input:
- * tvbuff_t * : tvbuffer for packet data
- * proto_tree * : proto tree to build on (may be null)
- * int : current offset into packet data
- * int : length of IDs in packet.
- * int : length of this clv
+ * tvbuff_t * : tvbuffer for packet data
+ * proto_tree * : proto tree to build on (may be null)
+ * int : current offset into packet data
+ * int : length of IDs in packet.
+ * int : length of this clv
*
* Output:
- * void, will modify proto_tree if not null.
+ * void, will modify proto_tree if not null.
*/
static void
dissect_lsp_ip_reachability_clv(tvbuff_t *tvb, packet_info* pinfo, proto_tree *tree, int offset,
- int id_length _U_, int length)
+ int id_length _U_, int length)
{
- proto_item *ti;
- proto_tree *ntree = NULL;
- guint32 src, mask, bitmask;
- int prefix_len;
- gboolean found_mask = FALSE;
-
- while ( length > 0 ) {
- if (length<12) {
- proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
- "short IP reachability (%d vs 12)", length );
- return;
- }
- /*
- * Gotta build a sub-tree for all our pieces
- */
- if ( tree ) {
- src = tvb_get_ipv4(tvb, offset+4);
- mask = tvb_get_ntohl(tvb, offset+8);
-
- /* find out if the mask matches one of 33 possible prefix lengths */
- bitmask = 0xffffffff;
- for(prefix_len = 32; prefix_len >= 0; prefix_len--) {
- if (bitmask==mask) {
- found_mask = TRUE;
- break;
- }
- bitmask = bitmask << 1;
- }
-
- /* If we have a discontiguous netmask, dump the mask, otherwise print the prefix_len */
- /* XXX - We should probably have some sort of netmask_to_str() routine in to_str.c that does this. */
-
- if(found_mask) {
- ti = proto_tree_add_ipv4_format_value( tree, hf_isis_lsp_ip_reachability_ipv4_prefix, tvb, offset, 12,
- src, "%s/%d", ip_to_str((guint8*)&src), prefix_len );
- } else {
- ti = proto_tree_add_ipv4_format_value( tree, hf_isis_lsp_ip_reachability_ipv4_prefix, tvb, offset, 12,
- src, "%s mask %s", ip_to_str((guint8*)&src), tvb_ip_to_str(tvb, offset+8));
- };
-
- ntree = proto_item_add_subtree(ti, ett_isis_lsp_clv_ip_reachability);
-
- proto_tree_add_item(ntree, hf_isis_lsp_ip_reachability_default_metric, tvb, offset, 1, ENC_NA);
- proto_tree_add_item(ntree, hf_isis_lsp_ip_reachability_default_metric_ie, tvb, offset, 1, ENC_NA);
- proto_tree_add_item(ntree, hf_isis_lsp_ip_reachability_distribution, tvb, offset, 1, ENC_NA);
-
- proto_tree_add_item(ntree, hf_isis_lsp_ip_reachability_delay_metric, tvb, offset+1, 1, ENC_NA);
- proto_tree_add_item(ntree, hf_isis_lsp_ip_reachability_delay_metric_support, tvb, offset+1, 1, ENC_NA);
- proto_tree_add_item(ntree, hf_isis_lsp_ip_reachability_delay_metric_ie, tvb, offset+1, 1, ENC_NA);
-
- proto_tree_add_item(ntree, hf_isis_lsp_ip_reachability_expense_metric, tvb, offset+2, 1, ENC_NA);
- proto_tree_add_item(ntree, hf_isis_lsp_ip_reachability_expense_metric_support, tvb, offset+2, 1, ENC_NA);
- proto_tree_add_item(ntree, hf_isis_lsp_ip_reachability_expense_metric_ie, tvb, offset+2, 1, ENC_NA);
-
- proto_tree_add_item(ntree, hf_isis_lsp_ip_reachability_error_metric, tvb, offset+3, 1, ENC_NA);
- proto_tree_add_item(ntree, hf_isis_lsp_ip_reachability_error_metric_support, tvb, offset+3, 1, ENC_NA);
- proto_tree_add_item(ntree, hf_isis_lsp_ip_reachability_error_metric_ie, tvb, offset+3, 1, ENC_NA);
- }
- offset += 12;
- length -= 12;
- }
+ proto_item *ti;
+ proto_tree *ntree = NULL;
+ guint32 src, mask, bitmask;
+ int prefix_len;
+ gboolean found_mask = FALSE;
+
+ while ( length > 0 ) {
+ if (length<12) {
+ proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
+ "short IP reachability (%d vs 12)", length );
+ return;
+ }
+ /*
+ * Gotta build a sub-tree for all our pieces
+ */
+ if ( tree ) {
+ src = tvb_get_ipv4(tvb, offset+4);
+ mask = tvb_get_ntohl(tvb, offset+8);
+
+ /* find out if the mask matches one of 33 possible prefix lengths */
+ bitmask = 0xffffffff;
+ for(prefix_len = 32; prefix_len >= 0; prefix_len--) {
+ if (bitmask==mask) {
+ found_mask = TRUE;
+ break;
+ }
+ bitmask = bitmask << 1;
+ }
+
+ /* If we have a discontiguous netmask, dump the mask, otherwise print the prefix_len */
+ /* XXX - We should probably have some sort of netmask_to_str() routine in to_str.c that does this. */
+
+ if(found_mask) {
+ ti = proto_tree_add_ipv4_format_value( tree, hf_isis_lsp_ip_reachability_ipv4_prefix, tvb, offset, 12,
+ src, "%s/%d", ip_to_str((guint8*)&src), prefix_len );
+ } else {
+ ti = proto_tree_add_ipv4_format_value( tree, hf_isis_lsp_ip_reachability_ipv4_prefix, tvb, offset, 12,
+ src, "%s mask %s", ip_to_str((guint8*)&src), tvb_ip_to_str(tvb, offset+8));
+ };
+
+ ntree = proto_item_add_subtree(ti, ett_isis_lsp_clv_ip_reachability);
+
+ proto_tree_add_item(ntree, hf_isis_lsp_ip_reachability_default_metric, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(ntree, hf_isis_lsp_ip_reachability_default_metric_ie, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(ntree, hf_isis_lsp_ip_reachability_distribution, tvb, offset, 1, ENC_NA);
+
+ proto_tree_add_item(ntree, hf_isis_lsp_ip_reachability_delay_metric, tvb, offset+1, 1, ENC_NA);
+ proto_tree_add_item(ntree, hf_isis_lsp_ip_reachability_delay_metric_support, tvb, offset+1, 1, ENC_NA);
+ proto_tree_add_item(ntree, hf_isis_lsp_ip_reachability_delay_metric_ie, tvb, offset+1, 1, ENC_NA);
+
+ proto_tree_add_item(ntree, hf_isis_lsp_ip_reachability_expense_metric, tvb, offset+2, 1, ENC_NA);
+ proto_tree_add_item(ntree, hf_isis_lsp_ip_reachability_expense_metric_support, tvb, offset+2, 1, ENC_NA);
+ proto_tree_add_item(ntree, hf_isis_lsp_ip_reachability_expense_metric_ie, tvb, offset+2, 1, ENC_NA);
+
+ proto_tree_add_item(ntree, hf_isis_lsp_ip_reachability_error_metric, tvb, offset+3, 1, ENC_NA);
+ proto_tree_add_item(ntree, hf_isis_lsp_ip_reachability_error_metric_support, tvb, offset+3, 1, ENC_NA);
+ proto_tree_add_item(ntree, hf_isis_lsp_ip_reachability_error_metric_ie, tvb, offset+3, 1, ENC_NA);
+ }
+ offset += 12;
+ length -= 12;
+ }
}
/*
@@ -501,28 +501,28 @@ static void
dissect_ipreach_subclv(tvbuff_t *tvb, proto_tree *tree, int offset, int clv_code, int clv_len)
{
- switch (clv_code) {
- case 1:
- while (clv_len >= 4) {
- proto_tree_add_item(tree, hf_isis_lsp_32_bit_administrative_tag, tvb, offset, 4, ENC_BIG_ENDIAN);
- offset+=4;
- clv_len-=4;
- }
- break;
- case 2:
- while (clv_len >= 8) {
- proto_tree_add_item(tree, hf_isis_lsp_64_bit_administrative_tag, tvb, offset, 8, ENC_BIG_ENDIAN);
- offset+=8;
- clv_len-=8;
- }
- break;
-
- default :
- proto_tree_add_text (tree, tvb, offset, clv_len+2,
- "Unknown sub-TLV: code %u, length %u",
- clv_code, clv_len );
- break;
- }
+ switch (clv_code) {
+ case 1:
+ while (clv_len >= 4) {
+ proto_tree_add_item(tree, hf_isis_lsp_32_bit_administrative_tag, tvb, offset, 4, ENC_BIG_ENDIAN);
+ offset+=4;
+ clv_len-=4;
+ }
+ break;
+ case 2:
+ while (clv_len >= 8) {
+ proto_tree_add_item(tree, hf_isis_lsp_64_bit_administrative_tag, tvb, offset, 8, ENC_BIG_ENDIAN);
+ offset+=8;
+ clv_len-=8;
+ }
+ break;
+
+ default :
+ proto_tree_add_text (tree, tvb, offset, clv_len+2,
+ "Unknown sub-TLV: code %u, length %u",
+ clv_code, clv_len );
+ break;
+ }
}
@@ -551,69 +551,69 @@ dissect_ipreach_subclv(tvbuff_t *tvb, proto_tree *tree, int offset, int clv_code
*/
static void
dissect_lsp_ext_ip_reachability_clv(tvbuff_t *tvb, packet_info* pinfo, proto_tree *tree,
- int offset, int id_length _U_, int length)
+ int offset, int id_length _U_, int length)
{
- proto_tree *subtree = NULL;
- proto_tree *subtree2 = NULL;
- guint8 ctrl_info;
- guint bit_length;
- int byte_length;
- guint8 prefix [4];
- guint len,i;
- guint subclvs_len;
- guint clv_code, clv_len;
-
- if (!tree) return;
-
- while (length > 0) {
- ctrl_info = tvb_get_guint8(tvb, offset+4);
- bit_length = ctrl_info & 0x3f;
- byte_length = ipv4_addr_and_mask(tvb, offset+5, prefix, bit_length);
- if (byte_length == -1) {
- proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
- "IPv4 prefix has an invalid length: %d bits", bit_length );
- return;
- }
- subclvs_len = 0;
- if ((ctrl_info & 0x40) != 0)
- subclvs_len = 1+tvb_get_guint8(tvb, offset+5+byte_length);
-
- /* open up a new tree per prefix */
- subtree = proto_tree_add_subtree(tree, tvb, offset, 5+byte_length+subclvs_len,
+ proto_tree *subtree = NULL;
+ proto_tree *subtree2 = NULL;
+ guint8 ctrl_info;
+ guint bit_length;
+ int byte_length;
+ guint8 prefix [4];
+ guint len,i;
+ guint subclvs_len;
+ guint clv_code, clv_len;
+
+ if (!tree) return;
+
+ while (length > 0) {
+ ctrl_info = tvb_get_guint8(tvb, offset+4);
+ bit_length = ctrl_info & 0x3f;
+ byte_length = ipv4_addr_and_mask(tvb, offset+5, prefix, bit_length);
+ if (byte_length == -1) {
+ proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
+ "IPv4 prefix has an invalid length: %d bits", bit_length );
+ return;
+ }
+ subclvs_len = 0;
+ if ((ctrl_info & 0x40) != 0)
+ subclvs_len = 1+tvb_get_guint8(tvb, offset+5+byte_length);
+
+ /* open up a new tree per prefix */
+ subtree = proto_tree_add_subtree(tree, tvb, offset, 5+byte_length+subclvs_len,
ett_isis_lsp_part_of_clv_ext_ip_reachability, NULL, "Ext. IP Reachability");
- proto_tree_add_ipv4_format_value(subtree, hf_isis_lsp_ext_ip_reachability_ipv4_prefix, tvb, offset+5, byte_length,
+ proto_tree_add_ipv4_format_value(subtree, hf_isis_lsp_ext_ip_reachability_ipv4_prefix, tvb, offset+5, byte_length,
tvb_get_ntohl(tvb, offset+5), "%s/%u", ip_to_str (prefix), bit_length);
- proto_tree_add_item(subtree, hf_isis_lsp_ext_ip_reachability_metric, tvb, offset, 4, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_isis_lsp_ext_ip_reachability_distribution, tvb, offset+4, 1, ENC_NA);
+ proto_tree_add_item(subtree, hf_isis_lsp_ext_ip_reachability_metric, tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_isis_lsp_ext_ip_reachability_distribution, tvb, offset+4, 1, ENC_NA);
- len = 5 + byte_length;
- if ((ctrl_info & 0x40) != 0) {
- subclvs_len = tvb_get_guint8(tvb, offset+len);
- subtree2 = proto_tree_add_subtree_format(subtree, tvb, offset+len, subclvs_len+1,
+ len = 5 + byte_length;
+ if ((ctrl_info & 0x40) != 0) {
+ subclvs_len = tvb_get_guint8(tvb, offset+len);
+ subtree2 = proto_tree_add_subtree_format(subtree, tvb, offset+len, subclvs_len+1,
ett_isis_lsp_clv_ip_reach_subclv, NULL,
"sub-TLVs present, total length: %u bytes", subclvs_len);
- i =0;
- while (i < subclvs_len) {
- clv_code = tvb_get_guint8(tvb, offset+len+1); /* skip the total subtlv len indicator */
- clv_len = tvb_get_guint8(tvb, offset+len+2);
-
- /*
- * we pass on now the raw data to the ipreach_subtlv dissector
- * therefore we need to skip 3 bytes
- * (total subtlv len, subtlv type, subtlv len)
- */
- dissect_ipreach_subclv(tvb, subtree2, offset+len+3, clv_code, clv_len);
- i += clv_len + 2;
- }
- len += 1 + subclvs_len;
- } else {
- proto_tree_add_text (subtree, tvb, offset+4, len, "no sub-TLVs present");
- }
-
- offset += len;
- length -= len;
- }
+ i =0;
+ while (i < subclvs_len) {
+ clv_code = tvb_get_guint8(tvb, offset+len+1); /* skip the total subtlv len indicator */
+ clv_len = tvb_get_guint8(tvb, offset+len+2);
+
+ /*
+ * we pass on now the raw data to the ipreach_subtlv dissector
+ * therefore we need to skip 3 bytes
+ * (total subtlv len, subtlv type, subtlv len)
+ */
+ dissect_ipreach_subclv(tvb, subtree2, offset+len+3, clv_code, clv_len);
+ i += clv_len + 2;
+ }
+ len += 1 + subclvs_len;
+ } else {
+ proto_tree_add_text (subtree, tvb, offset+4, len, "no sub-TLVs present");
+ }
+
+ offset += len;
+ length -= len;
+ }
}
/*
@@ -638,109 +638,109 @@ dissect_lsp_ext_ip_reachability_clv(tvbuff_t *tvb, packet_info* pinfo, proto_tre
static void
dissect_isis_grp_address_clv(tvbuff_t *tvb, packet_info* pinfo _U_, proto_tree *tree, int offset,
- int tree_id,int length)
+ int tree_id,int length)
{
- gint len;
- gint source_num;
- gint k=1;
- guint16 mt_block;
- guint64 hmac_src;
- guint16 swid = 0;
- guint16 sswid = 0;
- guint16 lid = 0;
-
- proto_tree *rt_tree=NULL;
-
- while (length>0) {
- /* fetch two bytes */
- mt_block=tvb_get_ntohs(tvb, offset);
- /* Mask out the lower 8 bits */
- switch((mt_block&0xff00)>>8) {
-
-
- case GRP_MAC_ADDRESS:
- rt_tree = proto_tree_add_subtree(tree, tvb, offset, (mt_block&0x00ff)+2,
+ gint len;
+ gint source_num;
+ gint k=1;
+ guint16 mt_block;
+ guint64 hmac_src;
+ guint16 swid = 0;
+ guint16 sswid = 0;
+ guint16 lid = 0;
+
+ proto_tree *rt_tree=NULL;
+
+ while (length>0) {
+ /* fetch two bytes */
+ mt_block=tvb_get_ntohs(tvb, offset);
+ /* Mask out the lower 8 bits */
+ switch((mt_block&0xff00)>>8) {
+
+
+ case GRP_MAC_ADDRESS:
+ rt_tree = proto_tree_add_subtree(tree, tvb, offset, (mt_block&0x00ff)+2,
ett_isis_lsp_clv_grp_address_IPv4_prefx, NULL, "GROUP MAC ADDRESS SUB TLV");
- length--;
- offset++;
+ length--;
+ offset++;
- len=tvb_get_guint8(tvb, offset);/* 1 byte fetched displays the length*/
- proto_tree_add_item(rt_tree, hf_isis_lsp_grp_address_length, tvb, offset, 1, ENC_NA);
+ len=tvb_get_guint8(tvb, offset);/* 1 byte fetched displays the length*/
+ proto_tree_add_item(rt_tree, hf_isis_lsp_grp_address_length, tvb, offset, 1, ENC_NA);
- if(len < 5) {
- length -= len;
- offset += len;
- break;
- }
+ if(len < 5) {
+ length -= len;
+ offset += len;
+ break;
+ }
- length--;
- offset++;
+ length--;
+ offset++;
- proto_tree_add_item(rt_tree, hf_isis_lsp_grp_address_topology_id, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(rt_tree, hf_isis_lsp_grp_address_topology_id, tvb, offset, 2, ENC_BIG_ENDIAN);
- length -= 2;
- offset += 2;
- len -= 2;
+ length -= 2;
+ offset += 2;
+ len -= 2;
- proto_tree_add_item(rt_tree, hf_isis_lsp_grp_address_vlan_id, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(rt_tree, hf_isis_lsp_grp_address_vlan_id, tvb, offset, 2, ENC_BIG_ENDIAN);
- length -= 2;
- offset += 2;
- len -= 2;
+ length -= 2;
+ offset += 2;
+ len -= 2;
- proto_tree_add_item(rt_tree, hf_isis_lsp_grp_address_number_of_records, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(rt_tree, hf_isis_lsp_grp_address_number_of_records, tvb, offset, 1, ENC_NA);
- length--;
- offset++;
- len--;
+ length--;
+ offset++;
+ len--;
- while(len > 0) {
+ while(len > 0) {
- source_num=tvb_get_guint8(tvb, offset);
- proto_tree_add_item(rt_tree, hf_isis_lsp_grp_address_number_of_sources, tvb, offset, 1, ENC_NA);
+ source_num=tvb_get_guint8(tvb, offset);
+ proto_tree_add_item(rt_tree, hf_isis_lsp_grp_address_number_of_sources, tvb, offset, 1, ENC_NA);
- length--;
- offset++;
- len--;
+ length--;
+ offset++;
+ len--;
- hmac_src=tvb_get_ntoh48(tvb, offset);/* Fetch the data in the next two bytes for display*/
+ hmac_src=tvb_get_ntoh48(tvb, offset);/* Fetch the data in the next two bytes for display*/
- fp_get_hmac_addr (hmac_src, &swid, &sswid, &lid);
- proto_tree_add_bytes_format_value(rt_tree, hf_isis_lsp_grp_address_group_address, tvb, offset, 6,
+ fp_get_hmac_addr (hmac_src, &swid, &sswid, &lid);
+ proto_tree_add_bytes_format_value(rt_tree, hf_isis_lsp_grp_address_group_address, tvb, offset, 6,
tvb_get_ptr(tvb, offset, 6), "%04x.%04x.%04x", swid, sswid, lid );
- length -= 6;
- offset += 6;
- len -= 6;
+ length -= 6;
+ offset += 6;
+ len -= 6;
- while((len > 0) && (source_num > 0)) {
- hmac_src = tvb_get_ntoh48 (tvb, offset);
- fp_get_hmac_addr (hmac_src, &swid, &sswid, &lid);
- proto_tree_add_bytes_format(rt_tree, hf_isis_lsp_grp_address_source_address, tvb, offset, 6,
+ while((len > 0) && (source_num > 0)) {
+ hmac_src = tvb_get_ntoh48 (tvb, offset);
+ fp_get_hmac_addr (hmac_src, &swid, &sswid, &lid);
+ proto_tree_add_bytes_format(rt_tree, hf_isis_lsp_grp_address_source_address, tvb, offset, 6,
tvb_get_ptr(tvb, offset, 6), "Source Address (%d):%04x.%04x.%04x",
k, swid, sswid, lid);
- k++;
- length -= 6;
- offset += 6;
- len -= 6;
- source_num--;
- }
- }
-
- break;
-
-
- default:
- proto_tree_add_uint_format ( tree, tree_id, tvb, offset,(mt_block&0x00ff)+2,
- mt_block, "INVALID SUB TLV");
- offset++;
- length -= (2+tvb_get_guint8(tvb, offset));
- offset += (1+tvb_get_guint8(tvb, offset));
- break;
- }
- }
+ k++;
+ length -= 6;
+ offset += 6;
+ len -= 6;
+ source_num--;
+ }
+ }
+
+ break;
+
+
+ default:
+ proto_tree_add_uint_format ( tree, tree_id, tvb, offset,(mt_block&0x00ff)+2,
+ mt_block, "INVALID SUB TLV");
+ offset++;
+ length -= (2+tvb_get_guint8(tvb, offset));
+ offset += (1+tvb_get_guint8(tvb, offset));
+ break;
+ }
+ }
}
/*
@@ -770,243 +770,243 @@ static void
dissect_isis_rt_capable_clv(tvbuff_t *tvb, packet_info* pinfo _U_,
proto_tree *tree, int offset, int id_length _U_, int length)
{
- gint len;
- guint16 rt_block;
- proto_tree *rt_tree;
+ gint len;
+ guint16 rt_block;
+ proto_tree *rt_tree;
- gint root_id = 1; /* To display the root id */
- gint sec_vlan_id = 1; /* To display the seconadary VLAN id */
- length = length - 5; /* Ignoring the 5 reserved bytes */
- offset = offset + 5;
+ gint root_id = 1; /* To display the root id */
+ gint sec_vlan_id = 1; /* To display the seconadary VLAN id */
+ length = length - 5; /* Ignoring the 5 reserved bytes */
+ offset = offset + 5;
- while (length>1) {
- /* fetch two bytes */
- rt_block = tvb_get_ntohs(tvb, offset);
+ while (length>1) {
+ /* fetch two bytes */
+ rt_block = tvb_get_ntohs(tvb, offset);
- /* Mask out the lower 8 bits */
- switch ((rt_block&0xff00)>>8) {
+ /* Mask out the lower 8 bits */
+ switch ((rt_block&0xff00)>>8) {
- case TRILL_VERSION:
- rt_tree = proto_tree_add_subtree(tree, tvb, offset, (rt_block&0x00ff)+2,
+ case TRILL_VERSION:
+ rt_tree = proto_tree_add_subtree(tree, tvb, offset, (rt_block&0x00ff)+2,
ett_isis_lsp_clv_rt_capable_IPv4_prefx, NULL, "TRILL version sub tlv");
- length--;
- offset++;
+ length--;
+ offset++;
- proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_trill_length, tvb, offset, 1, ENC_NA);
- proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_trill_maximum_version, tvb, offset+1, 1, ENC_NA);
+ proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_trill_length, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_trill_maximum_version, tvb, offset+1, 1, ENC_NA);
- length -= 2;
- offset += 2;
+ length -= 2;
+ offset += 2;
- break;
+ break;
- case TREES:
- rt_tree = proto_tree_add_subtree(tree, tvb, offset, (rt_block&0x00ff)+2,
+ case TREES:
+ rt_tree = proto_tree_add_subtree(tree, tvb, offset, (rt_block&0x00ff)+2,
ett_isis_lsp_clv_rt_capable_IPv4_prefx, NULL, "Trees sub tlv");
- length--;
- offset++;
+ length--;
+ offset++;
- proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_trees_length, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_trees_length, tvb, offset, 1, ENC_NA);
- length--;
- offset++;
+ length--;
+ offset++;
- proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_trees_nof_trees_to_compute, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_trees_nof_trees_to_compute, tvb, offset, 2, ENC_BIG_ENDIAN);
- length -= 2;
- offset += 2;
+ length -= 2;
+ offset += 2;
- proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_trees_maximum_nof_trees_to_compute, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_trees_maximum_nof_trees_to_compute, tvb, offset, 2, ENC_BIG_ENDIAN);
- length -= 2;
- offset += 2;
+ length -= 2;
+ offset += 2;
- proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_trees_nof_trees_to_use, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_trees_nof_trees_to_use, tvb, offset, 2, ENC_BIG_ENDIAN);
- length -= 2;
- offset += 2;
- break;
+ length -= 2;
+ offset += 2;
+ break;
- case TREE_IDENTIFIER:
- rt_tree=proto_tree_add_subtree(tree, tvb, offset, (rt_block&0x00ff)+2,
+ case TREE_IDENTIFIER:
+ rt_tree=proto_tree_add_subtree(tree, tvb, offset, (rt_block&0x00ff)+2,
ett_isis_lsp_clv_rt_capable_IPv4_prefx, NULL, "Tree root identifier sub tlv");
- length--;
- offset++;
+ length--;
+ offset++;
- len = tvb_get_guint8(tvb, offset);
- proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_tree_root_id_length, tvb, offset, 1, ENC_NA);
+ len = tvb_get_guint8(tvb, offset);
+ proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_tree_root_id_length, tvb, offset, 1, ENC_NA);
- proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_tree_root_id_starting_tree_no, tvb, offset+1, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_tree_root_id_starting_tree_no, tvb, offset+1, 2, ENC_BIG_ENDIAN);
- len -= 2;
- length -= 2;
- offset += 2;
+ len -= 2;
+ length -= 2;
+ offset += 2;
- while (len>1) {
- rt_block = tvb_get_ntohs(tvb, offset);
- proto_tree_add_uint_format(rt_tree, hf_isis_lsp_rt_capable_tree_root_id_nickname, tvb, offset, 2,
+ while (len>1) {
+ rt_block = tvb_get_ntohs(tvb, offset);
+ proto_tree_add_uint_format(rt_tree, hf_isis_lsp_rt_capable_tree_root_id_nickname, tvb, offset, 2,
rt_block, "Nickname(%dth root): %d", root_id, rt_block);
- root_id++;
- len -= 2;
- length -= 2;
- offset += 2;
- }
- break;
-
- case NICKNAME:
- rt_tree = proto_tree_add_subtree(tree, tvb, offset, (rt_block&0x00ff)+2,
+ root_id++;
+ len -= 2;
+ length -= 2;
+ offset += 2;
+ }
+ break;
+
+ case NICKNAME:
+ rt_tree = proto_tree_add_subtree(tree, tvb, offset, (rt_block&0x00ff)+2,
ett_isis_lsp_clv_rt_capable_IPv4_prefx, NULL, "The nickname sub tlv");
- length--;
- offset++;
- len = tvb_get_guint8(tvb, offset);
-
- proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_nickname_length, tvb, offset, 1, ENC_NA);
- length--;
- offset++;
-
- while (len>0) {
- proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_nickname_nickname_priority, tvb, offset, 1, ENC_NA);
- length--;
- offset++;
- len--;
-
- proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_nickname_tree_root_priority, tvb, offset, 2, ENC_BIG_ENDIAN);
- len -= 2;
- length -= 2;
- offset += 2;
-
- proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_nickname_nickname, tvb, offset, 2, ENC_BIG_ENDIAN);
- length = length-2;
- offset = offset+2;
- len = len-2;
- }
- break;
-
- case INTERESTED_VLANS:
- rt_tree = proto_tree_add_subtree(tree, tvb, offset, (rt_block&0x00ff)+2,
+ length--;
+ offset++;
+ len = tvb_get_guint8(tvb, offset);
+
+ proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_nickname_length, tvb, offset, 1, ENC_NA);
+ length--;
+ offset++;
+
+ while (len>0) {
+ proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_nickname_nickname_priority, tvb, offset, 1, ENC_NA);
+ length--;
+ offset++;
+ len--;
+
+ proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_nickname_tree_root_priority, tvb, offset, 2, ENC_BIG_ENDIAN);
+ len -= 2;
+ length -= 2;
+ offset += 2;
+
+ proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_nickname_nickname, tvb, offset, 2, ENC_BIG_ENDIAN);
+ length = length-2;
+ offset = offset+2;
+ len = len-2;
+ }
+ break;
+
+ case INTERESTED_VLANS:
+ rt_tree = proto_tree_add_subtree(tree, tvb, offset, (rt_block&0x00ff)+2,
ett_isis_lsp_clv_rt_capable_IPv4_prefx, NULL, "Interested VLAN and spanning tree root sub tlv");
- length--;
- offset++;
-
- len = tvb_get_guint8(tvb, offset);
- proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_interested_vlans_length, tvb, offset, 1, ENC_NA);
- length--;
- offset++;
- len--;
-
- proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_interested_vlans_nickname, tvb, offset, 2, ENC_BIG_ENDIAN);
- len -= 2;
- length -= 2;
- offset += 2;
-
- proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_interested_vlans_multicast_ipv4, tvb, offset, 2, ENC_BIG_ENDIAN);
- proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_interested_vlans_multicast_ipv6, tvb, offset, 2, ENC_BIG_ENDIAN);
- proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_interested_vlans_vlan_start_id, tvb, offset, 2, ENC_BIG_ENDIAN);
- len -= 2;
- length -= 2;
- offset += 2;
-
- proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_interested_vlans_vlan_end_id, tvb, offset, 2, ENC_BIG_ENDIAN);
- len -= 2;
- length -= 2;
- offset += 2;
-
- proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_interested_vlans_afs_lost_counter, tvb, offset, 4, ENC_BIG_ENDIAN);
- length -= 4;
- offset += 4;
- len -= 4;
-
- while (len>0) {
- proto_tree_add_item(rt_tree, hf_isis_lsp_root_id, tvb, offset, 6, ENC_BIG_ENDIAN);
-
- length -= 6;
- offset += 6;
- len -= 6;
- }
- break;
-
- case TREES_USED_IDENTIFIER:
- rt_tree = proto_tree_add_subtree(tree, tvb, offset, (rt_block&0x00ff)+2,
+ length--;
+ offset++;
+
+ len = tvb_get_guint8(tvb, offset);
+ proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_interested_vlans_length, tvb, offset, 1, ENC_NA);
+ length--;
+ offset++;
+ len--;
+
+ proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_interested_vlans_nickname, tvb, offset, 2, ENC_BIG_ENDIAN);
+ len -= 2;
+ length -= 2;
+ offset += 2;
+
+ proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_interested_vlans_multicast_ipv4, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_interested_vlans_multicast_ipv6, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_interested_vlans_vlan_start_id, tvb, offset, 2, ENC_BIG_ENDIAN);
+ len -= 2;
+ length -= 2;
+ offset += 2;
+
+ proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_interested_vlans_vlan_end_id, tvb, offset, 2, ENC_BIG_ENDIAN);
+ len -= 2;
+ length -= 2;
+ offset += 2;
+
+ proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_interested_vlans_afs_lost_counter, tvb, offset, 4, ENC_BIG_ENDIAN);
+ length -= 4;
+ offset += 4;
+ len -= 4;
+
+ while (len>0) {
+ proto_tree_add_item(rt_tree, hf_isis_lsp_root_id, tvb, offset, 6, ENC_BIG_ENDIAN);
+
+ length -= 6;
+ offset += 6;
+ len -= 6;
+ }
+ break;
+
+ case TREES_USED_IDENTIFIER:
+ rt_tree = proto_tree_add_subtree(tree, tvb, offset, (rt_block&0x00ff)+2,
ett_isis_lsp_clv_rt_capable_IPv4_prefx, NULL, "Trees used identifier sub tlv");
- length--;
- offset++;
+ length--;
+ offset++;
- len = tvb_get_guint8(tvb, offset);
- proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_tree_used_id_length, tvb, offset, 1, ENC_NA);
+ len = tvb_get_guint8(tvb, offset);
+ proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_tree_used_id_length, tvb, offset, 1, ENC_NA);
- proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_tree_used_id_starting_tree_no, tvb, offset+1, 2, ENC_BIG_ENDIAN);
- len -= 2;
- length += 2;
- offset += 3;
- root_id = 1;
+ proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_tree_used_id_starting_tree_no, tvb, offset+1, 2, ENC_BIG_ENDIAN);
+ len -= 2;
+ length += 2;
+ offset += 3;
+ root_id = 1;
- while (len>0) {
- rt_block = tvb_get_ntohs(tvb, offset);
- proto_tree_add_uint_format(rt_tree, hf_isis_lsp_rt_capable_tree_used_id_nickname, tvb, offset,2,
+ while (len>0) {
+ rt_block = tvb_get_ntohs(tvb, offset);
+ proto_tree_add_uint_format(rt_tree, hf_isis_lsp_rt_capable_tree_used_id_nickname, tvb, offset,2,
rt_block, "Nickname(%dth root): %d", root_id, rt_block);
- root_id++;
+ root_id++;
- len -= 2;
- offset += 2;
- length -= 2;
- }
- break;
+ len -= 2;
+ offset += 2;
+ length -= 2;
+ }
+ break;
- case VLAN_GROUP:
- rt_tree = proto_tree_add_subtree(tree, tvb, offset, (rt_block&0x00ff)+2,
+ case VLAN_GROUP:
+ rt_tree = proto_tree_add_subtree(tree, tvb, offset, (rt_block&0x00ff)+2,
ett_isis_lsp_clv_rt_capable_IPv4_prefx, NULL, "The VLAN group sub tlv");
- length--;
- offset++;
+ length--;
+ offset++;
- len = tvb_get_guint8(tvb, offset);
- proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_vlan_group_length, tvb, offset, 1, ENC_NA);
+ len = tvb_get_guint8(tvb, offset);
+ proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_vlan_group_length, tvb, offset, 1, ENC_NA);
- len--;
- length--;
- offset++;
+ len--;
+ length--;
+ offset++;
- proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_vlan_group_primary_vlan_id, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_vlan_group_primary_vlan_id, tvb, offset, 2, ENC_BIG_ENDIAN);
- len -= 2;
- offset += 2;
- length -= 2;
+ len -= 2;
+ offset += 2;
+ length -= 2;
- proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_vlan_group_secondary_vlan_id, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(rt_tree, hf_isis_lsp_rt_capable_vlan_group_secondary_vlan_id, tvb, offset, 2, ENC_BIG_ENDIAN);
- len -= 2;
- offset += 2;
- length -= 2;
- sec_vlan_id = 1;
+ len -= 2;
+ offset += 2;
+ length -= 2;
+ sec_vlan_id = 1;
- while (len>0) {
- rt_block = tvb_get_ntohs(tvb, offset);
+ while (len>0) {
+ rt_block = tvb_get_ntohs(tvb, offset);
- proto_tree_add_uint_format(rt_tree, hf_isis_lsp_rt_capable_vlan_group_nth_secondary_vlan_id, tvb, offset, 2,
+ proto_tree_add_uint_format(rt_tree, hf_isis_lsp_rt_capable_vlan_group_nth_secondary_vlan_id, tvb, offset, 2,
rt_block, "%dth secondary vlan id: %x", sec_vlan_id, rt_block);
- length -= 2;
- offset += 2;
- sec_vlan_id++;
- len -= 2;
- }
- break;
-
- default:
- proto_tree_add_text(tree, tvb, offset, (rt_block&0x00ff)+2, "INVALID sub tlv");
-
- offset++;
- length -= (2+tvb_get_guint8(tvb, offset));
- offset += (1+tvb_get_guint8(tvb, offset));
- break;
- }
- }
+ length -= 2;
+ offset += 2;
+ sec_vlan_id++;
+ len -= 2;
+ }
+ break;
+
+ default:
+ proto_tree_add_text(tree, tvb, offset, (rt_block&0x00ff)+2, "INVALID sub tlv");
+
+ offset++;
+ length -= (2+tvb_get_guint8(tvb, offset));
+ offset += (1+tvb_get_guint8(tvb, offset));
+ break;
+ }
+ }
}
@@ -1031,116 +1031,116 @@ dissect_isis_rt_capable_clv(tvbuff_t *tvb, packet_info* pinfo _U_,
*/
static void
dissect_lsp_ipv6_reachability_clv(tvbuff_t *tvb, packet_info* pinfo, proto_tree *tree, int offset,
- int id_length _U_, int length)
+ int id_length _U_, int length)
{
- proto_tree *subtree = NULL;
- proto_tree *subtree2 = NULL;
- guint8 ctrl_info;
- guint bit_length;
- int byte_length;
- struct e_in6_addr prefix;
- guint len,i;
- guint subclvs_len;
- guint clv_code, clv_len;
-
- if (!tree) return;
-
- while (length > 0) {
- ctrl_info = tvb_get_guint8(tvb, offset+4);
- bit_length = tvb_get_guint8(tvb, offset+5);
- byte_length = ipv6_addr_and_mask(tvb, offset+6, &prefix, bit_length);
- if (byte_length == -1) {
- proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
- "IPv6 prefix has an invalid length: %d bits", bit_length );
- return;
- }
- subclvs_len = 0;
- if ((ctrl_info & 0x20) != 0)
- subclvs_len = 1+tvb_get_guint8(tvb, offset+6+byte_length);
-
- subtree = proto_tree_add_subtree(tree, tvb, offset, 6+byte_length+subclvs_len,
+ proto_tree *subtree = NULL;
+ proto_tree *subtree2 = NULL;
+ guint8 ctrl_info;
+ guint bit_length;
+ int byte_length;
+ struct e_in6_addr prefix;
+ guint len,i;
+ guint subclvs_len;
+ guint clv_code, clv_len;
+
+ if (!tree) return;
+
+ while (length > 0) {
+ ctrl_info = tvb_get_guint8(tvb, offset+4);
+ bit_length = tvb_get_guint8(tvb, offset+5);
+ byte_length = ipv6_addr_and_mask(tvb, offset+6, &prefix, bit_length);
+ if (byte_length == -1) {
+ proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
+ "IPv6 prefix has an invalid length: %d bits", bit_length );
+ return;
+ }
+ subclvs_len = 0;
+ if ((ctrl_info & 0x20) != 0)
+ subclvs_len = 1+tvb_get_guint8(tvb, offset+6+byte_length);
+
+ subtree = proto_tree_add_subtree(tree, tvb, offset, 6+byte_length+subclvs_len,
ett_isis_lsp_part_of_clv_ipv6_reachability, NULL, "IPv6 Reachability");
- proto_tree_add_ipv6_format_value(subtree, hf_isis_lsp_ipv6_reachability_ipv6_prefix, tvb, offset+6, byte_length,
+ proto_tree_add_ipv6_format_value(subtree, hf_isis_lsp_ipv6_reachability_ipv6_prefix, tvb, offset+6, byte_length,
(guint8*)&prefix, "IPv6 prefix: %s/%u", ip6_to_str (&prefix), bit_length);
- proto_tree_add_item(subtree, hf_isis_lsp_ipv6_reachability_metric, tvb, offset, 4, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_isis_lsp_ipv6_reachability_distribution, tvb, offset+4, 1, ENC_NA);
- proto_tree_add_item(subtree, hf_isis_lsp_ipv6_reachability_distribution_internal, tvb, offset+4, 1, ENC_NA);
+ proto_tree_add_item(subtree, hf_isis_lsp_ipv6_reachability_metric, tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_isis_lsp_ipv6_reachability_distribution, tvb, offset+4, 1, ENC_NA);
+ proto_tree_add_item(subtree, hf_isis_lsp_ipv6_reachability_distribution_internal, tvb, offset+4, 1, ENC_NA);
- if ((ctrl_info & 0x1f) != 0) {
- proto_tree_add_item(subtree, hf_isis_lsp_ipv6_reachability_reserved_bits, tvb, offset+4, 1, ENC_NA);
- }
+ if ((ctrl_info & 0x1f) != 0) {
+ proto_tree_add_item(subtree, hf_isis_lsp_ipv6_reachability_reserved_bits, tvb, offset+4, 1, ENC_NA);
+ }
- len = 6 + byte_length;
- if ((ctrl_info & 0x20) != 0) {
- subclvs_len = tvb_get_guint8(tvb, offset+len);
- subtree2 = proto_tree_add_subtree_format(subtree, tvb, offset+len, subclvs_len+1,
+ len = 6 + byte_length;
+ if ((ctrl_info & 0x20) != 0) {
+ subclvs_len = tvb_get_guint8(tvb, offset+len);
+ subtree2 = proto_tree_add_subtree_format(subtree, tvb, offset+len, subclvs_len+1,
ett_isis_lsp_clv_ip_reach_subclv, NULL, "sub-TLVs present, total length: %u bytes",
- subclvs_len);
-
- i =0;
- while (i < subclvs_len) {
- clv_code = tvb_get_guint8(tvb, offset+len+1); /* skip the total subtlv len indicator */
- clv_len = tvb_get_guint8(tvb, offset+len+2);
- dissect_ipreach_subclv(tvb, subtree2, offset+len+3, clv_code, clv_len);
- i += clv_len + 2;
- }
- len += 1 + subclvs_len;
- } else {
- proto_tree_add_text (subtree, tvb, offset+4, len, "no sub-TLVs present");
- }
- offset += len;
- length -= len;
- }
+ subclvs_len);
+
+ i =0;
+ while (i < subclvs_len) {
+ clv_code = tvb_get_guint8(tvb, offset+len+1); /* skip the total subtlv len indicator */
+ clv_len = tvb_get_guint8(tvb, offset+len+2);
+ dissect_ipreach_subclv(tvb, subtree2, offset+len+3, clv_code, clv_len);
+ i += clv_len + 2;
+ }
+ len += 1 + subclvs_len;
+ } else {
+ proto_tree_add_text (subtree, tvb, offset+4, len, "no sub-TLVs present");
+ }
+ offset += len;
+ length -= len;
+ }
}
/*
* Name: dissect_lsp_nlpid_clv()
*
* Description:
- * Decode for a lsp packets NLPID clv. Calls into the
- * clv common one.
+ * Decode for a lsp packets NLPID clv. Calls into the
+ * clv common one.
*
* Input:
- * tvbuff_t * : tvbuffer for packet data
- * proto_tree * : proto tree to build on (may be null)
- * int : current offset into packet data
- * int : length of IDs in packet.
- * int : length of this clv
+ * tvbuff_t * : tvbuffer for packet data
+ * proto_tree * : proto tree to build on (may be null)
+ * int : current offset into packet data
+ * int : length of IDs in packet.
+ * int : length of this clv
*
* Output:
- * void, will modify proto_tree if not null.
+ * void, will modify proto_tree if not null.
*/
static void
dissect_lsp_nlpid_clv(tvbuff_t *tvb, packet_info* pinfo _U_, proto_tree *tree, int offset,
- int id_length _U_, int length)
+ int id_length _U_, int length)
{
- isis_dissect_nlpid_clv(tvb, tree, offset, length);
+ isis_dissect_nlpid_clv(tvb, tree, offset, length);
}
/*
* Name: dissect_lsp_mt_clv()
*
* Description: - code 229
- * Decode for a lsp packets Multi Topology clv. Calls into the
- * clv common one.
+ * Decode for a lsp packets Multi Topology clv. Calls into the
+ * clv common one.
*
* Input:
* tvbuff_t * : tvbuffer for packet data
* proto_tree * : proto tree to build on (may be null)
- * int : current offset into packet data
- * guint : length of this clv
- * int : length of IDs in packet.
+ * int : current offset into packet data
+ * guint : length of this clv
+ * int : length of IDs in packet.
*
* Output:
- * void, will modify proto_tree if not null.
+ * void, will modify proto_tree if not null.
*/
static void
dissect_lsp_mt_clv(tvbuff_t *tvb, packet_info* pinfo _U_, proto_tree *tree, int offset,
- int id_length _U_, int length)
+ int id_length _U_, int length)
{
- isis_dissect_mt_clv(tvb, tree, offset, length, hf_isis_lsp_clv_mt );
+ isis_dissect_mt_clv(tvb, tree, offset, length, hf_isis_lsp_clv_mt );
}
/*
@@ -1162,10 +1162,10 @@ dissect_lsp_mt_clv(tvbuff_t *tvb, packet_info* pinfo _U_, proto_tree *tree, int
*/
static void
dissect_lsp_hostname_clv(tvbuff_t *tvb, packet_info* pinfo _U_, proto_tree *tree, int offset,
- int id_length _U_, int length)
+ int id_length _U_, int length)
{
- isis_dissect_hostname_clv(tvb, tree, offset, length,
- hf_isis_lsp_hostname);
+ isis_dissect_hostname_clv(tvb, tree, offset, length,
+ hf_isis_lsp_hostname);
}
@@ -1188,10 +1188,10 @@ dissect_lsp_hostname_clv(tvbuff_t *tvb, packet_info* pinfo _U_, proto_tree *tree
*/
static void
dissect_lsp_te_router_id_clv(tvbuff_t *tvb, packet_info* pinfo, proto_tree *tree, int offset,
- int id_length _U_, int length)
+ int id_length _U_, int length)
{
- isis_dissect_te_router_id_clv(tree, pinfo, tvb, &ei_isis_lsp_short_packet, offset, length,
- hf_isis_lsp_clv_te_router_id );
+ isis_dissect_te_router_id_clv(tree, pinfo, tvb, &ei_isis_lsp_short_packet, offset, length,
+ hf_isis_lsp_clv_te_router_id );
}
@@ -1199,25 +1199,25 @@ dissect_lsp_te_router_id_clv(tvbuff_t *tvb, packet_info* pinfo, proto_tree *tree
* Name: dissect_lsp_ip_int_addr_clv()
*
* Description:
- * Decode for a lsp packets ip interface addr clv. Calls into the
- * clv common one.
+ * Decode for a lsp packets ip interface addr clv. Calls into the
+ * clv common one.
*
* Input:
- * tvbuff_t * : tvbuffer for packet data
- * proto_tree * : proto tree to build on (may be null)
- * int : current offset into packet data
- * int : length of IDs in packet.
- * int : length of this clv
+ * tvbuff_t * : tvbuffer for packet data
+ * proto_tree * : proto tree to build on (may be null)
+ * int : current offset into packet data
+ * int : length of IDs in packet.
+ * int : length of this clv
*
* Output:
- * void, will modify proto_tree if not null.
+ * void, will modify proto_tree if not null.
*/
static void
dissect_lsp_ip_int_addr_clv(tvbuff_t *tvb, packet_info* pinfo, proto_tree *tree, int offset,
- int id_length _U_, int length)
+ int id_length _U_, int length)
{
- isis_dissect_ip_int_clv(tree, pinfo, tvb, &ei_isis_lsp_short_packet, offset, length,
- hf_isis_lsp_clv_ipv4_int_addr );
+ isis_dissect_ip_int_clv(tree, pinfo, tvb, &ei_isis_lsp_short_packet, offset, length,
+ hf_isis_lsp_clv_ipv4_int_addr );
}
/*
@@ -1239,231 +1239,231 @@ dissect_lsp_ip_int_addr_clv(tvbuff_t *tvb, packet_info* pinfo, proto_tree *tree,
*/
static void
dissect_lsp_ipv6_int_addr_clv(tvbuff_t *tvb, packet_info* pinfo, proto_tree *tree, int offset,
- int id_length _U_, int length)
+ int id_length _U_, int length)
{
- isis_dissect_ipv6_int_clv(tree, pinfo, tvb, &ei_isis_lsp_short_packet, offset, length,
- hf_isis_lsp_clv_ipv6_int_addr );
+ isis_dissect_ipv6_int_clv(tree, pinfo, tvb, &ei_isis_lsp_short_packet, offset, length,
+ hf_isis_lsp_clv_ipv6_int_addr );
}
static void
dissect_isis_lsp_clv_mt_cap_spb_instance(tvbuff_t *tvb, packet_info *pinfo,
proto_tree *tree, int offset, int subtype, int sublen)
{
- const int CIST_ROOT_ID_LEN = 8; /* CIST Root Identifier */
- const int CIST_EXT_ROOT_PATH_COST_LEN = 4; /* CIST External Root Path Cost */
- const int BRIDGE_PRI_LEN = 2; /* Bridge Priority */
- const int V_SPSOURCEID_LEN = 4; /* v | SPSourceID */
- const int NUM_TREES_LEN = 1; /* num of trees */
-
- const int CIST_ROOT_ID_OFFSET = 0;
- const int CIST_EXT_ROOT_PATH_COST_OFFSET = CIST_ROOT_ID_OFFSET + CIST_ROOT_ID_LEN;
- const int BRIDGE_PRI_OFFSET = CIST_EXT_ROOT_PATH_COST_OFFSET + CIST_EXT_ROOT_PATH_COST_LEN;
- const int V_SPSOURCEID_OFFSET = BRIDGE_PRI_OFFSET + BRIDGE_PRI_LEN;
- const int NUM_TREES_OFFSET = V_SPSOURCEID_OFFSET + V_SPSOURCEID_LEN;
- const int FIXED_LEN = NUM_TREES_OFFSET + NUM_TREES_LEN;
- const int VLAN_ID_TUPLE_LEN = 8;
-
- if (sublen < FIXED_LEN) {
- proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
- "Short SPB Digest subTLV (%d vs %d)", sublen, FIXED_LEN);
- return;
- }
- else {
- proto_tree *subtree, *ti;
- int subofs = offset;
- const guint8 *cist_root_identifier = tvb_get_ptr (tvb, subofs + CIST_ROOT_ID_OFFSET, CIST_ROOT_ID_LEN);
- guint8 num_trees = tvb_get_guint8(tvb, subofs + NUM_TREES_OFFSET);
-
- /*************************/
- subtree = proto_tree_add_subtree_format( tree, tvb, offset-2, sublen+2, ett_isis_lsp_clv_mt_cap_spb_instance, NULL,
- "SPB Instance: Type: 0x%02x, Length: %d", subtype, sublen);
-
- /*************************/
- proto_tree_add_bytes_format_value( subtree, hf_isis_lsp_mt_cap_spb_instance_cist_root_identifier, tvb, subofs + CIST_ROOT_ID_OFFSET, CIST_ROOT_ID_LEN,
- cist_root_identifier, "%08x-%08x-%08x-%08x-%08x-%08x-%08x-%08x",
- cist_root_identifier[0], cist_root_identifier[1], cist_root_identifier[2],
- cist_root_identifier[3], cist_root_identifier[4], cist_root_identifier[5],
- cist_root_identifier[6], cist_root_identifier[7]);
- proto_tree_add_item(subtree, hf_isis_lsp_mt_cap_spb_instance_cist_external_root_path_cost, tvb, subofs + CIST_EXT_ROOT_PATH_COST_OFFSET, CIST_EXT_ROOT_PATH_COST_LEN, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_isis_lsp_mt_cap_spb_instance_bridge_priority, tvb, subofs + BRIDGE_PRI_OFFSET, BRIDGE_PRI_LEN, ENC_BIG_ENDIAN);
-
- proto_tree_add_item(subtree, hf_isis_lsp_mt_cap_spb_instance_v, tvb, subofs + V_SPSOURCEID_OFFSET, V_SPSOURCEID_LEN, ENC_BIG_ENDIAN);
-
- proto_tree_add_item(subtree, hf_isis_lsp_mt_cap_spsourceid, tvb, subofs + V_SPSOURCEID_OFFSET, V_SPSOURCEID_LEN, ENC_BIG_ENDIAN);
- ti = proto_tree_add_item(subtree, hf_isis_lsp_mt_cap_spb_instance_number_of_trees, tvb, subofs + NUM_TREES_OFFSET, NUM_TREES_LEN, ENC_BIG_ENDIAN);
- if (num_trees == 0)
- proto_item_append_text(ti, " Invalid subTLV: zero trees");
-
- subofs += FIXED_LEN;
- sublen -= FIXED_LEN;
-
- /*************************/
- if (sublen != (num_trees * VLAN_ID_TUPLE_LEN)) {
- proto_tree_add_text( subtree, tvb, subofs, 0,
- "SubTLV length doesn't match number of trees");
- return;
- }
- while (sublen > 0 && num_trees > 0) {
- if (sublen < VLAN_ID_TUPLE_LEN) {
- proto_tree_add_expert_format(subtree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
- "Short VLAN_ID entry (%d vs %d)", sublen, VLAN_ID_TUPLE_LEN);
- return;
- }
- else {
- const guint8 flags = tvb_get_guint8(tvb, subofs);
- const guint8 *ect_id = tvb_get_ptr(tvb, subofs + 1, 4);
- const guint8 *bvid_spvid = tvb_get_ptr(tvb, subofs + 1 + 4, 3);
- const guint16 bvid = (0xff0 & (((guint16)bvid_spvid[0]) << 4)) | (0x0f & (bvid_spvid[1] >> 4));
- const guint16 spvid = (0xf00 & (((guint16)bvid_spvid[1]) << 8)) | (0xff & (bvid_spvid[2]));
- proto_tree_add_text( subtree, tvb, subofs, VLAN_ID_TUPLE_LEN,
- " U: %u, M: %u, A: %u, ECT: %02x-%02x-%02x-%02x, BVID: 0x%03x (%d),%s SPVID: 0x%03x (%d)",
- (flags >> 7) & 1,
- (flags >> 6) & 1,
- (flags >> 5) & 1,
- ect_id[0], ect_id[1], ect_id[2], ect_id[3],
- bvid, bvid,
- ( bvid < 10 ? " "
- : bvid < 100 ? " "
- : bvid < 1000 ? " "
- : ""),
- spvid, spvid);
- subofs += VLAN_ID_TUPLE_LEN;
- sublen -= VLAN_ID_TUPLE_LEN;
- --num_trees;
- }
- }
- if (num_trees) {
- proto_tree_add_expert_format(subtree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
- "Short subTLV (%d vs %d)", sublen, num_trees * VLAN_ID_TUPLE_LEN);
- return;
- }
- }
+ const int CIST_ROOT_ID_LEN = 8; /* CIST Root Identifier */
+ const int CIST_EXT_ROOT_PATH_COST_LEN = 4; /* CIST External Root Path Cost */
+ const int BRIDGE_PRI_LEN = 2; /* Bridge Priority */
+ const int V_SPSOURCEID_LEN = 4; /* v | SPSourceID */
+ const int NUM_TREES_LEN = 1; /* num of trees */
+
+ const int CIST_ROOT_ID_OFFSET = 0;
+ const int CIST_EXT_ROOT_PATH_COST_OFFSET = CIST_ROOT_ID_OFFSET + CIST_ROOT_ID_LEN;
+ const int BRIDGE_PRI_OFFSET = CIST_EXT_ROOT_PATH_COST_OFFSET + CIST_EXT_ROOT_PATH_COST_LEN;
+ const int V_SPSOURCEID_OFFSET = BRIDGE_PRI_OFFSET + BRIDGE_PRI_LEN;
+ const int NUM_TREES_OFFSET = V_SPSOURCEID_OFFSET + V_SPSOURCEID_LEN;
+ const int FIXED_LEN = NUM_TREES_OFFSET + NUM_TREES_LEN;
+ const int VLAN_ID_TUPLE_LEN = 8;
+
+ if (sublen < FIXED_LEN) {
+ proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
+ "Short SPB Digest subTLV (%d vs %d)", sublen, FIXED_LEN);
+ return;
+ }
+ else {
+ proto_tree *subtree, *ti;
+ int subofs = offset;
+ const guint8 *cist_root_identifier = tvb_get_ptr (tvb, subofs + CIST_ROOT_ID_OFFSET, CIST_ROOT_ID_LEN);
+ guint8 num_trees = tvb_get_guint8(tvb, subofs + NUM_TREES_OFFSET);
+
+ /*************************/
+ subtree = proto_tree_add_subtree_format( tree, tvb, offset-2, sublen+2, ett_isis_lsp_clv_mt_cap_spb_instance, NULL,
+ "SPB Instance: Type: 0x%02x, Length: %d", subtype, sublen);
+
+ /*************************/
+ proto_tree_add_bytes_format_value( subtree, hf_isis_lsp_mt_cap_spb_instance_cist_root_identifier, tvb, subofs + CIST_ROOT_ID_OFFSET, CIST_ROOT_ID_LEN,
+ cist_root_identifier, "%08x-%08x-%08x-%08x-%08x-%08x-%08x-%08x",
+ cist_root_identifier[0], cist_root_identifier[1], cist_root_identifier[2],
+ cist_root_identifier[3], cist_root_identifier[4], cist_root_identifier[5],
+ cist_root_identifier[6], cist_root_identifier[7]);
+ proto_tree_add_item(subtree, hf_isis_lsp_mt_cap_spb_instance_cist_external_root_path_cost, tvb, subofs + CIST_EXT_ROOT_PATH_COST_OFFSET, CIST_EXT_ROOT_PATH_COST_LEN, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_isis_lsp_mt_cap_spb_instance_bridge_priority, tvb, subofs + BRIDGE_PRI_OFFSET, BRIDGE_PRI_LEN, ENC_BIG_ENDIAN);
+
+ proto_tree_add_item(subtree, hf_isis_lsp_mt_cap_spb_instance_v, tvb, subofs + V_SPSOURCEID_OFFSET, V_SPSOURCEID_LEN, ENC_BIG_ENDIAN);
+
+ proto_tree_add_item(subtree, hf_isis_lsp_mt_cap_spsourceid, tvb, subofs + V_SPSOURCEID_OFFSET, V_SPSOURCEID_LEN, ENC_BIG_ENDIAN);
+ ti = proto_tree_add_item(subtree, hf_isis_lsp_mt_cap_spb_instance_number_of_trees, tvb, subofs + NUM_TREES_OFFSET, NUM_TREES_LEN, ENC_BIG_ENDIAN);
+ if (num_trees == 0)
+ proto_item_append_text(ti, " Invalid subTLV: zero trees");
+
+ subofs += FIXED_LEN;
+ sublen -= FIXED_LEN;
+
+ /*************************/
+ if (sublen != (num_trees * VLAN_ID_TUPLE_LEN)) {
+ proto_tree_add_text( subtree, tvb, subofs, 0,
+ "SubTLV length doesn't match number of trees");
+ return;
+ }
+ while (sublen > 0 && num_trees > 0) {
+ if (sublen < VLAN_ID_TUPLE_LEN) {
+ proto_tree_add_expert_format(subtree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
+ "Short VLAN_ID entry (%d vs %d)", sublen, VLAN_ID_TUPLE_LEN);
+ return;
+ }
+ else {
+ const guint8 flags = tvb_get_guint8(tvb, subofs);
+ const guint8 *ect_id = tvb_get_ptr(tvb, subofs + 1, 4);
+ const guint8 *bvid_spvid = tvb_get_ptr(tvb, subofs + 1 + 4, 3);
+ const guint16 bvid = (0xff0 & (((guint16)bvid_spvid[0]) << 4)) | (0x0f & (bvid_spvid[1] >> 4));
+ const guint16 spvid = (0xf00 & (((guint16)bvid_spvid[1]) << 8)) | (0xff & (bvid_spvid[2]));
+ proto_tree_add_text( subtree, tvb, subofs, VLAN_ID_TUPLE_LEN,
+ " U: %u, M: %u, A: %u, ECT: %02x-%02x-%02x-%02x, BVID: 0x%03x (%d),%s SPVID: 0x%03x (%d)",
+ (flags >> 7) & 1,
+ (flags >> 6) & 1,
+ (flags >> 5) & 1,
+ ect_id[0], ect_id[1], ect_id[2], ect_id[3],
+ bvid, bvid,
+ ( bvid < 10 ? " "
+ : bvid < 100 ? " "
+ : bvid < 1000 ? " "
+ : ""),
+ spvid, spvid);
+ subofs += VLAN_ID_TUPLE_LEN;
+ sublen -= VLAN_ID_TUPLE_LEN;
+ --num_trees;
+ }
+ }
+ if (num_trees) {
+ proto_tree_add_expert_format(subtree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
+ "Short subTLV (%d vs %d)", sublen, num_trees * VLAN_ID_TUPLE_LEN);
+ return;
+ }
+ }
}
static void
dissect_isis_lsp_clv_mt_cap_spb_oalg(tvbuff_t *tvb,
- proto_tree *tree, int offset, int subtype, int sublen)
+ proto_tree *tree, int offset, int subtype, int sublen)
{
- proto_tree_add_text( tree, tvb, offset, -1,
- "MT-Cap SPB Opaque Algorithm: Type: 0x%02x, Length: %d", subtype, sublen);
+ proto_tree_add_text( tree, tvb, offset, -1,
+ "MT-Cap SPB Opaque Algorithm: Type: 0x%02x, Length: %d", subtype, sublen);
}
static void
dissect_isis_lsp_clv_mt_cap_spbm_service_identifier(tvbuff_t *tvb, packet_info *pinfo,
- proto_tree *tree, int offset, int subtype, int sublen)
+ proto_tree *tree, int offset, int subtype, int sublen)
{
- const int BMAC_LEN = 6; /* B-MAC Address */
- const int BVID_LEN = 2; /* Base-VID */
-
- const int BMAC_OFFSET = 0;
- const int BVID_OFFSET = BMAC_OFFSET + BMAC_LEN;
- const int FIXED_LEN = BVID_OFFSET + BVID_LEN;
-
- const int ISID_LEN = 4;
-
- if (sublen < FIXED_LEN) {
- proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
- "Short SPBM Service Identifier and Unicast Address subTLV (%d vs %d)", sublen, FIXED_LEN);
- return;
- }
- else {
- proto_tree *subtree;
- int subofs = offset;
-
- /*************************/
- subtree = proto_tree_add_subtree_format( tree, tvb, offset-2, sublen+2, ett_isis_lsp_clv_mt_cap_spbm_service_identifier, NULL,
- "SPB Service ID and Unicast Address: Type: 0x%02x, Length: %d", subtype, sublen);
-
- /*************************/
- proto_tree_add_item(subtree, hf_isis_lsp_mt_cap_spbm_service_identifier_b_mac, tvb, subofs + BMAC_OFFSET, BMAC_LEN, ENC_NA);
- proto_tree_add_item(subtree, hf_isis_lsp_mt_cap_spbm_service_identifier_base_vid, tvb, subofs + BVID_OFFSET, BVID_LEN, ENC_BIG_ENDIAN);
-
- subofs += FIXED_LEN;
- sublen -= FIXED_LEN;
-
- /*************************/
- while (sublen > 0) {
- if (sublen < ISID_LEN) {
- proto_tree_add_expert_format(subtree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
- "Short ISID entry (%d vs %d)", sublen, ISID_LEN);
- return;
- }
- else {
- const guint32 isid = tvb_get_ntohl(tvb, subofs);
- proto_tree_add_text( subtree, tvb, subofs, ISID_LEN,
- " T: %u, R: %u, ISID: 0x%06x (%d)",
- (isid >> 31) & 1,
- (isid >> 30) & 1,
- isid & 0x00ffffff,
- isid & 0x00ffffff);
- subofs += ISID_LEN;
- sublen -= ISID_LEN;
- }
- }
- }
+ const int BMAC_LEN = 6; /* B-MAC Address */
+ const int BVID_LEN = 2; /* Base-VID */
+
+ const int BMAC_OFFSET = 0;
+ const int BVID_OFFSET = BMAC_OFFSET + BMAC_LEN;
+ const int FIXED_LEN = BVID_OFFSET + BVID_LEN;
+
+ const int ISID_LEN = 4;
+
+ if (sublen < FIXED_LEN) {
+ proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
+ "Short SPBM Service Identifier and Unicast Address subTLV (%d vs %d)", sublen, FIXED_LEN);
+ return;
+ }
+ else {
+ proto_tree *subtree;
+ int subofs = offset;
+
+ /*************************/
+ subtree = proto_tree_add_subtree_format( tree, tvb, offset-2, sublen+2, ett_isis_lsp_clv_mt_cap_spbm_service_identifier, NULL,
+ "SPB Service ID and Unicast Address: Type: 0x%02x, Length: %d", subtype, sublen);
+
+ /*************************/
+ proto_tree_add_item(subtree, hf_isis_lsp_mt_cap_spbm_service_identifier_b_mac, tvb, subofs + BMAC_OFFSET, BMAC_LEN, ENC_NA);
+ proto_tree_add_item(subtree, hf_isis_lsp_mt_cap_spbm_service_identifier_base_vid, tvb, subofs + BVID_OFFSET, BVID_LEN, ENC_BIG_ENDIAN);
+
+ subofs += FIXED_LEN;
+ sublen -= FIXED_LEN;
+
+ /*************************/
+ while (sublen > 0) {
+ if (sublen < ISID_LEN) {
+ proto_tree_add_expert_format(subtree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
+ "Short ISID entry (%d vs %d)", sublen, ISID_LEN);
+ return;
+ }
+ else {
+ const guint32 isid = tvb_get_ntohl(tvb, subofs);
+ proto_tree_add_text( subtree, tvb, subofs, ISID_LEN,
+ " T: %u, R: %u, ISID: 0x%06x (%d)",
+ (isid >> 31) & 1,
+ (isid >> 30) & 1,
+ isid & 0x00ffffff,
+ isid & 0x00ffffff);
+ subofs += ISID_LEN;
+ sublen -= ISID_LEN;
+ }
+ }
+ }
}
static void
dissect_isis_lsp_clv_mt_cap_spbv_mac_address(tvbuff_t *tvb, packet_info *pinfo,
- proto_tree *tree, int offset, int subtype, int sublen)
+ proto_tree *tree, int offset, int subtype, int sublen)
{
- guint16 fixed_data;
- guint16 spvid;
- guint8 sr_bit;
- const int GMAC_LEN = 6; /* GMAC Address */
- const int SPVID_LEN = 2; /* SPVID */
- const int MAC_TUPLE_LEN = 7;
-
- const int SPVID_OFFSET = 0;
- const int FIXED_LEN = SPVID_OFFSET + SPVID_LEN;
-
- if (sublen < FIXED_LEN) {
- proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
- "Short SPBV Mac Address subTLV (%d vs %d)", sublen, FIXED_LEN);
- return;
- }
- else {
- proto_tree *subtree;
- int subofs = offset;
- fixed_data = tvb_get_ntohs(tvb, subofs);
- spvid = (fixed_data & 0x0FFF);
- sr_bit = (fixed_data & 0x3000) >> 12;
-
- /*************************/
- subtree = proto_tree_add_subtree_format( tree, tvb, offset-2, sublen+2, ett_isis_lsp_clv_mt_cap_spbv_mac_address, NULL,
- "SPBV Mac Address: Type: 0x%02x, Length: %d", subtype, sublen);
-
- /*************************/
- proto_tree_add_uint(subtree, hf_isis_lsp_spb_sr_bit,
- tvb, subofs, 1, sr_bit);
- proto_tree_add_uint(subtree, hf_isis_lsp_spb_spvid,
- tvb, subofs, 2, spvid);
-
- subofs += FIXED_LEN;
- sublen -= FIXED_LEN;
-
- /*************************/
- while (sublen > 0) {
- if (sublen < MAC_TUPLE_LEN) {
- proto_tree_add_expert_format(subtree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
- "Short MAC Address entry (%d vs %d)", sublen, MAC_TUPLE_LEN);
- return;
- }
- else {
- const guint32 tr_bit = tvb_get_guint8(tvb, subofs);
- const guint8 *gmac = tvb_get_ptr(tvb, subofs + 1, GMAC_LEN);
- proto_tree_add_text( subtree, tvb, subofs, MAC_TUPLE_LEN,
- " T: %u, R: %u, MAC: %02x-%02x-%02x-%02x-%02x-%02x",
- (tr_bit >> 7) & 1,
- (tr_bit >> 6) & 1,
- gmac[0],
- gmac[1],
- gmac[2],
- gmac[3],
- gmac[4],
- gmac[5]);
- subofs += MAC_TUPLE_LEN;
- sublen -= MAC_TUPLE_LEN;
- }
- }
- }
+ guint16 fixed_data;
+ guint16 spvid;
+ guint8 sr_bit;
+ const int GMAC_LEN = 6; /* GMAC Address */
+ const int SPVID_LEN = 2; /* SPVID */
+ const int MAC_TUPLE_LEN = 7;
+
+ const int SPVID_OFFSET = 0;
+ const int FIXED_LEN = SPVID_OFFSET + SPVID_LEN;
+
+ if (sublen < FIXED_LEN) {
+ proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
+ "Short SPBV Mac Address subTLV (%d vs %d)", sublen, FIXED_LEN);
+ return;
+ }
+ else {
+ proto_tree *subtree;
+ int subofs = offset;
+ fixed_data = tvb_get_ntohs(tvb, subofs);
+ spvid = (fixed_data & 0x0FFF);
+ sr_bit = (fixed_data & 0x3000) >> 12;
+
+ /*************************/
+ subtree = proto_tree_add_subtree_format( tree, tvb, offset-2, sublen+2, ett_isis_lsp_clv_mt_cap_spbv_mac_address, NULL,
+ "SPBV Mac Address: Type: 0x%02x, Length: %d", subtype, sublen);
+
+ /*************************/
+ proto_tree_add_uint(subtree, hf_isis_lsp_spb_sr_bit,
+ tvb, subofs, 1, sr_bit);
+ proto_tree_add_uint(subtree, hf_isis_lsp_spb_spvid,
+ tvb, subofs, 2, spvid);
+
+ subofs += FIXED_LEN;
+ sublen -= FIXED_LEN;
+
+ /*************************/
+ while (sublen > 0) {
+ if (sublen < MAC_TUPLE_LEN) {
+ proto_tree_add_expert_format(subtree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
+ "Short MAC Address entry (%d vs %d)", sublen, MAC_TUPLE_LEN);
+ return;
+ }
+ else {
+ const guint32 tr_bit = tvb_get_guint8(tvb, subofs);
+ const guint8 *gmac = tvb_get_ptr(tvb, subofs + 1, GMAC_LEN);
+ proto_tree_add_text( subtree, tvb, subofs, MAC_TUPLE_LEN,
+ " T: %u, R: %u, MAC: %02x-%02x-%02x-%02x-%02x-%02x",
+ (tr_bit >> 7) & 1,
+ (tr_bit >> 6) & 1,
+ gmac[0],
+ gmac[1],
+ gmac[2],
+ gmac[3],
+ gmac[4],
+ gmac[5]);
+ subofs += MAC_TUPLE_LEN;
+ sublen -= MAC_TUPLE_LEN;
+ }
+ }
+ }
}
/*
* Name: dissect_lsp_clv_mt_cap()
@@ -1484,279 +1484,279 @@ static void
dissect_isis_lsp_clv_mt_cap(tvbuff_t *tvb, packet_info* pinfo, proto_tree *tree, int offset,
int id_length _U_, int length)
{
- if (length >= 2) {
- /* mtid */
- proto_tree_add_item( tree, hf_isis_lsp_mt_cap_mtid, tvb, offset, 2, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_isis_lsp_mt_cap_overload, tvb, offset, 2, ENC_BIG_ENDIAN);
- length -= 2;
- offset += 2;
- while (length >= 2) {
- guint8 subtype = tvb_get_guint8(tvb, offset);
- guint8 subtlvlen = tvb_get_guint8(tvb, offset+1);
- length -= 2;
- offset += 2;
- if (subtlvlen > length) {
- proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
- "Short type 0x%02x TLV (%d vs %d)", subtype, subtlvlen, length);
- return;
- }
- if (subtype == 0x01) { /* SPB Instance */
- dissect_isis_lsp_clv_mt_cap_spb_instance(tvb, pinfo, tree, offset, subtype, subtlvlen);
- }
- else if (subtype == 0x02) { /* OALG */
- dissect_isis_lsp_clv_mt_cap_spb_oalg(tvb, tree, offset, subtype, subtlvlen);
- }
- else if (subtype == 0x03) { /* SPBM Service Identifier */
- dissect_isis_lsp_clv_mt_cap_spbm_service_identifier(tvb, pinfo, tree, offset, subtype, subtlvlen);
- }
- else if (subtype == 0x04) { /* SPBV Mac Address */
- dissect_isis_lsp_clv_mt_cap_spbv_mac_address(tvb, pinfo, tree, offset, subtype, subtlvlen);
- }
- else {
- proto_tree_add_expert_format( tree, pinfo, &ei_isis_lsp_subtlv, tvb, offset, -1,
- "Unknown SubTlv: Type: 0x%02x, Length: %d", subtype, subtlvlen);
- }
- length -= subtlvlen;
- offset += subtlvlen;
- }
-
- }
+ if (length >= 2) {
+ /* mtid */
+ proto_tree_add_item( tree, hf_isis_lsp_mt_cap_mtid, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_isis_lsp_mt_cap_overload, tvb, offset, 2, ENC_BIG_ENDIAN);
+ length -= 2;
+ offset += 2;
+ while (length >= 2) {
+ guint8 subtype = tvb_get_guint8(tvb, offset);
+ guint8 subtlvlen = tvb_get_guint8(tvb, offset+1);
+ length -= 2;
+ offset += 2;
+ if (subtlvlen > length) {
+ proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
+ "Short type 0x%02x TLV (%d vs %d)", subtype, subtlvlen, length);
+ return;
+ }
+ if (subtype == 0x01) { /* SPB Instance */
+ dissect_isis_lsp_clv_mt_cap_spb_instance(tvb, pinfo, tree, offset, subtype, subtlvlen);
+ }
+ else if (subtype == 0x02) { /* OALG */
+ dissect_isis_lsp_clv_mt_cap_spb_oalg(tvb, tree, offset, subtype, subtlvlen);
+ }
+ else if (subtype == 0x03) { /* SPBM Service Identifier */
+ dissect_isis_lsp_clv_mt_cap_spbm_service_identifier(tvb, pinfo, tree, offset, subtype, subtlvlen);
+ }
+ else if (subtype == 0x04) { /* SPBV Mac Address */
+ dissect_isis_lsp_clv_mt_cap_spbv_mac_address(tvb, pinfo, tree, offset, subtype, subtlvlen);
+ }
+ else {
+ proto_tree_add_expert_format( tree, pinfo, &ei_isis_lsp_subtlv, tvb, offset, -1,
+ "Unknown SubTlv: Type: 0x%02x, Length: %d", subtype, subtlvlen);
+ }
+ length -= subtlvlen;
+ offset += subtlvlen;
+ }
+
+ }
}
/*
* Name: dissect_lsp_authentication_clv()
*
* Description:
- * Decode for a lsp packets authenticaion clv. Calls into the
- * clv common one.
+ * Decode for a lsp packets authenticaion clv. Calls into the
+ * clv common one.
*
* Input:
- * tvbuff_t * : tvbuffer for packet data
- * proto_tree * : proto tree to build on (may be null)
- * int : current offset into packet data
- * int : length of IDs in packet.
- * int : length of this clv
+ * tvbuff_t * : tvbuffer for packet data
+ * proto_tree * : proto tree to build on (may be null)
+ * int : current offset into packet data
+ * int : length of IDs in packet.
+ * int : length of this clv
*
* Output:
- * void, will modify proto_tree if not null.
+ * void, will modify proto_tree if not null.
*/
static void
dissect_lsp_authentication_clv(tvbuff_t *tvb, packet_info* pinfo, proto_tree *tree, int offset,
- int id_length _U_, int length)
+ int id_length _U_, int length)
{
- isis_dissect_authentication_clv(tree, pinfo, tvb, &ei_isis_lsp_authentication, offset, length);
+ isis_dissect_authentication_clv(tree, pinfo, tvb, &ei_isis_lsp_authentication, offset, length);
}
/*
* Name: dissect_lsp_ip_authentication_clv()
*
* Description:
- * Decode for a lsp packets authenticaion clv. Calls into the
- * clv common one.
+ * Decode for a lsp packets authenticaion clv. Calls into the
+ * clv common one.
*
* Input:
- * tvbuff_t * : tvbuffer for packet data
- * proto_tree * : proto tree to build on (may be null)
- * int : current offset into packet data
- * int : length of IDs in packet.
- * int : length of this clv
+ * tvbuff_t * : tvbuffer for packet data
+ * proto_tree * : proto tree to build on (may be null)
+ * int : current offset into packet data
+ * int : length of IDs in packet.
+ * int : length of this clv
*
* Output:
- * void, will modify proto_tree if not null.
+ * void, will modify proto_tree if not null.
*/
static void
dissect_lsp_ip_authentication_clv(tvbuff_t *tvb, packet_info* pinfo _U_, proto_tree *tree, int offset,
- int id_length _U_, int length)
+ int id_length _U_, int length)
{
- isis_dissect_ip_authentication_clv(tvb, tree, offset, length);
+ isis_dissect_ip_authentication_clv(tvb, tree, offset, length);
}
/*
* Name: dissect_lsp_area_address_clv()
*
* Description:
- * Decode for a lsp packet's area address clv. Call into clv common
- * one.
+ * Decode for a lsp packet's area address clv. Call into clv common
+ * one.
*
* Input:
- * tvbuff_t * : tvbuffer for packet data
- * proto_tree * : protocol display tree to fill out. May be NULL
- * int : offset into packet data where we are.
- * int : length of IDs in packet.
- * int : length of clv we are decoding
+ * tvbuff_t * : tvbuffer for packet data
+ * proto_tree * : protocol display tree to fill out. May be NULL
+ * int : offset into packet data where we are.
+ * int : length of IDs in packet.
+ * int : length of clv we are decoding
*
* Output:
* void, but we will add to proto tree if !NULL.
*/
static void
dissect_lsp_area_address_clv(tvbuff_t *tvb, packet_info* pinfo, proto_tree *tree, int offset,
- int id_length _U_, int length)
+ int id_length _U_, int length)
{
- isis_dissect_area_address_clv(tree, pinfo, tvb, &ei_isis_lsp_short_packet, offset, length);
+ isis_dissect_area_address_clv(tree, pinfo, tvb, &ei_isis_lsp_short_packet, offset, length);
}
/*
* Name: dissect_lsp_eis_neighbors_clv_inner()
*
* Description:
- * Real work horse for showing neighbors. This means we decode the
- * first octet as either virtual/!virtual (if show_virtual param is
- * set), or as a must == 0 reserved value.
+ * Real work horse for showing neighbors. This means we decode the
+ * first octet as either virtual/!virtual (if show_virtual param is
+ * set), or as a must == 0 reserved value.
*
- * Once past that, we decode n neighbor elements. Each neighbor
- * is comprised of a metric block (is dissect_metric) and the
- * addresses.
+ * Once past that, we decode n neighbor elements. Each neighbor
+ * is comprised of a metric block (is dissect_metric) and the
+ * addresses.
*
* Input:
- * tvbuff_t * : tvbuffer for packet data
- * proto_tree * : protocol display tree to fill out. May be NULL
- * int : offset into packet data where we are.
- * int : length of IDs in packet.
- * int : length of clv we are decoding
- * int : set to decode first octet as virtual vs reserved == 0
- * int : set to indicate EIS instead of IS (6 octet per addr instead of 7)
+ * tvbuff_t * : tvbuffer for packet data
+ * proto_tree * : protocol display tree to fill out. May be NULL
+ * int : offset into packet data where we are.
+ * int : length of IDs in packet.
+ * int : length of clv we are decoding
+ * int : set to decode first octet as virtual vs reserved == 0
+ * int : set to indicate EIS instead of IS (6 octet per addr instead of 7)
*
* Output:
* void, but we will add to proto tree if !NULL.
*/
static void
dissect_lsp_eis_neighbors_clv_inner(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
- int offset, int length, int id_length, int show_virtual, int is_eis)
+ int offset, int length, int id_length, int show_virtual, int is_eis)
{
- proto_item *ti;
- proto_tree *ntree = NULL;
- int tlen;
-
- if (!is_eis) {
- id_length++; /* IDs are one octet longer in IS neighbours */
- if ( tree ) {
- if ( show_virtual ) {
- /* virtual path flag */
- proto_tree_add_text ( tree, tvb, offset, 1,
- tvb_get_guint8(tvb, offset) ? "IsVirtual" : "IsNotVirtual" );
- } else {
- proto_tree_add_item(tree, hf_isis_lsp_eis_neighbors_reserved, tvb, offset, 1, ENC_NA);
- }
- }
- offset++;
- length--;
- }
- tlen = 4 + id_length;
-
- while ( length > 0 ) {
- if (length<tlen) {
- proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
- "short E/IS reachability (%d vs %d)", length, tlen );
- return;
- }
- /*
- * Gotta build a sub-tree for all our pieces
- */
- if ( tree ) {
- if ( is_eis ) {
- ntree = proto_tree_add_subtree(tree, tvb, offset, tlen, ett_isis_lsp_clv_is_neighbors, &ti, "ES Neighbor");
- } else {
- ntree = proto_tree_add_subtree(tree, tvb, offset, tlen, ett_isis_lsp_clv_is_neighbors, &ti, "IS Neighbor");
- }
-
- proto_tree_add_item(ntree, hf_isis_lsp_eis_neighbors_default_metric, tvb, offset, 1, ENC_NA);
- proto_tree_add_item(ntree, hf_isis_lsp_eis_neighbors_default_metric_ie, tvb, offset, 1, ENC_NA);
-
- proto_tree_add_item(ntree, hf_isis_lsp_eis_neighbors_delay_metric, tvb, offset, 1, ENC_NA);
- proto_tree_add_item(ntree, hf_isis_lsp_eis_neighbors_delay_metric_supported, tvb, offset, 1, ENC_NA);
-
- proto_tree_add_item(ntree, hf_isis_lsp_eis_neighbors_delay_metric_ie, tvb, offset+1, 1, ENC_NA);
-
- proto_tree_add_item(ntree, hf_isis_lsp_eis_neighbors_expense_metric, tvb, offset, 1, ENC_NA);
- proto_tree_add_item(ntree, hf_isis_lsp_eis_neighbors_expense_metric_supported, tvb, offset, 1, ENC_NA);
- proto_tree_add_item(ntree, hf_isis_lsp_eis_neighbors_expense_metric_ie, tvb, offset+2, 1, ENC_NA);
-
- proto_tree_add_item(ntree, hf_isis_lsp_eis_neighbors_error_metric, tvb, offset, 1, ENC_NA);
- proto_tree_add_item(ntree, hf_isis_lsp_eis_neighbors_error_metric_supported, tvb, offset, 1, ENC_NA);
- proto_tree_add_item(ntree, hf_isis_lsp_eis_neighbors_error_metric_ie, tvb, offset+3, 1, ENC_NA);
- proto_tree_add_item(ntree, is_eis ? hf_isis_lsp_eis_neighbors_es_neighbor_id : hf_isis_lsp_eis_neighbors_is_neighbor_id,
- tvb, offset+4, id_length, ENC_NA);
- proto_item_append_text(ti, ": %s", tvb_print_system_id(tvb, offset+4, id_length));
- }
- offset += tlen;
- length -= tlen;
- }
+ proto_item *ti;
+ proto_tree *ntree = NULL;
+ int tlen;
+
+ if (!is_eis) {
+ id_length++; /* IDs are one octet longer in IS neighbours */
+ if ( tree ) {
+ if ( show_virtual ) {
+ /* virtual path flag */
+ proto_tree_add_text ( tree, tvb, offset, 1,
+ tvb_get_guint8(tvb, offset) ? "IsVirtual" : "IsNotVirtual" );
+ } else {
+ proto_tree_add_item(tree, hf_isis_lsp_eis_neighbors_reserved, tvb, offset, 1, ENC_NA);
+ }
+ }
+ offset++;
+ length--;
+ }
+ tlen = 4 + id_length;
+
+ while ( length > 0 ) {
+ if (length<tlen) {
+ proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
+ "short E/IS reachability (%d vs %d)", length, tlen );
+ return;
+ }
+ /*
+ * Gotta build a sub-tree for all our pieces
+ */
+ if ( tree ) {
+ if ( is_eis ) {
+ ntree = proto_tree_add_subtree(tree, tvb, offset, tlen, ett_isis_lsp_clv_is_neighbors, &ti, "ES Neighbor");
+ } else {
+ ntree = proto_tree_add_subtree(tree, tvb, offset, tlen, ett_isis_lsp_clv_is_neighbors, &ti, "IS Neighbor");
+ }
+
+ proto_tree_add_item(ntree, hf_isis_lsp_eis_neighbors_default_metric, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(ntree, hf_isis_lsp_eis_neighbors_default_metric_ie, tvb, offset, 1, ENC_NA);
+
+ proto_tree_add_item(ntree, hf_isis_lsp_eis_neighbors_delay_metric, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(ntree, hf_isis_lsp_eis_neighbors_delay_metric_supported, tvb, offset, 1, ENC_NA);
+
+ proto_tree_add_item(ntree, hf_isis_lsp_eis_neighbors_delay_metric_ie, tvb, offset+1, 1, ENC_NA);
+
+ proto_tree_add_item(ntree, hf_isis_lsp_eis_neighbors_expense_metric, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(ntree, hf_isis_lsp_eis_neighbors_expense_metric_supported, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(ntree, hf_isis_lsp_eis_neighbors_expense_metric_ie, tvb, offset+2, 1, ENC_NA);
+
+ proto_tree_add_item(ntree, hf_isis_lsp_eis_neighbors_error_metric, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(ntree, hf_isis_lsp_eis_neighbors_error_metric_supported, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(ntree, hf_isis_lsp_eis_neighbors_error_metric_ie, tvb, offset+3, 1, ENC_NA);
+ proto_tree_add_item(ntree, is_eis ? hf_isis_lsp_eis_neighbors_es_neighbor_id : hf_isis_lsp_eis_neighbors_is_neighbor_id,
+ tvb, offset+4, id_length, ENC_NA);
+ proto_item_append_text(ti, ": %s", tvb_print_system_id(tvb, offset+4, id_length));
+ }
+ offset += tlen;
+ length -= tlen;
+ }
}
/*
* Name: dissect_lsp_l1_is_neighbors_clv()
*
* Description:
- * Dispatch a l1 intermediate system neighbor by calling
- * the inner function with show virtual set to TRUE and is es set to FALSE.
+ * Dispatch a l1 intermediate system neighbor by calling
+ * the inner function with show virtual set to TRUE and is es set to FALSE.
*
* Input:
- * tvbuff_t * : tvbuffer for packet data
- * proto_tree * : protocol display tree to fill out. May be NULL
- * int : offset into packet data where we are.
- * int : length of IDs in packet.
- * int : length of clv we are decoding
+ * tvbuff_t * : tvbuffer for packet data
+ * proto_tree * : protocol display tree to fill out. May be NULL
+ * int : offset into packet data where we are.
+ * int : length of IDs in packet.
+ * int : length of clv we are decoding
*
* Output:
* void, but we will add to proto tree if !NULL.
*/
static void
dissect_lsp_l1_is_neighbors_clv(tvbuff_t *tvb, packet_info* pinfo, proto_tree *tree, int offset,
- int id_length, int length)
+ int id_length, int length)
{
- dissect_lsp_eis_neighbors_clv_inner(tvb, pinfo, tree, offset,
- length, id_length, TRUE, FALSE);
+ dissect_lsp_eis_neighbors_clv_inner(tvb, pinfo, tree, offset,
+ length, id_length, TRUE, FALSE);
}
/*
* Name: dissect_lsp_l1_es_neighbors_clv()
*
* Description:
- * Dispatch a l1 end or intermediate system neighbor by calling
- * the inner function with show virtual set to TRUE and es set to TRUE.
+ * Dispatch a l1 end or intermediate system neighbor by calling
+ * the inner function with show virtual set to TRUE and es set to TRUE.
*
* Input:
- * tvbuff_t * : tvbuffer for packet data
- * proto_tree * : protocol display tree to fill out. May be NULL
- * int : offset into packet data where we are.
- * int : length of IDs in packet.
- * int : length of clv we are decoding
+ * tvbuff_t * : tvbuffer for packet data
+ * proto_tree * : protocol display tree to fill out. May be NULL
+ * int : offset into packet data where we are.
+ * int : length of IDs in packet.
+ * int : length of clv we are decoding
*
* Output:
* void, but we will add to proto tree if !NULL.
*/
static void
dissect_lsp_l1_es_neighbors_clv(tvbuff_t *tvb, packet_info* pinfo, proto_tree *tree, int offset,
- int id_length, int length)
+ int id_length, int length)
{
- dissect_lsp_eis_neighbors_clv_inner(tvb, pinfo, tree, offset,
- length, id_length, TRUE, TRUE);
+ dissect_lsp_eis_neighbors_clv_inner(tvb, pinfo, tree, offset,
+ length, id_length, TRUE, TRUE);
}
/*
* Name: dissect_lsp_l2_is_neighbors_clv()
*
* Description:
- * Dispatch a l2 intermediate system neighbor by calling
- * the inner function with show virtual set to FALSE, and is es set
- * to FALSE
+ * Dispatch a l2 intermediate system neighbor by calling
+ * the inner function with show virtual set to FALSE, and is es set
+ * to FALSE
*
* Input:
- * tvbuff_t * : tvbuffer for packet data
- * proto_tree * : protocol display tree to fill out. May be NULL
- * int : offset into packet data where we are.
- * int : length of IDs in packet.
- * int : length of clv we are decoding
+ * tvbuff_t * : tvbuffer for packet data
+ * proto_tree * : protocol display tree to fill out. May be NULL
+ * int : offset into packet data where we are.
+ * int : length of IDs in packet.
+ * int : length of clv we are decoding
*
* Output:
* void, but we will add to proto tree if !NULL.
*/
static void
dissect_lsp_l2_is_neighbors_clv(tvbuff_t *tvb, packet_info* pinfo, proto_tree *tree, int offset,
- int id_length, int length)
+ int id_length, int length)
{
- dissect_lsp_eis_neighbors_clv_inner(tvb, pinfo, tree, offset,
- length, id_length, FALSE, FALSE);
+ dissect_lsp_eis_neighbors_clv_inner(tvb, pinfo, tree, offset,
+ length, id_length, FALSE, FALSE);
}
@@ -1778,22 +1778,22 @@ dissect_lsp_l2_is_neighbors_clv(tvbuff_t *tvb, packet_info* pinfo, proto_tree *t
*/
static void
dissect_subclv_admin_group (tvbuff_t *tvb, proto_tree *tree, int offset) {
- proto_tree *ntree;
- guint32 clv_value;
- guint32 mask;
- int i;
+ proto_tree *ntree;
+ guint32 clv_value;
+ guint32 mask;
+ int i;
- ntree = proto_tree_add_subtree(tree, tvb, offset-2, 6,
+ ntree = proto_tree_add_subtree(tree, tvb, offset-2, 6,
ett_isis_lsp_subclv_admin_group, NULL, "Administrative group(s):");
- clv_value = tvb_get_ntohl(tvb, offset);
- mask = 1;
- for (i = 0 ; i < 32 ; i++) {
- if ( (clv_value & mask) != 0 ) {
- proto_tree_add_text (ntree, tvb, offset, 4, "group %d", i);
- }
- mask <<= 1;
- }
+ clv_value = tvb_get_ntohl(tvb, offset);
+ mask = 1;
+ for (i = 0 ; i < 32 ; i++) {
+ if ( (clv_value & mask) != 0 ) {
+ proto_tree_add_text (ntree, tvb, offset, 4, "group %d", i);
+ }
+ mask <<= 1;
+ }
}
/*
@@ -1815,11 +1815,11 @@ dissect_subclv_admin_group (tvbuff_t *tvb, proto_tree *tree, int offset) {
static void
dissect_subclv_max_bw(tvbuff_t *tvb, proto_tree *tree, int offset)
{
- gfloat bw;
+ gfloat bw;
- bw = tvb_get_ntohieee_float(tvb, offset)*8/1000000;
- proto_tree_add_float_format_value(tree, hf_isis_lsp_maximum_link_bandwidth, tvb, offset-2, 6,
- bw, "%.2f Mbps", bw);
+ bw = tvb_get_ntohieee_float(tvb, offset)*8/1000000;
+ proto_tree_add_float_format_value(tree, hf_isis_lsp_maximum_link_bandwidth, tvb, offset-2, 6,
+ bw, "%.2f Mbps", bw);
}
/*
@@ -1841,11 +1841,11 @@ dissect_subclv_max_bw(tvbuff_t *tvb, proto_tree *tree, int offset)
static void
dissect_subclv_rsv_bw(tvbuff_t *tvb, proto_tree *tree, int offset)
{
- gfloat bw;
+ gfloat bw;
- bw = tvb_get_ntohieee_float(tvb, offset)*8/1000000;
- proto_tree_add_float_format_value (tree, hf_isis_lsp_reservable_link_bandwidth, tvb, offset-2, 6,
- bw, "%.2f Mbps", bw );
+ bw = tvb_get_ntohieee_float(tvb, offset)*8/1000000;
+ proto_tree_add_float_format_value (tree, hf_isis_lsp_reservable_link_bandwidth, tvb, offset-2, 6,
+ bw, "%.2f Mbps", bw );
}
/*
@@ -1867,18 +1867,18 @@ dissect_subclv_rsv_bw(tvbuff_t *tvb, proto_tree *tree, int offset)
static void
dissect_subclv_unrsv_bw(tvbuff_t *tvb, proto_tree *tree, int offset)
{
- proto_tree *ntree;
- gfloat bw;
- int i;
+ proto_tree *ntree;
+ gfloat bw;
+ int i;
- ntree = proto_tree_add_subtree(tree, tvb, offset-2, 34,
+ ntree = proto_tree_add_subtree(tree, tvb, offset-2, 34,
ett_isis_lsp_subclv_unrsv_bw, NULL, "Unreserved bandwidth:");
- for (i = 0 ; i < 8 ; i++) {
- bw = tvb_get_ntohieee_float(tvb, offset+4*i)*8/1000000;
- proto_tree_add_float_format(ntree, hf_isis_lsp_unrsv_bw_priority_level, tvb, offset+4*i, 4,
- bw, "priority level %d: %.2f Mbps", i, bw );
- }
+ for (i = 0 ; i < 8 ; i++) {
+ bw = tvb_get_ntohieee_float(tvb, offset+4*i)*8/1000000;
+ proto_tree_add_float_format(ntree, hf_isis_lsp_unrsv_bw_priority_level, tvb, offset+4*i, 4,
+ bw, "priority level %d: %.2f Mbps", i, bw );
+ }
}
/*
@@ -1904,26 +1904,26 @@ static void
dissect_subclv_spb_link_metric(tvbuff_t *tvb, packet_info *pinfo,
proto_tree *tree, int offset, int subtype, int sublen)
{
- const int SUBLEN = 6;
-
- if (sublen != SUBLEN) {
- proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
- "Short SPB Link Metric sub-TLV (%d vs %d)", sublen, SUBLEN);
- return;
- }
- else {
- proto_tree *subtree;
- subtree = proto_tree_add_subtree_format( tree, tvb, offset-2, sublen+2, ett_isis_lsp_subclv_spb_link_metric, NULL,
- "SPB Link Metric: Type: 0x%02x (%d), Length: %d", subtype, subtype, sublen);
-
- proto_tree_add_item(subtree, hf_isis_lsp_spb_link_metric,
- tvb, offset, 3, ENC_BIG_ENDIAN);
-
- proto_tree_add_item(subtree, hf_isis_lsp_spb_port_count,
- tvb, offset+3, 1, ENC_BIG_ENDIAN);
-
- proto_tree_add_item(subtree, hf_isis_lsp_spb_port_id,
- tvb, offset+4, 2, ENC_BIG_ENDIAN);
+ const int SUBLEN = 6;
+
+ if (sublen != SUBLEN) {
+ proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
+ "Short SPB Link Metric sub-TLV (%d vs %d)", sublen, SUBLEN);
+ return;
+ }
+ else {
+ proto_tree *subtree;
+ subtree = proto_tree_add_subtree_format( tree, tvb, offset-2, sublen+2, ett_isis_lsp_subclv_spb_link_metric, NULL,
+ "SPB Link Metric: Type: 0x%02x (%d), Length: %d", subtype, subtype, sublen);
+
+ proto_tree_add_item(subtree, hf_isis_lsp_spb_link_metric,
+ tvb, offset, 3, ENC_BIG_ENDIAN);
+
+ proto_tree_add_item(subtree, hf_isis_lsp_spb_port_count,
+ tvb, offset+3, 1, ENC_BIG_ENDIAN);
+
+ proto_tree_add_item(subtree, hf_isis_lsp_spb_port_id,
+ tvb, offset+4, 2, ENC_BIG_ENDIAN);
}
}
@@ -1951,85 +1951,85 @@ dissect_subclv_spb_link_metric(tvbuff_t *tvb, packet_info *pinfo,
*/
static void
dissect_lsp_ext_is_reachability_clv(tvbuff_t *tvb, packet_info* pinfo, proto_tree *tree,
- int offset, int id_length _U_, int length)
+ int offset, int id_length _U_, int length)
{
- proto_item *ti;
- proto_tree *ntree = NULL;
- guint subclvs_len;
- guint len, i;
- guint clv_code, clv_len;
-
- while (length > 0) {
- ntree = proto_tree_add_subtree(tree, tvb, offset, -1,
+ proto_item *ti;
+ proto_tree *ntree = NULL;
+ guint subclvs_len;
+ guint len, i;
+ guint clv_code, clv_len;
+
+ while (length > 0) {
+ ntree = proto_tree_add_subtree(tree, tvb, offset, -1,
ett_isis_lsp_part_of_clv_ext_is_reachability, &ti, "IS Neighbor");
- proto_tree_add_item(ntree, hf_isis_lsp_ext_is_reachability_is_neighbor_id, tvb, offset, 7, ENC_NA);
- proto_item_append_text(ti, ": %s", tvb_print_system_id(tvb, offset, 7));
-
- proto_tree_add_item(ntree, hf_isis_lsp_ext_is_reachability_metric, tvb, offset+7, 3, ENC_BIG_ENDIAN);
-
- subclvs_len = tvb_get_guint8(tvb, offset+10);
- if (subclvs_len == 0) {
- proto_tree_add_text (ntree, tvb, offset+10, 1, "no sub-TLVs present");
- }
- else {
- i = 0;
- while (i < subclvs_len) {
- clv_code = tvb_get_guint8(tvb, offset+11+i);
- clv_len = tvb_get_guint8(tvb, offset+12+i);
- switch (clv_code) {
- case 3 :
- dissect_subclv_admin_group(tvb, ntree, offset+13+i);
- break;
- case 4 :
- proto_tree_add_item(ntree, hf_isis_lsp_ext_is_reachability_link_local_identifier, tvb, offset+13+i, 4, ENC_BIG_ENDIAN);
- proto_tree_add_item(ntree, hf_isis_lsp_ext_is_reachability_link_remote_identifier, tvb, offset+17+i, 4, ENC_BIG_ENDIAN);
- break;
- case 6 :
- proto_tree_add_item(ntree, hf_isis_lsp_ext_is_reachability_ipv4_interface_address, tvb, offset+11+i, 6, ENC_BIG_ENDIAN);
- break;
- case 8 :
- proto_tree_add_item(ntree, hf_isis_lsp_ext_is_reachability_ipv4_neighbor_address, tvb, offset+11+i, 6, ENC_BIG_ENDIAN);
- break;
- case 9 :
- dissect_subclv_max_bw (tvb, ntree, offset+13+i);
- break;
- case 10:
- dissect_subclv_rsv_bw (tvb, ntree, offset+13+i);
- break;
- case 11:
- dissect_subclv_unrsv_bw (tvb, ntree, offset+13+i);
- break;
- case 18:
- proto_tree_add_item(ntree, hf_isis_lsp_ext_is_reachability_traffic_engineering_default_metric, tvb, offset+11+i, 5, ENC_BIG_ENDIAN);
- break;
- case 29:
- dissect_subclv_spb_link_metric(tvb, pinfo, ntree,
- offset+13+i, clv_code, clv_len);
- break;
- case 250:
- case 251:
- case 252:
- case 253:
- case 254:
- proto_tree_add_text (ntree, tvb, offset+11+i, clv_len+2,
- "Unknown Cisco specific extensions: code %d, length %d",
- clv_code, clv_len );
- break;
- default :
- proto_tree_add_text (ntree, tvb, offset+11+i, clv_len+2,
- "Unknown sub-CLV: code %d, length %d", clv_code, clv_len );
- break;
- }
- i += clv_len + 2;
- }
- }
-
- len = 11 + subclvs_len;
- proto_item_set_len (ti, len);
- offset += len;
- length -= len;
- }
+ proto_tree_add_item(ntree, hf_isis_lsp_ext_is_reachability_is_neighbor_id, tvb, offset, 7, ENC_NA);
+ proto_item_append_text(ti, ": %s", tvb_print_system_id(tvb, offset, 7));
+
+ proto_tree_add_item(ntree, hf_isis_lsp_ext_is_reachability_metric, tvb, offset+7, 3, ENC_BIG_ENDIAN);
+
+ subclvs_len = tvb_get_guint8(tvb, offset+10);
+ if (subclvs_len == 0) {
+ proto_tree_add_text (ntree, tvb, offset+10, 1, "no sub-TLVs present");
+ }
+ else {
+ i = 0;
+ while (i < subclvs_len) {
+ clv_code = tvb_get_guint8(tvb, offset+11+i);
+ clv_len = tvb_get_guint8(tvb, offset+12+i);
+ switch (clv_code) {
+ case 3 :
+ dissect_subclv_admin_group(tvb, ntree, offset+13+i);
+ break;
+ case 4 :
+ proto_tree_add_item(ntree, hf_isis_lsp_ext_is_reachability_link_local_identifier, tvb, offset+13+i, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(ntree, hf_isis_lsp_ext_is_reachability_link_remote_identifier, tvb, offset+17+i, 4, ENC_BIG_ENDIAN);
+ break;
+ case 6 :
+ proto_tree_add_item(ntree, hf_isis_lsp_ext_is_reachability_ipv4_interface_address, tvb, offset+11+i, 6, ENC_BIG_ENDIAN);
+ break;
+ case 8 :
+ proto_tree_add_item(ntree, hf_isis_lsp_ext_is_reachability_ipv4_neighbor_address, tvb, offset+11+i, 6, ENC_BIG_ENDIAN);
+ break;
+ case 9 :
+ dissect_subclv_max_bw (tvb, ntree, offset+13+i);
+ break;
+ case 10:
+ dissect_subclv_rsv_bw (tvb, ntree, offset+13+i);
+ break;
+ case 11:
+ dissect_subclv_unrsv_bw (tvb, ntree, offset+13+i);
+ break;
+ case 18:
+ proto_tree_add_item(ntree, hf_isis_lsp_ext_is_reachability_traffic_engineering_default_metric, tvb, offset+11+i, 5, ENC_BIG_ENDIAN);
+ break;
+ case 29:
+ dissect_subclv_spb_link_metric(tvb, pinfo, ntree,
+ offset+13+i, clv_code, clv_len);
+ break;
+ case 250:
+ case 251:
+ case 252:
+ case 253:
+ case 254:
+ proto_tree_add_text (ntree, tvb, offset+11+i, clv_len+2,
+ "Unknown Cisco specific extensions: code %d, length %d",
+ clv_code, clv_len );
+ break;
+ default :
+ proto_tree_add_text (ntree, tvb, offset+11+i, clv_len+2,
+ "Unknown sub-CLV: code %d, length %d", clv_code, clv_len );
+ break;
+ }
+ i += clv_len + 2;
+ }
+ }
+
+ len = 11 + subclvs_len;
+ proto_item_set_len (ti, len);
+ offset += len;
+ length -= len;
+ }
}
/*
@@ -2052,13 +2052,13 @@ static void
dissect_lsp_mt_reachable_IPv4_prefx_clv(tvbuff_t *tvb, packet_info* pinfo,
proto_tree *tree, int offset, int id_length _U_, int length)
{
- if (length < 2) {
- proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
- "short lsp multi-topology reachable IPv4 prefixes(%d vs %d)", length, 2 );
- return;
- }
- dissect_lsp_mt_id(tvb, tree, offset);
- dissect_lsp_ext_ip_reachability_clv(tvb, pinfo, tree, offset+2, 0, length-2);
+ if (length < 2) {
+ proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
+ "short lsp multi-topology reachable IPv4 prefixes(%d vs %d)", length, 2 );
+ return;
+ }
+ dissect_lsp_mt_id(tvb, tree, offset);
+ dissect_lsp_ext_ip_reachability_clv(tvb, pinfo, tree, offset+2, 0, length-2);
}
/*
@@ -2081,13 +2081,13 @@ static void
dissect_lsp_mt_reachable_IPv6_prefx_clv(tvbuff_t *tvb, packet_info* pinfo,
proto_tree *tree, int offset, int id_length _U_, int length)
{
- if (length < 2) {
- proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
- "short lsp multi-topology reachable IPv6 prefixes(%d vs %d)", length, 2 );
- return;
- }
- dissect_lsp_mt_id(tvb, tree, offset);
- dissect_lsp_ipv6_reachability_clv(tvb, pinfo, tree, offset+2, 0, length-2);
+ if (length < 2) {
+ proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
+ "short lsp multi-topology reachable IPv6 prefixes(%d vs %d)", length, 2 );
+ return;
+ }
+ dissect_lsp_mt_id(tvb, tree, offset);
+ dissect_lsp_ipv6_reachability_clv(tvb, pinfo, tree, offset+2, 0, length-2);
}
@@ -2110,839 +2110,937 @@ dissect_lsp_mt_reachable_IPv6_prefx_clv(tvbuff_t *tvb, packet_info* pinfo,
static void
dissect_lsp_mt_is_reachability_clv(tvbuff_t *tvb, packet_info* pinfo, proto_tree *tree, int offset,
- int id_length _U_, int length)
+ int id_length _U_, int length)
{
- if (length < 2) {
- proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
- "short lsp reachability(%d vs %d)", length, 2 );
- return;
- }
-
- /*
- * the MT ID value dissection is used in other LSPs so we push it
- * in a function
- */
- dissect_lsp_mt_id(tvb, tree, offset);
- /*
- * fix here. No need to parse TLV 22 (with bugs) while it is
- * already done correctly!!
- */
- dissect_lsp_ext_is_reachability_clv(tvb, pinfo, tree, offset+2, 0, length-2);
+ if (length < 2) {
+ proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
+ "short lsp reachability(%d vs %d)", length, 2 );
+ return;
+ }
+
+ /*
+ * the MT ID value dissection is used in other LSPs so we push it
+ * in a function
+ */
+ dissect_lsp_mt_id(tvb, tree, offset);
+ /*
+ * fix here. No need to parse TLV 22 (with bugs) while it is
+ * already done correctly!!
+ */
+ dissect_lsp_ext_is_reachability_clv(tvb, pinfo, tree, offset+2, 0, length-2);
}
/*
* Name: dissect_lsp_partition_dis_clv()
*
* Description:
- * This CLV is used to indicate which system is the designated
- * IS for partition repair. This means just putting out the
- * "id_length"-octet IS.
+ * This CLV is used to indicate which system is the designated
+ * IS for partition repair. This means just putting out the
+ * "id_length"-octet IS.
*
* Input:
- * tvbuff_t * : tvbuffer for packet data
- * proto_tree * : protocol display tree to fill out. May be NULL
- * int : offset into packet data where we are.
- * int : length of IDs in packet.
- * int : length of clv we are decoding
+ * tvbuff_t * : tvbuffer for packet data
+ * proto_tree * : protocol display tree to fill out. May be NULL
+ * int : offset into packet data where we are.
+ * int : length of IDs in packet.
+ * int : length of clv we are decoding
*
* Output:
* void, but we will add to proto tree if !NULL.
*/
static void
dissect_lsp_partition_dis_clv(tvbuff_t *tvb, packet_info* pinfo, proto_tree *tree, int offset,
- int id_length, int length)
+ int id_length, int length)
{
- if ( length < id_length ) {
- proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
- "short lsp partition DIS(%d vs %d)", length, id_length );
- return;
- }
- /*
- * Gotta build a sub-tree for all our pieces
- */
- proto_tree_add_item( tree, hf_isis_lsp_partition_designated_l2_is, tvb, offset, id_length, ENC_NA);
-
- length -= id_length;
- offset += id_length;
- if ( length > 0 ) {
- proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_long_packet, tvb, offset, -1,
- "Long lsp partition DIS, %d left over", length );
- return;
- }
+ if ( length < id_length ) {
+ proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
+ "short lsp partition DIS(%d vs %d)", length, id_length );
+ return;
+ }
+ /*
+ * Gotta build a sub-tree for all our pieces
+ */
+ proto_tree_add_item( tree, hf_isis_lsp_partition_designated_l2_is, tvb, offset, id_length, ENC_NA);
+
+ length -= id_length;
+ offset += id_length;
+ if ( length > 0 ) {
+ proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_long_packet, tvb, offset, -1,
+ "Long lsp partition DIS, %d left over", length );
+ return;
+ }
}
/*
* Name: dissect_lsp_prefix_neighbors_clv()
*
* Description:
- * The prefix CLV describes what other (OSI) networks we can reach
- * and what their cost is. It is built from a metric block
- * (see dissect_metric) followed by n addresses.
+ * The prefix CLV describes what other (OSI) networks we can reach
+ * and what their cost is. It is built from a metric block
+ * (see dissect_metric) followed by n addresses.
*
* Input:
- * tvbuff_t * : tvbuffer for packet data
- * proto_tree * : protocol display tree to fill out. May be NULL
- * int : offset into packet data where we are.
- * int : length of IDs in packet.
- * int : length of clv we are decoding
+ * tvbuff_t * : tvbuffer for packet data
+ * proto_tree * : protocol display tree to fill out. May be NULL
+ * int : offset into packet data where we are.
+ * int : length of IDs in packet.
+ * int : length of clv we are decoding
*
* Output:
* void, but we will add to proto tree if !NULL.
*/
static void
dissect_lsp_prefix_neighbors_clv(tvbuff_t *tvb, packet_info* pinfo, proto_tree *tree, int offset,
- int id_length _U_, int length)
+ int id_length _U_, int length)
{
- char *sbuf;
- int mylen;
-
- if ( length < 4 ) {
- proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
- "Short lsp prefix neighbors (%d vs 4)", length );
- return;
- }
- if ( tree ) {
- dissect_metric (tvb, tree, offset,
- tvb_get_guint8(tvb, offset), "Default", TRUE );
- dissect_metric (tvb, tree, offset+1,
- tvb_get_guint8(tvb, offset+1), "Delay", FALSE );
- dissect_metric (tvb, tree, offset+2,
- tvb_get_guint8(tvb, offset+2), "Expense", FALSE );
- dissect_metric (tvb, tree, offset+3,
- tvb_get_guint8(tvb, offset+3), "Error", FALSE );
- }
- offset += 4;
- length -= 4;
- while ( length > 0 ) {
- mylen = tvb_get_guint8(tvb, offset);
- length--;
- if (length<=0) {
- proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
- "Zero payload space after length in prefix neighbor" );
- return;
- }
- if ( mylen > length) {
- proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_long_packet, tvb, offset, -1,
- "Integral length of prefix neighbor too long (%d vs %d)", mylen, length );
- return;
- }
-
- /*
- * Lets turn the area address into "standard" 0000.0000.etc
- * format string.
- */
- sbuf = print_area( tvb_get_ptr(tvb, offset+1, mylen), mylen );
- /* and spit it out */
- if ( tree ) {
- proto_tree_add_text ( tree, tvb, offset, mylen + 1,
- "Area address (%d): %s", mylen, sbuf );
- }
- offset += mylen + 1;
- length -= mylen; /* length already adjusted for len fld*/
- }
+ char *sbuf;
+ int mylen;
+
+ if ( length < 4 ) {
+ proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
+ "Short lsp prefix neighbors (%d vs 4)", length );
+ return;
+ }
+ if ( tree ) {
+ dissect_metric (tvb, tree, offset,
+ tvb_get_guint8(tvb, offset), "Default", TRUE );
+ dissect_metric (tvb, tree, offset+1,
+ tvb_get_guint8(tvb, offset+1), "Delay", FALSE );
+ dissect_metric (tvb, tree, offset+2,
+ tvb_get_guint8(tvb, offset+2), "Expense", FALSE );
+ dissect_metric (tvb, tree, offset+3,
+ tvb_get_guint8(tvb, offset+3), "Error", FALSE );
+ }
+ offset += 4;
+ length -= 4;
+ while ( length > 0 ) {
+ mylen = tvb_get_guint8(tvb, offset);
+ length--;
+ if (length<=0) {
+ proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
+ "Zero payload space after length in prefix neighbor" );
+ return;
+ }
+ if ( mylen > length) {
+ proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_long_packet, tvb, offset, -1,
+ "Integral length of prefix neighbor too long (%d vs %d)", mylen, length );
+ return;
+ }
+
+ /*
+ * Lets turn the area address into "standard" 0000.0000.etc
+ * format string.
+ */
+ sbuf = print_area( tvb_get_ptr(tvb, offset+1, mylen), mylen );
+ /* and spit it out */
+ if ( tree ) {
+ proto_tree_add_text ( tree, tvb, offset, mylen + 1,
+ "Area address (%d): %s", mylen, sbuf );
+ }
+ offset += mylen + 1;
+ length -= mylen; /* length already adjusted for len fld*/
+ }
}
static void isis_lsp_checkum_additional_info(tvbuff_t * tvb, packet_info * pinfo,
proto_item * it_cksum, int offset, gboolean is_cksum_correct)
{
- proto_tree * checksum_tree;
- proto_item * item;
-
- checksum_tree = proto_item_add_subtree(it_cksum, ett_isis_lsp_cksum);
- item = proto_tree_add_boolean(checksum_tree, hf_isis_lsp_checksum_good, tvb,
- offset, 2, is_cksum_correct);
- PROTO_ITEM_SET_GENERATED(item);
- item = proto_tree_add_boolean(checksum_tree, hf_isis_lsp_checksum_bad, tvb,
- offset, 2, !is_cksum_correct);
- PROTO_ITEM_SET_GENERATED(item);
- if (!is_cksum_correct) {
- expert_add_info(pinfo, item, &ie_isis_lsp_checksum_bad);
- col_append_str(pinfo->cinfo, COL_INFO, " [ISIS CHECKSUM INCORRECT]");
- }
+ proto_tree * checksum_tree;
+ proto_item * item;
+
+ checksum_tree = proto_item_add_subtree(it_cksum, ett_isis_lsp_cksum);
+ item = proto_tree_add_boolean(checksum_tree, hf_isis_lsp_checksum_good, tvb,
+ offset, 2, is_cksum_correct);
+ PROTO_ITEM_SET_GENERATED(item);
+ item = proto_tree_add_boolean(checksum_tree, hf_isis_lsp_checksum_bad, tvb,
+ offset, 2, !is_cksum_correct);
+ PROTO_ITEM_SET_GENERATED(item);
+ if (!is_cksum_correct) {
+ expert_add_info(pinfo, item, &ie_isis_lsp_checksum_bad);
+ col_append_str(pinfo->cinfo, COL_INFO, " [ISIS CHECKSUM INCORRECT]");
+ }
}
static const isis_clv_handle_t clv_l1_lsp_opts[] = {
- {
- ISIS_CLV_AREA_ADDRESS,
- "Area address(es)",
- &ett_isis_lsp_clv_area_addr,
- dissect_lsp_area_address_clv
- },
- {
- ISIS_CLV_IS_REACH,
- "IS Reachability",
- &ett_isis_lsp_clv_is_neighbors,
- dissect_lsp_l1_is_neighbors_clv
- },
- {
- ISIS_CLV_ES_NEIGHBORS,
- "ES Neighbor(s)",
- &ett_isis_lsp_clv_is_neighbors,
- dissect_lsp_l1_es_neighbors_clv
- },
- {
- ISIS_CLV_EXTD_IS_REACH,
- "Extended IS reachability",
- &ett_isis_lsp_clv_ext_is_reachability,
- dissect_lsp_ext_is_reachability_clv
- },
- {
- ISIS_CLV_INT_IP_REACH,
- "IP Internal reachability",
- &ett_isis_lsp_clv_ip_reachability,
- dissect_lsp_ip_reachability_clv
- },
- {
- ISIS_CLV_EXT_IP_REACH,
- "IP External reachability",
- &ett_isis_lsp_clv_ip_reachability,
- dissect_lsp_ip_reachability_clv
- },
- {
- ISIS_CLV_EXTD_IP_REACH,
- "Extended IP Reachability",
- &ett_isis_lsp_clv_ext_ip_reachability,
- dissect_lsp_ext_ip_reachability_clv
- },
- {
- ISIS_CLV_IP6_REACH,
- "IPv6 reachability",
- &ett_isis_lsp_clv_ipv6_reachability,
- dissect_lsp_ipv6_reachability_clv
- },
- {
- ISIS_CLV_PROTOCOLS_SUPPORTED,
- "Protocols supported",
- &ett_isis_lsp_clv_nlpid,
- dissect_lsp_nlpid_clv
- },
- {
- ISIS_CLV_HOSTNAME,
- "Hostname",
- &ett_isis_lsp_clv_hostname,
- dissect_lsp_hostname_clv
- },
- {
- ISIS_CLV_TE_ROUTER_ID,
- "Traffic Engineering Router ID",
- &ett_isis_lsp_clv_te_router_id,
- dissect_lsp_te_router_id_clv
- },
- {
- ISIS_CLV_IP_ADDR,
- "IP Interface address(es)",
- &ett_isis_lsp_clv_ipv4_int_addr,
- dissect_lsp_ip_int_addr_clv
- },
- {
- ISIS_CLV_IP6_ADDR,
- "IPv6 Interface address(es)",
- &ett_isis_lsp_clv_ipv6_int_addr,
- dissect_lsp_ipv6_int_addr_clv
- },
- {
- ISIS_CLV_MT_CAP,
- "MT-Capability",
- &ett_isis_lsp_clv_mt_cap,
- dissect_isis_lsp_clv_mt_cap
- },
- {
- ISIS_CLV_AUTHENTICATION,
- "Authentication",
- &ett_isis_lsp_clv_authentication,
- dissect_lsp_authentication_clv
- },
- {
- ISIS_CLV_IP_AUTHENTICATION,
- "IP Authentication",
- &ett_isis_lsp_clv_ip_authentication,
- dissect_lsp_ip_authentication_clv
- },
- {
- ISIS_CLV_MT_SUPPORTED,
- "Multi Topology supported",
- &ett_isis_lsp_clv_mt,
- dissect_lsp_mt_clv
- },
- {
- ISIS_CLV_MT_IS_REACH,
- "Multi Topology IS Reachability",
- &ett_isis_lsp_clv_mt_is,
- dissect_lsp_mt_is_reachability_clv
- },
- {
- ISIS_CLV_MT_IP_REACH,
- "Multi Topology Reachable IPv4 Prefixes",
- &ett_isis_lsp_clv_mt_reachable_IPv4_prefx,
- dissect_lsp_mt_reachable_IPv4_prefx_clv
- },
- {
- ISIS_CLV_MT_IP6_REACH,
- "Multi Topology Reachable IPv6 Prefixes",
- &ett_isis_lsp_clv_mt_reachable_IPv6_prefx,
- dissect_lsp_mt_reachable_IPv6_prefx_clv
- },
- {
- ISIS_CLV_RT_CAPABLE,
- "Router Capability",
- &ett_isis_lsp_clv_rt_capable_IPv4_prefx,
- dissect_isis_rt_capable_clv
- },
- {
- ISIS_GRP_ADDR,
- "GROUP ADDRESS TLV",
- &ett_isis_lsp_clv_grp_address_IPv4_prefx,
- dissect_isis_grp_address_clv
- },
- {
- 0,
- "",
- NULL,
- NULL
- }
+ {
+ ISIS_CLV_AREA_ADDRESS,
+ "Area address(es)",
+ &ett_isis_lsp_clv_area_addr,
+ dissect_lsp_area_address_clv
+ },
+ {
+ ISIS_CLV_IS_REACH,
+ "IS Reachability",
+ &ett_isis_lsp_clv_is_neighbors,
+ dissect_lsp_l1_is_neighbors_clv
+ },
+ {
+ ISIS_CLV_ES_NEIGHBORS,
+ "ES Neighbor(s)",
+ &ett_isis_lsp_clv_is_neighbors,
+ dissect_lsp_l1_es_neighbors_clv
+ },
+ {
+ ISIS_CLV_EXTD_IS_REACH,
+ "Extended IS reachability",
+ &ett_isis_lsp_clv_ext_is_reachability,
+ dissect_lsp_ext_is_reachability_clv
+ },
+ {
+ ISIS_CLV_INT_IP_REACH,
+ "IP Internal reachability",
+ &ett_isis_lsp_clv_ip_reachability,
+ dissect_lsp_ip_reachability_clv
+ },
+ {
+ ISIS_CLV_EXT_IP_REACH,
+ "IP External reachability",
+ &ett_isis_lsp_clv_ip_reachability,
+ dissect_lsp_ip_reachability_clv
+ },
+ {
+ ISIS_CLV_EXTD_IP_REACH,
+ "Extended IP Reachability",
+ &ett_isis_lsp_clv_ext_ip_reachability,
+ dissect_lsp_ext_ip_reachability_clv
+ },
+ {
+ ISIS_CLV_IP6_REACH,
+ "IPv6 reachability",
+ &ett_isis_lsp_clv_ipv6_reachability,
+ dissect_lsp_ipv6_reachability_clv
+ },
+ {
+ ISIS_CLV_PROTOCOLS_SUPPORTED,
+ "Protocols supported",
+ &ett_isis_lsp_clv_nlpid,
+ dissect_lsp_nlpid_clv
+ },
+ {
+ ISIS_CLV_HOSTNAME,
+ "Hostname",
+ &ett_isis_lsp_clv_hostname,
+ dissect_lsp_hostname_clv
+ },
+ {
+ ISIS_CLV_TE_ROUTER_ID,
+ "Traffic Engineering Router ID",
+ &ett_isis_lsp_clv_te_router_id,
+ dissect_lsp_te_router_id_clv
+ },
+ {
+ ISIS_CLV_IP_ADDR,
+ "IP Interface address(es)",
+ &ett_isis_lsp_clv_ipv4_int_addr,
+ dissect_lsp_ip_int_addr_clv
+ },
+ {
+ ISIS_CLV_IP6_ADDR,
+ "IPv6 Interface address(es)",
+ &ett_isis_lsp_clv_ipv6_int_addr,
+ dissect_lsp_ipv6_int_addr_clv
+ },
+ {
+ ISIS_CLV_MT_CAP,
+ "MT-Capability",
+ &ett_isis_lsp_clv_mt_cap,
+ dissect_isis_lsp_clv_mt_cap
+ },
+ {
+ ISIS_CLV_AUTHENTICATION,
+ "Authentication",
+ &ett_isis_lsp_clv_authentication,
+ dissect_lsp_authentication_clv
+ },
+ {
+ ISIS_CLV_IP_AUTHENTICATION,
+ "IP Authentication",
+ &ett_isis_lsp_clv_ip_authentication,
+ dissect_lsp_ip_authentication_clv
+ },
+ {
+ ISIS_CLV_MT_SUPPORTED,
+ "Multi Topology supported",
+ &ett_isis_lsp_clv_mt,
+ dissect_lsp_mt_clv
+ },
+ {
+ ISIS_CLV_MT_IS_REACH,
+ "Multi Topology IS Reachability",
+ &ett_isis_lsp_clv_mt_is,
+ dissect_lsp_mt_is_reachability_clv
+ },
+ {
+ ISIS_CLV_MT_IP_REACH,
+ "Multi Topology Reachable IPv4 Prefixes",
+ &ett_isis_lsp_clv_mt_reachable_IPv4_prefx,
+ dissect_lsp_mt_reachable_IPv4_prefx_clv
+ },
+ {
+ ISIS_CLV_MT_IP6_REACH,
+ "Multi Topology Reachable IPv6 Prefixes",
+ &ett_isis_lsp_clv_mt_reachable_IPv6_prefx,
+ dissect_lsp_mt_reachable_IPv6_prefx_clv
+ },
+ {
+ ISIS_CLV_RT_CAPABLE,
+ "Router Capability",
+ &ett_isis_lsp_clv_rt_capable_IPv4_prefx,
+ dissect_isis_rt_capable_clv
+ },
+ {
+ ISIS_GRP_ADDR,
+ "GROUP ADDRESS TLV",
+ &ett_isis_lsp_clv_grp_address_IPv4_prefx,
+ dissect_isis_grp_address_clv
+ },
+ {
+ 0,
+ "",
+ NULL,
+ NULL
+ }
};
static const isis_clv_handle_t clv_l2_lsp_opts[] = {
- {
- ISIS_CLV_AREA_ADDRESS,
- "Area address(es)",
- &ett_isis_lsp_clv_area_addr,
- dissect_lsp_area_address_clv
- },
- {
- ISIS_CLV_IS_REACH,
- "IS Reachability",
- &ett_isis_lsp_clv_is_neighbors,
- dissect_lsp_l2_is_neighbors_clv
- },
- {
- ISIS_CLV_EXTD_IS_REACH,
- "Extended IS reachability",
- &ett_isis_lsp_clv_ext_is_reachability,
- dissect_lsp_ext_is_reachability_clv
- },
- {
- ISIS_CLV_PARTITION_DIS,
- "Partition Designated Level 2 IS",
- &ett_isis_lsp_clv_partition_dis,
- dissect_lsp_partition_dis_clv
- },
- {
- ISIS_CLV_PREFIX_NEIGHBORS,
- "Prefix neighbors",
- &ett_isis_lsp_clv_prefix_neighbors,
- dissect_lsp_prefix_neighbors_clv
- },
- {
- ISIS_CLV_INT_IP_REACH,
- "IP Internal reachability",
- &ett_isis_lsp_clv_ip_reachability,
- dissect_lsp_ip_reachability_clv
- },
- {
- ISIS_CLV_EXT_IP_REACH,
- "IP External reachability",
- &ett_isis_lsp_clv_ip_reachability,
- dissect_lsp_ip_reachability_clv
- },
- {
- ISIS_CLV_PROTOCOLS_SUPPORTED,
- "Protocols supported",
- &ett_isis_lsp_clv_nlpid,
- dissect_lsp_nlpid_clv
- },
- {
- ISIS_CLV_HOSTNAME,
- "Hostname",
- &ett_isis_lsp_clv_hostname,
- dissect_lsp_hostname_clv
- },
- {
- ISIS_CLV_TE_ROUTER_ID,
- "Traffic Engineering Router ID",
- &ett_isis_lsp_clv_te_router_id,
- dissect_lsp_te_router_id_clv
- },
- {
- ISIS_CLV_EXTD_IP_REACH,
- "Extended IP Reachability",
- &ett_isis_lsp_clv_ext_ip_reachability,
- dissect_lsp_ext_ip_reachability_clv
- },
- {
- ISIS_CLV_IP6_REACH,
- "IPv6 reachability",
- &ett_isis_lsp_clv_ipv6_reachability,
- dissect_lsp_ipv6_reachability_clv
- },
- {
- ISIS_CLV_IP_ADDR,
- "IP Interface address(es)",
- &ett_isis_lsp_clv_ipv4_int_addr,
- dissect_lsp_ip_int_addr_clv
- },
- {
- ISIS_CLV_IP6_ADDR,
- "IPv6 Interface address(es)",
- &ett_isis_lsp_clv_ipv6_int_addr,
- dissect_lsp_ipv6_int_addr_clv
- },
- {
- ISIS_CLV_MT_CAP,
- "MT-Capability",
- &ett_isis_lsp_clv_mt_cap,
- dissect_isis_lsp_clv_mt_cap
- },
- {
- ISIS_CLV_AUTHENTICATION,
- "Authentication",
- &ett_isis_lsp_clv_authentication,
- dissect_lsp_authentication_clv
- },
- {
- ISIS_CLV_IP_AUTHENTICATION,
- "IP Authentication",
- &ett_isis_lsp_clv_ip_authentication,
- dissect_lsp_ip_authentication_clv
- },
- {
- ISIS_CLV_MT_SUPPORTED,
- "Multi Topology",
- &ett_isis_lsp_clv_mt,
- dissect_lsp_mt_clv
- },
- {
- ISIS_CLV_MT_IS_REACH,
- "Multi Topology IS Reachability",
- &ett_isis_lsp_clv_mt_is,
- dissect_lsp_mt_is_reachability_clv
- },
- {
- ISIS_CLV_MT_IP_REACH,
- "Multi Topology Reachable IPv4 Prefixes",
- &ett_isis_lsp_clv_mt_reachable_IPv4_prefx,
- dissect_lsp_mt_reachable_IPv4_prefx_clv
- },
- {
- ISIS_CLV_MT_IP6_REACH,
- "Multi Topology Reachable IPv6 Prefixes",
- &ett_isis_lsp_clv_mt_reachable_IPv6_prefx,
- dissect_lsp_mt_reachable_IPv6_prefx_clv
- },
- {
- 0,
- "",
- NULL,
- NULL
- }
+ {
+ ISIS_CLV_AREA_ADDRESS,
+ "Area address(es)",
+ &ett_isis_lsp_clv_area_addr,
+ dissect_lsp_area_address_clv
+ },
+ {
+ ISIS_CLV_IS_REACH,
+ "IS Reachability",
+ &ett_isis_lsp_clv_is_neighbors,
+ dissect_lsp_l2_is_neighbors_clv
+ },
+ {
+ ISIS_CLV_EXTD_IS_REACH,
+ "Extended IS reachability",
+ &ett_isis_lsp_clv_ext_is_reachability,
+ dissect_lsp_ext_is_reachability_clv
+ },
+ {
+ ISIS_CLV_PARTITION_DIS,
+ "Partition Designated Level 2 IS",
+ &ett_isis_lsp_clv_partition_dis,
+ dissect_lsp_partition_dis_clv
+ },
+ {
+ ISIS_CLV_PREFIX_NEIGHBORS,
+ "Prefix neighbors",
+ &ett_isis_lsp_clv_prefix_neighbors,
+ dissect_lsp_prefix_neighbors_clv
+ },
+ {
+ ISIS_CLV_INT_IP_REACH,
+ "IP Internal reachability",
+ &ett_isis_lsp_clv_ip_reachability,
+ dissect_lsp_ip_reachability_clv
+ },
+ {
+ ISIS_CLV_EXT_IP_REACH,
+ "IP External reachability",
+ &ett_isis_lsp_clv_ip_reachability,
+ dissect_lsp_ip_reachability_clv
+ },
+ {
+ ISIS_CLV_PROTOCOLS_SUPPORTED,
+ "Protocols supported",
+ &ett_isis_lsp_clv_nlpid,
+ dissect_lsp_nlpid_clv
+ },
+ {
+ ISIS_CLV_HOSTNAME,
+ "Hostname",
+ &ett_isis_lsp_clv_hostname,
+ dissect_lsp_hostname_clv
+ },
+ {
+ ISIS_CLV_TE_ROUTER_ID,
+ "Traffic Engineering Router ID",
+ &ett_isis_lsp_clv_te_router_id,
+ dissect_lsp_te_router_id_clv
+ },
+ {
+ ISIS_CLV_EXTD_IP_REACH,
+ "Extended IP Reachability",
+ &ett_isis_lsp_clv_ext_ip_reachability,
+ dissect_lsp_ext_ip_reachability_clv
+ },
+ {
+ ISIS_CLV_IP6_REACH,
+ "IPv6 reachability",
+ &ett_isis_lsp_clv_ipv6_reachability,
+ dissect_lsp_ipv6_reachability_clv
+ },
+ {
+ ISIS_CLV_IP_ADDR,
+ "IP Interface address(es)",
+ &ett_isis_lsp_clv_ipv4_int_addr,
+ dissect_lsp_ip_int_addr_clv
+ },
+ {
+ ISIS_CLV_IP6_ADDR,
+ "IPv6 Interface address(es)",
+ &ett_isis_lsp_clv_ipv6_int_addr,
+ dissect_lsp_ipv6_int_addr_clv
+ },
+ {
+ ISIS_CLV_MT_CAP,
+ "MT-Capability",
+ &ett_isis_lsp_clv_mt_cap,
+ dissect_isis_lsp_clv_mt_cap
+ },
+ {
+ ISIS_CLV_AUTHENTICATION,
+ "Authentication",
+ &ett_isis_lsp_clv_authentication,
+ dissect_lsp_authentication_clv
+ },
+ {
+ ISIS_CLV_IP_AUTHENTICATION,
+ "IP Authentication",
+ &ett_isis_lsp_clv_ip_authentication,
+ dissect_lsp_ip_authentication_clv
+ },
+ {
+ ISIS_CLV_MT_SUPPORTED,
+ "Multi Topology",
+ &ett_isis_lsp_clv_mt,
+ dissect_lsp_mt_clv
+ },
+ {
+ ISIS_CLV_MT_IS_REACH,
+ "Multi Topology IS Reachability",
+ &ett_isis_lsp_clv_mt_is,
+ dissect_lsp_mt_is_reachability_clv
+ },
+ {
+ ISIS_CLV_MT_IP_REACH,
+ "Multi Topology Reachable IPv4 Prefixes",
+ &ett_isis_lsp_clv_mt_reachable_IPv4_prefx,
+ dissect_lsp_mt_reachable_IPv4_prefx_clv
+ },
+ {
+ ISIS_CLV_MT_IP6_REACH,
+ "Multi Topology Reachable IPv6 Prefixes",
+ &ett_isis_lsp_clv_mt_reachable_IPv6_prefx,
+ dissect_lsp_mt_reachable_IPv6_prefx_clv
+ },
+ {
+ 0,
+ "",
+ NULL,
+ NULL
+ }
};
/*
* Name: isis_dissect_isis_lsp()
*
* Description:
- * Print out the LSP part of the main header and then call the CLV
- * de-mangler with the right list of valid CLVs.
+ * Print out the LSP part of the main header and then call the CLV
+ * de-mangler with the right list of valid CLVs.
*
* Input:
- * tvbuff_t * : tvbuffer for packet data
- * proto_tree * : protocol display tree to add to. May be NULL.
- * int offset : our offset into packet data.
- * int : LSP type, a la packet-isis.h ISIS_TYPE_* values
- * int : header length of packet.
- * int : length of IDs in packet.
+ * tvbuff_t * : tvbuffer for packet data
+ * proto_tree * : protocol display tree to add to. May be NULL.
+ * int offset : our offset into packet data.
+ * int : LSP type, a la packet-isis.h ISIS_TYPE_* values
+ * int : header length of packet.
+ * int : length of IDs in packet.
*
* Output:
* void, but we will add to proto tree if !NULL.
*/
static void
dissect_isis_lsp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
- const isis_clv_handle_t *opts, int header_length, int id_length)
+ const isis_clv_handle_t *opts, int header_length, int id_length)
{
- proto_item *ti, *ta;
- proto_tree *lsp_tree, *info_tree, *att_tree;
- guint16 pdu_length, lifetime, checksum, cacl_checksum=0;
- guint8 lsp_info;
- int len, offset_checksum;
- proto_item *it_cksum;
- char* system_id;
-
- col_set_str(pinfo->cinfo, COL_PROTOCOL, "ISIS LSP");
-
- ti = proto_tree_add_item(tree, proto_isis_lsp, tvb, offset, -1, ENC_NA);
- lsp_tree = proto_item_add_subtree(ti, ett_isis_lsp);
-
- pdu_length = tvb_get_ntohs(tvb, offset);
- proto_tree_add_uint(lsp_tree, hf_isis_lsp_pdu_length, tvb,
- offset, 2, pdu_length);
- offset += 2;
-
- proto_tree_add_item(lsp_tree, hf_isis_lsp_remaining_life,
- tvb, offset, 2, ENC_BIG_ENDIAN);
-
- lifetime = tvb_get_ntohs(tvb, offset);
- offset += 2;
- offset_checksum = offset;
-
- proto_tree_add_item(lsp_tree, hf_isis_lsp_lsp_id, tvb, offset, id_length + 2, ENC_NA);
- system_id = tvb_print_system_id( tvb, offset, id_length+2 );
- col_append_fstr(pinfo->cinfo, COL_INFO, ", LSP-ID: %s", system_id);
-
- offset += (id_length + 2);
-
- proto_tree_add_item(lsp_tree, hf_isis_lsp_sequence_number,
- tvb, offset, 4, ENC_BIG_ENDIAN);
-
- 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;
-
- checksum = lifetime ? tvb_get_ntohs(tvb, offset) : 0;
- switch (check_and_get_checksum(tvb, offset_checksum, pdu_length-12, checksum, offset, &cacl_checksum)) {
- case NO_CKSUM :
- checksum = tvb_get_ntohs(tvb, offset);
- proto_tree_add_uint_format_value(lsp_tree, hf_isis_lsp_checksum, tvb, offset, 2, checksum,
- "0x%04x [unused]", checksum);
- break;
- case DATA_MISSING :
- proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_long_packet, tvb, offset, -1,
- "Packet length %d went beyond packet",
- tvb_length_remaining(tvb, offset_checksum));
- break;
- case CKSUM_NOT_OK :
- it_cksum = proto_tree_add_uint_format_value(lsp_tree, hf_isis_lsp_checksum, tvb, offset, 2, checksum,
- "0x%04x [incorrect, should be 0x%04x]",
- checksum, cacl_checksum);
- isis_lsp_checkum_additional_info(tvb, pinfo, it_cksum, offset, FALSE);
- break;
- case CKSUM_OK :
- it_cksum = proto_tree_add_uint_format_value(lsp_tree, hf_isis_lsp_checksum, tvb, offset, 2, checksum,
- "0x%04x [correct]", checksum);
- isis_lsp_checkum_additional_info(tvb, pinfo, it_cksum, offset, TRUE);
- break;
- }
- offset += 2;
-
- if (tree) {
- /*
- * P | ATT | HIPPITY | IS TYPE description.
- */
- lsp_info = tvb_get_guint8(tvb, offset);
- info_tree = proto_tree_add_subtree_format(lsp_tree, tvb, offset, 1, ett_isis_lsp_info, NULL,
- "Type block(0x%02x): Partition Repair:%d, Attached bits:%d, Overload bit:%d, IS type:%d",
- lsp_info,
- ISIS_LSP_PARTITION(lsp_info),
- ISIS_LSP_ATT(lsp_info),
- ISIS_LSP_HIPPITY(lsp_info),
- ISIS_LSP_IS_TYPE(lsp_info)
- );
-
- proto_tree_add_boolean(info_tree, hf_isis_lsp_p, tvb, offset, 1, lsp_info);
- ta = proto_tree_add_uint(info_tree, hf_isis_lsp_att, tvb, offset, 1, lsp_info);
- att_tree = proto_item_add_subtree(ta, ett_isis_lsp_att);
- proto_tree_add_item(att_tree, hf_isis_lsp_error_metric, tvb, offset, 1, ENC_NA);
- proto_tree_add_item(att_tree, hf_isis_lsp_expense_metric, tvb, offset, 1, ENC_NA);
- proto_tree_add_item(att_tree, hf_isis_lsp_delay_metric, tvb, offset, 1, ENC_NA);
- proto_tree_add_item(att_tree, hf_isis_lsp_default_metric, tvb, offset, 1, ENC_NA);
- proto_tree_add_boolean(info_tree, hf_isis_lsp_hippity, tvb, offset, 1, lsp_info);
- proto_tree_add_uint(info_tree, hf_isis_lsp_is_type, tvb, offset, 1, lsp_info);
- }
- offset += 1;
-
- len = pdu_length - header_length;
- if (len < 0) {
- proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_long_packet, tvb, offset, -1,
- "packet header length %d went beyond packet",
- header_length );
- return;
- }
- /*
- * Now, we need to decode our CLVs. We need to pass in
- * our list of valid ones!
- */
- isis_dissect_clvs(tvb, pinfo, lsp_tree, offset,
- opts, &ei_isis_lsp_short_packet, len, id_length, ett_isis_lsp_clv_unknown );
+ proto_item *ti, *ta;
+ proto_tree *lsp_tree, *info_tree, *att_tree;
+ guint16 pdu_length, lifetime, checksum, cacl_checksum=0;
+ guint8 lsp_info;
+ int len, offset_checksum;
+ proto_item *it_cksum;
+ char* system_id;
+
+ col_set_str(pinfo->cinfo, COL_PROTOCOL, "ISIS LSP");
+
+ ti = proto_tree_add_item(tree, proto_isis_lsp, tvb, offset, -1, ENC_NA);
+ lsp_tree = proto_item_add_subtree(ti, ett_isis_lsp);
+
+ pdu_length = tvb_get_ntohs(tvb, offset);
+ proto_tree_add_uint(lsp_tree, hf_isis_lsp_pdu_length, tvb,
+ offset, 2, pdu_length);
+ offset += 2;
+
+ proto_tree_add_item(lsp_tree, hf_isis_lsp_remaining_life,
+ tvb, offset, 2, ENC_BIG_ENDIAN);
+
+ lifetime = tvb_get_ntohs(tvb, offset);
+ offset += 2;
+ offset_checksum = offset;
+
+ proto_tree_add_item(lsp_tree, hf_isis_lsp_lsp_id, tvb, offset, id_length + 2, ENC_NA);
+ system_id = tvb_print_system_id( tvb, offset, id_length+2 );
+ col_append_fstr(pinfo->cinfo, COL_INFO, ", LSP-ID: %s", system_id);
+
+ offset += (id_length + 2);
+
+ proto_tree_add_item(lsp_tree, hf_isis_lsp_sequence_number,
+ tvb, offset, 4, ENC_BIG_ENDIAN);
+
+ 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;
+
+ checksum = lifetime ? tvb_get_ntohs(tvb, offset) : 0;
+ switch (check_and_get_checksum(tvb, offset_checksum, pdu_length-12, checksum, offset, &cacl_checksum)) {
+ case NO_CKSUM :
+ checksum = tvb_get_ntohs(tvb, offset);
+ proto_tree_add_uint_format_value(lsp_tree, hf_isis_lsp_checksum, tvb, offset, 2, checksum,
+ "0x%04x [unused]", checksum);
+ break;
+ case DATA_MISSING :
+ proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_long_packet, tvb, offset, -1,
+ "Packet length %d went beyond packet",
+ tvb_length_remaining(tvb, offset_checksum));
+ break;
+ case CKSUM_NOT_OK :
+ it_cksum = proto_tree_add_uint_format_value(lsp_tree, hf_isis_lsp_checksum, tvb, offset, 2, checksum,
+ "0x%04x [incorrect, should be 0x%04x]",
+ checksum, cacl_checksum);
+ isis_lsp_checkum_additional_info(tvb, pinfo, it_cksum, offset, FALSE);
+ break;
+ case CKSUM_OK :
+ it_cksum = proto_tree_add_uint_format_value(lsp_tree, hf_isis_lsp_checksum, tvb, offset, 2, checksum,
+ "0x%04x [correct]", checksum);
+ isis_lsp_checkum_additional_info(tvb, pinfo, it_cksum, offset, TRUE);
+ break;
+ }
+ offset += 2;
+
+ if (tree) {
+ /*
+ * P | ATT | HIPPITY | IS TYPE description.
+ */
+ lsp_info = tvb_get_guint8(tvb, offset);
+ info_tree = proto_tree_add_subtree_format(lsp_tree, tvb, offset, 1, ett_isis_lsp_info, NULL,
+ "Type block(0x%02x): Partition Repair:%d, Attached bits:%d, Overload bit:%d, IS type:%d",
+ lsp_info,
+ ISIS_LSP_PARTITION(lsp_info),
+ ISIS_LSP_ATT(lsp_info),
+ ISIS_LSP_HIPPITY(lsp_info),
+ ISIS_LSP_IS_TYPE(lsp_info)
+ );
+
+ proto_tree_add_boolean(info_tree, hf_isis_lsp_p, tvb, offset, 1, lsp_info);
+ ta = proto_tree_add_uint(info_tree, hf_isis_lsp_att, tvb, offset, 1, lsp_info);
+ att_tree = proto_item_add_subtree(ta, ett_isis_lsp_att);
+ proto_tree_add_item(att_tree, hf_isis_lsp_error_metric, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(att_tree, hf_isis_lsp_expense_metric, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(att_tree, hf_isis_lsp_delay_metric, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(att_tree, hf_isis_lsp_default_metric, tvb, offset, 1, ENC_NA);
+ proto_tree_add_boolean(info_tree, hf_isis_lsp_hippity, tvb, offset, 1, lsp_info);
+ proto_tree_add_uint(info_tree, hf_isis_lsp_is_type, tvb, offset, 1, lsp_info);
+ }
+ offset += 1;
+
+ len = pdu_length - header_length;
+ if (len < 0) {
+ proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_long_packet, tvb, offset, -1,
+ "packet header length %d went beyond packet",
+ header_length );
+ return;
+ }
+ /*
+ * Now, we need to decode our CLVs. We need to pass in
+ * our list of valid ones!
+ */
+ isis_dissect_clvs(tvb, pinfo, lsp_tree, offset,
+ opts, &ei_isis_lsp_short_packet, len, id_length, ett_isis_lsp_clv_unknown );
}
static int
dissect_isis_l1_lsp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
{
- isis_data_t* isis = (isis_data_t*)data;
- dissect_isis_lsp(tvb, pinfo, tree, 0,
- clv_l1_lsp_opts, isis->header_length, isis->system_id_len);
- return tvb_length(tvb);
+ isis_data_t* isis = (isis_data_t*)data;
+ dissect_isis_lsp(tvb, pinfo, tree, 0,
+ clv_l1_lsp_opts, isis->header_length, isis->system_id_len);
+ return tvb_length(tvb);
}
static int
dissect_isis_l2_lsp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
{
- isis_data_t* isis = (isis_data_t*)data;
- dissect_isis_lsp(tvb, pinfo, tree, 0,
- clv_l2_lsp_opts, isis->header_length, isis->system_id_len);
- return tvb_length(tvb);
+ isis_data_t* isis = (isis_data_t*)data;
+ dissect_isis_lsp(tvb, pinfo, tree, 0,
+ clv_l2_lsp_opts, isis->header_length, isis->system_id_len);
+ return tvb_length(tvb);
}
void
proto_register_isis_lsp(void)
{
- static hf_register_info hf[] = {
- { &hf_isis_lsp_pdu_length,
- { "PDU length", "isis.lsp.pdu_length", FT_UINT16,
- BASE_DEC, NULL, 0x0, NULL, HFILL }},
-
- { &hf_isis_lsp_remaining_life,
- { "Remaining lifetime", "isis.lsp.remaining_life", FT_UINT16,
- BASE_DEC, NULL, 0x0, NULL, HFILL }},
-
- { &hf_isis_lsp_lsp_id,
- { "LSP-ID", "isis.lsp.lsp_id", FT_SYSTEM_ID,
- BASE_NONE, NULL, 0x0, NULL, HFILL }},
-
- { &hf_isis_lsp_hostname,
- { "Hostname", "isis.lsp.hostname", FT_STRING,
- BASE_NONE, NULL, 0x0, NULL, HFILL }},
-
- { &hf_isis_lsp_sequence_number,
- { "Sequence number", "isis.lsp.sequence_number",
- FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
-
- { &hf_isis_lsp_checksum,
- { "Checksum", "isis.lsp.checksum",FT_UINT16,
- BASE_HEX, NULL, 0x0, NULL, HFILL }},
-
- { &hf_isis_lsp_checksum_good,
- { "Good Checksum", "isis.lsp.checksum_good", FT_BOOLEAN, BASE_NONE,
- NULL, 0x0, "Good IS-IS LSP Checksum", HFILL }},
-
- { &hf_isis_lsp_checksum_bad,
- { "Bad Checksum", "isis.lsp.checksum_bad", FT_BOOLEAN, BASE_NONE,
- NULL, 0x0, "Bad IS-IS LSP Checksum", HFILL }},
-
- { &hf_isis_lsp_clv_ipv4_int_addr,
- { "IPv4 interface address", "isis.lsp.clv_ipv4_int_addr", FT_IPv4,
- BASE_NONE, NULL, 0x0, NULL, HFILL }},
-
- { &hf_isis_lsp_clv_ipv6_int_addr,
- { "IPv6 interface address", "isis.lsp.clv_ipv6_int_addr", FT_IPv6,
- BASE_NONE, NULL, 0x0, NULL, HFILL }},
-
- { &hf_isis_lsp_clv_te_router_id,
- { "Traffic Engineering Router ID", "isis.lsp.clv_te_router_id", FT_IPv4,
- BASE_NONE, NULL, 0x0, NULL, HFILL }},
-
- { &hf_isis_lsp_clv_mt,
- { "MT-ID", "isis.lsp.clv_mt",
- FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
-
- { &hf_isis_lsp_p,
- { "Partition Repair", "isis.lsp.partition_repair", FT_BOOLEAN, 8,
- TFS(&tfs_supported_not_supported), ISIS_LSP_PARTITION_MASK,
- "If set, this router supports the optional Partition Repair function", HFILL }},
-
- { &hf_isis_lsp_att,
- { "Attachment", "isis.lsp.att", FT_UINT8, BASE_DEC,
- NULL, ISIS_LSP_ATT_MASK,
- NULL, HFILL }},
-
- { &hf_isis_lsp_hippity,
- { "Overload bit", "isis.lsp.overload", FT_BOOLEAN, 8,
- TFS(&tfs_set_notset), ISIS_LSP_HIPPITY_MASK,
- "If set, this router will not be used by any decision process to calculate routes", HFILL }},
-
- { &hf_isis_lsp_root_id,
- { "Root Bridge ID", "isis.lsp.root.id", FT_UINT64, BASE_HEX,
- NULL, 0x0, NULL, HFILL }},
-
- { &hf_isis_lsp_is_type,
- { "Type of Intermediate System", "isis.lsp.is_type", FT_UINT8, BASE_DEC,
- VALS(isis_lsp_istype_vals), ISIS_LSP_IS_TYPE_MASK,
- NULL, HFILL }},
-
- { &hf_isis_lsp_spb_link_metric,
- { "SPB Link Metric", "isis.lsp.spb.link_metric",
- FT_UINT24, BASE_HEX_DEC, NULL, 0, NULL, HFILL }},
-
- { &hf_isis_lsp_spb_port_count,
- { "Number of Ports", "isis.lsp.spb.port_count",
- FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
-
- { &hf_isis_lsp_spb_port_id,
- { "Port Id", "isis.lsp.spb.port_id",
- FT_UINT16, BASE_HEX_DEC, NULL, 0, NULL, HFILL }},
-
- { &hf_isis_lsp_spb_sr_bit,
- { "SR Bit", "isis.lsp.spb.sr_bit",
- FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
-
- { &hf_isis_lsp_spb_spvid,
- { "SPVID", "isis.lsp.spb.spvid",
- FT_UINT16, BASE_HEX_DEC, NULL, 0, NULL, HFILL }},
+ static hf_register_info hf[] = {
+ { &hf_isis_lsp_pdu_length,
+ { "PDU length", "isis.lsp.pdu_length", FT_UINT16,
+ BASE_DEC, NULL, 0x0, NULL, HFILL }},
+
+ { &hf_isis_lsp_remaining_life,
+ { "Remaining lifetime", "isis.lsp.remaining_life", FT_UINT16,
+ BASE_DEC, NULL, 0x0, NULL, HFILL }},
+
+ { &hf_isis_lsp_lsp_id,
+ { "LSP-ID", "isis.lsp.lsp_id", FT_SYSTEM_ID,
+ BASE_NONE, NULL, 0x0, NULL, HFILL }},
+
+ { &hf_isis_lsp_hostname,
+ { "Hostname", "isis.lsp.hostname", FT_STRING,
+ BASE_NONE, NULL, 0x0, NULL, HFILL }},
+
+ { &hf_isis_lsp_sequence_number,
+ { "Sequence number", "isis.lsp.sequence_number",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
+
+ { &hf_isis_lsp_checksum,
+ { "Checksum", "isis.lsp.checksum",FT_UINT16,
+ BASE_HEX, NULL, 0x0, NULL, HFILL }},
+
+ { &hf_isis_lsp_checksum_good,
+ { "Good Checksum", "isis.lsp.checksum_good", FT_BOOLEAN, BASE_NONE,
+ NULL, 0x0, "Good IS-IS LSP Checksum", HFILL }},
+
+ { &hf_isis_lsp_checksum_bad,
+ { "Bad Checksum", "isis.lsp.checksum_bad", FT_BOOLEAN, BASE_NONE,
+ NULL, 0x0, "Bad IS-IS LSP Checksum", HFILL }},
+
+ { &hf_isis_lsp_clv_ipv4_int_addr,
+ { "IPv4 interface address", "isis.lsp.clv_ipv4_int_addr", FT_IPv4,
+ BASE_NONE, NULL, 0x0, NULL, HFILL }},
+
+ { &hf_isis_lsp_clv_ipv6_int_addr,
+ { "IPv6 interface address", "isis.lsp.clv_ipv6_int_addr", FT_IPv6,
+ BASE_NONE, NULL, 0x0, NULL, HFILL }},
+
+ { &hf_isis_lsp_clv_te_router_id,
+ { "Traffic Engineering Router ID", "isis.lsp.clv_te_router_id", FT_IPv4,
+ BASE_NONE, NULL, 0x0, NULL, HFILL }},
+
+ { &hf_isis_lsp_clv_mt,
+ { "MT-ID", "isis.lsp.clv_mt",
+ FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
+
+ { &hf_isis_lsp_p,
+ { "Partition Repair", "isis.lsp.partition_repair", FT_BOOLEAN, 8,
+ TFS(&tfs_supported_not_supported), ISIS_LSP_PARTITION_MASK,
+ "If set, this router supports the optional Partition Repair function", HFILL }},
+
+ { &hf_isis_lsp_att,
+ { "Attachment", "isis.lsp.att", FT_UINT8, BASE_DEC,
+ NULL, ISIS_LSP_ATT_MASK,
+ NULL, HFILL }},
+
+ { &hf_isis_lsp_hippity,
+ { "Overload bit", "isis.lsp.overload", FT_BOOLEAN, 8,
+ TFS(&tfs_set_notset), ISIS_LSP_HIPPITY_MASK,
+ "If set, this router will not be used by any decision process to calculate routes", HFILL }},
+
+ { &hf_isis_lsp_root_id,
+ { "Root Bridge ID", "isis.lsp.root.id", FT_UINT64, BASE_HEX,
+ NULL, 0x0, NULL, HFILL }},
+
+ { &hf_isis_lsp_is_type,
+ { "Type of Intermediate System", "isis.lsp.is_type", FT_UINT8, BASE_DEC,
+ VALS(isis_lsp_istype_vals), ISIS_LSP_IS_TYPE_MASK,
+ NULL, HFILL }},
+
+ { &hf_isis_lsp_spb_link_metric,
+ { "SPB Link Metric", "isis.lsp.spb.link_metric",
+ FT_UINT24, BASE_HEX_DEC, NULL, 0, NULL, HFILL }},
+
+ { &hf_isis_lsp_spb_port_count,
+ { "Number of Ports", "isis.lsp.spb.port_count",
+ FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+
+ { &hf_isis_lsp_spb_port_id,
+ { "Port Id", "isis.lsp.spb.port_id",
+ FT_UINT16, BASE_HEX_DEC, NULL, 0, NULL, HFILL }},
+
+ { &hf_isis_lsp_spb_sr_bit,
+ { "SR Bit", "isis.lsp.spb.sr_bit",
+ FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+
+ { &hf_isis_lsp_spb_spvid,
+ { "SPVID", "isis.lsp.spb.spvid",
+ FT_UINT16, BASE_HEX_DEC, NULL, 0, NULL, HFILL }},
/* Generated from convert_proto_tree_add_text.pl */
- { &hf_isis_lsp_mt_id_reserved, { "Reserved", "isis.lsp.reserved", FT_UINT16, BASE_HEX, NULL, ISIS_LSP_MT_MSHIP_RES_MASK, NULL, HFILL }},
- { &hf_isis_lsp_mt_id, { "MT ID", "isis.lsp.mt_id", FT_UINT16, BASE_DEC, NULL, ISIS_LSP_MT_MSHIP_ID_MASK, NULL, HFILL }},
- { &hf_isis_lsp_ip_reachability_ipv4_prefix, { "IPv4 prefix", "isis.lsp.ip_reachability.ipv4_prefix", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_ip_reachability_default_metric, { "Default Metric", "isis.lsp.ip_reachability.default_metric", FT_UINT8, BASE_DEC, NULL, 0x3F, NULL, HFILL }},
- { &hf_isis_lsp_ip_reachability_delay_metric, { "Delay Metric", "isis.lsp.ip_reachability.delay_metric", FT_UINT8, BASE_DEC, NULL, 0x3F, NULL, HFILL }},
- { &hf_isis_lsp_ip_reachability_expense_metric, { "Expense Metric", "isis.lsp.ip_reachability.expense_metric", FT_UINT8, BASE_DEC, NULL, 0x3F, NULL, HFILL }},
- { &hf_isis_lsp_ip_reachability_error_metric, { "Error Metric", "isis.lsp.ip_reachability.error_metric", FT_UINT8, BASE_DEC, NULL, 0x3F, NULL, HFILL }},
- { &hf_isis_lsp_32_bit_administrative_tag, { "32-Bit Administrative tag", "isis.lsp.32_bit_administrative_tag", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_64_bit_administrative_tag, { "64-Bit Administrative tag", "isis.lsp.64_bit_administrative_tag", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_ext_ip_reachability_ipv4_prefix, { "IPv4 prefix", "isis.lsp.ext_ip_reachability.ipv4_prefix", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_ext_ip_reachability_metric, { "Metric", "isis.lsp.ext_ip_reachability.metric", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_ext_ip_reachability_distribution, { "Distribution", "isis.lsp.ext_ip_reachability.distribution", FT_BOOLEAN, 8, TFS(&tfs_up_down), 0x80, NULL, HFILL }},
- { &hf_isis_lsp_grp_address_length, { "Length", "isis.lsp.grp_address.length", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_grp_address_topology_id, { "Topology ID", "isis.lsp.grp_address.topology_id", FT_UINT16, BASE_DEC, NULL, 0x0fff, NULL, HFILL }},
- { &hf_isis_lsp_grp_address_vlan_id, { "VLAN ID", "isis.lsp.grp_address.vlan_id", FT_UINT16, BASE_DEC, NULL, 0x0fff, NULL, HFILL }},
- { &hf_isis_lsp_grp_address_number_of_records, { "Number of records", "isis.lsp.grp_address.number_of_records", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_grp_address_number_of_sources, { "Number of sources", "isis.lsp.grp_address.number_of_sources", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_grp_address_group_address, { "Group Address", "isis.lsp.grp_address.group_address", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_grp_address_source_address, { "Source Address", "isis.lsp.grp_address.source_address", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_rt_capable_trill_length, { "Length", "isis.lsp.rt_capable.trill.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_rt_capable_trill_maximum_version, { "Maximum version", "isis.lsp.rt_capable.trill.maximum_version", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_rt_capable_trees_length, { "Length", "isis.lsp.rt_capable.trees.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_rt_capable_trees_nof_trees_to_compute, { "Nof. trees to compute", "isis.lsp.rt_capable.trees.nof_trees_to_compute", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_rt_capable_trees_maximum_nof_trees_to_compute, { "Maximum nof. trees to compute", "isis.lsp.rt_capable.trees.maximum_nof_trees_to_compute", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_rt_capable_trees_nof_trees_to_use, { "Nof. trees to use", "isis.lsp.rt_capable.trees.nof_trees_to_use", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_rt_capable_tree_root_id_length, { "Length", "isis.lsp.rt_capable.tree_root_id.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_rt_capable_tree_root_id_starting_tree_no, { "Starting tree no", "isis.lsp.rt_capable.tree_root_id.starting_tree_no", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_rt_capable_tree_root_id_nickname, { "Nickname", "isis.lsp.rt_capable.tree_root_id.nickname", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_rt_capable_nickname_length, { "Length", "isis.lsp.rt_capable.nickname.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_rt_capable_nickname_nickname_priority, { "Nickname priority", "isis.lsp.rt_capable.nickname.nickname_priority", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_rt_capable_nickname_tree_root_priority, { "Tree root priority", "isis.lsp.rt_capable.nickname.tree_root_priority", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_rt_capable_nickname_nickname, { "Nickname", "isis.lsp.rt_capable.nickname.nickname", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_rt_capable_interested_vlans_length, { "Length", "isis.lsp.rt_capable.interested_vlans.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_rt_capable_interested_vlans_nickname, { "Nickname", "isis.lsp.rt_capable.interested_vlans.nickname", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_rt_capable_interested_vlans_multicast_ipv4, { "IPv4 multicast router", "isis.lsp.rt_capable.interested_vlans.multicast_ipv4", FT_BOOLEAN, 16, TFS(&tfs_set_notset), 0x8000, NULL, HFILL }},
- { &hf_isis_lsp_rt_capable_interested_vlans_multicast_ipv6, { "IPv6 multicast router", "isis.lsp.rt_capable.interested_vlans.multicast_ipv6", FT_BOOLEAN, 16, TFS(&tfs_set_notset), 0x4000, NULL, HFILL }},
- { &hf_isis_lsp_rt_capable_interested_vlans_vlan_start_id, { "Vlan start id", "isis.lsp.rt_capable.interested_vlans.vlan_start_id", FT_UINT16, BASE_HEX, NULL, 0x0fff, NULL, HFILL }},
- { &hf_isis_lsp_rt_capable_interested_vlans_vlan_end_id, { "Vlan end id", "isis.lsp.rt_capable.interested_vlans.vlan_end_id", FT_UINT16, BASE_HEX, NULL, 0x0fff, NULL, HFILL }},
- { &hf_isis_lsp_rt_capable_interested_vlans_afs_lost_counter, { "Appointed forward state lost counter", "isis.lsp.rt_capable.interested_vlans.afs_lost_counter", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_rt_capable_tree_used_id_length, { "Length", "isis.lsp.rt_capable.tree_used_id.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_rt_capable_tree_used_id_starting_tree_no, { "Starting tree no", "isis.lsp.rt_capable.tree_used_id.starting_tree_no", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_rt_capable_tree_used_id_nickname, { "Nickname", "isis.lsp.rt_capable.tree_used_id.nickname", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_rt_capable_vlan_group_length, { "Length", "isis.lsp.rt_capable.vlan_group.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_rt_capable_vlan_group_primary_vlan_id, { "Primary vlan id", "isis.lsp.rt_capable.vlan_group.primary_vlan_id", FT_UINT16, BASE_DEC, NULL, 0x0fff, NULL, HFILL }},
- { &hf_isis_lsp_rt_capable_vlan_group_secondary_vlan_id, { "Secondary vlan id", "isis.lsp.rt_capable.vlan_group.secondary_vlan_id", FT_UINT16, BASE_DEC, NULL, 0x0fff, NULL, HFILL }},
- { &hf_isis_lsp_rt_capable_vlan_group_nth_secondary_vlan_id, { "%dth secondary vlan id", "isis.lsp.rt_capable.vlan_group.nth_secondary_vlan_id", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_ipv6_reachability_ipv6_prefix, { "IPv6 prefix", "isis.lsp.ipv6_reachability.ipv6_prefix", FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_ipv6_reachability_metric, { "Metric", "isis.lsp.ipv6_reachability.metric", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_ipv6_reachability_distribution, { "Distribution", "isis.lsp.ipv6_reachability.distribution", FT_BOOLEAN, 8, TFS(&tfs_up_down), 0x80, NULL, HFILL }},
- { &hf_isis_lsp_ipv6_reachability_distribution_internal, { "Distribution", "isis.lsp.ipv6_reachability.distribution_internal", FT_BOOLEAN, 8, TFS(&tfs_internal_external), 0x40, NULL, HFILL }},
- { &hf_isis_lsp_ipv6_reachability_reserved_bits, { "Reserved bits", "isis.lsp.ipv6_reachability.reserved_bits", FT_UINT8, BASE_HEX, NULL, 0x1F, NULL, HFILL }},
- { &hf_isis_lsp_mt_cap_spb_instance_cist_root_identifier, { "CIST Root Identifier", "isis.lsp.mt_cap_spb_instance.cist_root_identifier", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_mt_cap_spb_instance_cist_external_root_path_cost, { "CIST External Root Path Cost", "isis.lsp.mt_cap_spb_instance.cist_external_root_path_cost", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_mt_cap_spb_instance_bridge_priority, { "Bridge Priority", "isis.lsp.mt_cap_spb_instance.bridge_priority", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_mt_cap_spb_instance_v, { "V", "isis.lsp.mt_cap_spb_instance.v", FT_BOOLEAN, 32, NULL, 0x00100000, NULL, HFILL }},
- { &hf_isis_lsp_mt_cap_spb_instance_number_of_trees, { "Number of Trees", "isis.lsp.mt_cap_spb_instance.number_of_trees", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_mt_cap_spbm_service_identifier_b_mac, { "B-MAC", "isis.lsp.mt_cap_spbm_service_identifier.b_mac", FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_mt_cap_spbm_service_identifier_base_vid, { "Base-VID", "isis.lsp.mt_cap_spbm_service_identifier.base_vid", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_mt_cap_mtid, { "MTID", "isis.lsp.mt_cap.mtid", FT_UINT16, BASE_HEX, NULL, 0xfff, NULL, HFILL }},
- { &hf_isis_lsp_eis_neighbors_reserved, { "Reserved", "isis.lsp.eis_neighbors_clv_inner.reserved", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_eis_neighbors_es_neighbor_id, { "ES Neighbor ID", "isis.lsp.eis_neighbors.es_neighbor_id", FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_eis_neighbors_is_neighbor_id, { "IS Neighbor", "isis.lsp.eis_neighbors.is_neighbor", FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_eis_neighbors_default_metric, { "Default Metric", "isis.lsp.eis_neighbors.default_metric", FT_UINT8, BASE_DEC, NULL, 0x3F, NULL, HFILL }},
- { &hf_isis_lsp_eis_neighbors_delay_metric, { "Delay Metric", "isis.lsp.eis_neighbors.delay_metric", FT_UINT8, BASE_DEC, NULL, 0x3F, NULL, HFILL }},
- { &hf_isis_lsp_eis_neighbors_expense_metric, { "Expense Metric", "isis.lsp.eis_neighbors.expense_metric", FT_UINT8, BASE_DEC, NULL, 0x3F, NULL, HFILL }},
- { &hf_isis_lsp_eis_neighbors_error_metric, { "Error Metric", "isis.lsp.eis_neighbors.error_metric", FT_UINT8, BASE_DEC, NULL, 0x3F, NULL, HFILL }},
- { &hf_isis_lsp_maximum_link_bandwidth, { "Maximum link bandwidth", "isis.lsp.maximum_link_bandwidth", FT_FLOAT, BASE_NONE, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_reservable_link_bandwidth, { "Reservable link bandwidth", "isis.lsp.reservable_link_bandwidth", FT_FLOAT, BASE_NONE, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_ext_is_reachability_is_neighbor_id, { "IS neighbor ID", "isis.lsp.ext_is_reachability.is_neighbor_id", FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_ext_is_reachability_metric, { "Metric", "isis.lsp.ext_is_reachability.metric", FT_UINT24, BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_ext_is_reachability_link_local_identifier, { "Link Local Identifier", "isis.lsp.ext_is_reachability.link_local_identifier", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_ext_is_reachability_link_remote_identifier, { "Link Remote Identifier", "isis.lsp.ext_is_reachability.link_remote_identifier", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_ext_is_reachability_ipv4_interface_address, { "IPv4 interface address", "isis.lsp.ext_is_reachability.ipv4_interface_address", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_ext_is_reachability_ipv4_neighbor_address, { "IPv4 neighbor address", "isis.lsp.ext_is_reachability.ipv4_neighbor_address", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_ext_is_reachability_traffic_engineering_default_metric, { "Traffic engineering default metric", "isis.lsp.ext_is_reachability.traffic_engineering_default_metric", FT_UINT24, BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_partition_designated_l2_is, { "Partition designated L2 IS", "isis.lsp.partition_designated_l2_is", FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_error_metric, { "Error metric", "isis.lsp.error_metric", FT_BOOLEAN, 8, TFS(&tfs_set_notset), 0x08, NULL, HFILL }},
- { &hf_isis_lsp_expense_metric, { "Expense metric", "isis.lsp.expense_metric", FT_BOOLEAN, 8, TFS(&tfs_set_notset), 0x04, NULL, HFILL }},
- { &hf_isis_lsp_delay_metric, { "Delay metric", "isis.lsp.delay_metric", FT_BOOLEAN, 8, TFS(&tfs_set_notset), 0x02, NULL, HFILL }},
- { &hf_isis_lsp_default_metric, { "Default metric", "isis.lsp.default_metric", FT_BOOLEAN, 8, TFS(&tfs_set_notset), 0x01, NULL, HFILL }},
- { &hf_isis_lsp_ip_reachability_default_metric_ie, { "Default Metric IE", "isis.lsp.ip_reachability.default_metric_ie", FT_BOOLEAN, 8, TFS(&tfs_external_internal), 0x40, NULL, HFILL }},
- { &hf_isis_lsp_ip_reachability_delay_metric_support, { "Delay Metric", "isis.lsp.ip_reachability.delay_metric_support", FT_BOOLEAN, 8, TFS(&tfs_notsupported_supported), 0x80, NULL, HFILL }},
- { &hf_isis_lsp_ip_reachability_expense_metric_support, { "Expense Metric", "isis.lsp.ip_reachability.expense_metric_support", FT_BOOLEAN, 8, TFS(&tfs_notsupported_supported), 0x80, NULL, HFILL }},
- { &hf_isis_lsp_ip_reachability_error_metric_support, { "Error Metric", "isis.lsp.ip_reachability.error_metric_support", FT_BOOLEAN, 8, TFS(&tfs_notsupported_supported), 0x80, NULL, HFILL }},
- { &hf_isis_lsp_mt_cap_spsourceid, { "SPSourceId", "isis.lsp.mt_cap.spsourceid", FT_UINT32, BASE_HEX_DEC, NULL, 0xfffff, NULL, HFILL }},
- { &hf_isis_lsp_mt_cap_overload, { "Overload", "isis.lsp.overload", FT_BOOLEAN, 16, NULL, 0x8000, NULL, HFILL }},
- { &hf_isis_lsp_eis_neighbors_default_metric_ie, { "Default Metric", "isis.lsp.eis_neighbors.default_metric_ie", FT_BOOLEAN, 8, TFS(&tfs_external_internal), 0x40, NULL, HFILL }},
- { &hf_isis_lsp_eis_neighbors_delay_metric_supported, { "Delay Metric", "isis.lsp.eis_neighbors_delay_metric.supported", FT_BOOLEAN, 8, TFS(&tfs_notsupported_supported), 0x80, NULL, HFILL }},
- { &hf_isis_lsp_eis_neighbors_expense_metric_supported, { "Expense Metric", "isis.lsp.eis_neighbors.expense_metric_supported", FT_BOOLEAN, 8, TFS(&tfs_notsupported_supported), 0x80, NULL, HFILL }},
- { &hf_isis_lsp_eis_neighbors_error_metric_supported, { "Error Metric", "isis.lsp.eis_neighbors.error_metric_supported", FT_BOOLEAN, 8, TFS(&tfs_notsupported_supported), 0x80, NULL, HFILL }},
- { &hf_isis_lsp_unrsv_bw_priority_level, { "priority level", "isis.lsp.unrsv_bw.priority_level", FT_FLOAT, BASE_NONE, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_lsp_ip_reachability_distribution, { "Distribution", "isis.lsp.ip_reachability.distribution", FT_BOOLEAN, 8, TFS(&tfs_up_down), 0x80, NULL, HFILL }},
- { &hf_isis_lsp_ip_reachability_delay_metric_ie, { "Delay Metric", "isis.lsp.ip_reachability.delay_metric_ie", FT_BOOLEAN, 8, TFS(&tfs_external_internal), 0x40, NULL, HFILL }},
- { &hf_isis_lsp_ip_reachability_expense_metric_ie, { "Expense Metric", "isis.lsp.ip_reachability.expense_metric_ie", FT_BOOLEAN, 8, TFS(&tfs_external_internal), 0x40, NULL, HFILL }},
- { &hf_isis_lsp_ip_reachability_error_metric_ie, { "Error Metric", "isis.lsp.ip_reachability.error_metric_ie", FT_BOOLEAN, 8, TFS(&tfs_external_internal), 0x40, NULL, HFILL }},
- { &hf_isis_lsp_eis_neighbors_delay_metric_ie, { "Delay Metric", "isis.lsp.eis_neighbors.delay_metric_ie", FT_BOOLEAN, 8, TFS(&tfs_external_internal), 0x40, NULL, HFILL }},
- { &hf_isis_lsp_eis_neighbors_expense_metric_ie, { "Expense Metric", "isis.lsp.eis_neighbors.expense_metric_ie", FT_BOOLEAN, 8, TFS(&tfs_external_internal), 0x40, NULL, HFILL }},
- { &hf_isis_lsp_eis_neighbors_error_metric_ie, { "Error Metric", "isis.lsp.eis_neighbors.error_metric_ie", FT_BOOLEAN, 8, TFS(&tfs_external_internal), 0x40, NULL, HFILL }},
- };
- static gint *ett[] = {
- &ett_isis_lsp,
- &ett_isis_lsp_info,
- &ett_isis_lsp_att,
- &ett_isis_lsp_cksum,
- &ett_isis_lsp_clv_area_addr,
- &ett_isis_lsp_clv_is_neighbors,
- &ett_isis_lsp_clv_ext_is_reachability, /* CLV 22 */
- &ett_isis_lsp_part_of_clv_ext_is_reachability,
- &ett_isis_lsp_subclv_admin_group,
- &ett_isis_lsp_subclv_unrsv_bw,
- &ett_isis_lsp_subclv_spb_link_metric,
- &ett_isis_lsp_clv_unknown,
- &ett_isis_lsp_clv_partition_dis,
- &ett_isis_lsp_clv_prefix_neighbors,
- &ett_isis_lsp_clv_authentication,
- &ett_isis_lsp_clv_ip_authentication,
- &ett_isis_lsp_clv_nlpid,
- &ett_isis_lsp_clv_hostname,
- &ett_isis_lsp_clv_ipv4_int_addr,
- &ett_isis_lsp_clv_ipv6_int_addr, /* CLV 232 */
- &ett_isis_lsp_clv_mt_cap,
- &ett_isis_lsp_clv_mt_cap_spb_instance,
- &ett_isis_lsp_clv_mt_cap_spbm_service_identifier,
- &ett_isis_lsp_clv_te_router_id,
- &ett_isis_lsp_clv_ip_reachability,
- &ett_isis_lsp_clv_ip_reach_subclv,
- &ett_isis_lsp_clv_ext_ip_reachability, /* CLV 135 */
- &ett_isis_lsp_part_of_clv_ext_ip_reachability,
- &ett_isis_lsp_clv_ipv6_reachability, /* CLV 236 */
- &ett_isis_lsp_part_of_clv_ipv6_reachability,
- &ett_isis_lsp_clv_mt,
- &ett_isis_lsp_clv_mt_is,
- &ett_isis_lsp_part_of_clv_mt_is,
- &ett_isis_lsp_clv_rt_capable_IPv4_prefx,
- &ett_isis_lsp_clv_grp_address_IPv4_prefx, /*CLV 142*/
- &ett_isis_lsp_clv_mt_reachable_IPv4_prefx,
- &ett_isis_lsp_clv_mt_reachable_IPv6_prefx,
- &ett_isis_lsp_clv_mt_cap_spbv_mac_address
- };
-
- static ei_register_info ei[] = {
- { &ie_isis_lsp_checksum_bad, { "isis.lsp.checksum_bad.expert", PI_CHECKSUM, PI_ERROR, "Bad checksum", EXPFILL }},
- { &ei_isis_lsp_short_packet, { "isis.lsp.short_packet", PI_MALFORMED, PI_ERROR, "Short packet", EXPFILL }},
- { &ei_isis_lsp_long_packet, { "isis.lsp.long_packet", PI_MALFORMED, PI_ERROR, "Long packet", EXPFILL }},
- { &ei_isis_lsp_subtlv, { "isis.lsp.subtlv.unknown", PI_PROTOCOL, PI_WARN, "Unknown SubTLV", EXPFILL }},
- { &ei_isis_lsp_authentication, { "isis.lsp.authentication.unknown", PI_PROTOCOL, PI_WARN, "Unknown authentication type", EXPFILL }},
- };
-
- expert_module_t* expert_isis_lsp;
-
- /* Register the protocol name and description */
- proto_isis_lsp = proto_register_protocol(PROTO_STRING_LSP, "ISIS LSP", "isis.lsp");
-
- proto_register_field_array(proto_isis_lsp, hf, array_length(hf));
- proto_register_subtree_array(ett, array_length(ett));
- expert_isis_lsp = expert_register_protocol(proto_isis_lsp);
- expert_register_field_array(expert_isis_lsp, ei, array_length(ei));
+ { &hf_isis_lsp_mt_id_reserved,
+ { "Reserved", "isis.lsp.reserved", FT_UINT16, BASE_HEX, NULL, ISIS_LSP_MT_MSHIP_RES_MASK, NULL, HFILL }},
+ { &hf_isis_lsp_mt_id,
+ { "MT ID", "isis.lsp.mt_id", FT_UINT16, BASE_DEC, NULL, ISIS_LSP_MT_MSHIP_ID_MASK, NULL, HFILL }},
+ { &hf_isis_lsp_ip_reachability_ipv4_prefix,
+ { "IPv4 prefix", "isis.lsp.ip_reachability.ipv4_prefix", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_ip_reachability_default_metric,
+ { "Default Metric", "isis.lsp.ip_reachability.default_metric", FT_UINT8, BASE_DEC, NULL, 0x3F, NULL, HFILL }},
+ { &hf_isis_lsp_ip_reachability_delay_metric,
+ { "Delay Metric", "isis.lsp.ip_reachability.delay_metric", FT_UINT8, BASE_DEC, NULL, 0x3F, NULL, HFILL }},
+ { &hf_isis_lsp_ip_reachability_expense_metric,
+ { "Expense Metric", "isis.lsp.ip_reachability.expense_metric", FT_UINT8, BASE_DEC, NULL, 0x3F, NULL, HFILL }},
+ { &hf_isis_lsp_ip_reachability_error_metric,
+ { "Error Metric", "isis.lsp.ip_reachability.error_metric", FT_UINT8, BASE_DEC, NULL, 0x3F, NULL, HFILL }},
+ { &hf_isis_lsp_32_bit_administrative_tag,
+ { "32-Bit Administrative tag", "isis.lsp.32_bit_administrative_tag", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_64_bit_administrative_tag,
+ { "64-Bit Administrative tag", "isis.lsp.64_bit_administrative_tag", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_ext_ip_reachability_ipv4_prefix,
+ { "IPv4 prefix", "isis.lsp.ext_ip_reachability.ipv4_prefix", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_ext_ip_reachability_metric,
+ { "Metric", "isis.lsp.ext_ip_reachability.metric", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_ext_ip_reachability_distribution,
+ { "Distribution", "isis.lsp.ext_ip_reachability.distribution", FT_BOOLEAN, 8, TFS(&tfs_up_down), 0x80, NULL, HFILL }},
+ { &hf_isis_lsp_grp_address_length,
+ { "Length", "isis.lsp.grp_address.length", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_grp_address_topology_id,
+ { "Topology ID", "isis.lsp.grp_address.topology_id", FT_UINT16, BASE_DEC, NULL, 0x0fff, NULL, HFILL }},
+ { &hf_isis_lsp_grp_address_vlan_id,
+ { "VLAN ID", "isis.lsp.grp_address.vlan_id", FT_UINT16, BASE_DEC, NULL, 0x0fff, NULL, HFILL }},
+ { &hf_isis_lsp_grp_address_number_of_records,
+ { "Number of records", "isis.lsp.grp_address.number_of_records", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_grp_address_number_of_sources,
+ { "Number of sources", "isis.lsp.grp_address.number_of_sources", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_grp_address_group_address,
+ { "Group Address", "isis.lsp.grp_address.group_address", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_grp_address_source_address,
+ { "Source Address", "isis.lsp.grp_address.source_address", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_rt_capable_trill_length,
+ { "Length", "isis.lsp.rt_capable.trill.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_rt_capable_trill_maximum_version,
+ { "Maximum version", "isis.lsp.rt_capable.trill.maximum_version", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_rt_capable_trees_length,
+ { "Length", "isis.lsp.rt_capable.trees.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_rt_capable_trees_nof_trees_to_compute,
+ { "Nof. trees to compute", "isis.lsp.rt_capable.trees.nof_trees_to_compute", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_rt_capable_trees_maximum_nof_trees_to_compute,
+ { "Maximum nof. trees to compute", "isis.lsp.rt_capable.trees.maximum_nof_trees_to_compute", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_rt_capable_trees_nof_trees_to_use,
+ { "Nof. trees to use", "isis.lsp.rt_capable.trees.nof_trees_to_use", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_rt_capable_tree_root_id_length,
+ { "Length", "isis.lsp.rt_capable.tree_root_id.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_rt_capable_tree_root_id_starting_tree_no,
+ { "Starting tree no", "isis.lsp.rt_capable.tree_root_id.starting_tree_no", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_rt_capable_tree_root_id_nickname,
+ { "Nickname", "isis.lsp.rt_capable.tree_root_id.nickname", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_rt_capable_nickname_length,
+ { "Length", "isis.lsp.rt_capable.nickname.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_rt_capable_nickname_nickname_priority,
+ { "Nickname priority", "isis.lsp.rt_capable.nickname.nickname_priority", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_rt_capable_nickname_tree_root_priority,
+ { "Tree root priority", "isis.lsp.rt_capable.nickname.tree_root_priority", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_rt_capable_nickname_nickname,
+ { "Nickname", "isis.lsp.rt_capable.nickname.nickname", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_rt_capable_interested_vlans_length,
+ { "Length", "isis.lsp.rt_capable.interested_vlans.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_rt_capable_interested_vlans_nickname,
+ { "Nickname", "isis.lsp.rt_capable.interested_vlans.nickname", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_rt_capable_interested_vlans_multicast_ipv4,
+ { "IPv4 multicast router", "isis.lsp.rt_capable.interested_vlans.multicast_ipv4", FT_BOOLEAN, 16, TFS(&tfs_set_notset), 0x8000, NULL, HFILL }},
+ { &hf_isis_lsp_rt_capable_interested_vlans_multicast_ipv6,
+ { "IPv6 multicast router", "isis.lsp.rt_capable.interested_vlans.multicast_ipv6", FT_BOOLEAN, 16, TFS(&tfs_set_notset), 0x4000, NULL, HFILL }},
+ { &hf_isis_lsp_rt_capable_interested_vlans_vlan_start_id,
+ { "Vlan start id", "isis.lsp.rt_capable.interested_vlans.vlan_start_id", FT_UINT16, BASE_HEX, NULL, 0x0fff, NULL, HFILL }},
+ { &hf_isis_lsp_rt_capable_interested_vlans_vlan_end_id,
+ { "Vlan end id", "isis.lsp.rt_capable.interested_vlans.vlan_end_id", FT_UINT16, BASE_HEX, NULL, 0x0fff, NULL, HFILL }},
+ { &hf_isis_lsp_rt_capable_interested_vlans_afs_lost_counter,
+ { "Appointed forward state lost counter", "isis.lsp.rt_capable.interested_vlans.afs_lost_counter", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_rt_capable_tree_used_id_length,
+ { "Length", "isis.lsp.rt_capable.tree_used_id.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_rt_capable_tree_used_id_starting_tree_no,
+ { "Starting tree no", "isis.lsp.rt_capable.tree_used_id.starting_tree_no", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_rt_capable_tree_used_id_nickname,
+ { "Nickname", "isis.lsp.rt_capable.tree_used_id.nickname", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_rt_capable_vlan_group_length,
+ { "Length", "isis.lsp.rt_capable.vlan_group.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_rt_capable_vlan_group_primary_vlan_id,
+ { "Primary vlan id", "isis.lsp.rt_capable.vlan_group.primary_vlan_id", FT_UINT16, BASE_DEC, NULL, 0x0fff, NULL, HFILL }},
+ { &hf_isis_lsp_rt_capable_vlan_group_secondary_vlan_id,
+ { "Secondary vlan id", "isis.lsp.rt_capable.vlan_group.secondary_vlan_id", FT_UINT16, BASE_DEC, NULL, 0x0fff, NULL, HFILL }},
+ { &hf_isis_lsp_rt_capable_vlan_group_nth_secondary_vlan_id,
+ { "%dth secondary vlan id", "isis.lsp.rt_capable.vlan_group.nth_secondary_vlan_id", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_ipv6_reachability_ipv6_prefix,
+ { "IPv6 prefix", "isis.lsp.ipv6_reachability.ipv6_prefix", FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_ipv6_reachability_metric,
+ { "Metric", "isis.lsp.ipv6_reachability.metric", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_ipv6_reachability_distribution,
+ { "Distribution", "isis.lsp.ipv6_reachability.distribution", FT_BOOLEAN, 8, TFS(&tfs_up_down), 0x80, NULL, HFILL }},
+ { &hf_isis_lsp_ipv6_reachability_distribution_internal,
+ { "Distribution", "isis.lsp.ipv6_reachability.distribution_internal", FT_BOOLEAN, 8, TFS(&tfs_internal_external), 0x40, NULL, HFILL }},
+ { &hf_isis_lsp_ipv6_reachability_reserved_bits,
+ { "Reserved bits", "isis.lsp.ipv6_reachability.reserved_bits", FT_UINT8, BASE_HEX, NULL, 0x1F, NULL, HFILL }},
+ { &hf_isis_lsp_mt_cap_spb_instance_cist_root_identifier,
+ { "CIST Root Identifier", "isis.lsp.mt_cap_spb_instance.cist_root_identifier", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_mt_cap_spb_instance_cist_external_root_path_cost,
+ { "CIST External Root Path Cost", "isis.lsp.mt_cap_spb_instance.cist_external_root_path_cost", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_mt_cap_spb_instance_bridge_priority,
+ { "Bridge Priority", "isis.lsp.mt_cap_spb_instance.bridge_priority", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_mt_cap_spb_instance_v,
+ { "V", "isis.lsp.mt_cap_spb_instance.v", FT_BOOLEAN, 32, NULL, 0x00100000, NULL, HFILL }},
+ { &hf_isis_lsp_mt_cap_spb_instance_number_of_trees,
+ { "Number of Trees", "isis.lsp.mt_cap_spb_instance.number_of_trees", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_mt_cap_spbm_service_identifier_b_mac,
+ { "B-MAC", "isis.lsp.mt_cap_spbm_service_identifier.b_mac", FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_mt_cap_spbm_service_identifier_base_vid,
+ { "Base-VID", "isis.lsp.mt_cap_spbm_service_identifier.base_vid", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_mt_cap_mtid,
+ { "MTID", "isis.lsp.mt_cap.mtid", FT_UINT16, BASE_HEX, NULL, 0xfff, NULL, HFILL }},
+ { &hf_isis_lsp_eis_neighbors_reserved,
+ { "Reserved", "isis.lsp.eis_neighbors_clv_inner.reserved", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_eis_neighbors_es_neighbor_id,
+ { "ES Neighbor ID", "isis.lsp.eis_neighbors.es_neighbor_id", FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_eis_neighbors_is_neighbor_id,
+ { "IS Neighbor", "isis.lsp.eis_neighbors.is_neighbor", FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_eis_neighbors_default_metric,
+ { "Default Metric", "isis.lsp.eis_neighbors.default_metric", FT_UINT8, BASE_DEC, NULL, 0x3F, NULL, HFILL }},
+ { &hf_isis_lsp_eis_neighbors_delay_metric,
+ { "Delay Metric", "isis.lsp.eis_neighbors.delay_metric", FT_UINT8, BASE_DEC, NULL, 0x3F, NULL, HFILL }},
+ { &hf_isis_lsp_eis_neighbors_expense_metric,
+ { "Expense Metric", "isis.lsp.eis_neighbors.expense_metric", FT_UINT8, BASE_DEC, NULL, 0x3F, NULL, HFILL }},
+ { &hf_isis_lsp_eis_neighbors_error_metric,
+ { "Error Metric", "isis.lsp.eis_neighbors.error_metric", FT_UINT8, BASE_DEC, NULL, 0x3F, NULL, HFILL }},
+ { &hf_isis_lsp_maximum_link_bandwidth,
+ { "Maximum link bandwidth", "isis.lsp.maximum_link_bandwidth", FT_FLOAT, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_reservable_link_bandwidth,
+ { "Reservable link bandwidth", "isis.lsp.reservable_link_bandwidth", FT_FLOAT, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_ext_is_reachability_is_neighbor_id,
+ { "IS neighbor ID", "isis.lsp.ext_is_reachability.is_neighbor_id", FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_ext_is_reachability_metric,
+ { "Metric", "isis.lsp.ext_is_reachability.metric", FT_UINT24, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_ext_is_reachability_link_local_identifier,
+ { "Link Local Identifier", "isis.lsp.ext_is_reachability.link_local_identifier", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_ext_is_reachability_link_remote_identifier,
+ { "Link Remote Identifier", "isis.lsp.ext_is_reachability.link_remote_identifier", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_ext_is_reachability_ipv4_interface_address,
+ { "IPv4 interface address", "isis.lsp.ext_is_reachability.ipv4_interface_address", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_ext_is_reachability_ipv4_neighbor_address,
+ { "IPv4 neighbor address", "isis.lsp.ext_is_reachability.ipv4_neighbor_address", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_ext_is_reachability_traffic_engineering_default_metric,
+ { "Traffic engineering default metric", "isis.lsp.ext_is_reachability.traffic_engineering_default_metric", FT_UINT24, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_partition_designated_l2_is,
+ { "Partition designated L2 IS", "isis.lsp.partition_designated_l2_is", FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_error_metric,
+ { "Error metric", "isis.lsp.error_metric", FT_BOOLEAN, 8, TFS(&tfs_set_notset), 0x08, NULL, HFILL }},
+ { &hf_isis_lsp_expense_metric,
+ { "Expense metric", "isis.lsp.expense_metric", FT_BOOLEAN, 8, TFS(&tfs_set_notset), 0x04, NULL, HFILL }},
+ { &hf_isis_lsp_delay_metric,
+ { "Delay metric", "isis.lsp.delay_metric", FT_BOOLEAN, 8, TFS(&tfs_set_notset), 0x02, NULL, HFILL }},
+ { &hf_isis_lsp_default_metric,
+ { "Default metric", "isis.lsp.default_metric", FT_BOOLEAN, 8, TFS(&tfs_set_notset), 0x01, NULL, HFILL }},
+ { &hf_isis_lsp_ip_reachability_default_metric_ie,
+ { "Default Metric IE", "isis.lsp.ip_reachability.default_metric_ie", FT_BOOLEAN, 8, TFS(&tfs_external_internal), 0x40, NULL, HFILL }},
+ { &hf_isis_lsp_ip_reachability_delay_metric_support,
+ { "Delay Metric", "isis.lsp.ip_reachability.delay_metric_support", FT_BOOLEAN, 8, TFS(&tfs_notsupported_supported), 0x80, NULL, HFILL }},
+ { &hf_isis_lsp_ip_reachability_expense_metric_support,
+ { "Expense Metric", "isis.lsp.ip_reachability.expense_metric_support", FT_BOOLEAN, 8, TFS(&tfs_notsupported_supported), 0x80, NULL, HFILL }},
+ { &hf_isis_lsp_ip_reachability_error_metric_support,
+ { "Error Metric", "isis.lsp.ip_reachability.error_metric_support", FT_BOOLEAN, 8, TFS(&tfs_notsupported_supported), 0x80, NULL, HFILL }},
+ { &hf_isis_lsp_mt_cap_spsourceid,
+ { "SPSourceId", "isis.lsp.mt_cap.spsourceid", FT_UINT32, BASE_HEX_DEC, NULL, 0xfffff, NULL, HFILL }},
+ { &hf_isis_lsp_mt_cap_overload,
+ { "Overload", "isis.lsp.overload", FT_BOOLEAN, 16, NULL, 0x8000, NULL, HFILL }},
+ { &hf_isis_lsp_eis_neighbors_default_metric_ie,
+ { "Default Metric", "isis.lsp.eis_neighbors.default_metric_ie", FT_BOOLEAN, 8, TFS(&tfs_external_internal), 0x40, NULL, HFILL }},
+ { &hf_isis_lsp_eis_neighbors_delay_metric_supported,
+ { "Delay Metric", "isis.lsp.eis_neighbors_delay_metric.supported", FT_BOOLEAN, 8, TFS(&tfs_notsupported_supported), 0x80, NULL, HFILL }},
+ { &hf_isis_lsp_eis_neighbors_expense_metric_supported,
+ { "Expense Metric", "isis.lsp.eis_neighbors.expense_metric_supported", FT_BOOLEAN, 8, TFS(&tfs_notsupported_supported), 0x80, NULL, HFILL }},
+ { &hf_isis_lsp_eis_neighbors_error_metric_supported,
+ { "Error Metric", "isis.lsp.eis_neighbors.error_metric_supported", FT_BOOLEAN, 8, TFS(&tfs_notsupported_supported), 0x80, NULL, HFILL }},
+ { &hf_isis_lsp_unrsv_bw_priority_level,
+ { "priority level", "isis.lsp.unrsv_bw.priority_level", FT_FLOAT, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_lsp_ip_reachability_distribution,
+ { "Distribution", "isis.lsp.ip_reachability.distribution", FT_BOOLEAN, 8, TFS(&tfs_up_down), 0x80, NULL, HFILL }},
+ { &hf_isis_lsp_ip_reachability_delay_metric_ie,
+ { "Delay Metric", "isis.lsp.ip_reachability.delay_metric_ie", FT_BOOLEAN, 8, TFS(&tfs_external_internal), 0x40, NULL, HFILL }},
+ { &hf_isis_lsp_ip_reachability_expense_metric_ie,
+ { "Expense Metric", "isis.lsp.ip_reachability.expense_metric_ie", FT_BOOLEAN, 8, TFS(&tfs_external_internal), 0x40, NULL, HFILL }},
+ { &hf_isis_lsp_ip_reachability_error_metric_ie,
+ { "Error Metric", "isis.lsp.ip_reachability.error_metric_ie", FT_BOOLEAN, 8, TFS(&tfs_external_internal), 0x40, NULL, HFILL }},
+ { &hf_isis_lsp_eis_neighbors_delay_metric_ie,
+ { "Delay Metric", "isis.lsp.eis_neighbors.delay_metric_ie", FT_BOOLEAN, 8, TFS(&tfs_external_internal), 0x40, NULL, HFILL }},
+ { &hf_isis_lsp_eis_neighbors_expense_metric_ie,
+ { "Expense Metric", "isis.lsp.eis_neighbors.expense_metric_ie", FT_BOOLEAN, 8, TFS(&tfs_external_internal), 0x40, NULL, HFILL }},
+ { &hf_isis_lsp_eis_neighbors_error_metric_ie,
+ { "Error Metric", "isis.lsp.eis_neighbors.error_metric_ie", FT_BOOLEAN, 8, TFS(&tfs_external_internal), 0x40, NULL, HFILL }},
+ };
+ static gint *ett[] = {
+ &ett_isis_lsp,
+ &ett_isis_lsp_info,
+ &ett_isis_lsp_att,
+ &ett_isis_lsp_cksum,
+ &ett_isis_lsp_clv_area_addr,
+ &ett_isis_lsp_clv_is_neighbors,
+ &ett_isis_lsp_clv_ext_is_reachability, /* CLV 22 */
+ &ett_isis_lsp_part_of_clv_ext_is_reachability,
+ &ett_isis_lsp_subclv_admin_group,
+ &ett_isis_lsp_subclv_unrsv_bw,
+ &ett_isis_lsp_subclv_spb_link_metric,
+ &ett_isis_lsp_clv_unknown,
+ &ett_isis_lsp_clv_partition_dis,
+ &ett_isis_lsp_clv_prefix_neighbors,
+ &ett_isis_lsp_clv_authentication,
+ &ett_isis_lsp_clv_ip_authentication,
+ &ett_isis_lsp_clv_nlpid,
+ &ett_isis_lsp_clv_hostname,
+ &ett_isis_lsp_clv_ipv4_int_addr,
+ &ett_isis_lsp_clv_ipv6_int_addr, /* CLV 232 */
+ &ett_isis_lsp_clv_mt_cap,
+ &ett_isis_lsp_clv_mt_cap_spb_instance,
+ &ett_isis_lsp_clv_mt_cap_spbm_service_identifier,
+ &ett_isis_lsp_clv_te_router_id,
+ &ett_isis_lsp_clv_ip_reachability,
+ &ett_isis_lsp_clv_ip_reach_subclv,
+ &ett_isis_lsp_clv_ext_ip_reachability, /* CLV 135 */
+ &ett_isis_lsp_part_of_clv_ext_ip_reachability,
+ &ett_isis_lsp_clv_ipv6_reachability, /* CLV 236 */
+ &ett_isis_lsp_part_of_clv_ipv6_reachability,
+ &ett_isis_lsp_clv_mt,
+ &ett_isis_lsp_clv_mt_is,
+ &ett_isis_lsp_part_of_clv_mt_is,
+ &ett_isis_lsp_clv_rt_capable_IPv4_prefx,
+ &ett_isis_lsp_clv_grp_address_IPv4_prefx, /*CLV 142*/
+ &ett_isis_lsp_clv_mt_reachable_IPv4_prefx,
+ &ett_isis_lsp_clv_mt_reachable_IPv6_prefx,
+ &ett_isis_lsp_clv_mt_cap_spbv_mac_address
+ };
+
+ static ei_register_info ei[] = {
+ { &ie_isis_lsp_checksum_bad, { "isis.lsp.checksum_bad.expert", PI_CHECKSUM, PI_ERROR, "Bad checksum", EXPFILL }},
+ { &ei_isis_lsp_short_packet, { "isis.lsp.short_packet", PI_MALFORMED, PI_ERROR, "Short packet", EXPFILL }},
+ { &ei_isis_lsp_long_packet, { "isis.lsp.long_packet", PI_MALFORMED, PI_ERROR, "Long packet", EXPFILL }},
+ { &ei_isis_lsp_subtlv, { "isis.lsp.subtlv.unknown", PI_PROTOCOL, PI_WARN, "Unknown SubTLV", EXPFILL }},
+ { &ei_isis_lsp_authentication, { "isis.lsp.authentication.unknown", PI_PROTOCOL, PI_WARN, "Unknown authentication type", EXPFILL }},
+ };
+
+ expert_module_t* expert_isis_lsp;
+
+ /* Register the protocol name and description */
+ proto_isis_lsp = proto_register_protocol(PROTO_STRING_LSP, "ISIS LSP", "isis.lsp");
+
+ proto_register_field_array(proto_isis_lsp, hf, array_length(hf));
+ proto_register_subtree_array(ett, array_length(ett));
+ expert_isis_lsp = expert_register_protocol(proto_isis_lsp);
+ expert_register_field_array(expert_isis_lsp, ei, array_length(ei));
}
void
proto_reg_handoff_isis_lsp(void)
{
- dissector_add_uint("isis.type", ISIS_TYPE_L1_LSP, new_create_dissector_handle(dissect_isis_l1_lsp, proto_isis_lsp));
- dissector_add_uint("isis.type", ISIS_TYPE_L2_LSP, new_create_dissector_handle(dissect_isis_l2_lsp, proto_isis_lsp));
+ dissector_add_uint("isis.type", ISIS_TYPE_L1_LSP, new_create_dissector_handle(dissect_isis_l1_lsp, proto_isis_lsp));
+ dissector_add_uint("isis.type", ISIS_TYPE_L2_LSP, new_create_dissector_handle(dissect_isis_l2_lsp, proto_isis_lsp));
}
diff --git a/epan/dissectors/packet-isis-snp.c b/epan/dissectors/packet-isis-snp.c
index 05ef84840b..5a89d5c88d 100644
--- a/epan/dissectors/packet-isis-snp.c
+++ b/epan/dissectors/packet-isis-snp.c
@@ -81,16 +81,16 @@ static expert_field ei_isis_psnp_long_packet = EI_INIT;
static void
dissect_snp_authentication_clv(tvbuff_t *tvb, packet_info* pinfo, proto_tree *tree, int offset,
- int id_length _U_, int length)
+ int id_length _U_, int length)
{
- isis_dissect_authentication_clv(tree, pinfo, tvb, &ei_isis_csnp_authentication, offset, length);
+ isis_dissect_authentication_clv(tree, pinfo, tvb, &ei_isis_csnp_authentication, offset, length);
}
static void
dissect_snp_ip_authentication_clv(tvbuff_t *tvb, packet_info* pinfo _U_, proto_tree *tree, int offset,
- int id_length _U_, int length)
+ int id_length _U_, int length)
{
- isis_dissect_ip_authentication_clv(tvb, tree, offset, length);
+ isis_dissect_ip_authentication_clv(tvb, tree, offset, length);
}
/*
@@ -128,7 +128,7 @@ dissect_snp_checksum_clv(tvbuff_t *tvb, packet_info* pinfo,
{
case NO_CKSUM :
proto_item_append_text(ti, " [unused]");
- break;
+ break;
case DATA_MISSING :
expert_add_info_format(pinfo, ti, &ei_isis_csnp_long_packet,
"Packet length %d went beyond packet", tvb_length(tvb));
@@ -146,382 +146,382 @@ dissect_snp_checksum_clv(tvbuff_t *tvb, packet_info* pinfo,
* Name: dissect_snp_lsp_entries_clv()
*
* Description:
- * All the snp packets use a common payload format. We have up
- * to n entries (based on length), which are made of:
- * 2 : remaining life time
- * id_length : lsp id
- * 4 : sequence number
- * 2 : checksum
+ * All the snp packets use a common payload format. We have up
+ * to n entries (based on length), which are made of:
+ * 2 : remaining life time
+ * id_length : lsp id
+ * 4 : sequence number
+ * 2 : checksum
*/
static void
dissect_snp_lsp_entries_clv(tvbuff_t *tvb, packet_info* pinfo, proto_tree *tree, int offset,
- int id_length, int length)
+ int id_length, int length)
{
- proto_tree *subtree;
+ proto_tree *subtree;
- while ( length > 0 ) {
- if ( length < 2+id_length+2+4+2 ) {
- proto_tree_add_expert_format(tree, pinfo, &ei_isis_csnp_short_packet, tvb, offset, -1,
- "Short SNP header entry (%d vs %d)", length, 2+id_length+2+4+2 );
- return;
- }
+ while ( length > 0 ) {
+ if ( length < 2+id_length+2+4+2 ) {
+ proto_tree_add_expert_format(tree, pinfo, &ei_isis_csnp_short_packet, tvb, offset, -1,
+ "Short SNP header entry (%d vs %d)", length, 2+id_length+2+4+2 );
+ return;
+ }
- subtree = proto_tree_add_subtree(tree, tvb, offset, 2+id_length+2+4+2,
+ subtree = proto_tree_add_subtree(tree, tvb, offset, 2+id_length+2+4+2,
ett_isis_csnp_lsp_entry, NULL, "LSP Entry");
- proto_tree_add_item(tree, hf_isis_csnp_lsp_id, tvb, offset+2, id_length+2, ENC_NA);
+ proto_tree_add_item(tree, hf_isis_csnp_lsp_id, tvb, offset+2, id_length+2, ENC_NA);
- proto_tree_add_item(subtree, hf_isis_csnp_lsp_seq_num, tvb, offset+2+id_length+2, 4, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_isis_csnp_lsp_remain_life, tvb, offset, 2, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_isis_csnp_lsp_checksum, tvb, offset+2+id_length+2+4, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_isis_csnp_lsp_seq_num, tvb, offset+2+id_length+2, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_isis_csnp_lsp_remain_life, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_isis_csnp_lsp_checksum, tvb, offset+2+id_length+2+4, 2, ENC_BIG_ENDIAN);
- length -= 2+id_length+2+4+2;
- offset += 2+id_length+2+4+2;
- }
+ length -= 2+id_length+2+4+2;
+ offset += 2+id_length+2+4+2;
+ }
}
static const isis_clv_handle_t clv_l1_csnp_opts[] = {
- {
- ISIS_CLV_LSP_ENTRIES,
- "LSP entries",
- &ett_isis_csnp_clv_lsp_entries,
- dissect_snp_lsp_entries_clv
- },
- {
- ISIS_CLV_AUTHENTICATION,
- "Authentication",
- &ett_isis_csnp_clv_authentication,
- dissect_snp_authentication_clv
- },
- {
- ISIS_CLV_IP_AUTHENTICATION,
- "IP Authentication",
- &ett_isis_csnp_clv_ip_authentication,
- dissect_snp_ip_authentication_clv
- },
- {
- ISIS_CLV_CHECKSUM,
- "Checksum",
- &ett_isis_csnp_clv_checksum,
- dissect_snp_checksum_clv
- },
- {
- 0, "", NULL, NULL
- }
+ {
+ ISIS_CLV_LSP_ENTRIES,
+ "LSP entries",
+ &ett_isis_csnp_clv_lsp_entries,
+ dissect_snp_lsp_entries_clv
+ },
+ {
+ ISIS_CLV_AUTHENTICATION,
+ "Authentication",
+ &ett_isis_csnp_clv_authentication,
+ dissect_snp_authentication_clv
+ },
+ {
+ ISIS_CLV_IP_AUTHENTICATION,
+ "IP Authentication",
+ &ett_isis_csnp_clv_ip_authentication,
+ dissect_snp_ip_authentication_clv
+ },
+ {
+ ISIS_CLV_CHECKSUM,
+ "Checksum",
+ &ett_isis_csnp_clv_checksum,
+ dissect_snp_checksum_clv
+ },
+ {
+ 0, "", NULL, NULL
+ }
};
static const isis_clv_handle_t clv_l2_csnp_opts[] = {
- {
- ISIS_CLV_LSP_ENTRIES,
- "LSP entries",
- &ett_isis_csnp_clv_lsp_entries,
- dissect_snp_lsp_entries_clv
- },
- {
- ISIS_CLV_AUTHENTICATION,
- "Authentication",
- &ett_isis_csnp_clv_authentication,
- dissect_snp_authentication_clv
- },
- {
- ISIS_CLV_IP_AUTHENTICATION,
- "IP Authentication",
- &ett_isis_csnp_clv_ip_authentication,
- dissect_snp_ip_authentication_clv
- },
- {
- ISIS_CLV_CHECKSUM,
- "Checksum",
- &ett_isis_csnp_clv_checksum,
- dissect_snp_checksum_clv
- },
- {
- 0, "", NULL, NULL
- }
+ {
+ ISIS_CLV_LSP_ENTRIES,
+ "LSP entries",
+ &ett_isis_csnp_clv_lsp_entries,
+ dissect_snp_lsp_entries_clv
+ },
+ {
+ ISIS_CLV_AUTHENTICATION,
+ "Authentication",
+ &ett_isis_csnp_clv_authentication,
+ dissect_snp_authentication_clv
+ },
+ {
+ ISIS_CLV_IP_AUTHENTICATION,
+ "IP Authentication",
+ &ett_isis_csnp_clv_ip_authentication,
+ dissect_snp_ip_authentication_clv
+ },
+ {
+ ISIS_CLV_CHECKSUM,
+ "Checksum",
+ &ett_isis_csnp_clv_checksum,
+ dissect_snp_checksum_clv
+ },
+ {
+ 0, "", NULL, NULL
+ }
};
static const isis_clv_handle_t clv_l1_psnp_opts[] = {
- {
- ISIS_CLV_LSP_ENTRIES,
- "LSP entries",
- &ett_isis_psnp_clv_lsp_entries,
- dissect_snp_lsp_entries_clv
- },
- {
- ISIS_CLV_AUTHENTICATION,
- "Authentication",
- &ett_isis_psnp_clv_authentication,
- dissect_snp_authentication_clv
- },
- {
- ISIS_CLV_IP_AUTHENTICATION,
- "IP Authentication",
- &ett_isis_psnp_clv_ip_authentication,
- dissect_snp_ip_authentication_clv
- },
- {
- ISIS_CLV_CHECKSUM,
- "Checksum",
- &ett_isis_psnp_clv_checksum,
- dissect_snp_checksum_clv
- },
- {
- 0, "", NULL, NULL
- }
+ {
+ ISIS_CLV_LSP_ENTRIES,
+ "LSP entries",
+ &ett_isis_psnp_clv_lsp_entries,
+ dissect_snp_lsp_entries_clv
+ },
+ {
+ ISIS_CLV_AUTHENTICATION,
+ "Authentication",
+ &ett_isis_psnp_clv_authentication,
+ dissect_snp_authentication_clv
+ },
+ {
+ ISIS_CLV_IP_AUTHENTICATION,
+ "IP Authentication",
+ &ett_isis_psnp_clv_ip_authentication,
+ dissect_snp_ip_authentication_clv
+ },
+ {
+ ISIS_CLV_CHECKSUM,
+ "Checksum",
+ &ett_isis_psnp_clv_checksum,
+ dissect_snp_checksum_clv
+ },
+ {
+ 0, "", NULL, NULL
+ }
};
static const isis_clv_handle_t clv_l2_psnp_opts[] = {
- {
- ISIS_CLV_LSP_ENTRIES,
- "LSP entries",
- &ett_isis_psnp_clv_lsp_entries,
- dissect_snp_lsp_entries_clv
- },
- {
- ISIS_CLV_AUTHENTICATION,
- "Authentication",
- &ett_isis_psnp_clv_authentication,
- dissect_snp_authentication_clv
- },
- {
- ISIS_CLV_IP_AUTHENTICATION,
- "IP Authentication",
- &ett_isis_psnp_clv_ip_authentication,
- dissect_snp_ip_authentication_clv
- },
- {
- ISIS_CLV_CHECKSUM,
- "Checksum",
- &ett_isis_psnp_clv_checksum,
- dissect_snp_checksum_clv
- },
- {
- 0, "", NULL, NULL
- }
+ {
+ ISIS_CLV_LSP_ENTRIES,
+ "LSP entries",
+ &ett_isis_psnp_clv_lsp_entries,
+ dissect_snp_lsp_entries_clv
+ },
+ {
+ ISIS_CLV_AUTHENTICATION,
+ "Authentication",
+ &ett_isis_psnp_clv_authentication,
+ dissect_snp_authentication_clv
+ },
+ {
+ ISIS_CLV_IP_AUTHENTICATION,
+ "IP Authentication",
+ &ett_isis_psnp_clv_ip_authentication,
+ dissect_snp_ip_authentication_clv
+ },
+ {
+ ISIS_CLV_CHECKSUM,
+ "Checksum",
+ &ett_isis_psnp_clv_checksum,
+ dissect_snp_checksum_clv
+ },
+ {
+ 0, "", NULL, NULL
+ }
};
static void
dissect_isis_csnp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
- const isis_clv_handle_t *opts, int header_length, int id_length)
+ const isis_clv_handle_t *opts, int header_length, int id_length)
{
- proto_item *ti;
- proto_tree *csnp_tree = NULL;
- guint16 pdu_length;
- int len;
-
- col_set_str(pinfo->cinfo, COL_PROTOCOL, "ISIS CSNP");
-
- ti = proto_tree_add_item(tree, proto_isis_csnp, tvb, offset, -1, ENC_NA);
- csnp_tree = proto_item_add_subtree(ti, ett_isis_csnp);
-
- pdu_length = tvb_get_ntohs(tvb, offset);
- proto_tree_add_uint(csnp_tree, hf_isis_csnp_pdu_length, tvb,
- offset, 2, pdu_length);
- offset += 2;
-
- proto_tree_add_item(csnp_tree, hf_isis_csnp_source_id, tvb, offset, id_length, ENC_NA);
- col_append_fstr(pinfo->cinfo, COL_INFO, ", Source-ID: %s", tvb_print_system_id( tvb, offset, id_length ));
- offset += id_length + 1;
-
- proto_tree_add_item(csnp_tree, hf_isis_csnp_start_lsp_id, tvb, offset, id_length + 2, ENC_NA);
- col_append_fstr(pinfo->cinfo, COL_INFO, ", Start LSP-ID: %s",
- tvb_print_system_id( tvb, offset, id_length+2 ));
- offset += id_length + 2;
-
- proto_tree_add_item(csnp_tree, hf_isis_csnp_end_lsp_id, tvb, offset, id_length + 2, ENC_NA);
- col_append_fstr(pinfo->cinfo, COL_INFO, ", End LSP-ID: %s",
- tvb_print_system_id( tvb, offset, id_length+2 ));
- offset += id_length + 2;
-
- len = pdu_length - header_length;
- if (len < 0) {
- proto_tree_add_expert_format(tree, pinfo, &ei_isis_csnp_short_packet, tvb, offset, -1,
- "packet header length %d went beyond packet", header_length );
- return;
- }
-
- isis_dissect_clvs(tvb, pinfo, csnp_tree, offset,
- opts, &ei_isis_csnp_short_packet, len, id_length, ett_isis_csnp_clv_unknown );
+ proto_item *ti;
+ proto_tree *csnp_tree = NULL;
+ guint16 pdu_length;
+ int len;
+
+ col_set_str(pinfo->cinfo, COL_PROTOCOL, "ISIS CSNP");
+
+ ti = proto_tree_add_item(tree, proto_isis_csnp, tvb, offset, -1, ENC_NA);
+ csnp_tree = proto_item_add_subtree(ti, ett_isis_csnp);
+
+ pdu_length = tvb_get_ntohs(tvb, offset);
+ proto_tree_add_uint(csnp_tree, hf_isis_csnp_pdu_length, tvb,
+ offset, 2, pdu_length);
+ offset += 2;
+
+ proto_tree_add_item(csnp_tree, hf_isis_csnp_source_id, tvb, offset, id_length, ENC_NA);
+ col_append_fstr(pinfo->cinfo, COL_INFO, ", Source-ID: %s", tvb_print_system_id( tvb, offset, id_length ));
+ offset += id_length + 1;
+
+ proto_tree_add_item(csnp_tree, hf_isis_csnp_start_lsp_id, tvb, offset, id_length + 2, ENC_NA);
+ col_append_fstr(pinfo->cinfo, COL_INFO, ", Start LSP-ID: %s",
+ tvb_print_system_id( tvb, offset, id_length+2 ));
+ offset += id_length + 2;
+
+ proto_tree_add_item(csnp_tree, hf_isis_csnp_end_lsp_id, tvb, offset, id_length + 2, ENC_NA);
+ col_append_fstr(pinfo->cinfo, COL_INFO, ", End LSP-ID: %s",
+ tvb_print_system_id( tvb, offset, id_length+2 ));
+ offset += id_length + 2;
+
+ len = pdu_length - header_length;
+ if (len < 0) {
+ proto_tree_add_expert_format(tree, pinfo, &ei_isis_csnp_short_packet, tvb, offset, -1,
+ "packet header length %d went beyond packet", header_length );
+ return;
+ }
+
+ isis_dissect_clvs(tvb, pinfo, csnp_tree, offset,
+ opts, &ei_isis_csnp_short_packet, len, id_length, ett_isis_csnp_clv_unknown );
}
static int
dissect_isis_l1_csnp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
{
- isis_data_t* isis = (isis_data_t*)data;
- dissect_isis_csnp(tvb, pinfo, tree, 0,
- clv_l1_csnp_opts, isis->header_length, isis->system_id_len);
- return tvb_length(tvb);
+ isis_data_t* isis = (isis_data_t*)data;
+ dissect_isis_csnp(tvb, pinfo, tree, 0,
+ clv_l1_csnp_opts, isis->header_length, isis->system_id_len);
+ return tvb_length(tvb);
}
static int
dissect_isis_l2_csnp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
{
- isis_data_t* isis = (isis_data_t*)data;
- dissect_isis_csnp(tvb, pinfo, tree, 0,
- clv_l2_csnp_opts, isis->header_length, isis->system_id_len);
- return tvb_length(tvb);
+ isis_data_t* isis = (isis_data_t*)data;
+ dissect_isis_csnp(tvb, pinfo, tree, 0,
+ clv_l2_csnp_opts, isis->header_length, isis->system_id_len);
+ return tvb_length(tvb);
}
static void
dissect_isis_psnp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
- const isis_clv_handle_t *opts, int header_length, int id_length)
+ const isis_clv_handle_t *opts, int header_length, int id_length)
{
- proto_item *ti;
- proto_tree *psnp_tree;
- guint16 pdu_length;
- int len;
-
- col_set_str(pinfo->cinfo, COL_PROTOCOL, "ISIS PSNP");
-
- ti = proto_tree_add_item(tree, proto_isis_psnp, tvb, offset, -1, ENC_NA);
- psnp_tree = proto_item_add_subtree(ti, ett_isis_psnp);
-
- pdu_length = tvb_get_ntohs(tvb, offset);
- proto_tree_add_uint(psnp_tree, hf_isis_psnp_pdu_length, tvb,
- offset, 2, pdu_length);
- offset += 2;
-
- proto_tree_add_item(psnp_tree, hf_isis_psnp_source_id, tvb, offset, id_length, ENC_NA);
- col_append_fstr(pinfo->cinfo, COL_INFO, ", Source-ID: %s", tvb_print_system_id( tvb, offset, id_length ));
-
- offset += id_length + 1;
-
- len = pdu_length - header_length;
- if (len < 0) {
- proto_tree_add_expert_format(tree, pinfo, &ei_isis_psnp_long_packet, tvb, offset, -1,
- "packet header length %d went beyond packet", header_length );
- return;
- }
- /* Call into payload dissector */
- isis_dissect_clvs(tvb, pinfo, psnp_tree, offset,
- opts, &ei_isis_psnp_short_packet, len, id_length, ett_isis_psnp_clv_unknown );
+ proto_item *ti;
+ proto_tree *psnp_tree;
+ guint16 pdu_length;
+ int len;
+
+ col_set_str(pinfo->cinfo, COL_PROTOCOL, "ISIS PSNP");
+
+ ti = proto_tree_add_item(tree, proto_isis_psnp, tvb, offset, -1, ENC_NA);
+ psnp_tree = proto_item_add_subtree(ti, ett_isis_psnp);
+
+ pdu_length = tvb_get_ntohs(tvb, offset);
+ proto_tree_add_uint(psnp_tree, hf_isis_psnp_pdu_length, tvb,
+ offset, 2, pdu_length);
+ offset += 2;
+
+ proto_tree_add_item(psnp_tree, hf_isis_psnp_source_id, tvb, offset, id_length, ENC_NA);
+ col_append_fstr(pinfo->cinfo, COL_INFO, ", Source-ID: %s", tvb_print_system_id( tvb, offset, id_length ));
+
+ offset += id_length + 1;
+
+ len = pdu_length - header_length;
+ if (len < 0) {
+ proto_tree_add_expert_format(tree, pinfo, &ei_isis_psnp_long_packet, tvb, offset, -1,
+ "packet header length %d went beyond packet", header_length );
+ return;
+ }
+ /* Call into payload dissector */
+ isis_dissect_clvs(tvb, pinfo, psnp_tree, offset,
+ opts, &ei_isis_psnp_short_packet, len, id_length, ett_isis_psnp_clv_unknown );
}
static int
dissect_isis_l1_psnp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
{
- isis_data_t* isis = (isis_data_t*)data;
- dissect_isis_psnp(tvb, pinfo, tree, 0,
- clv_l1_psnp_opts, isis->header_length, isis->system_id_len);
- return tvb_length(tvb);
+ isis_data_t* isis = (isis_data_t*)data;
+ dissect_isis_psnp(tvb, pinfo, tree, 0,
+ clv_l1_psnp_opts, isis->header_length, isis->system_id_len);
+ return tvb_length(tvb);
}
static int
dissect_isis_l2_psnp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
{
- isis_data_t* isis = (isis_data_t*)data;
- dissect_isis_psnp(tvb, pinfo, tree, 0,
- clv_l2_psnp_opts, isis->header_length, isis->system_id_len);
- return tvb_length(tvb);
+ isis_data_t* isis = (isis_data_t*)data;
+ dissect_isis_psnp(tvb, pinfo, tree, 0,
+ clv_l2_psnp_opts, isis->header_length, isis->system_id_len);
+ return tvb_length(tvb);
}
void
proto_register_isis_csnp(void)
{
- static hf_register_info hf[] = {
- { &hf_isis_csnp_pdu_length,
- { "PDU length", "isis.csnp.pdu_length", FT_UINT16,
- BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_csnp_source_id,
- { "Source-ID", "isis.csnp.source_id",
- FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_csnp_start_lsp_id,
- { "Start LSP-ID", "isis.csnp.start_lsp_id",
- FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_csnp_end_lsp_id,
- { "End LSP-ID", "isis.csnp.end_lsp_id",
- FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_csnp_lsp_id,
- { "LSP-ID", "isis.csnp.lsp_id",
- FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_csnp_lsp_seq_num,
- { "LSP Sequence Number", "isis.csnp.lsp_seq_num", FT_UINT32,
- BASE_HEX, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_csnp_lsp_remain_life,
- { "Remaining Lifetime", "isis.csnp.lsp_remain_life", FT_UINT16,
- BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_csnp_lsp_checksum,
- { "LSP checksum", "isis.csnp.lsp_checksum", FT_UINT16,
- BASE_HEX, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_csnp_checksum,
- { "Checksum", "isis.csnp.checksum", FT_UINT16,
- BASE_HEX, NULL, 0x0, NULL, HFILL }},
- };
-
- static gint *ett[] = {
- &ett_isis_csnp,
- &ett_isis_csnp_clv_lsp_entries,
- &ett_isis_csnp_lsp_entry,
- &ett_isis_csnp_clv_authentication,
- &ett_isis_csnp_clv_ip_authentication,
- &ett_isis_csnp_clv_checksum,
- &ett_isis_csnp_clv_unknown,
- };
-
- static ei_register_info ei[] = {
- { &ei_isis_csnp_short_packet, { "isis.csnp.short_packet", PI_MALFORMED, PI_ERROR, "Short packet", EXPFILL }},
- { &ei_isis_csnp_long_packet, { "isis.csnp.long_packet", PI_MALFORMED, PI_ERROR, "Long packet", EXPFILL }},
- { &ei_isis_csnp_authentication, { "isis.csnp.authentication.unknown", PI_PROTOCOL, PI_WARN, "Unknown authentication type", EXPFILL }},
- };
- expert_module_t* expert_isis_csnp;
-
- /* Register the protocol name and description */
- proto_isis_csnp = proto_register_protocol(PROTO_STRING_CSNP, "ISIS CSNP", "isis.csnp");
-
- proto_register_field_array(proto_isis_csnp, hf, array_length(hf));
- proto_register_subtree_array(ett, array_length(ett));
- expert_isis_csnp = expert_register_protocol(proto_isis_csnp);
- expert_register_field_array(expert_isis_csnp, ei, array_length(ei));
+ static hf_register_info hf[] = {
+ { &hf_isis_csnp_pdu_length,
+ { "PDU length", "isis.csnp.pdu_length", FT_UINT16,
+ BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_csnp_source_id,
+ { "Source-ID", "isis.csnp.source_id",
+ FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_csnp_start_lsp_id,
+ { "Start LSP-ID", "isis.csnp.start_lsp_id",
+ FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_csnp_end_lsp_id,
+ { "End LSP-ID", "isis.csnp.end_lsp_id",
+ FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_csnp_lsp_id,
+ { "LSP-ID", "isis.csnp.lsp_id",
+ FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_csnp_lsp_seq_num,
+ { "LSP Sequence Number", "isis.csnp.lsp_seq_num", FT_UINT32,
+ BASE_HEX, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_csnp_lsp_remain_life,
+ { "Remaining Lifetime", "isis.csnp.lsp_remain_life", FT_UINT16,
+ BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_csnp_lsp_checksum,
+ { "LSP checksum", "isis.csnp.lsp_checksum", FT_UINT16,
+ BASE_HEX, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_csnp_checksum,
+ { "Checksum", "isis.csnp.checksum", FT_UINT16,
+ BASE_HEX, NULL, 0x0, NULL, HFILL }},
+ };
+
+ static gint *ett[] = {
+ &ett_isis_csnp,
+ &ett_isis_csnp_clv_lsp_entries,
+ &ett_isis_csnp_lsp_entry,
+ &ett_isis_csnp_clv_authentication,
+ &ett_isis_csnp_clv_ip_authentication,
+ &ett_isis_csnp_clv_checksum,
+ &ett_isis_csnp_clv_unknown,
+ };
+
+ static ei_register_info ei[] = {
+ { &ei_isis_csnp_short_packet, { "isis.csnp.short_packet", PI_MALFORMED, PI_ERROR, "Short packet", EXPFILL }},
+ { &ei_isis_csnp_long_packet, { "isis.csnp.long_packet", PI_MALFORMED, PI_ERROR, "Long packet", EXPFILL }},
+ { &ei_isis_csnp_authentication, { "isis.csnp.authentication.unknown", PI_PROTOCOL, PI_WARN, "Unknown authentication type", EXPFILL }},
+ };
+ expert_module_t* expert_isis_csnp;
+
+ /* Register the protocol name and description */
+ proto_isis_csnp = proto_register_protocol(PROTO_STRING_CSNP, "ISIS CSNP", "isis.csnp");
+
+ proto_register_field_array(proto_isis_csnp, hf, array_length(hf));
+ proto_register_subtree_array(ett, array_length(ett));
+ expert_isis_csnp = expert_register_protocol(proto_isis_csnp);
+ expert_register_field_array(expert_isis_csnp, ei, array_length(ei));
}
void
proto_reg_handoff_isis_csnp(void)
{
- dissector_add_uint("isis.type", ISIS_TYPE_L1_CSNP, new_create_dissector_handle(dissect_isis_l1_csnp, proto_isis_csnp));
- dissector_add_uint("isis.type", ISIS_TYPE_L2_CSNP, new_create_dissector_handle(dissect_isis_l2_csnp, proto_isis_csnp));
+ dissector_add_uint("isis.type", ISIS_TYPE_L1_CSNP, new_create_dissector_handle(dissect_isis_l1_csnp, proto_isis_csnp));
+ dissector_add_uint("isis.type", ISIS_TYPE_L2_CSNP, new_create_dissector_handle(dissect_isis_l2_csnp, proto_isis_csnp));
}
void
proto_register_isis_psnp(void)
{
- static hf_register_info hf[] = {
- { &hf_isis_psnp_pdu_length,
- { "PDU length", "isis.psnp.pdu_length", FT_UINT16,
- BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_isis_psnp_source_id,
- { "Source-ID", "isis.psnp.source_id",
- FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
- };
-
- static gint *ett[] = {
- &ett_isis_psnp,
- &ett_isis_psnp_clv_lsp_entries,
- &ett_isis_psnp_lsp_entry,
- &ett_isis_psnp_clv_authentication,
- &ett_isis_psnp_clv_ip_authentication,
- &ett_isis_psnp_clv_checksum,
- &ett_isis_psnp_clv_unknown,
- };
- static ei_register_info ei[] = {
- { &ei_isis_psnp_long_packet, { "isis.psnp.long_packet", PI_MALFORMED, PI_ERROR, "Long packet", EXPFILL }},
- { &ei_isis_psnp_short_packet, { "isis.psnp.short_packet", PI_MALFORMED, PI_ERROR, "Short packet", EXPFILL }},
- };
- expert_module_t* expert_isis_psnp;
-
- /* Register the protocol name and description */
- proto_isis_psnp = proto_register_protocol(PROTO_STRING_PSNP, "ISIS PSNP", "isis.psnp");
-
- proto_register_field_array(proto_isis_psnp, hf, array_length(hf));
- proto_register_subtree_array(ett, array_length(ett));
- expert_isis_psnp = expert_register_protocol(proto_isis_psnp);
- expert_register_field_array(expert_isis_psnp, ei, array_length(ei));
+ static hf_register_info hf[] = {
+ { &hf_isis_psnp_pdu_length,
+ { "PDU length", "isis.psnp.pdu_length", FT_UINT16,
+ BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_isis_psnp_source_id,
+ { "Source-ID", "isis.psnp.source_id",
+ FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ };
+
+ static gint *ett[] = {
+ &ett_isis_psnp,
+ &ett_isis_psnp_clv_lsp_entries,
+ &ett_isis_psnp_lsp_entry,
+ &ett_isis_psnp_clv_authentication,
+ &ett_isis_psnp_clv_ip_authentication,
+ &ett_isis_psnp_clv_checksum,
+ &ett_isis_psnp_clv_unknown,
+ };
+ static ei_register_info ei[] = {
+ { &ei_isis_psnp_long_packet, { "isis.psnp.long_packet", PI_MALFORMED, PI_ERROR, "Long packet", EXPFILL }},
+ { &ei_isis_psnp_short_packet, { "isis.psnp.short_packet", PI_MALFORMED, PI_ERROR, "Short packet", EXPFILL }},
+ };
+ expert_module_t* expert_isis_psnp;
+
+ /* Register the protocol name and description */
+ proto_isis_psnp = proto_register_protocol(PROTO_STRING_PSNP, "ISIS PSNP", "isis.psnp");
+
+ proto_register_field_array(proto_isis_psnp, hf, array_length(hf));
+ proto_register_subtree_array(ett, array_length(ett));
+ expert_isis_psnp = expert_register_protocol(proto_isis_psnp);
+ expert_register_field_array(expert_isis_psnp, ei, array_length(ei));
}
void
proto_reg_handoff_isis_psnp(void)
{
- dissector_add_uint("isis.type", ISIS_TYPE_L1_PSNP, new_create_dissector_handle(dissect_isis_l1_psnp, proto_isis_psnp));
- dissector_add_uint("isis.type", ISIS_TYPE_L2_PSNP, new_create_dissector_handle(dissect_isis_l2_psnp, proto_isis_psnp));
+ dissector_add_uint("isis.type", ISIS_TYPE_L1_PSNP, new_create_dissector_handle(dissect_isis_l1_psnp, proto_isis_psnp));
+ dissector_add_uint("isis.type", ISIS_TYPE_L2_PSNP, new_create_dissector_handle(dissect_isis_l2_psnp, proto_isis_psnp));
}
diff --git a/epan/dissectors/packet-isis.c b/epan/dissectors/packet-isis.c
index 29f43039e0..e7ae4871ff 100644
--- a/epan/dissectors/packet-isis.c
+++ b/epan/dissectors/packet-isis.c
@@ -73,79 +73,79 @@ static const value_string isis_vals[] = {
static void
dissect_isis(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
- proto_item *ti, *version_item;
- proto_tree *isis_tree = NULL;
- int offset = 0;
- guint8 isis_version;
- guint8 isis_type;
- tvbuff_t *next_tvb;
- isis_data_t subdissector_data;
-
- col_set_str(pinfo->cinfo, COL_PROTOCOL, "ISIS");
- col_clear(pinfo->cinfo, COL_INFO);
-
- ti = proto_tree_add_item(tree, proto_isis, tvb, 0, -1, ENC_NA);
- isis_tree = proto_item_add_subtree(ti, ett_isis);
-
- proto_tree_add_item(isis_tree, hf_isis_irpd, tvb, offset, 1, ENC_BIG_ENDIAN );
- offset += 1;
-
- subdissector_data.header_length = tvb_get_guint8(tvb, offset);
- proto_tree_add_uint(isis_tree, hf_isis_header_length, tvb,
- offset, 1, subdissector_data.header_length );
- offset += 1;
-
- isis_version = tvb_get_guint8(tvb, offset);
- version_item = proto_tree_add_uint(isis_tree, hf_isis_version, tvb,
- offset, 1, isis_version );
- if (isis_version != ISIS_REQUIRED_VERSION){
- col_add_fstr(pinfo->cinfo, COL_INFO,
- "Unknown ISIS version (%u vs %u)",
- isis_version, ISIS_REQUIRED_VERSION );
- expert_add_info(pinfo, version_item, &ei_isis_version);
- return;
- }
- offset += 1;
-
- subdissector_data.system_id_len = tvb_get_guint8(tvb, offset);
- proto_tree_add_uint(isis_tree, hf_isis_system_id_length, tvb,
- offset, 1, subdissector_data.system_id_len );
- offset += 1;
-
- isis_type = tvb_get_guint8(tvb, offset) & ISIS_TYPE_MASK;
- col_add_str(pinfo->cinfo, COL_INFO,
- val_to_str ( isis_type, isis_vals, "Unknown (0x%x)" ) );
-
- proto_tree_add_item(isis_tree, hf_isis_type, tvb, offset, 1, ENC_BIG_ENDIAN );
- proto_tree_add_item(isis_tree, hf_isis_type_reserved, tvb, offset, 1, ENC_BIG_ENDIAN );
- offset += 1;
-
- proto_tree_add_item(isis_tree, hf_isis_version2, tvb, offset, 1, ENC_BIG_ENDIAN );
- offset += 1;
-
- proto_tree_add_item(isis_tree, hf_isis_reserved, tvb, offset, 1, ENC_BIG_ENDIAN );
- offset += 1;
-
- proto_tree_add_item(isis_tree, hf_isis_max_area_adr, tvb, offset, 1, ENC_BIG_ENDIAN );
- offset += 1;
-
- /*
- * Interpret the system ID length.
- */
- if (subdissector_data.system_id_len == 0)
- subdissector_data.system_id_len = 6; /* zero means 6-octet ID field length */
- else if (subdissector_data.system_id_len == 255) {
- subdissector_data.system_id_len = 0; /* 255 means null ID field */
- /* XXX - what about the LAN ID? */
- }
- /* XXX - otherwise, must be in the range 1 through 8 */
-
- next_tvb = tvb_new_subset_remaining(tvb, offset);
- if (!dissector_try_uint_new(isis_dissector_table, isis_type, next_tvb,
- pinfo, tree, TRUE, &subdissector_data))
- {
- proto_tree_add_expert(tree, pinfo, &ei_isis_type, tvb, offset, -1);
- }
+ proto_item *ti, *version_item;
+ proto_tree *isis_tree = NULL;
+ int offset = 0;
+ guint8 isis_version;
+ guint8 isis_type;
+ tvbuff_t *next_tvb;
+ isis_data_t subdissector_data;
+
+ col_set_str(pinfo->cinfo, COL_PROTOCOL, "ISIS");
+ col_clear(pinfo->cinfo, COL_INFO);
+
+ ti = proto_tree_add_item(tree, proto_isis, tvb, 0, -1, ENC_NA);
+ isis_tree = proto_item_add_subtree(ti, ett_isis);
+
+ proto_tree_add_item(isis_tree, hf_isis_irpd, tvb, offset, 1, ENC_BIG_ENDIAN );
+ offset += 1;
+
+ subdissector_data.header_length = tvb_get_guint8(tvb, offset);
+ proto_tree_add_uint(isis_tree, hf_isis_header_length, tvb,
+ offset, 1, subdissector_data.header_length );
+ offset += 1;
+
+ isis_version = tvb_get_guint8(tvb, offset);
+ version_item = proto_tree_add_uint(isis_tree, hf_isis_version, tvb,
+ offset, 1, isis_version );
+ if (isis_version != ISIS_REQUIRED_VERSION){
+ col_add_fstr(pinfo->cinfo, COL_INFO,
+ "Unknown ISIS version (%u vs %u)",
+ isis_version, ISIS_REQUIRED_VERSION );
+ expert_add_info(pinfo, version_item, &ei_isis_version);
+ return;
+ }
+ offset += 1;
+
+ subdissector_data.system_id_len = tvb_get_guint8(tvb, offset);
+ proto_tree_add_uint(isis_tree, hf_isis_system_id_length, tvb,
+ offset, 1, subdissector_data.system_id_len );
+ offset += 1;
+
+ isis_type = tvb_get_guint8(tvb, offset) & ISIS_TYPE_MASK;
+ col_add_str(pinfo->cinfo, COL_INFO,
+ val_to_str ( isis_type, isis_vals, "Unknown (0x%x)" ) );
+
+ proto_tree_add_item(isis_tree, hf_isis_type, tvb, offset, 1, ENC_BIG_ENDIAN );
+ proto_tree_add_item(isis_tree, hf_isis_type_reserved, tvb, offset, 1, ENC_BIG_ENDIAN );
+ offset += 1;
+
+ proto_tree_add_item(isis_tree, hf_isis_version2, tvb, offset, 1, ENC_BIG_ENDIAN );
+ offset += 1;
+
+ proto_tree_add_item(isis_tree, hf_isis_reserved, tvb, offset, 1, ENC_BIG_ENDIAN );
+ offset += 1;
+
+ proto_tree_add_item(isis_tree, hf_isis_max_area_adr, tvb, offset, 1, ENC_BIG_ENDIAN );
+ offset += 1;
+
+ /*
+ * Interpret the system ID length.
+ */
+ if (subdissector_data.system_id_len == 0)
+ subdissector_data.system_id_len = 6; /* zero means 6-octet ID field length */
+ else if (subdissector_data.system_id_len == 255) {
+ subdissector_data.system_id_len = 0; /* 255 means null ID field */
+ /* XXX - what about the LAN ID? */
+ }
+ /* XXX - otherwise, must be in the range 1 through 8 */
+
+ next_tvb = tvb_new_subset_remaining(tvb, offset);
+ if (!dissector_try_uint_new(isis_dissector_table, isis_type, next_tvb,
+ pinfo, tree, TRUE, &subdissector_data))
+ {
+ proto_tree_add_expert(tree, pinfo, &ei_isis_type, tvb, offset, -1);
+ }
} /* dissect_isis */
void
@@ -153,7 +153,7 @@ proto_register_isis(void)
{
static hf_register_info hf[] = {
{ &hf_isis_irpd,
- { "Intra Domain Routing Protocol Discriminator", "isis.irpd",
+ { "Intra Domain Routing Protocol Discriminator", "isis.irpd",
FT_UINT8, BASE_HEX, VALS(nlpid_vals), 0x0, NULL, HFILL }},
{ &hf_isis_header_length,
@@ -196,23 +196,23 @@ proto_register_isis(void)
&ett_isis,
};
- static ei_register_info ei[] = {
- { &ei_isis_version, { "isis.version.unknown", PI_PROTOCOL, PI_WARN, "Unknown ISIS version", EXPFILL }},
- { &ei_isis_type, { "isis.type.unknown", PI_PROTOCOL, PI_WARN, "Unknown ISIS packet type", EXPFILL }},
- };
+ static ei_register_info ei[] = {
+ { &ei_isis_version, { "isis.version.unknown", PI_PROTOCOL, PI_WARN, "Unknown ISIS version", EXPFILL }},
+ { &ei_isis_type, { "isis.type.unknown", PI_PROTOCOL, PI_WARN, "Unknown ISIS packet type", EXPFILL }},
+ };
- expert_module_t* expert_isis;
+ expert_module_t* expert_isis;
- proto_isis = proto_register_protocol(PROTO_STRING_ISIS, "ISIS", "isis");
- proto_register_field_array(proto_isis, hf, array_length(hf));
- proto_register_subtree_array(ett, array_length(ett));
- expert_isis = expert_register_protocol(proto_isis);
- expert_register_field_array(expert_isis, ei, array_length(ei));
+ proto_isis = proto_register_protocol(PROTO_STRING_ISIS, "ISIS", "isis");
+ proto_register_field_array(proto_isis, hf, array_length(hf));
+ proto_register_subtree_array(ett, array_length(ett));
+ expert_isis = expert_register_protocol(proto_isis);
+ expert_register_field_array(expert_isis, ei, array_length(ei));
- isis_handle = register_dissector("isis", dissect_isis, proto_isis);
+ isis_handle = register_dissector("isis", dissect_isis, proto_isis);
- isis_dissector_table = register_dissector_table("isis.type",
- "ISIS Type", FT_UINT8, BASE_DEC);
+ isis_dissector_table = register_dissector_table("isis.type",
+ "ISIS Type", FT_UINT8, BASE_DEC);
}
void
diff --git a/epan/dissectors/packet-isis.h b/epan/dissectors/packet-isis.h
index 591cac090f..86a8f1eac2 100644
--- a/epan/dissectors/packet-isis.h
+++ b/epan/dissectors/packet-isis.h
@@ -43,15 +43,15 @@
#define ISIS_TYPE_L1_PSNP 26
#define ISIS_TYPE_L2_PSNP 27
-#define ISIS_TYPE_MASK 0x1f
+#define ISIS_TYPE_MASK 0x1f
#define ISIS_TYPE_RESERVED_MASK 0xe0
/*
* Data given to subdissectors
*/
typedef struct isis_data {
- guint8 header_length;
- guint8 system_id_len;
+ guint8 header_length;
+ guint8 system_id_len;
} isis_data_t;
#endif /* _PACKET_ISIS_H */