]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Fixes export of routes with link-local gw.
authorOndrej Zajicek <santiago@crfreenet.org>
Mon, 14 Dec 2009 23:30:07 +0000 (00:30 +0100)
committerOndrej Zajicek <santiago@crfreenet.org>
Mon, 14 Dec 2009 23:30:07 +0000 (00:30 +0100)
proto/bgp/attrs.c
proto/ospf/topology.c

index 7b49bdfa5c62ea9bb4c554f7ec2c480d8f0345e4..801fe1007c6b0501f40171cc335b08589ba844e4 100644 (file)
@@ -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);
 
index 46656811af1beb7bd78b53446662247f6d88dc2c..3ca5e774e13ba43ae5938b9db74bfa80452c6ca5 100644 (file)
@@ -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);