Ethereal-dev: [Ethereal-dev] BGP4 Cooperative Route Filtering Capability support
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Motonori Shindo <mshindo@xxxxxxxxxxx>
Date: Sun, 04 Nov 2001 01:29:49 +0900 (JST)
Hi, I have added a Cooporative Route Filtering Capability support based on draft-ietf-idr-route-filter-04.txt. I also fixed a bug in Route Refresh Message dissector. A patch against current CVS repository attached. Regards, =--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--= +----+----+ |.. .| | Motonori Shindo |_~__| | | .. |~~_~| Sr. Systems Engineer | . | | CoSine Communications Inc. +----+----+ C o S i n e e-mail: mshindo@xxxxxxxxxxxxx Communications =--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=
Index: packet-bgp.c
===================================================================
RCS file: /cvsroot/ethereal/packet-bgp.c,v
retrieving revision 1.47
diff -u -r1.47 packet-bgp.c
--- packet-bgp.c 2001/09/13 22:06:54 1.47
+++ packet-bgp.c 2001/11/03 16:51:29
@@ -197,6 +197,21 @@
{ 0, NULL },
};
+/* ORF Type, draft-ietf-idr-route-filter-04.txt */
+static const value_string orf_type_vals[] = {
+ { 2, "Communities ORF-Type" },
+ { 3, "Extended Communities ORF-Type" },
+ { 0, NULL },
+};
+
+/* ORF Send/Receive, draft-ietf-idr-route-filter-04.txt */
+static const value_string orf_send_recv_vals[] = {
+ { 1, "Receive" },
+ { 2, "Send" },
+ { 3, "Both" },
+ { 0, NULL },
+};
+
/* Maximal size of an IP address string */
#define MAX_SIZE_OF_IP_ADDR_STRING 16
@@ -491,6 +506,9 @@
proto_tree *subtree1; /* subtree for an option */
proto_tree *subtree2; /* subtree for an option */
proto_tree *subtree3; /* subtree for an option */
+ guint8 orfnum; /* number of ORFs */
+ guint8 orftype; /* ORF Type */
+ guint8 orfsendrecv; /* ORF Send/Receive */
/* snarf OPEN message */
tvb_memcpy(tvb, bgpo.bgpo_marker, offset, BGP_MIN_OPEN_MSG_SIZE);
@@ -637,6 +655,60 @@
}
p += clen;
break;
+ case BGP_CAPABILITY_COOPERATIVE_ROUTE_FILTERING:
+ ti = proto_tree_add_text(subtree1, tvb, p - 2,
+ 2 + clen,
+ "Cooperative route filtering capability (%u %s)",
+ 2 + clen, (clen == 1) ? "byte" : "bytes");
+ subtree2 = proto_item_add_subtree(ti, ett_bgp_option);
+ proto_tree_add_text(subtree2, tvb, p - 2,
+ 1, "Capability code: Cooperative route filtering (%d)",
+ ctype);
+ proto_tree_add_text(subtree2, tvb, p - 1,
+ 1, "Capability length: %u %s", clen,
+ (clen == 1) ? "byte" : "bytes");
+ ti = proto_tree_add_text(subtree2, tvb, p,
+ clen, "Capability value");
+ subtree3 = proto_item_add_subtree(ti, ett_bgp_option);
+ /* AFI */
+ i = tvb_get_ntohs(tvb, p);
+ proto_tree_add_text(subtree3, tvb, p,
+ 2, "Address family identifier: %s (%u)",
+ val_to_str(i, afn_vals, "Unknown"), i);
+ p += 2;
+ /* Reserved */
+ proto_tree_add_text(subtree3, tvb, p,
+ 1, "Reserved: 1 byte");
+ p++;
+ /* SAFI */
+ i = tvb_get_guint8(tvb, p);
+ proto_tree_add_text(subtree3, tvb, p,
+ 1, "Subsequent address family identifier: %s (%u)",
+ val_to_str(i, bgpattr_nlri_safi,
+ i >= 128 ? "Vendor specific" : "Unknown"), i);
+ p++;
+ /* Number of ORFs */
+ orfnum = tvb_get_guint8(tvb, p);
+ proto_tree_add_text(subtree3, tvb, p,
+ 1, "Number of ORFs: %u", orfnum);
+ p++;
+ for (i=0; i<orfnum; i++) {
+ /* ORF Type */
+ orftype = tvb_get_guint8(tvb, p);
+ proto_tree_add_text(subtree3, tvb, p,
+ 1, "ORF Type: %s (%u)",
+ val_to_str(orftype, orf_type_vals,"Unknown"),
+ orftype);
+ p++;
+ /* Send/Receive */
+ orfsendrecv = tvb_get_guint8(tvb, p);
+ proto_tree_add_text(subtree3, tvb, p,
+ 1, "Send/Receive: %s (%u)",
+ val_to_str(orfsendrecv, orf_send_recv_vals,
+ "Uknown"), orfsendrecv);
+ p++;
+ }
+ break;
/* unknown capability */
default:
ti = proto_tree_add_text(subtree, tvb, p - 2,
@@ -1558,12 +1630,12 @@
val_to_str(i, afn_vals, "Unknown"), i);
offset += 2;
/* Reserved */
- proto_tree_add_text(tree, tvb, offset + BGP_HEADER_SIZE + 2, 1,
+ proto_tree_add_text(tree, tvb, offset + BGP_HEADER_SIZE, 1,
"Reserved: 1 byte");
offset++;
/* SAFI */
- i = tvb_get_guint8(tvb, offset);
- proto_tree_add_text(tree, tvb, offset + BGP_HEADER_SIZE + 3, 1,
+ i = tvb_get_guint8(tvb, offset + BGP_HEADER_SIZE);
+ proto_tree_add_text(tree, tvb, offset + BGP_HEADER_SIZE, 1,
"Subsequent address family identifier: %s (%u)",
val_to_str(i, bgpattr_nlri_safi,
i >= 128 ? "Vendor specific" : "Unknown"),
Index: packet-bgp.h
===================================================================
RCS file: /cvsroot/ethereal/packet-bgp.h,v
retrieving revision 1.15
diff -u -r1.15 packet-bgp.h
--- packet-bgp.h 2001/07/21 10:27:12 1.15
+++ packet-bgp.h 2001/11/03 16:51:30
@@ -109,6 +109,7 @@
#define BGP_CAPABILITY_RESERVED 0 /* RFC2434 */
#define BGP_CAPABILITY_MULTIPROTOCOL 1 /* RFC2858 */
#define BGP_CAPABILITY_ROUTE_REFRESH 2 /* RFC2918 */
+#define BGP_CAPABILITY_COOPERATIVE_ROUTE_FILTERING 3 /* draft-ietf-idr-route-filter-04.txt */
#define BGP_CAPABILITY_ROUTE_REFRESH_CISCO 0x80 /* Cisco */
- Follow-Ups:
- Prev by Date: Re: [Ethereal-dev] YADP (Yet Another Diameter Patch)
- Next by Date: Re: [Ethereal-dev] BGP4 Cooperative Route Filtering Capability support
- Previous by thread: Re: [Ethereal-dev] YADP (Yet Another Diameter Patch)
- Next by thread: Re: [Ethereal-dev] BGP4 Cooperative Route Filtering Capability support
- Index(es):





