On Wed, 28 Oct 2015, J Yu wrote:

issues. The other cause is the issue we are facing today where the route can NOT be deleted in rib now that it has a new next_hop, but the new next_hop is unreachable such that it needed to be deleted from the forwarding database. One can also argue this is a modify case of the route, which is from rib perspective only.

So, should we even bother trying to match the old nexthop? Just tell zebra to delete the prefix. Below seems to pass Martin's test.

Havn't tested IPv6 (Martin, fancy extending your tool?).

I don't know how this affects the BGP ECMP/Mpath stuff. Is there someone using that that can test?

regards,

Paul

diff --git a/bgpd/bgp_zebra.c b/bgpd/bgp_zebra.c
index e534bee..186657b 100644
--- a/bgpd/bgp_zebra.c
+++ b/bgpd/bgp_zebra.c
@@ -863,18 +863,14 @@ bgp_zebra_withdraw (struct prefix *p, struct bgp_info 
*info, safi_t safi)
   if (p->family == AF_INET)
     {
       struct zapi_ipv4 api;
-      struct in_addr *nexthop;

       api.vrf_id = VRF_DEFAULT;
       api.flags = flags;
-      nexthop = &info->attr->nexthop;

       api.type = ZEBRA_ROUTE_BGP;
       api.message = 0;
       api.safi = safi;
-      SET_FLAG (api.message, ZAPI_MESSAGE_NEXTHOP);
-      api.nexthop_num = 1;
-      api.nexthop = &nexthop;
+      api.nexthop_num = 0;
       api.ifindex_num = 0;
       SET_FLAG (api.message, ZAPI_MESSAGE_METRIC);
       api.metric = info->attr->med;
@@ -882,10 +878,9 @@ bgp_zebra_withdraw (struct prefix *p, struct bgp_info 
*info, safi_t safi)
       if (BGP_DEBUG(zebra, ZEBRA))
        {
          char buf[2][INET_ADDRSTRLEN];
-         zlog_debug("Zebra send: IPv4 route delete %s/%d nexthop %s metric %u",
+         zlog_debug("Zebra send: IPv4 route delete %s/%d metric %u",
                     inet_ntop(AF_INET, &p->u.prefix4, buf[0], sizeof(buf[0])),
                     p->prefixlen,
-                    inet_ntop(AF_INET, nexthop, buf[1], sizeof(buf[1])),
                     api.metric);
        }

@@ -897,54 +892,23 @@ bgp_zebra_withdraw (struct prefix *p, struct bgp_info 
*info, safi_t safi)
   if (p->family == AF_INET6)
     {
       struct zapi_ipv6 api;
-      unsigned int ifindex;
-      struct in6_addr *nexthop;
- - assert (info->attr->extra);

-      ifindex = 0;
-      nexthop = NULL;
-
-      /* Only global address nexthop exists. */
-      if (info->attr->extra->mp_nexthop_len == 16)
-       nexthop = &info->attr->extra->mp_nexthop_global;
-
-      /* If both global and link-local address present. */
-      if (info->attr->extra->mp_nexthop_len == 32)
-       {
-         nexthop = &info->attr->extra->mp_nexthop_local;
-         if (info->peer->nexthop.ifp)
-           ifindex = info->peer->nexthop.ifp->ifindex;
-       }
-
-      if (nexthop == NULL)
-       return;
-
-      if (IN6_IS_ADDR_LINKLOCAL (nexthop) && ! ifindex)
-       if (info->peer->ifname)
-         ifindex = ifname2ifindex (info->peer->ifname);
-
       api.vrf_id = VRF_DEFAULT;
       api.flags = flags;
       api.type = ZEBRA_ROUTE_BGP;
       api.message = 0;
       api.safi = safi;
-      SET_FLAG (api.message, ZAPI_MESSAGE_NEXTHOP);
-      api.nexthop_num = 1;
-      api.nexthop = &nexthop;
-      SET_FLAG (api.message, ZAPI_MESSAGE_IFINDEX);
-      api.ifindex_num = 1;
-      api.ifindex = &ifindex;
+      api.nexthop_num = 0;
+      api.ifindex_num = 0;
       SET_FLAG (api.message, ZAPI_MESSAGE_METRIC);
       api.metric = info->attr->med;

       if (BGP_DEBUG(zebra, ZEBRA))
        {
          char buf[2][INET6_ADDRSTRLEN];
-         zlog_debug("Zebra send: IPv6 route delete %s/%d nexthop %s metric %u",
+         zlog_debug("Zebra send: IPv6 route delete %s/%d metric %u",
                     inet_ntop(AF_INET6, &p->u.prefix6, buf[0], sizeof(buf[0])),
                     p->prefixlen,
-                    inet_ntop(AF_INET6, nexthop, buf[1], sizeof(buf[1])),
                     api.metric);
        }


regards,
--
Paul Jakma      [email protected]  @pjakma Key ID: 64A2FF6A
Fortune:
In the future, you're going to get computers as prizes in breakfast cereals.
You'll throw them out because your house will be littered with them.

_______________________________________________
Quagga-dev mailing list
[email protected]
https://lists.quagga.net/mailman/listinfo/quagga-dev

Reply via email to