Fixes setting of IP addresses to route attributes (NEXT_HOP).

This commit is contained in:
Ondrej Zajicek 2009-09-18 13:59:04 +02:00
parent db96fccb31
commit 54fe0d9230
2 changed files with 6 additions and 3 deletions

View file

@ -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)

View file

@ -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
{ {