#ifndef lint
static const char rcsid[] =
- "@(#) $Header: /tcpdump/master/tcpdump/print-bgp.c,v 1.37 2002-07-18 00:39:12 hannes Exp $";
+ "@(#) $Header: /tcpdump/master/tcpdump/print-bgp.c,v 1.38 2002-07-22 02:55:20 hannes Exp $";
#endif
#include <sys/param.h>
#define BGP_UPDATE 2
#define BGP_NOTIFICATION 3
#define BGP_KEEPALIVE 4
+#define BGP_ROUTE_REFRESH 5
static struct tok bgp_msg_values[] = {
{ BGP_OPEN, "Open"},
{ BGP_UPDATE, "Update"},
{ BGP_NOTIFICATION, "Notification"},
{ BGP_KEEPALIVE, "Keepalive"},
+ { BGP_ROUTE_REFRESH, "Route Refresh"},
{ 0, NULL}
};
{ 0, NULL},
};
+static struct tok bgp_extd_comm_subtype_values[] = {
+ { 2, "target"},
+ { 3, "origin"},
+ { 4, "link-BW"},
+ { 0, NULL},
+};
+
static int
decode_prefix4(const u_char *pd, char *buf, u_int buflen)
{
safi);
p += 3;
-
- printf("\n\t Withdrawn routes");
while (len - (p - dat) > 0) {
switch (af) {
break;
#endif
default:
- printf("\n\t no AFI %u decoder",af);
+ printf("\n\t no AFI %u decoder",af);
print_unknown_data(p-3,"\n\t ",tlen);
advance = 0;
p = dat + len;
p += advance;
}
break;
+ case BGPTYPE_EXTD_COMMUNITIES:
+ if (len % 8) {
+ printf("invalid len");
+ break;
+ }
+ while (tlen>0) {
+ u_int8_t extd_comm,extd_comm_type,extd_comm_subtype;
+ extd_comm=*p;
+ extd_comm_type=extd_comm&0x3f;
+ extd_comm_subtype=*(p+1);
+ switch(extd_comm_type) {
+ case 0:
+ printf("%s%s%s:%u:%s%s",
+ (extd_comm&0x80) ? "vendor-specific: " : "",
+ (extd_comm&0x40) ? "non-transitive:" : "",
+ tok2str(bgp_extd_comm_subtype_values,
+ "unknown",
+ extd_comm_subtype&0x3f),
+ EXTRACT_16BITS(p+2),
+ getname(p+4),
+ (tlen>8) ? ", " : "");
+ break;
+ case 1:
+ printf("%s%s%s:%s:%u%s",
+ (extd_comm&0x80) ? "vendor-specific: " : "",
+ (extd_comm&0x40) ? "non-transitive:" : "",
+ tok2str(bgp_extd_comm_subtype_values,
+ "unknown",
+ extd_comm_subtype&0x3f),
+ getname(p+2),
+ EXTRACT_16BITS(p+6),
+ (tlen>8) ? ", " : "");
+ break;
+ case 2:
+ printf("%s%s%s:%u:%u%s",
+ (extd_comm&0x80) ? "vendor-specific: " : "",
+ (extd_comm&0x40) ? "non-transitive:" : "",
+ tok2str(bgp_extd_comm_subtype_values,
+ "unknown",
+ extd_comm_subtype&0x3f),
+ EXTRACT_32BITS(p+2),
+ EXTRACT_16BITS(p+6),
+ (tlen>8) ? ", " : "");
+ break;
+
+ default:
+ printf("\n\t no typecode %u decoder",
+ extd_comm_type);
+ print_unknown_data(p,"\n\t ",8);
+ break;
+ }
+ tlen -=8;
+ p +=8;
+ }
+ break;
+
default:
printf("\n\t no Attribute %u decoder",attr->bgpa_type); /* we have no decoder for the attribute */
print_unknown_data(p,"\n\t ",tlen);
- break;
+ break;
}
}