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:
parent
fd9f0c0640
commit
a6548d5b5b
2 changed files with 2 additions and 1 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in a new issue