From: Nasato Goto Date: Wed, 15 Apr 2020 01:46:53 +0000 (+0200) Subject: BGP: Fix handling of 16bit-only ASN translation X-Git-Tag: v2.0.8~82 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a6548d5b5be1d0186dfab43b76790803f8c8625e;p=thirdparty%2Fbird.git BGP: Fix handling of 16bit-only ASN translation The bug generated invalid AGGREGATOR attribute during translation of 32bit ASN to 16bit-only BGP peer. The patch fixes that. --- diff --git a/nest/attrs.h b/nest/attrs.h index 3a4b0acd8..d88a73f34 100644 --- a/nest/attrs.h +++ b/nest/attrs.h @@ -111,7 +111,7 @@ static inline struct adata * aggregator_to_old(struct linpool *pool, const struct adata *a) { struct adata *d = lp_alloc_adata(pool, 8); - put_u32(d->data, 0xFFFF); + put_u32(d->data, AS_TRANS); memcpy(d->data + 4, a->data + 4, 4); return d; } diff --git a/proto/bgp/attrs.c b/proto/bgp/attrs.c index 39297dd7b..655ddb621 100644 --- a/proto/bgp/attrs.c +++ b/proto/bgp/attrs.c @@ -577,6 +577,7 @@ bgp_encode_aggregator(struct bgp_write_state *s, eattr *a, byte *buf, uint size) /* Prepare 16-bit AGGREGATOR (from 32-bit one) in a temporary buffer */ byte *dst = alloca(6); len = aggregator_32to16(dst, data); + data = dst; } return bgp_put_attr(buf, size, BA_AGGREGATOR, a->flags, data, len);