]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
MRT Table Dump: Fix size of AS_PATH in BGP Attributes
authorPavel Tvrdík <pawel.tvrdik@gmail.com>
Tue, 5 Jan 2016 17:05:06 +0000 (18:05 +0100)
committerPavel Tvrdík <pawel.tvrdik@gmail.com>
Wed, 6 Jan 2016 12:43:26 +0000 (13:43 +0100)
All AS numbers in the AS_PATH attribute in RIB Entries MUST be encoded as 4-byte AS numbers.
 -- RFC 6396

Thanks to Colin Petrie for noticing us about this bug in BIRD!

proto/bgp/mrt.c

index d4f8a434fb9170224494ae403e7b72b17ec2aeea..713be83a6f36c3cba6f3d9e7e0d5afeb78af1320 100644 (file)
@@ -101,7 +101,11 @@ bgp_mrt_table_dump_step(struct mrt_table_dump_ctx *state)
          continue;
        }
 
-       attributes_length = bgp_encode_attrs(p, attributes_buffer, e->attrs->eattrs, BGP_ATTR_BUFFER_SIZE);
+       struct bgp_proto tmp_bgp_proto = {
+           .as4_session = 1, /* to force build AS_PATH as 32bit AS in bgp_encode_attrs() */
+       };
+
+       attributes_length = bgp_encode_attrs(&tmp_bgp_proto, attributes_buffer, e->attrs->eattrs, BGP_ATTR_BUFFER_SIZE);
        if (attributes_length == -1)
        {
          log(L_WARN "%s: MRT Table Dump for %I/%u: Attribute list too long, let it blank", p->p.name, n->n.prefix, n->n.pxlen);