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.
This commit is contained in:
Nasato Goto 2020-04-15 03:46:53 +02:00 committed by Ondrej Zajicek (work)
parent fd9f0c0640
commit a6548d5b5b
2 changed files with 2 additions and 1 deletions

View file

@ -111,7 +111,7 @@ static inline struct adata *
aggregator_to_old(struct linpool *pool, const struct adata *a) aggregator_to_old(struct linpool *pool, const struct adata *a)
{ {
struct adata *d = lp_alloc_adata(pool, 8); 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); memcpy(d->data + 4, a->data + 4, 4);
return d; return d;
} }

View file

@ -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 */ /* Prepare 16-bit AGGREGATOR (from 32-bit one) in a temporary buffer */
byte *dst = alloca(6); byte *dst = alloca(6);
len = aggregator_32to16(dst, data); len = aggregator_32to16(dst, data);
data = dst;
} }
return bgp_put_attr(buf, size, BA_AGGREGATOR, a->flags, data, len); return bgp_put_attr(buf, size, BA_AGGREGATOR, a->flags, data, len);