From: Ondrej Zajicek Date: Mon, 14 Dec 2009 23:30:07 +0000 (+0100) Subject: Fixes export of routes with link-local gw. X-Git-Tag: v1.2.0~21^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f2d7da742bd683b8eaecb1be8e3b04618171c796;p=thirdparty%2Fbird.git Fixes export of routes with link-local gw. --- diff --git a/proto/bgp/attrs.c b/proto/bgp/attrs.c index 7b49bdfa5..801fe1007 100644 --- a/proto/bgp/attrs.c +++ b/proto/bgp/attrs.c @@ -877,10 +877,12 @@ bgp_create_attrs(struct bgp_proto *p, rte *e, ea_list **attrs, struct linpool *p z = bgp_set_attr_wa(ea->attrs+2, pool, BA_NEXT_HOP, NEXT_HOP_LENGTH); if (p->cf->next_hop_self || rta->dest != RTD_ROUTER || - (!p->is_internal && (e->attrs->iface != p->neigh->iface))) + ipa_equal(e->attrs->gw, IPA_NONE) || + ipa_has_link_scope(rta->gw) || + (!p->is_internal && (rta->iface != p->neigh->iface))) set_next_hop(z, p->source_addr); else - set_next_hop(z, e->attrs->gw); + set_next_hop(z, rta->gw); bgp_set_attr(ea->attrs+3, BA_LOCAL_PREF, 0); diff --git a/proto/ospf/topology.c b/proto/ospf/topology.c index 46656811a..3ca5e774e 100644 --- a/proto/ospf/topology.c +++ b/proto/ospf/topology.c @@ -899,12 +899,11 @@ originate_ext_lsa_body(net *n, rte *e, u16 *length, struct proto_ospf *po, int size = sizeof(struct ospf_lsa_ext); u32 *buf; - if (!ipa_equal(e->attrs->gw, IPA_NONE)) - { - /* FIXME: check for link-local in OSPFv3 ? */ - if (ospf_iface_find((struct proto_ospf *) p, e->attrs->iface) != NULL) - gw = 1; - } + if ((e->attrs->dest == RTD_ROUTER) && + !ipa_equal(e->attrs->gw, IPA_NONE) && + !ipa_has_link_scope(e->attrs->gw) && + (ospf_iface_find((struct proto_ospf *) p, e->attrs->iface) != NULL)) + gw = 1; #ifdef OSPFv3 size += IPV6_PREFIX_SPACE(n->n.pxlen);