aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--AUTHORS1
-rw-r--r--packet-isis-clv.c57
-rw-r--r--packet-isis-clv.h7
-rw-r--r--packet-isis-hello.c129
-rw-r--r--packet-isis-hello.h38
-rw-r--r--packet-isis-lsp.c165
-rw-r--r--packet-isis-lsp.h15
-rw-r--r--packet-rsvp.c57
8 files changed, 409 insertions, 60 deletions
diff --git a/AUTHORS b/AUTHORS
index d4754040cc..3981da494e 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -602,6 +602,7 @@ Hannes Gredler <hannes@juniper.net> {
OSI network layer over PPP support
Many IS-IS enhancements
Juniper Networks vendor ID in RADIUS dissector
+ HELLO message support in RSVP
}
Inoue <inoue@ainet.or.jp> {
diff --git a/packet-isis-clv.c b/packet-isis-clv.c
index bf8c55dab9..41841cdba7 100644
--- a/packet-isis-clv.c
+++ b/packet-isis-clv.c
@@ -1,13 +1,12 @@
/* packet-isis-clv.c
* Common CLV decode routines.
*
- * $Id: packet-isis-clv.c,v 1.12 2001/06/05 21:23:32 guy Exp $
+ * $Id: packet-isis-clv.c,v 1.13 2001/06/23 19:45:12 guy Exp $
* Stuart Stanley <stuarts@mxmail.net>
*
* Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@zing.org>
+ * By Gerald Combs <gerald@ethereal.com>
* Copyright 1998 Gerald Combs
- *
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -229,6 +228,58 @@ isis_dissect_hostname_clv(const u_char *pd, int offset,
+void
+isis_dissect_mt_clv(const u_char *pd, int offset,
+ guint length, frame_data *fd, proto_tree *tree, gint tree_id ) {
+
+ int mt_block;
+ char mt_desc[60];
+
+ while (length>1) {
+ /* 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=(*(pd+offset)<<8)+(*(pd+offset+1));
+
+ /* mask out the lower 12 bits */
+ switch(mt_block&0x0fff) {
+ case 0:
+ strcpy(mt_desc,"IPv4 unicast");
+ break;
+ case 1:
+ strcpy(mt_desc,"In-Band Management");
+ break;
+ case 2:
+ strcpy(mt_desc,"IPv6 unicast");
+ break;
+ case 3:
+ strcpy(mt_desc,"Multicast");
+ break;
+ case 4095:
+ strcpy(mt_desc,"Development, Experimental or Proprietary");
+ break;
+ default:
+ strcpy(mt_desc,"Reserved for IETF Consensus");
+ }
+ proto_tree_add_text ( tree, NullTVB, offset, 2 ,
+ "%s Topology (0x%x)%s%s",
+ mt_desc,
+ mt_block&0xfff,
+ (mt_block&0x8000) ? "" : ", no sub-TLVs present",
+ (mt_block&0x4000) ? ", ATT bit set" : "" );
+ }
+ else {
+ proto_tree_add_text ( tree, NullTVB, offset, 1 ,
+ "malformed MT-ID");
+ break;
+ }
+ length=length-2;
+ offset=offset+2;
+ }
+}
+
/*
* Name: isis_dissect_ip_int_clv()
diff --git a/packet-isis-clv.h b/packet-isis-clv.h
index b03a89ef5e..a74f5c0101 100644
--- a/packet-isis-clv.h
+++ b/packet-isis-clv.h
@@ -1,13 +1,12 @@
/* packet-isis-clv.h
* Declares for common clv decoding functions.
*
- * $Id: packet-isis-clv.h,v 1.5 2001/05/14 18:40:15 guy Exp $
+ * $Id: packet-isis-clv.h,v 1.6 2001/06/23 19:45:12 guy Exp $
* Stuart Stanley <stuarts@mxmail.net>
*
* Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@zing.org>
+ * By Gerald Combs <gerald@ethereal.com>
* Copyright 1998 Gerald Combs
- *
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -60,6 +59,8 @@ extern void isis_dissect_nlpid_clv(const u_char *pd, int offset,
guint length, frame_data *fd, proto_tree *tree );
extern void isis_dissect_hostname_clv(const u_char *pd, int offset,
guint length, frame_data *fd, proto_tree *tree );
+extern void isis_dissect_mt_clv(const u_char *pd, int offset,
+ guint length, frame_data *fd, proto_tree *tree, gint tree_id );
extern void isis_dissect_te_router_id_clv(const u_char *pd, int offset,
guint length, frame_data *fd, proto_tree *tree, gint tree_id );
#endif /* _PACKET_ISIS_CLV_H */
diff --git a/packet-isis-hello.c b/packet-isis-hello.c
index 2859c75796..932ade2d19 100644
--- a/packet-isis-hello.c
+++ b/packet-isis-hello.c
@@ -1,13 +1,12 @@
/* packet-isis-hello.c
* Routines for decoding isis hello packets and their CLVs
*
- * $Id: packet-isis-hello.c,v 1.16 2001/06/18 02:17:47 guy Exp $
+ * $Id: packet-isis-hello.c,v 1.17 2001/06/23 19:45:12 guy Exp $
* Stuart Stanley <stuarts@mxmail.net>
*
* Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@zing.org>
+ * By Gerald Combs <gerald@ethereal.com>
* Copyright 1998 Gerald Combs
- *
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -54,6 +53,8 @@ static int hf_isis_hello_lan_id = -1;
static int hf_isis_hello_local_circuit_id = -1;
static int hf_isis_hello_clv_ipv4_int_addr = -1;
static int hf_isis_hello_clv_ipv6_int_addr = -1;
+static int hf_isis_hello_clv_ptp_adj = -1;
+static int hf_isis_hello_clv_mt = -1;
static gint ett_isis_hello = -1;
static gint ett_isis_hello_clv_area_addr = -1;
@@ -64,6 +65,8 @@ static gint ett_isis_hello_clv_nlpid = -1;
static gint ett_isis_hello_clv_auth = -1;
static gint ett_isis_hello_clv_ipv4_int_addr = -1;
static gint ett_isis_hello_clv_ipv6_int_addr = -1;
+static gint ett_isis_hello_clv_ptp_adj = -1;
+static gint ett_isis_hello_clv_mt = -1;
static const value_string isis_hello_circuit_type_vals[] = {
{ ISIS_HELLO_TYPE_RESERVED, "Reserved 0 (discard PDU)"},
@@ -89,6 +92,12 @@ static void dissect_hello_ipv6_int_addr_clv(const u_char *pd, int offset,
guint length, int id_length, frame_data *fd, proto_tree *tree);
static void dissect_hello_auth_clv(const u_char *pd, int offset,
guint length, int id_length, frame_data *fd, proto_tree *tree);
+static void dissect_hello_ptp_adj_clv(const u_char *pd, int offset,
+ guint length, int id_length, frame_data *fd, proto_tree *tree);
+static void dissect_hello_mt_clv(const u_char *pd, int offset,
+ guint length, int id_length, frame_data *fd, proto_tree *tree);
+
+
static const isis_clv_handle_t clv_l1_hello_opts[] = {
{
@@ -140,6 +149,12 @@ static const isis_clv_handle_t clv_l1_hello_opts[] = {
dissect_hello_auth_clv
},
{
+ ISIS_CLV_L1H_MT,
+ "Multi Topology",
+ &ett_isis_hello_clv_mt,
+ dissect_hello_mt_clv
+ },
+ {
0,
"",
NULL,
@@ -197,6 +212,12 @@ static const isis_clv_handle_t clv_l2_hello_opts[] = {
dissect_hello_auth_clv
},
{
+ ISIS_CLV_L2H_MT,
+ "Multi Topology",
+ &ett_isis_hello_clv_mt,
+ dissect_hello_mt_clv
+ },
+ {
0,
"",
NULL,
@@ -248,6 +269,18 @@ static const isis_clv_handle_t clv_ptp_hello_opts[] = {
dissect_hello_auth_clv
},
{
+ ISIS_CLV_PTP_ADJ,
+ "point-to-point Adjacency State",
+ &ett_isis_hello_clv_ptp_adj,
+ dissect_hello_ptp_adj_clv
+ },
+ {
+ ISIS_CLV_PTP_MT,
+ "Multi Topology",
+ &ett_isis_hello_clv_mt,
+ dissect_hello_mt_clv
+ },
+ {
0,
"",
NULL,
@@ -280,6 +313,32 @@ dissect_hello_nlpid_clv(const u_char *pd, int offset,
}
/*
+ * Name: dissect_hello_mt_clv()
+ *
+ * Description:
+ * Decode for a hello packets Multi Topology clv. Calls into the
+ * clv common one.
+ *
+ * Input:
+ * u_char * : packet data
+ * int : current offset into packet data
+ * guint : length of this clv
+ * int : length of IDs in packet.
+ * frame_data * : frame data
+ * proto_tree * : proto tree to build on (may be null)
+ *
+ * Output:
+ * void, will modify proto_tree if not null.
+ */
+
+static void
+dissect_hello_mt_clv(const u_char *pd, int offset,
+ guint length, int id_length, frame_data *fd, proto_tree *tree) {
+ isis_dissect_mt_clv(pd, offset, length, fd, tree,
+ hf_isis_hello_clv_mt );
+}
+
+/*
* Name: dissect_hello_ip_int_addr_clv()
*
* Description:
@@ -379,6 +438,62 @@ dissect_hello_area_address_clv(const u_char *pd, int offset,
isis_dissect_area_address_clv(pd, offset, length, fd, tree );
}
+void
+dissect_hello_ptp_adj_clv(const u_char *pd, int offset,
+ guint length, int id_length, frame_data *fd, proto_tree *tree ) {
+
+ char adj_state[20];
+
+ switch((int)*(pd+offset)) {
+ case 0:
+ strcpy(adj_state,"Up");
+ break;
+ case 1:
+ strcpy(adj_state,"Initializing");
+ break;
+ case 2:
+ strcpy(adj_state,"Down");
+ break;
+ default:
+ strcpy(adj_state,"<illegal value !!!>");
+ }
+
+ switch(length) {
+ case 1:
+ proto_tree_add_text ( tree, NullTVB, offset, 1,
+ "Adjacency State: %s", adj_state );
+ break;
+ case 5:
+ proto_tree_add_text ( tree, NullTVB, offset, 1,
+ "Adjacency State: %s", adj_state );
+ proto_tree_add_text ( tree, NullTVB, offset+1, 4,
+ "Extended Local Circuit ID: %d", (gint32)*(pd+offset+1) );
+ break;
+ case 11:
+ proto_tree_add_text ( tree, NullTVB, offset, 1,
+ "Adjacency State: %s", adj_state );
+ proto_tree_add_text ( tree, NullTVB, offset+1, 4,
+ "Extended Local Circuit ID: %d", (gint32)*(pd+offset+1) );
+ proto_tree_add_text ( tree, NullTVB, offset+5, 6,
+ "Neighbor System ID: %s", print_system_id( pd+offset+5, 6 ) );
+ break;
+ case 15:
+ proto_tree_add_text ( tree, NullTVB, offset, 1,
+ "Adjacency State: %s", adj_state );
+ proto_tree_add_text ( tree, NullTVB, offset+1, 4,
+ "Extended Local Circuit ID: %d", (gint32)*(pd+offset+1) );
+ proto_tree_add_text ( tree, NullTVB, offset+5, 6,
+ "Neighbor System ID: %s", print_system_id( pd+offset+5, 6 ) );
+ proto_tree_add_text ( tree, NullTVB, offset+11, 4,
+ "Neighbor Extended Local Circuit ID: %d", (gint32)*(pd+offset+11) );
+ break;
+ default:
+ isis_dissect_unknown(offset, length, tree, fd,
+ "malformed TLV (%d vs 1,5,11,15)", length );
+ return;
+ }
+}
+
/*
* Name: isis_dissect_is_neighbors_clv()
*
@@ -629,6 +744,10 @@ proto_register_isis_hello(void) {
{ "IPv6 interface address ", "isis_hello.clv_ipv6_int_addr",
FT_IPv6, BASE_NONE, NULL, 0x0, "", HFILL }},
+ { &hf_isis_hello_clv_ptp_adj,
+ { "point-to-point Adjacency ", "isis_hello.clv_ptp_adj",
+ FT_UINT8, BASE_DEC, NULL, 0x0, "" }},
+
};
static gint *ett[] = {
&ett_isis_hello,
@@ -639,7 +758,9 @@ proto_register_isis_hello(void) {
&ett_isis_hello_clv_nlpid,
&ett_isis_hello_clv_auth,
&ett_isis_hello_clv_ipv4_int_addr,
- &ett_isis_hello_clv_ipv6_int_addr
+ &ett_isis_hello_clv_ipv6_int_addr,
+ &ett_isis_hello_clv_ptp_adj,
+ &ett_isis_hello_clv_mt
};
proto_isis_hello = proto_register_protocol("ISIS HELLO",
diff --git a/packet-isis-hello.h b/packet-isis-hello.h
index 4e9c67054a..d82d74c9d3 100644
--- a/packet-isis-hello.h
+++ b/packet-isis-hello.h
@@ -1,13 +1,12 @@
/* packet-isis-hello.h
* Declares for hello handling inside isis.
*
- * $Id: packet-isis-hello.h,v 1.3 2001/05/14 18:40:15 guy Exp $
+ * $Id: packet-isis-hello.h,v 1.4 2001/06/23 19:45:12 guy Exp $
* Stuart Stanley <stuarts@mxmail.net>
*
* Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@zing.org>
+ * By Gerald Combs <gerald@ethereal.com>
* Copyright 1998 Gerald Combs
- *
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -45,12 +44,14 @@
/*
* detail clv information on l1 hello packets
*/
-#define ISIS_CLV_L1H_AREA_ADDRESS 1
-#define ISIS_CLV_L1H_IS_NEIGHBORS 6
-#define ISIS_CLV_L1H_PADDING 8
-#define ISIS_CLV_L1H_NLPID 129
-#define ISIS_CLV_L1H_IP_INTERFACE_ADDR 132
+#define ISIS_CLV_L1H_AREA_ADDRESS 1
+#define ISIS_CLV_L1H_IS_NEIGHBORS 6
+#define ISIS_CLV_L1H_PADDING 8
+#define ISIS_CLV_L1H_NLPID 129
+#define ISIS_CLV_L1H_IP_INTERFACE_ADDR 132
+#define ISIS_CLV_L1H_MT 229
#define ISIS_CLV_L1H_IPv6_INTERFACE_ADDR 232
+
/*
* Note, the spec say 133, but everyone seems to use 10. Any clue on why
* this is would be appreciated!
@@ -61,11 +62,12 @@
/*
* detail clv information on l2 hello packets
*/
-#define ISIS_CLV_L2H_AREA_ADDRESS 1
-#define ISIS_CLV_L2H_IS_NEIGHBORS 6
-#define ISIS_CLV_L2H_PADDING 8
-#define ISIS_CLV_L2H_NLPID 129
-#define ISIS_CLV_L2H_IP_INTERFACE_ADDR 132
+#define ISIS_CLV_L2H_AREA_ADDRESS 1
+#define ISIS_CLV_L2H_IS_NEIGHBORS 6
+#define ISIS_CLV_L2H_PADDING 8
+#define ISIS_CLV_L2H_NLPID 129
+#define ISIS_CLV_L2H_IP_INTERFACE_ADDR 132
+#define ISIS_CLV_L2H_MT 229
#define ISIS_CLV_L2H_IPv6_INTERFACE_ADDR 232
/*
* Note, the spec say 133, but everyone seems to use 10. Any clue on why
@@ -77,11 +79,13 @@
/*
* detail clv information on PTP hello packets
*/
-#define ISIS_CLV_PTP_AREA_ADDRESS 1
-#define ISIS_CLV_PTP_PADDING 8
-#define ISIS_CLV_PTP_NLPID 129
-#define ISIS_CLV_PTP_IP_INTERFACE_ADDR 132
+#define ISIS_CLV_PTP_AREA_ADDRESS 1
+#define ISIS_CLV_PTP_PADDING 8
+#define ISIS_CLV_PTP_NLPID 129
+#define ISIS_CLV_PTP_IP_INTERFACE_ADDR 132
+#define ISIS_CLV_PTP_MT 229
#define ISIS_CLV_PTP_IPv6_INTERFACE_ADDR 232
+#define ISIS_CLV_PTP_ADJ 240
/*
* Note, the spec say 133, but everyone seems to use 10. Any clue on why
* this is would be appreciated!
diff --git a/packet-isis-lsp.c b/packet-isis-lsp.c
index cd2b3f741f..36e6dc72c7 100644
--- a/packet-isis-lsp.c
+++ b/packet-isis-lsp.c
@@ -1,13 +1,12 @@
/* packet-isis-lsp.c
* Routines for decoding isis lsp packets and their CLVs
*
- * $Id: packet-isis-lsp.c,v 1.17 2001/06/18 02:17:47 guy Exp $
+ * $Id: packet-isis-lsp.c,v 1.18 2001/06/23 19:45:12 guy Exp $
* Stuart Stanley <stuarts@mxmail.net>
*
* Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@zing.org>
+ * By Gerald Combs <gerald@ethereal.com>
* Copyright 1998 Gerald Combs
- *
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -60,6 +59,7 @@ static int hf_isis_lsp_checksum = -1;
static int hf_isis_lsp_clv_ipv4_int_addr = -1;
static int hf_isis_lsp_clv_ipv6_int_addr = -1;
static int hf_isis_lsp_clv_te_router_id = -1;
+static int hf_isis_lsp_clv_mt = -1;
static gint ett_isis_lsp = -1;
static gint ett_isis_lsp_clv_area_addr = -1;
@@ -82,6 +82,9 @@ static gint ett_isis_lsp_clv_ext_ip_reachability = -1; /* CLV 135 */
static gint ett_isis_lsp_part_of_clv_ext_ip_reachability = -1;
static gint ett_isis_lsp_clv_ipv6_reachability = -1; /* CLV 236 */
static gint ett_isis_lsp_part_of_clv_ipv6_reachability = -1;
+static gint ett_isis_lsp_clv_mt = -1;
+static gint ett_isis_lsp_clv_mt_is = -1;
+static gint ett_isis_lsp_part_of_clv_mt_is = -1;
static const char *isis_lsp_attached_bits[] = {
"error", "expense", "delay", "default" };
@@ -130,6 +133,10 @@ static void dissect_lsp_l1_auth_clv(const u_char *pd, int offset,
guint length, int id_length, frame_data *fd, proto_tree *tree);
static void dissect_lsp_l2_auth_clv(const u_char *pd, int offset,
guint length, int id_length, frame_data *fd, proto_tree *tree);
+static void dissect_lsp_mt_clv(const u_char *pd, int offset,
+ guint length, int id_length, frame_data *fd, proto_tree *tree);
+static void dissect_lsp_mt_is_reachability_clv(const u_char *pd, int offset,
+ guint length, int id_length, frame_data *fd, proto_tree *tree);
static const isis_clv_handle_t clv_l1_lsp_opts[] = {
{
@@ -140,7 +147,7 @@ static const isis_clv_handle_t clv_l1_lsp_opts[] = {
},
{
ISIS_CLV_L1_LSP_IS_NEIGHBORS,
- "IS Neighbor(s)",
+ "IS Reachability",
&ett_isis_lsp_clv_is_neighbors,
dissect_lsp_l1_is_neighbors_clv
},
@@ -156,7 +163,7 @@ static const isis_clv_handle_t clv_l1_lsp_opts[] = {
&ett_isis_lsp_clv_ext_is_reachability,
dissect_lsp_ext_is_reachability_clv
},
- {
+ {
ISIS_CLV_L1_LSP_IP_INT_REACHABLE,
"IP Internal reachability",
&ett_isis_lsp_clv_ip_reachability,
@@ -223,6 +230,19 @@ static const isis_clv_handle_t clv_l1_lsp_opts[] = {
dissect_lsp_l1_auth_clv
},
{
+ ISIS_CLV_L1_LSP_MT,
+ "Multi Topology",
+ &ett_isis_lsp_clv_mt,
+ dissect_lsp_mt_clv
+ },
+ {
+ ISIS_CLV_L1_LSP_MT_IS_REACHABLE,
+ "Multi Topology IS Reachability",
+ &ett_isis_lsp_clv_mt_is,
+ dissect_lsp_mt_is_reachability_clv
+ },
+
+ {
0,
"",
NULL,
@@ -239,7 +259,7 @@ static const isis_clv_handle_t clv_l2_lsp_opts[] = {
},
{
ISIS_CLV_L2_LSP_IS_NEIGHBORS,
- "IS Neighbor(s)",
+ "IS Reachability",
&ett_isis_lsp_clv_is_neighbors,
dissect_lsp_l2_is_neighbors_clv
},
@@ -328,6 +348,18 @@ static const isis_clv_handle_t clv_l2_lsp_opts[] = {
dissect_lsp_l2_auth_clv
},
{
+ ISIS_CLV_L2_LSP_MT,
+ "Multi Topology",
+ &ett_isis_lsp_clv_mt,
+ dissect_lsp_mt_clv
+ },
+ {
+ ISIS_CLV_L2_LSP_MT_IS_REACHABLE,
+ "Multi Topology IS Reachability",
+ &ett_isis_lsp_clv_mt_is,
+ dissect_lsp_mt_is_reachability_clv
+ },
+ {
0,
"",
NULL,
@@ -549,8 +581,8 @@ dissect_lsp_ext_ip_reachability_clv(const u_char *pd, int offset,
"Metric: %d, Distribution: %s", pntohl (&pd[offset]), ((ctrl_info & 0x80) == 0) ? "up" : "down" );
proto_tree_add_text (subtree, NullTVB, offset+4, 1,
- "Sub_CLV(s): %s",
- ((ctrl_info & 0x40) == 0) ? "no" : "yes" );
+ "%s sub-TLVs present",
+ ((ctrl_info & 0x40) == 0) ? "no" : "" );
len = 5 + byte_length;
if ((ctrl_info & 0x40) != 0)
@@ -616,7 +648,7 @@ dissect_lsp_ipv6_reachability_clv(const u_char *pd, int offset,
"Reserved bits: 0x%x",
(ctrl_info & 0x1f) );
proto_tree_add_text (ntree, NullTVB, offset+4, 1,
- "Sub_CLV(s): %s",
+ "sub-TLVs: %s",
((ctrl_info & 0x20) == 0) ? "no" : "yes" );
len = 6 + byte_length;
@@ -653,6 +685,32 @@ dissect_lsp_nlpid_clv(const u_char *pd, int offset,
}
/*
+ * Name: dissect_lsp_mt_clv()
+ *
+ * Description:
+ * Decode for a lsp packets Multi Topology clv. Calls into the
+ * clv common one.
+ *
+ * Input:
+ * u_char * : packet data
+ * int : current offset into packet data
+ * guint : length of this clv
+ * int : length of IDs in packet.
+ * frame_data * : frame data
+ * proto_tree * : proto tree to build on (may be null)
+ *
+ * Output:
+ * void, will modify proto_tree if not null.
+ */
+
+static void
+dissect_lsp_mt_clv(const u_char *pd, int offset,
+ guint length, int id_length, frame_data *fd, proto_tree *tree) {
+ isis_dissect_mt_clv(pd, offset, length, fd, tree,
+ hf_isis_lsp_clv_mt );
+}
+
+/*
* Name: dissect_lsp_hostname_clv()
*
* Description:
@@ -670,6 +728,7 @@ dissect_lsp_nlpid_clv(const u_char *pd, int offset,
* Output:
* void, will modify proto_tree if not null.
*/
+
static void
dissect_lsp_hostname_clv(const u_char *pd, int offset,
guint length, int id_length, frame_data *fd, proto_tree *tree) {
@@ -935,12 +994,6 @@ dissect_lsp_eis_neighbors_clv_inner(const u_char *pd, int offset,
ISIS_LSP_CLV_METRIC_IE(pd[offset+3]) ? "External" : "Internal");
}
-
-/* this is redundant information
- Proto_tree_add_text ( ntree, NullTVB, offset + 4, id_length,
- "Neighbour ID: %s",
- print_system_id( pd + offset + 4, id_length ) );
-*/
}
offset += tlen;
length -= tlen;
@@ -1192,7 +1245,7 @@ dissect_lsp_ext_is_reachability_clv(const u_char *pd, int offset,
subclvs_len = pd[offset+10];
if (subclvs_len == 0) {
- proto_tree_add_text (ntree, NullTVB, offset+10, 1, "No sub-CLV");
+ proto_tree_add_text (ntree, NullTVB, offset+10, 1, "no sub-TLVs present");
}
else {
i = 0;
@@ -1250,6 +1303,79 @@ dissect_lsp_ext_is_reachability_clv(const u_char *pd, int offset,
}
}
+/* MT IS */
+
+static void
+dissect_lsp_mt_is_reachability_clv(const u_char *pd, int offset,
+ guint length, int id_length, frame_data *fd, proto_tree *tree) {
+ proto_item *ti;
+ proto_tree *ntree = NULL;
+ guint8 subclvs_len;
+ guint8 len;
+
+ int mt_block;
+ char mt_desc[60];
+
+ if (!tree) return;
+
+ while (length > 0) {
+
+ /* fetch two bytes */
+
+ mt_block=(*(pd+offset)<<8)+(*(pd+offset+1));
+
+
+ /* mask out the lower 12 bits */
+ switch(mt_block&0x0fff) {
+ case 0:
+ strcpy(mt_desc,"IPv4 unicast");
+ break;
+ case 1:
+ strcpy(mt_desc,"In-Band Management");
+ break;
+ case 2:
+ strcpy(mt_desc,"IPv6 unicast");
+ break;
+ case 3:
+ strcpy(mt_desc,"Multicast");
+ break;
+ case 4095:
+ strcpy(mt_desc,"Development, Experimental or Proprietary");
+ break;
+ default:
+ strcpy(mt_desc,"Reserved for IETF Consensus");
+ }
+
+ proto_tree_add_text ( tree, NullTVB, offset, 2 ,
+ "%s Topology (0x%x)",
+ mt_desc,
+ mt_block&0xfff );
+
+ ti = proto_tree_add_text (tree, NullTVB, offset+2, 0,
+ "IS neighbor: %s",
+ print_system_id (&pd[offset+2], 7) );
+
+ ntree = proto_item_add_subtree (ti,
+ ett_isis_lsp_part_of_clv_mt_is );
+
+ proto_tree_add_text (ntree, NullTVB, offset+9, 3,
+ "Metric: %d", pntoh24 (&pd[offset+9]) );
+
+ subclvs_len = pd[offset+12];
+ if (subclvs_len == 0) {
+ proto_tree_add_text (ntree, NullTVB, offset+12, 1, "no sub-TLVs present");
+ } else {
+ proto_tree_add_text (ntree, NullTVB, offset+12, 1, "sub-TLVs present");
+ }
+
+ len = 13 + subclvs_len;
+ proto_item_set_len (ti, len);
+ offset += len;
+ length -= len;
+
+ }
+}
+
/*
* Name: dissect_lsp_partition_dis_clv()
*
@@ -1549,7 +1675,7 @@ proto_register_isis_lsp(void) {
BASE_DEC, NULL, 0x0, "", HFILL }},
{ &hf_isis_lsp_remaining_life,
- { "Remaining life", "isis_lsp.remaining_life", FT_UINT16,
+ { "Remaining lifetime", "isis_lsp.remaining_life", FT_UINT16,
BASE_DEC, NULL, 0x0, "", HFILL }},
{ &hf_isis_lsp_sequence_number,
@@ -1594,6 +1720,9 @@ proto_register_isis_lsp(void) {
&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,
};
proto_isis_lsp = proto_register_protocol(PROTO_STRING_LSP,
@@ -1601,5 +1730,3 @@ proto_register_isis_lsp(void) {
proto_register_field_array(proto_isis_lsp, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
}
-
-
diff --git a/packet-isis-lsp.h b/packet-isis-lsp.h
index 241df47387..3ea6818305 100644
--- a/packet-isis-lsp.h
+++ b/packet-isis-lsp.h
@@ -1,13 +1,12 @@
/* packet-isis-lsp.h
* Defines and such for LSP and their CLV decodes
*
- * $Id: packet-isis-lsp.h,v 1.7 2001/06/18 01:24:58 guy Exp $
+ * $Id: packet-isis-lsp.h,v 1.8 2001/06/23 19:45:12 guy Exp $
* Stuart Stanley <stuarts@mxmail.net>
*
* Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@zing.org>
+ * By Gerald Combs <gerald@ethereal.com>
* Copyright 1998 Gerald Combs
- *
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -69,6 +68,8 @@
#define ISIS_CLV_L1_LSP_TE_ROUTER_ID 134
#define ISIS_CLV_L1_LSP_EXT_IP_REACHABLE 135
#define ISIS_CLV_L1_LSP_HOSTNAME 137
+#define ISIS_CLV_L1_LSP_MT_IS_REACHABLE 222
+#define ISIS_CLV_L1_LSP_MT 229
#define ISIS_CLV_L1_LSP_IPv6_INTERFACE_ADDR 232
#define ISIS_CLV_L1_LSP_IPv6_REACHABLE 236
/*
@@ -94,6 +95,8 @@
#define ISIS_CLV_L2_LSP_TE_ROUTER_ID 134
#define ISIS_CLV_L2_LSP_EXT_IP_REACHABLE 135
#define ISIS_CLV_L2_LSP_HOSTNAME 137
+#define ISIS_CLV_L2_LSP_MT_IS_REACHABLE 222
+#define ISIS_CLV_L2_LSP_MT 229
#define ISIS_CLV_L2_LSP_IPv6_INTERFACE_ADDR 232
#define ISIS_CLV_L2_LSP_IPv6_REACHABLE 236
/*
@@ -114,9 +117,3 @@ extern void isis_lsp_decode_lsp_id(char *tstr, proto_tree *tree,
const u_char *pd, int offset, int id_length);
#endif /* _PACKET_ISIS_LSP_H */
-
-
-
-
-
-
diff --git a/packet-rsvp.c b/packet-rsvp.c
index b7ce1184bb..41e7a73ec1 100644
--- a/packet-rsvp.c
+++ b/packet-rsvp.c
@@ -3,7 +3,7 @@
*
* (c) Copyright Ashok Narayanan <ashokn@cisco.com>
*
- * $Id: packet-rsvp.c,v 1.44 2001/06/18 02:17:51 guy Exp $
+ * $Id: packet-rsvp.c,v 1.45 2001/06/23 19:45:12 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@@ -96,6 +96,7 @@ static gint ett_rsvp_label = -1;
static gint ett_rsvp_label_request = -1;
static gint ett_rsvp_session_attribute = -1;
static gint ett_rsvp_session_attribute_flags = -1;
+static gint ett_rsvp_hello_obj = -1;
static gint ett_rsvp_explicit_route = -1;
static gint ett_rsvp_explicit_route_subobj = -1;
static gint ett_rsvp_record_route = -1;
@@ -117,7 +118,8 @@ typedef enum {
RSVP_MSG_RTEAR_CONFIRM=10,
RSVP_MSG_BUNDLE = 12,
RSVP_MSG_ACK,
- RSVP_MSG_SREFRESH = 15
+ RSVP_MSG_SREFRESH = 15,
+ RSVP_MSG_HELLO = 20
} rsvp_message_types;
static value_string message_type_vals[] = {
@@ -132,6 +134,7 @@ static value_string message_type_vals[] = {
{RSVP_MSG_BUNDLE, "BUNDLE Message"},
{RSVP_MSG_ACK, "ACK Message"},
{RSVP_MSG_SREFRESH, "SREFRESH Message"},
+ {RSVP_MSG_HELLO, "HELLO Message"},
{0, NULL}
};
@@ -168,6 +171,7 @@ enum rsvp_classes {
RSVP_CLASS_MESSAGE_ID_LIST,
RSVP_CLASS_SESSION_ATTRIBUTE=207,
+ RSVP_CLASS_HELLO = 22
};
static value_string rsvp_class_vals[] = {
@@ -194,6 +198,7 @@ static value_string rsvp_class_vals[] = {
{RSVP_CLASS_MESSAGE_ID, "MESSAGE-ID object"},
{RSVP_CLASS_MESSAGE_ID_ACK, "MESSAGE-ID ACK/NACK object"},
{RSVP_CLASS_MESSAGE_ID_LIST, "MESSAGE-ID LIST object"},
+ {RSVP_CLASS_HELLO, "HELLO object"},
{0, NULL}
};
@@ -367,7 +372,7 @@ enum rsvp_filter_keys {
RSVPF_ACK,
RSVPF_JUNK14,
RSVPF_SREFRESH,
-
+ RSVPF_HELLO,
/* Does the message contain an object of this type? */
RSVPF_OBJECT,
/* Object present shorthands */
@@ -396,7 +401,7 @@ enum rsvp_filter_keys {
RSVPF_MESSAGE_ID,
RSVPF_MESSAGE_ID_ACK,
RSVPF_MESSAGE_ID_LIST,
-
+ RSVPF_HELLO_OBJ,
RSVPF_SESSION_ATTRIBUTE,
RSVPF_UNKNOWN_OBJ,
@@ -430,6 +435,10 @@ static hf_register_info rsvpf_info[] = {
{ "Path Message", "rsvp.path", FT_BOOLEAN, BASE_NONE, NULL, 0x0,
"", HFILL }},
+ {&rsvp_filter[RSVPF_HELLO],
+ { "HELLO Message", "rsvp.hello", FT_BOOLEAN, BASE_NONE, NULL, 0x0,
+ "" }},
+
{&rsvp_filter[RSVPF_RESV],
{ "Resv Message", "rsvp.resv", FT_BOOLEAN, BASE_NONE, NULL, 0x0,
"", HFILL }},
@@ -472,6 +481,10 @@ static hf_register_info rsvpf_info[] = {
{ "HOP", "rsvp.hop", FT_NONE, BASE_NONE, NULL, 0x0,
"", HFILL }},
+ {&rsvp_filter[RSVPF_HELLO_OBJ],
+ { "HELLO Request/Ack", "rsvp.hello_obj", FT_NONE, BASE_NONE, NULL, 0x0,
+ "" }},
+
{&rsvp_filter[RSVPF_INTEGRITY],
{ "INTEGRITY", "rsvp.integrity", FT_NONE, BASE_NONE, NULL, 0x0,
"", HFILL }},
@@ -552,6 +565,10 @@ static hf_register_info rsvpf_info[] = {
{ "MESSAGE-ID LIST", "rsvp.msgid_list", FT_NONE, BASE_NONE, NULL, 0x0,
"", HFILL }},
+ {&rsvp_filter[RSVPF_HELLO_OBJ],
+ { "HELLO Message", "rsvp.hello", FT_NONE, BASE_NONE, NULL, 0x0,
+ "" }},
+
{&rsvp_filter[RSVPF_UNKNOWN_OBJ],
{ "Unknown object", "rsvp.obj_unknown", FT_NONE, BASE_NONE, NULL, 0x0,
"", HFILL }},
@@ -614,9 +631,12 @@ static inline int rsvp_class_to_filter_num(int classnum)
case RSVP_CLASS_RECORD_ROUTE :
case RSVP_CLASS_MESSAGE_ID :
case RSVP_CLASS_MESSAGE_ID_ACK :
- case RSVP_CLASS_MESSAGE_ID_LIST :
+ case RSVP_CLASS_MESSAGE_ID_LIST :
return classnum + RSVPF_OBJECT;
break;
+ case RSVP_CLASS_HELLO :
+ return RSVPF_HELLO_OBJ;
+ break;
case RSVP_CLASS_SESSION_ATTRIBUTE :
return RSVPF_SESSION_ATTRIBUTE;
@@ -1957,6 +1977,32 @@ dissect_rsvp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
}
break;
+ case RSVP_CLASS_HELLO:
+ rsvp_object_tree = proto_item_add_subtree(ti, ett_rsvp_hello_obj);
+ proto_tree_add_text(rsvp_object_tree, tvb, offset, 2,
+ "Length: %u", obj_length);
+ proto_tree_add_text(rsvp_object_tree, tvb, offset+2, 1,
+ "Class number: %u - %s",
+ class, object_type);
+ switch(type) {
+ case 1:
+ proto_tree_add_text(rsvp_object_tree, tvb, offset+3, 1,
+ "C-Type: 1 - HELLO REQUEST object");
+ break;
+ case 2:
+ proto_tree_add_text(rsvp_object_tree, tvb, offset+3, 1,
+ "C-Type: 2 - HELLO ACK object");
+ break;
+ };
+
+ proto_tree_add_text(rsvp_object_tree, tvb, offset+4, 4,
+ "Source Instance: 0x%x",tvb_get_ntohl(tvb, offset+4));
+
+ proto_tree_add_text(rsvp_object_tree, tvb, offset+8, 4,
+ "Destination Instance: 0x%x",tvb_get_ntohl(tvb, offset+8));
+
+ break;
+
default :
rsvp_object_tree = proto_item_add_subtree(ti, ett_rsvp_unknown_class);
proto_tree_add_text(rsvp_object_tree, tvb, offset, 2,
@@ -2010,6 +2056,7 @@ proto_register_rsvp(void)
&ett_rsvp_explicit_route_subobj,
&ett_rsvp_record_route,
&ett_rsvp_record_route_subobj,
+ &ett_rsvp_hello_obj,
&ett_rsvp_unknown_class,
};