[Midnightbsd-cvs] src: print-bgp.c: fix print-bgp.c

laffer1 at midnightbsd.org laffer1 at midnightbsd.org
Wed Mar 25 12:56:50 EDT 2009


Log Message:
-----------
fix print-bgp.c

Modified Files:
--------------
    src/contrib/tcpdump:
        print-bgp.c (r1.2 -> r1.3)

-------------- next part --------------
Index: print-bgp.c
===================================================================
RCS file: /home/cvs/src/contrib/tcpdump/print-bgp.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -L contrib/tcpdump/print-bgp.c -L contrib/tcpdump/print-bgp.c -u -r1.2 -r1.3
--- contrib/tcpdump/print-bgp.c
+++ contrib/tcpdump/print-bgp.c
@@ -36,7 +36,7 @@
 
 #ifndef lint
 static const char rcsid[] _U_ =
-     "@(#) $Header: /tcpdump/master/tcpdump/print-bgp.c,v 1.91.2.6 2005/06/03 07:31:43 hannes Exp $";
+     "@(#) $Header: /tcpdump/master/tcpdump/print-bgp.c,v 1.91.2.12 2007/07/14 22:26:35 guy Exp $";
 #endif
 
 #include <tcpdump-stdinc.h>
@@ -50,6 +50,7 @@
 #include "extract.h"
 #include "bgp.h"
 #include "l2vpn.h"
+#include "af.h"
 
 struct bgp {
 	u_int8_t bgp_marker[16];
@@ -339,46 +340,6 @@
 #define BGP_COMMUNITY_NO_ADVERT			0xffffff02
 #define BGP_COMMUNITY_NO_EXPORT_SUBCONFED	0xffffff03
 
-/* RFC1700 address family numbers */
-#define AFNUM_INET	1
-#define AFNUM_INET6	2
-#define AFNUM_NSAP	3
-#define AFNUM_HDLC	4
-#define AFNUM_BBN1822	5
-#define AFNUM_802	6
-#define AFNUM_E163	7
-#define AFNUM_E164	8
-#define AFNUM_F69	9
-#define AFNUM_X121	10
-#define AFNUM_IPX	11
-#define AFNUM_ATALK	12
-#define AFNUM_DECNET	13
-#define AFNUM_BANYAN	14
-#define AFNUM_E164NSAP	15
-/* draft-kompella-ppvpn-l2vpn */
-#define AFNUM_L2VPN     196 /* still to be approved by IANA */
-
-static struct tok bgp_afi_values[] = {
-    { 0,                      "Reserved"},
-    { AFNUM_INET,             "IPv4"},
-    { AFNUM_INET6,            "IPv6"},
-    { AFNUM_NSAP,             "NSAP"},
-    { AFNUM_HDLC,             "HDLC"},
-    { AFNUM_BBN1822,          "BBN 1822"},
-    { AFNUM_802,              "802"},
-    { AFNUM_E163,             "E.163"},
-    { AFNUM_E164,             "E.164"},
-    { AFNUM_F69,              "F.69"},
-    { AFNUM_X121,             "X.121"},
-    { AFNUM_IPX,              "Novell IPX"},
-    { AFNUM_ATALK,            "Appletalk"},
-    { AFNUM_DECNET,           "Decnet IV"},
-    { AFNUM_BANYAN,           "Banyan Vines"},
-    { AFNUM_E164NSAP,         "E.164 with NSAP subaddress"},
-    { AFNUM_L2VPN,            "Layer-2 VPN"},
-    { 0, NULL},
-};
-
 /* Extended community type - draft-ietf-idr-bgp-ext-communities-05 */
 #define BGP_EXT_COM_RT_0        0x0002  /* Route Target,Format AS(2bytes):AN(4bytes) */
 #define BGP_EXT_COM_RT_1        0x0102  /* Route Target,Format IP address:AN(2bytes) */
@@ -403,6 +364,14 @@
 
 #define BGP_EXT_COM_L2INFO      0x800a  /* draft-kompella-ppvpn-l2vpn */
 
+/* http://www.cisco.com/en/US/tech/tk436/tk428/technologies_tech_note09186a00801eb09a.shtml  */
+#define BGP_EXT_COM_EIGRP_GEN   0x8800
+#define BGP_EXT_COM_EIGRP_METRIC_AS_DELAY  0x8801
+#define BGP_EXT_COM_EIGRP_METRIC_REL_NH_BW 0x8802
+#define BGP_EXT_COM_EIGRP_METRIC_LOAD_MTU  0x8803
+#define BGP_EXT_COM_EIGRP_EXT_REMAS_REMID  0x8804
+#define BGP_EXT_COM_EIGRP_EXT_REMPROTO_REMMETRIC 0x8805
+
 static struct tok bgp_extd_comm_flag_values[] = {
     { 0x8000,                  "vendor-specific"},
     { 0x4000,                  "non-transitive"},
@@ -427,6 +396,12 @@
     { BGP_EXT_COM_OSPF_RID,    "ospf-router-id"},
     { BGP_EXT_COM_OSPF_RID2,   "ospf-router-id"},
     { BGP_EXT_COM_L2INFO,      "layer2-info"}, 
+    { BGP_EXT_COM_EIGRP_GEN , "eigrp-general-route (flag, tag)" },
+    { BGP_EXT_COM_EIGRP_METRIC_AS_DELAY , "eigrp-route-metric (AS, delay)" },
+    { BGP_EXT_COM_EIGRP_METRIC_REL_NH_BW , "eigrp-route-metric (reliability, nexthop, bandwidth)" },
+    { BGP_EXT_COM_EIGRP_METRIC_LOAD_MTU , "eigrp-route-metric (load, MTU)" },
+    { BGP_EXT_COM_EIGRP_EXT_REMAS_REMID , "eigrp-external-route (remote-AS, remote-ID)" },
+    { BGP_EXT_COM_EIGRP_EXT_REMPROTO_REMMETRIC , "eigrp-external-route (remote-proto, remote-metric)" },
     { 0, NULL},
 };
 
@@ -491,6 +466,9 @@
            stacked labels in a a single BGP message
         */
 
+	if (24 > plen)
+		return -1;
+
         plen-=24; /* adjust prefixlen - labellength */
 
 	if (32 < plen)
@@ -565,9 +543,15 @@
 	TCHECK(pptr[0]);
 	plen = pptr[0];   /* get prefix length */
 
+	if (0 == plen)
+		return 1; /* default route target */
+
+	if (32 > plen)
+		return -1;
+
         plen-=32; /* adjust prefix length */
 
-	if (0 < plen)
+	if (64 < plen)
 		return -1;
 
 	memset(&route_target, 0, sizeof(route_target));
@@ -596,6 +580,9 @@
 	TCHECK(pptr[0]);
 	plen = pptr[0];   /* get prefix length */
 
+	if ((24+64) > plen)
+		return -1;
+
         plen-=(24+64); /* adjust prefixlen - labellength - RD len*/
 
 	if (32 < plen)
@@ -741,6 +728,10 @@
 
 	TCHECK(pptr[0]);
 	plen = pptr[0]; /* get prefix length */
+
+	if (24 > plen)
+		return -1;
+
         plen-=24; /* adjust prefixlen - labellength */
 
 	if (128 < plen)
@@ -775,6 +766,9 @@
 	TCHECK(pptr[0]);
 	plen = pptr[0];   /* get prefix length */
 
+	if ((24+64) > plen)
+		return -1;
+
         plen-=(24+64); /* adjust prefixlen - labellength - RD len*/
 
 	if (128 < plen)
@@ -840,6 +834,9 @@
 	TCHECK(pptr[0]);
 	plen = pptr[0];   /* get prefix length */
 
+	if ((24+64) > plen)
+		return -1;
+
         plen-=(24+64); /* adjust prefixlen - labellength - RD len*/
 
 	if (152 < plen)
@@ -1013,7 +1010,7 @@
 		safi = tptr[2];
 	
                 printf("\n\t    AFI: %s (%u), %sSAFI: %s (%u)",
-                       tok2strbuf(bgp_afi_values, "Unknown AFI", af,
+                       tok2strbuf(af_values, "Unknown AFI", af,
 				  tokbuf, sizeof(tokbuf)),
                        af,
                        (safi>128) ? "vendor specific " : "", /* 128 is meanwhile wellknown */
@@ -1049,6 +1046,7 @@
                 case (AFNUM_L2VPN<<8 | SAFNUM_VPNUNICAST):
                 case (AFNUM_L2VPN<<8 | SAFNUM_VPNMULTICAST):
                 case (AFNUM_L2VPN<<8 | SAFNUM_VPNUNIMULTICAST):
+                case (AFNUM_VPLS<<8 | SAFNUM_VPLS):
                     break;
                 default:
                     TCHECK2(tptr[0], tlen);
@@ -1132,6 +1130,7 @@
                             }
                             break;
 #endif
+                        case (AFNUM_VPLS<<8 | SAFNUM_VPLS):
                         case (AFNUM_L2VPN<<8 | SAFNUM_VPNUNICAST):
                         case (AFNUM_L2VPN<<8 | SAFNUM_VPNMULTICAST):
                         case (AFNUM_L2VPN<<8 | SAFNUM_VPNUNIMULTICAST):
@@ -1291,6 +1290,7 @@
                             printf("\n\t      %s", buf);
                         break;
 #endif
+                    case (AFNUM_VPLS<<8 | SAFNUM_VPLS):
                     case (AFNUM_L2VPN<<8 | SAFNUM_VPNUNICAST):
                     case (AFNUM_L2VPN<<8 | SAFNUM_VPNMULTICAST):
                     case (AFNUM_L2VPN<<8 | SAFNUM_VPNUNIMULTICAST):
@@ -1346,7 +1346,7 @@
 		safi = tptr[2];
 
                 printf("\n\t    AFI: %s (%u), %sSAFI: %s (%u)",
-                       tok2strbuf(bgp_afi_values, "Unknown AFI", af,
+                       tok2strbuf(af_values, "Unknown AFI", af,
 				  tokbuf, sizeof(tokbuf)),
                        af,
                        (safi>128) ? "vendor specific " : "", /* 128 is meanwhile wellknown */
@@ -1425,6 +1425,7 @@
                             printf("\n\t      %s", buf);
                         break;
 #endif
+                    case (AFNUM_VPLS<<8 | SAFNUM_VPLS):
                     case (AFNUM_L2VPN<<8 | SAFNUM_VPNUNICAST):
                     case (AFNUM_L2VPN<<8 | SAFNUM_VPNMULTICAST):
                     case (AFNUM_L2VPN<<8 | SAFNUM_VPNUNIMULTICAST):
@@ -1537,7 +1538,7 @@
 					  *(tptr+6),
 					  tokbuf, sizeof(tokbuf)),
                                (*(tptr+7) &  BGP_OSPF_RTYPE_METRIC_TYPE) ? "E2" : "",
-                               (*(tptr+6) == (BGP_OSPF_RTYPE_EXT ||BGP_OSPF_RTYPE_NSSA )) ? "E1" : "");
+                               ((*(tptr+6) == BGP_OSPF_RTYPE_EXT) || (*(tptr+6) == BGP_OSPF_RTYPE_NSSA)) ? "E1" : "");
                         break;
                     case BGP_EXT_COM_L2INFO:
                         printf(": %s Control Flags [0x%02x]:MTU %u",
@@ -1674,7 +1675,7 @@
                     switch(cap_type) {
                     case BGP_CAPCODE_MP:
                         printf("\n\t\tAFI %s (%u), SAFI %s (%u)",
-                               tok2strbuf(bgp_afi_values, "Unknown",
+                               tok2strbuf(af_values, "Unknown",
 					  EXTRACT_16BITS(opt+i+BGP_OPT_SIZE+2),
 					  tokbuf, sizeof(tokbuf)),
                                EXTRACT_16BITS(opt+i+BGP_OPT_SIZE+2),
@@ -1691,7 +1692,7 @@
                         cap_offset=4;
                         while(tcap_len>=4) {
                             printf("\n\t\t  AFI %s (%u), SAFI %s (%u), Forwarding state preserved: %s",
-                                   tok2strbuf(bgp_afi_values,"Unknown",
+                                   tok2strbuf(af_values,"Unknown",
 					      EXTRACT_16BITS(opt+i+BGP_OPT_SIZE+cap_offset),
 					      tokbuf, sizeof(tokbuf)),
                                    EXTRACT_16BITS(opt+i+BGP_OPT_SIZE+cap_offset),
@@ -1905,7 +1906,7 @@
 		tptr = dat + BGP_NOTIFICATION_SIZE;
 		TCHECK2(*tptr, 7);
 		printf(", AFI %s (%u), SAFI %s (%u), Max Prefixes: %u",
-		       tok2strbuf(bgp_afi_values, "Unknown",
+		       tok2strbuf(af_values, "Unknown",
 				  EXTRACT_16BITS(tptr), tokbuf, sizeof(tokbuf)),
 		       EXTRACT_16BITS(tptr),
 		       tok2strbuf(bgp_safi_values, "Unknown", *(tptr+2),
@@ -1939,7 +1940,7 @@
         bgp_route_refresh_header = (const struct bgp_route_refresh *)pptr;
 
         printf("\n\t  AFI %s (%u), SAFI %s (%u)",
-               tok2strbuf(bgp_afi_values,"Unknown",
+               tok2strbuf(af_values,"Unknown",
 			  /* this stinks but the compiler pads the structure
 			   * weird */
 			  EXTRACT_16BITS(&bgp_route_refresh_header->afi),


More information about the Midnightbsd-cvs mailing list