Fixes setting of IP addresses to route attributes (NEXT_HOP).
This commit is contained in:
parent
db96fccb31
commit
54fe0d9230
2 changed files with 6 additions and 3 deletions
|
@ -664,6 +664,7 @@ interpret(struct f_inst *what)
|
||||||
struct adata *ad = lp_alloc(f_pool, sizeof(struct adata) + len);
|
struct adata *ad = lp_alloc(f_pool, sizeof(struct adata) + len);
|
||||||
ad->length = len;
|
ad->length = len;
|
||||||
(* (ip_addr *) ad->data) = v1.val.px.ip;
|
(* (ip_addr *) ad->data) = v1.val.px.ip;
|
||||||
|
l->attrs[0].u.ptr = ad;
|
||||||
break;
|
break;
|
||||||
case EAF_TYPE_AS_PATH:
|
case EAF_TYPE_AS_PATH:
|
||||||
if (v1.type != T_PATH)
|
if (v1.type != T_PATH)
|
||||||
|
|
|
@ -234,7 +234,7 @@ bgp_create_update(struct bgp_conn *conn, byte *buf)
|
||||||
{
|
{
|
||||||
struct bgp_proto *p = conn->bgp;
|
struct bgp_proto *p = conn->bgp;
|
||||||
struct bgp_bucket *buck;
|
struct bgp_bucket *buck;
|
||||||
int size;
|
int size, second;
|
||||||
int remains = BGP_MAX_PACKET_LENGTH - BGP_HEADER_LENGTH - 4;
|
int remains = BGP_MAX_PACKET_LENGTH - BGP_HEADER_LENGTH - 4;
|
||||||
byte *w, *tmp, *tstart;
|
byte *w, *tmp, *tstart;
|
||||||
ip_addr *ipp, ip, ip_ll;
|
ip_addr *ipp, ip, ip_ll;
|
||||||
|
@ -292,7 +292,9 @@ bgp_create_update(struct bgp_conn *conn, byte *buf)
|
||||||
nh = ea_find(buck->eattrs, EA_CODE(EAP_BGP, BA_NEXT_HOP));
|
nh = ea_find(buck->eattrs, EA_CODE(EAP_BGP, BA_NEXT_HOP));
|
||||||
ASSERT(nh);
|
ASSERT(nh);
|
||||||
|
|
||||||
/* We have two addresses here in 'nh'. Really. */
|
/* We have two addresses here in 'nh'. Really.
|
||||||
|
Unless NEXT_HOP was modified by filter */
|
||||||
|
second = (nh->u.ptr->length == NEXT_HOP_LENGTH);
|
||||||
ipp = (ip_addr *) nh->u.ptr->data;
|
ipp = (ip_addr *) nh->u.ptr->data;
|
||||||
ip = ipp[0];
|
ip = ipp[0];
|
||||||
ip_ll = IPA_NONE;
|
ip_ll = IPA_NONE;
|
||||||
|
@ -316,7 +318,7 @@ bgp_create_update(struct bgp_conn *conn, byte *buf)
|
||||||
n = neigh_find(&p->p, &ip, 0);
|
n = neigh_find(&p->p, &ip, 0);
|
||||||
if (n && n->iface == p->neigh->iface)
|
if (n && n->iface == p->neigh->iface)
|
||||||
{
|
{
|
||||||
if (ipa_nonzero(ipp[1]))
|
if (second && ipa_nonzero(ipp[1]))
|
||||||
ip_ll = ipp[1];
|
ip_ll = ipp[1];
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue