]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Add format for BGP_AGGREGATOR attribute
authorOndrej Zajicek <santiago@crfreenet.org>
Sat, 21 Feb 2009 16:47:56 +0000 (17:47 +0100)
committerOndrej Zajicek <santiago@crfreenet.org>
Sat, 21 Feb 2009 16:47:56 +0000 (17:47 +0100)
filter/filter.c
proto/bgp/attrs.c

index 1bd9a090baee7430a31fabb85d76b4c92818e49b..f8ec66b01650f95dc943cdaf787cadd7e880b59c 100644 (file)
@@ -83,7 +83,7 @@ pm_format(struct f_path_mask *p, byte *buf, unsigned int size)
        }
 
       if (p->any)
-       buf += bsprintf(buf, "? ");
+       buf += bsprintf(buf, "* ");
       else
        buf += bsprintf(buf, "%u ", p->val);
 
index d3716eab092a2613a5113308227ad9070e126725..d8a6aad445d05e1769ab3c0f2a5e39c9207cb788 100644 (file)
@@ -111,6 +111,27 @@ bgp_check_aggregator(struct bgp_proto *p, byte *a UNUSED, int len)
   return (len == exp_len) ? 0 : 5;
 }
 
+static void
+bgp_format_aggregator(eattr *a, byte *buf, int buflen UNUSED)
+{
+  struct adata *ad =  a->u.ptr;
+  byte *data = ad->data;
+  u32 as;
+
+  if (bgp_as4_support)
+    {
+      as = get_u32(data);
+      data += 4;
+    }
+  else
+    {
+      as = get_u16(data);
+      data += 2;
+    }
+
+  bsprintf(buf, "%d.%d.%d.%d AS%d", data[0], data[1], data[2], data[3], as);
+}
+
 static int
 bgp_check_cluster_list(struct bgp_proto *p UNUSED, byte *a UNUSED, int len)
 {
@@ -159,7 +180,7 @@ static struct attr_desc bgp_attr_table[] = {
   { "atomic_aggr", 0, BAF_TRANSITIVE, EAF_TYPE_OPAQUE, 1,                      /* BA_ATOMIC_AGGR */
     NULL, NULL },
   { "aggregator", -1, BAF_OPTIONAL | BAF_TRANSITIVE, EAF_TYPE_OPAQUE, 1,       /* BA_AGGREGATOR */
-    bgp_check_aggregator, NULL },
+    bgp_check_aggregator, bgp_format_aggregator },
   { "community", -1, BAF_OPTIONAL | BAF_TRANSITIVE, EAF_TYPE_INT_SET, 1,       /* BA_COMMUNITY */
     NULL, NULL },
   { "originator_id", 4, BAF_OPTIONAL, EAF_TYPE_ROUTER_ID, 0,                   /* BA_ORIGINATOR_ID */