diff options
-rw-r--r-- | AUTHORS | 1 | ||||
-rw-r--r-- | packet-isis-clv.c | 57 | ||||
-rw-r--r-- | packet-isis-clv.h | 7 | ||||
-rw-r--r-- | packet-isis-hello.c | 129 | ||||
-rw-r--r-- | packet-isis-hello.h | 38 | ||||
-rw-r--r-- | packet-isis-lsp.c | 165 | ||||
-rw-r--r-- | packet-isis-lsp.h | 15 | ||||
-rw-r--r-- | packet-rsvp.c | 57 |
8 files changed, 409 insertions, 60 deletions
@@ -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, }; |