Ethereal-dev: [Ethereal-dev] BGP L2-VPN fix
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Hannes Gredler <hannes@xxxxxxxxxxx>
Date: Tue, 27 Aug 2002 16:03:08 +0200
hi ethereal developers, attached a patch that opens up a subtree when decoding l2info extd communities; plus some bugfixes in the extd community dissector; /hannes
Index: packet-bgp.c
===================================================================
RCS file: /cvsroot/ethereal/packet-bgp.c,v
retrieving revision 1.65
diff -u -r1.65 packet-bgp.c
--- packet-bgp.c 2002/08/27 08:41:43 1.65
+++ packet-bgp.c 2002/08/27 13:58:55
@@ -272,7 +272,7 @@
static gint ett_bgp_cluster_list = -1; /* cluster list tree */
static gint ett_bgp_options = -1; /* optional parameters tree */
static gint ett_bgp_option = -1; /* an optional parameter tree */
-static gint ett_bgp_extended_communities = -1 ; /* extended communities list tree */
+static gint ett_bgp_extended_communities = -1 ; /* extended communities list tree */
static gint ett_bgp_orf = -1; /* orf (outbound route filter) tree */
static gint ett_bgp_orf_entry = -1; /* orf entry tree */
@@ -936,6 +936,7 @@
proto_tree *subtree; /* subtree for attributes */
proto_tree *subtree2; /* subtree for attributes */
proto_tree *subtree3; /* subtree for attributes */
+ proto_tree *subtree4; /* subtree for attributes */
proto_tree *as_paths_tree; /* subtree for AS_PATHs */
proto_tree *as_path_tree; /* subtree for AS_PATH */
proto_tree *communities_tree; /* subtree for COMMUNITIES */
@@ -1216,24 +1217,10 @@
case BGPTYPE_EXTENDED_COMMUNITY:
if (tlen %8 != 0)
break;
-
- /* (o + i + aoff) =
- (o + current attribute + aoff bytes to first tuple) */
- q = o + i + aoff;
- end = q + tlen;
- junk_buf_len=0;
- while (q < end) {
- ext_com = tvb_get_ntohs(tvb, q);
- junk_buf_len=snprintf(junk_buf+junk_buf_len,sizeof(junk_buf),"%s",
- val_to_str(ext_com,bgpext_com_type,"Unknown"));
- q = q + 8;
- if (q < end) junk_buf_len=snprintf(junk_buf+junk_buf_len, sizeof(junk_buf)-junk_buf_len, ", ");
- }
- junk_buf[junk_buf_len]='\0';
ti = proto_tree_add_text(subtree,tvb,o+i,tlen+aoff,
- "%s: %s (%u %s)",
+ "%s: (%u %s)",
val_to_str(bgpa.bgpa_type,bgpattr_type,"Unknown"),
- junk_buf, tlen + aoff,
+ tlen + aoff,
(tlen + aoff == 1) ? "byte" : "bytes");
break;
@@ -1678,8 +1665,8 @@
ti = proto_tree_add_text(subtree2,tvb,q,tlen, "Carried Extended communities");
subtree3 = proto_item_add_subtree(ti,ett_bgp_extended_communities) ;
- junk_buf_len=0;
while (q < end) {
+ junk_buf_len=0;
ext_com = tvb_get_ntohs(tvb,q) ;
junk_buf_len=snprintf(junk_buf+junk_buf_len, sizeof(junk_buf), "%s",
val_to_str(ext_com,bgpext_com_type,"Unknown"));
@@ -1688,18 +1675,24 @@
case BGP_EXT_COM_RO_0:
junk_buf_len+=snprintf(junk_buf+junk_buf_len, sizeof(junk_buf)-junk_buf_len, ": %u%s%d",
tvb_get_ntohs(tvb,q+2),":",tvb_get_ntohl(tvb,q+4));
+ junk_buf[junk_buf_len]='\0';
+ proto_tree_add_text(subtree3,tvb,q,8, "%s",junk_buf);
break ;
case BGP_EXT_COM_RT_1:
case BGP_EXT_COM_RO_1:
tvb_memcpy(tvb,ipaddr,q+2,4);
junk_buf_len+=snprintf(junk_buf+junk_buf_len, sizeof(junk_buf)-junk_buf_len, ": %s%s%u",
ip_to_str(ipaddr),":",tvb_get_ntohs(tvb,q+6));
+ junk_buf[junk_buf_len]='\0';
+ proto_tree_add_text(subtree3,tvb,q,8, "%s",junk_buf);
break;
case BGP_EXT_COM_VPN_ORIGIN:
case BGP_EXT_COM_OSPF_RID:
tvb_memcpy(tvb,ipaddr,q+2,4);
junk_buf_len+=snprintf(junk_buf+junk_buf_len, sizeof(junk_buf)-junk_buf_len, ": %s",
ip_to_str(ipaddr));
+ junk_buf[junk_buf_len]='\0';
+ proto_tree_add_text(subtree3,tvb,q,8, "%s",junk_buf);
break;
case BGP_EXT_COM_OSPF_RTYPE:
tvb_memcpy(tvb,ipaddr,q+2,4);
@@ -1713,24 +1706,48 @@
} else if (tvb_get_guint8(tvb,q+6)==(BGP_OSPF_RTYPE_EXT ||BGP_OSPF_RTYPE_NSSA ) ) {
junk_buf_len+=snprintf(junk_buf+junk_buf_len,sizeof(junk_buf)-junk_buf_len," E1");
}
+ junk_buf[junk_buf_len]='\0';
+ proto_tree_add_text(subtree3,tvb,q,8, "%s",junk_buf);
break;
case BGP_EXT_COM_LINKBAND:
tvb_memcpy(tvb,ipaddr,q+2,4); /* need to check on IEEE format on all platforms */
junk_buf_len+=snprintf(junk_buf+junk_buf_len, sizeof(junk_buf)-junk_buf_len, ": %.3f Mbps",
((double)*ipaddr)*8/1000000);
+ junk_buf[junk_buf_len]='\0';
+ proto_tree_add_text(subtree3,tvb,q,8, "%s",junk_buf);
break;
case BGP_EXT_COM_L2INFO:
- junk_buf_len+=snprintf(junk_buf+junk_buf_len, sizeof(junk_buf)-junk_buf_len, ": %s:Control Flags [0x%02x]:MTU %u",
- val_to_str(tvb_get_guint8(tvb,q+2),bgp_l2vpn_encaps,"Unknown"),
- tvb_get_guint8(tvb,q+3),
- tvb_get_ntohs(tvb,q+4));
- break;
+ junk_buf_len+=snprintf(junk_buf+junk_buf_len, sizeof(junk_buf)-junk_buf_len,
+ ": %s, Control Flags: %s%s%s%s%s, MTU: %u %s",
+ val_to_str(tvb_get_guint8(tvb,q+2),bgp_l2vpn_encaps,"Unknown"),
+ tvb_get_guint8(tvb,q+3) ? "" : "none",
+ tvb_get_ntohs(tvb,q+3)&0x08 ? "Q" : "",
+ tvb_get_ntohs(tvb,q+3)&0x04 ? "F" : "",
+ tvb_get_ntohs(tvb,q+3)&0x02 ? "C" : "",
+ tvb_get_ntohs(tvb,q+3)&0x01 ? "S" : "",
+ tvb_get_ntohs(tvb,q+4),
+ tvb_get_ntohs(tvb,q+4)==1 ? "byte" : "bytes");
+ junk_buf[junk_buf_len]='\0';
+ ti = proto_tree_add_text(subtree3,tvb,q,8, "%s",junk_buf);
+
+ subtree4 = proto_item_add_subtree(ti,ett_bgp_extended_communities) ;
+ proto_tree_add_text(subtree4,tvb,q+2,1, "Encapsulation: %s",
+ val_to_str(tvb_get_guint8(tvb,q+2),bgp_l2vpn_encaps,"Unknown"));
+ proto_tree_add_text(subtree4,tvb,q+3,1, "Control Flags: %s%sControl Word %s required, Sequenced delivery %s required",
+ tvb_get_ntohs(tvb,q+3)&0x08 ? "Q flag (Reserved) set" : "",
+ tvb_get_ntohs(tvb,q+3)&0x04 ? "F flag (reserved) set" : "",
+ tvb_get_ntohs(tvb,q+3)&0x02 ? "is" : "not",
+ tvb_get_ntohs(tvb,q+3)&0x01 ? "is" : "not");
+ proto_tree_add_text(subtree4,tvb,q+4,2, "MTU: %u %s",
+ tvb_get_ntohs(tvb,q+4),
+ tvb_get_ntohs(tvb,q+4)==1 ? "byte" : "bytes");
+ break;
default:
junk_buf_len+=snprintf(junk_buf+junk_buf_len, sizeof(junk_buf)-junk_buf_len, " ");
+ junk_buf[junk_buf_len]='\0';
+ proto_tree_add_text(subtree3,tvb,q,8, "%s",junk_buf);
break ;
}
- junk_buf[junk_buf_len]='\0';
- proto_tree_add_text(subtree3,tvb,q,8, "%s",junk_buf);
q = q + 8 ;
}
}
- Follow-Ups:
- Re: [Ethereal-dev] BGP L2-VPN fix
- From: Guy Harris
- Re: [Ethereal-dev] BGP L2-VPN fix
- Prev by Date: [Ethereal-dev] Re: trying to build with giop plugin using Solaris 2.7 and ethereal 0.9.6
- Next by Date: Re: [Ethereal-dev] Ethereal version not correct after build based on current CVS.
- Previous by thread: Re: [Ethereal-dev] Re: trying to build with giop plugin using Solaris 2.7 and ethereal 0.9.6
- Next by thread: Re: [Ethereal-dev] BGP L2-VPN fix
- Index(es):





