Hi Martin, I patch I sent yesterday also had an attachment which should *not* 
have wrapped lines and I have verified that I can apply that patch without any 
issue. Can you please use the attached file to my yesterday's email to apply 
patch?

Thanks!

> From: [email protected]
> To: [email protected]
> Date: Tue, 27 Oct 2015 02:46:59 -0700
> CC: [email protected]; [email protected]
> Subject: [quagga-dev 13438] Re: Kernel routes does not get updated when 
> neighbor remove the "next-hop-self" configuration
> 
> Please resend. I think this patch got corrupted by your email client.
> I’ve tried to fix it by “un-wrapping” the lines, but still fail.
> 
> (Check to make sure that it applies to latest git master and if this 
> works,
> then please use “git send-email” to send it to list.)
> 
> Regards,
>     Martin Winter
> 
> 
> On 26 Oct 2015, at 13:43, Jacqueline Yu wrote:
> 
> > Thanks Martin for adding the test case, and confirming the issue. Here 
> > is a
> > proposed change I made with diff below as well as attached --
> >
> > Appreciate any comments/feedbacks...
> >
> > diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c
> > index 316fa5a..c424dd1 100644
> > --- a/bgpd/bgp_route.c
> > +++ b/bgpd/bgp_route.c
> > @@ -109,8 +109,12 @@ bgp_info_extra_free (struct bgp_info_extra 
> > **extra)
> >
> >     (*extra)->damp_info = NULL;
> >
> > +      if ((*extra)->attr)
> > +        bgp_attr_unintern(&((*extra)->attr));
> > +
> > +      (*extra)->attr = NULL;
> > +
> >     XFREE (MTYPE_BGP_ROUTE_EXTRA, *extra);
> > -
> >     *extra = NULL;
> >   }
> > }
> > @@ -1602,7 +1606,8 @@ bgp_process_main (struct work_queue *wq, void 
> > *data)
> > struct bgp_info *old_select;
> > struct bgp_info_pair old_and_new;
> > struct listnode *node, *nnode;
> > -  struct peer *peer;
> > +  struct peer *peer, *log_peer = NULL;
> > +  struct attr *attr;
> >
> > /* Best path selection. */
> > bgp_best_selection (bgp, rn, &bgp->maxpaths[afi][safi], &old_and_new);
> > @@ -1638,6 +1643,8 @@ bgp_process_main (struct work_queue *wq, void 
> > *data)
> > for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
> >   {
> >     bgp_process_announce_selected (peer, new_select, rn, afi, safi);
> > +      if (log_peer == NULL)
> > +          log_peer = peer;
> >   }
> >
> > /* FIB update. */
> > @@ -1646,15 +1653,24 @@ bgp_process_main (struct work_queue *wq, void 
> > *data)
> >   {
> >     if (new_select
> > && new_select->type == ZEBRA_ROUTE_BGP
> > -  && new_select->sub_type == BGP_ROUTE_NORMAL)
> > +  && new_select->sub_type == BGP_ROUTE_NORMAL) {
> > bgp_zebra_announce (p, new_select, bgp, safi);
> > +      }
> >     else
> > {
> > /* Withdraw the route from the kernel. */
> > if (old_select
> >     && old_select->type == ZEBRA_ROUTE_BGP
> > -      && old_select->sub_type == BGP_ROUTE_NORMAL)
> > -    bgp_zebra_withdraw (p, old_select, safi);
> > +      && old_select->sub_type == BGP_ROUTE_NORMAL) {
> > +            if (CHECK_FLAG (old_select->flags, 
> > BGP_INFO_NEW_NHOP_INVALID))
> > {
> > +              attr = old_select->attr;
> > +              old_select->attr = 
> > (bgp_info_extra_get(old_select))->attr;
> > +      bgp_zebra_withdraw (p, old_select, safi);
> > +              old_select->attr = attr;
> > +            } else {
> > +      bgp_zebra_withdraw (p, old_select, safi);
> > +            }
> > +          }
> > }
> >   }
> >
> > @@ -2105,7 +2121,7 @@ bgp_update_main (struct peer *peer, struct 
> > prefix *p,
> > struct attr *attr,
> > struct bgp *bgp;
> > struct attr new_attr;
> > struct attr_extra new_extra;
> > -  struct attr *attr_new;
> > +  struct attr *attr_new, *saved_attr;
> > struct bgp_info *ri;
> > struct bgp_info *new;
> > const char *reason;
> > @@ -2302,8 +2318,9 @@ bgp_update_main (struct peer *peer, struct 
> > prefix *p,
> > struct attr *attr,
> >   bgp_damp_withdraw (ri, rn, afi, safi, 1);
> > }
> >
> > -      /* Update to new attribute.  */
> > -      bgp_attr_unintern (&ri->attr);
> > +      /* Update to new attribute.  Save the old attr to be freed 
> > after we
> > decide
> > +         the new attribute has next hop that's reachable or not */
> > +      saved_attr = ri->attr;
> >     ri->attr = attr_new;
> >
> >     /* Update MPLS tag.  */
> > @@ -2318,10 +2335,11 @@ bgp_update_main (struct peer *peer, struct 
> > prefix
> > *p, struct attr *attr,
> > ret = bgp_damp_update (ri, rn, afi, safi);
> > if (ret == BGP_DAMP_SUPPRESSED)
> >   {
> > -      bgp_unlock_node (rn);
> > -      return 0;
> > -    }
> > - }
> > +              bgp_attr_unintern (&saved_attr);
> > +              bgp_unlock_node (rn);
> > +              return 0;
> > +            }
> > +        }
> >
> >     /* Nexthop reachability check. */
> >     if ((afi == AFI_IP || afi == AFI_IP6)
> > @@ -2331,13 +2349,26 @@ bgp_update_main (struct peer *peer, struct 
> > prefix
> > *p, struct attr *attr,
> >     || (peer->sort == BGP_PEER_EBGP && peer->ttl != 1)
> >     || CHECK_FLAG (peer->flags, PEER_FLAG_DISABLE_CONNECTED_CHECK)))
> > {
> > -  if (bgp_nexthop_lookup (afi, peer, ri, NULL, NULL))
> > -    bgp_info_set_flag (rn, ri, BGP_INFO_VALID);
> > -  else
> > -    bgp_info_unset_flag (rn, ri, BGP_INFO_VALID);
> > - }
> > -      else
> > +          if (bgp_nexthop_lookup (afi, peer, ri, NULL, NULL)) {
> > +            bgp_info_set_flag (rn, ri, BGP_INFO_VALID);
> > +            bgp_attr_unintern (&saved_attr);
> > +            bgp_info_unset_flag (rn, ri, BGP_INFO_NEW_NHOP_INVALID);
> > +          } else {
> > +            bgp_info_unset_flag (rn, ri, BGP_INFO_VALID);
> > +            bgp_info_set_flag (rn, ri, BGP_INFO_NEW_NHOP_INVALID);
> > +            if (!ri->extra)
> > +              ri->extra = bgp_info_extra_new();
> > +            else
> > +              if (ri->extra->attr)
> > +                bgp_attr_unintern(&(ri->extra->attr));
> > +            ri->extra->attr = saved_attr;
> > +          }
> > +        }
> > +      else {
> >       bgp_info_set_flag (rn, ri, BGP_INFO_VALID);
> > +        bgp_attr_unintern (&saved_attr);
> > +        bgp_info_unset_flag (rn, ri, BGP_INFO_NEW_NHOP_INVALID);
> > +      }
> >
> >     /* Process change. */
> >     bgp_aggregate_increment (bgp, p, ri, afi, safi);
> > diff --git a/bgpd/bgp_route.h b/bgpd/bgp_route.h
> > index 3d2eea5..60c9b54 100644
> > --- a/bgpd/bgp_route.h
> > +++ b/bgpd/bgp_route.h
> > @@ -40,6 +40,9 @@ struct bgp_info_extra
> >
> > /* MPLS label.  */
> > u_char tag[3];
> > +
> > +  /* Attribute structure. Only for invalid next hop update case  */
> > +  struct attr *attr;
> > };
> >
> > struct bgp_info
> > @@ -82,6 +85,7 @@ struct bgp_info
> > #define BGP_INFO_COUNTED (1 << 10)
> > #define BGP_INFO_MULTIPATH      (1 << 11)
> > #define BGP_INFO_MULTIPATH_CHG  (1 << 12)
> > +#define BGP_INFO_NEW_NHOP_INVALID (1 << 13)
> >
> > /* BGP route type.  This can be static, RIP, OSPF, BGP etc.  */
> > u_char type;
> >
> >
> > On Sat, Oct 24, 2015 at 7:50 PM, Martin Winter <
> > [email protected]> wrote:
> >
> >> To add to this issue:
> >>
> >> I’ve hacked some test together for this and can confirm the 
> >> problem.
> >> It actually has nothing specifically to do with next-hop-self.
> >>
> >> The problem is seen if a BGP update changes from a reachable next-hop
> >> to an unreachable next-hop:
> >>
> >> BGP updates the BGP table first, then sends the update to Zebra - but
> >> sends the update (the withdraw in this case) with the NEW nexthop. 
> >> Zebra
> >> fails to find the specific route to withdraw and will then drop the
> >> withdraw.
> >> The result is a stale (old) route in Zebra (Zebra RIB only - not 
> >> BGP).
> >>
> >> What makes it worse, is that even a close of the BGP session won’t 
> >> fix
> >> this. In my tests, only a restart of BGPd (or Zebra) fixes the 
> >> problem.
> >>
> >> To reproduce the issue, use my (ugly, but functional) BGPtool:
> >> https://git-us.netdef.org/projects/NETDEF/repos/bgptool/
> >> and checkout the branch “test/invalid-valid-invalid” (or commit 
> >> a0af1816)
> >> See doc at
> >>
> >> https://git-us.netdef.org/projects/NETDEF/repos/bgptool/browse/README_valid-invalid.md?at=test/invalid-valid-invalid
> >> on how to reproduce this.
> >>
> >> I’ve reproduce this issue in the latest Quagga Master (commit 
> >> ca8ec20
> >> as of Sep 29, 2015)
> >>
> >> Regards,
> >> Martin Winter
> >> [email protected]
> >>
> >> PS: I did not spend the time looking into solution, just providing a 
> >> way
> >> to reproduce the issue (and confirming it)
> >>
> >>
> >>
> >> On 1 Oct 2015, at 17:47, Jacqueline Yu wrote:
> >>
> >> Here are the corresponding BGP log and Zebra log I have for this and 
> >> I
> >>> observed similar failure on 0.99.24 as well as 0.99.22 --
> >>>
> >>> BGP log --
> >>>
> >>> 2015/09/21 16:52:06 BGP: [AS4SEG] Parse aspath segment: got total 
> >>> byte
> >>> length 6
> >>>
> >>> 2015/09/21 16:52:06 BGP: [AS4SEG] Parse aspath segment: got type 2,
> >>> length 2
> >>>
> >>> 2015/09/21 16:52:06 BGP: [AS4SEG] Parse aspath segment: Bytes now: 6
> >>>
> >>> 2015/09/21 16:52:06 BGP: 200.200.200.1 rcvd UPDATE w/ attr: nexthop
> >>> 10.8.0.1, origin ?, localpref 100, path 200 50
> >>>
> >>> 2015/09/21 16:52:06 BGP: 200.200.200.1 rcvd 0.0.0.0/0
> >>>
> >>> 2015/09/21 16:52:06 BGP: 200.200.200.1 rcvd 10.150.0.0/16
> >>>
> >>> 2015/09/21 16:52:06 BGP: 200.200.200.1 rcvd 20.0.0.0/8
> >>>
> >>> 2015/09/21 16:52:06 BGP: 200.200.200.1 rcvd 60.0.0.0/8
> >>>
> >>> 2015/09/21 16:52:06 BGP: 200.200.200.1 rcvd 120.0.0.0/8
> >>>
> >>> 2015/09/21 16:52:06 BGP: 200.200.200.1 rcvd 120.1.1.0/24
> >>>
> >>> 2015/09/21 16:52:06 BGP: [AS4SEG] Parse aspath segment: got total 
> >>> byte
> >>> length 6
> >>>
> >>> 2015/09/21 16:52:06 BGP: [AS4SEG] Parse aspath segment: got type 2,
> >>> length 2
> >>>
> >>> 2015/09/21 16:52:06 BGP: [AS4SEG] Parse aspath segment: Bytes now: 6
> >>>
> >>> 2015/09/21 16:52:06 BGP: 200.200.200.1 rcvd UPDATE w/ attr: nexthop
> >>> 200.100.1.2, origin ?, localpref 100, path 200 50
> >>>
> >>> 2015/09/21 16:52:06 BGP: 200.200.200.1 rcvd 100.100.1.0/24
> >>>
> >>> 2015/09/21 16:52:06 BGP: 200.200.200.1 rcvd 100.100.2.0/24
> >>>
> >>> 2015/09/21 16:52:06 BGP: 200.200.200.1 rcvd 100.100.3.0/24
> >>>
> >>> 2015/09/21 16:52:06 BGP: 200.200.200.1 rcvd 100.100.4.0/24
> >>>
> >>> 2015/09/21 16:52:06 BGP: [AS4SEG] Parse aspath segment: got total 
> >>> byte
> >>> length 6
> >>>
> >>> 2015/09/21 16:52:06 BGP: [AS4SEG] Parse aspath segment: got type 2,
> >>> length 2
> >>>
> >>> 2015/09/21 16:52:06 BGP: [AS4SEG] Parse aspath segment: Bytes now: 6
> >>>
> >>> 2015/09/21 16:52:06 BGP: 200.200.200.1 rcvd UPDATE w/ attr: nexthop
> >>> 200.200.200.2, origin ?, localpref 100, path 200 50
> >>>
> >>> 2015/09/21 16:52:06 BGP: 200.200.200.1 rcvd 200.200.250.14/32
> >>>
> >>> 2015/09/21 16:52:06 BGP: 200.200.200.1 rcvd 200.200.250.15/32
> >>>
> >>> 2015/09/21 16:52:06 BGP: [AS4SEG] Parse aspath segment: got total 
> >>> byte
> >>> length 6
> >>>
> >>> 2015/09/21 16:52:06 BGP: [AS4SEG] Parse aspath segment: got type 2,
> >>> length 2
> >>>
> >>> 2015/09/21 16:52:06 BGP: [AS4SEG] Parse aspath segment: Bytes now: 6
> >>>
> >>> 2015/09/21 16:52:06 BGP: 200.200.200.1 rcvd UPDATE w/ attr: nexthop
> >>> 200.200.200.3, origin ?, localpref 100, path 200 50
> >>>
> >>> 2015/09/21 16:52:06 BGP: 200.200.200.1 rcvd 200.200.250.16/32
> >>>
> >>> 2015/09/21 16:52:06 BGP: Zebra send: IPv4 route delete 0.0.0.0/0 
> >>> nexthop
> >>> 10.8.0.1 metric 0
> >>>
> >>> 2015/09/21 16:52:06 BGP: Zebra send: IPv4 route delete 10.150.0.0/16
> >>> nexthop 10.8.0.1 metric 0
> >>>
> >>> 2015/09/21 16:52:06 BGP: Zebra send: IPv4 route delete 20.0.0.0/8 
> >>> nexthop
> >>> 10.8.0.1 metric 0
> >>>
> >>> 2015/09/21 16:52:06 BGP: Zebra send: IPv4 route delete 60.0.0.0/8 
> >>> nexthop
> >>> 10.8.0.1 metric 0
> >>>
> >>> 2015/09/21 16:52:06 BGP: Zebra send: IPv4 route delete 120.0.0.0/8
> >>> nexthop
> >>> 10.8.0.1 metric 0
> >>>
> >>> 2015/09/21 16:52:06 BGP: Zebra send: IPv4 route delete 120.1.1.0/24
> >>> nexthop
> >>> 10.8.0.1 metric 0
> >>>
> >>> 2015/09/21 16:52:06 BGP: Zebra send: IPv4 route delete 
> >>> 100.100.1.0/24
> >>> nexthop 200.100.1.2 metric 0
> >>>
> >>> 2015/09/21 16:52:06 BGP: Zebra send: IPv4 route delete 
> >>> 100.100.2.0/24
> >>> nexthop 200.100.1.2 metric 0
> >>>
> >>> 2015/09/21 16:52:06 BGP: Zebra send: IPv4 route delete 
> >>> 100.100.3.0/24
> >>> nexthop 200.100.1.2 metric 0
> >>>
> >>> 2015/09/21 16:52:06 BGP: Zebra send: IPv4 route delete 
> >>> 100.100.4.0/24
> >>> nexthop 200.100.1.2 metric 0
> >>>
> >>> 2015/09/21 16:52:06 BGP: Zebra send: IPv4 route delete 
> >>> 200.200.250.14/32
> >>> nexthop 200.200.200.2 metric 0
> >>>
> >>> 2015/09/21 16:52:06 BGP: Zebra send: IPv4 route delete 
> >>> 200.200.250.15/32
> >>> nexthop 200.200.200.2 metric 0
> >>>
> >>> 2015/09/21 16:52:06 BGP: Zebra send: IPv4 route delete 
> >>> 200.200.250.16/32
> >>> nexthop 200.200.200.3 metric 0
> >>>
> >>>
> >>> Zebra log --
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zebra message comes from socket [13]
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zebra message received
> >>> [ZEBRA_IPV4_NEXTHOP_LOOKUP] 4
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zread_ipv4_nexthop_lookup: looking up 
> >>> 10.8.0.1
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zsend_ipv4_nexthop_lookup: No matching 
> >>> rib
> >>> entry
> >>> found.
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zebra message comes from socket [13]
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zebra message received
> >>> [ZEBRA_IPV4_NEXTHOP_LOOKUP] 4
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zread_ipv4_nexthop_lookup: looking up
> >>> 200.100.1.2
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zsend_ipv4_nexthop_lookup: No matching 
> >>> rib
> >>> entry
> >>> found.
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zebra message comes from socket [13]
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zebra message received
> >>> [ZEBRA_IPV4_NEXTHOP_LOOKUP] 4
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zread_ipv4_nexthop_lookup: looking up
> >>> 200.200.200.2
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zsend_ipv4_nexthop_lookup: No matching 
> >>> rib
> >>> entry
> >>> found.
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zebra message comes from socket [13]
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zebra message received
> >>> [ZEBRA_IPV4_NEXTHOP_LOOKUP] 4
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zread_ipv4_nexthop_lookup: looking up
> >>> 200.200.200.3
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zsend_ipv4_nexthop_lookup: No matching 
> >>> rib
> >>> entry
> >>> found.
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zebra message comes from socket [12]
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zebra message received
> >>> [ZEBRA_IPV4_ROUTE_DELETE]
> >>> 16
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: rib_delete_ipv4(): route delete 0.0.0.0/0 
> >>> via
> >>> 10.8.0.1 ifindex 0
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: route 0.0.0.0/0 via 10.8.0.1 ifindex 0 
> >>> type 9
> >>> doesn't exist in rib
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zebra message comes from socket [12]
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zebra message received
> >>> [ZEBRA_IPV4_ROUTE_DELETE]
> >>> 18
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: rib_delete_ipv4(): route delete 
> >>> 10.150.0.0/16
> >>> via 10.8.0.1 ifindex 0
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: route 10.150.0.0/16 via 10.8.0.1 ifindex 
> >>> 0
> >>> type
> >>> 9 doesn't exist in rib
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zebra message comes from socket [12]
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zebra message received
> >>> [ZEBRA_IPV4_ROUTE_DELETE]
> >>> 17
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: rib_delete_ipv4(): route delete 
> >>> 20.0.0.0/8 via
> >>> 10.8.0.1 ifindex 0
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: route 20.0.0.0/8 via 10.8.0.1 ifindex 0 
> >>> type 9
> >>> doesn't exist in rib
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zebra message comes from socket [12]
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zebra message received
> >>> [ZEBRA_IPV4_ROUTE_DELETE]
> >>> 17
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: rib_delete_ipv4(): route delete 
> >>> 60.0.0.0/8 via
> >>> 10.8.0.1 ifindex 0
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: route 60.0.0.0/8 via 10.8.0.1 ifindex 0 
> >>> type 9
> >>> doesn't exist in rib
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zebra message comes from socket [12]
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zebra message received
> >>> [ZEBRA_IPV4_ROUTE_DELETE]
> >>> 17
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: rib_delete_ipv4(): route delete 
> >>> 120.0.0.0/8
> >>> via
> >>> 10.8.0.1 ifindex 0
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: route 120.0.0.0/8 via 10.8.0.1 ifindex 0 
> >>> type
> >>> 9
> >>> doesn't exist in rib
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zebra message comes from socket [12]
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zebra message received
> >>> [ZEBRA_IPV4_ROUTE_DELETE]
> >>> 19
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: rib_delete_ipv4(): route delete 
> >>> 120.1.1.0/24
> >>> via
> >>> 10.8.0.1 ifindex 0
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: route 120.1.1.0/24 via 10.8.0.1 ifindex 0
> >>> type 9
> >>> doesn't exist in rib
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zebra message comes from socket [12]
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zebra message received
> >>> [ZEBRA_IPV4_ROUTE_DELETE]
> >>> 19
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: rib_delete_ipv4(): route delete 
> >>> 100.100.1.0/24
> >>> via 200.100.1.2 ifindex 0
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: route 100.100.1.0/24 via 200.100.1.2 
> >>> ifindex 0
> >>> type 9 doesn't exist in rib
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zebra message comes from socket [12]
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zebra message received
> >>> [ZEBRA_IPV4_ROUTE_DELETE]
> >>> 19
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: rib_delete_ipv4(): route delete 
> >>> 100.100.2.0/24
> >>> via 200.100.1.2 ifindex 0
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: route 100.100.2.0/24 via 200.100.1.2 
> >>> ifindex 0
> >>> type 9 doesn't exist in rib
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zebra message comes from socket [12]
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zebra message received
> >>> [ZEBRA_IPV4_ROUTE_DELETE]
> >>> 19
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: rib_delete_ipv4(): route delete 
> >>> 100.100.3.0/24
> >>> via 200.100.1.2 ifindex 0
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: route 100.100.3.0/24 via 200.100.1.2 
> >>> ifindex 0
> >>> type 9 doesn't exist in rib
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zebra message comes from socket [12]
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zebra message received
> >>> [ZEBRA_IPV4_ROUTE_DELETE]
> >>> 19
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: rib_delete_ipv4(): route delete 
> >>> 100.100.4.0/24
> >>> via 200.100.1.2 ifindex 0
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: route 100.100.4.0/24 via 200.100.1.2 
> >>> ifindex 0
> >>> type 9 doesn't exist in rib
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zebra message comes from socket [12]
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zebra message received
> >>> [ZEBRA_IPV4_ROUTE_DELETE]
> >>> 20
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: rib_delete_ipv4(): route delete
> >>> 200.200.250.14/32
> >>> via 200.200.200.2 ifindex 0
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: route 200.200.250.14/32 via 200.200.200.2
> >>> ifindex 0 type 9 doesn't exist in rib
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zebra message comes from socket [12]
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zebra message received
> >>> [ZEBRA_IPV4_ROUTE_DELETE]
> >>> 20
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: rib_delete_ipv4(): route delete
> >>> 200.200.250.15/32
> >>> via 200.200.200.2 ifindex 0
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: route 200.200.250.15/32 via 200.200.200.2
> >>> ifindex 0 type 9 doesn't exist in rib
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zebra message comes from socket [12]
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: zebra message received
> >>> [ZEBRA_IPV4_ROUTE_DELETE]
> >>> 20
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: rib_delete_ipv4(): route delete
> >>> 200.200.250.16/32
> >>> via 200.200.200.3 ifindex 0
> >>>
> >>> 2015/09/21 16:52:06 ZEBRA: route 200.200.250.16/32 via 200.200.200.3
> >>> ifindex 0 type 9 doesn't exist in rib
> >>>
> >>> On Tue, Sep 22, 2015 at 11:52 AM, J Yu <[email protected]> 
> >>> wrote:
> >>>
> >>> Hi all,
> >>>>
> >>>> I am seeing issue where kernel routes are not deleted even though 
> >>>> the
> >>>> some
> >>>> of the routes have updated nexthop that's not reachable. I do see 
> >>>> delete
> >>>> going into Zebra where it has the new nexthop while Zebra still had 
> >>>> the
> >>>> routes pointed to the old nexthop. My code base is 0.99.24 with 
> >>>> some
> >>>> minor
> >>>> modifications...Anyone had seen similar issue?
> >>>>
> >>>> Example from below -- This router is C14 and neighbor IP is 
> >>>> 200.200.200.1
> >>>> and the route tables looks fine on C14.
> >>>> C14# show ip bgp
> >>>> BGP table version is 0, local router ID is 200.200.250.14
> >>>> Status codes: s suppressed, d damped, h history, * valid, > best, =
> >>>> multipath,
> >>>>         i internal, r RIB-failure, S Stale, R Removed
> >>>> Origin codes: i - IGP, e - EGP, ? - incomplete
> >>>>
> >>>> Network          Next Hop            Metric LocPrf Weight Path
> >>>> *>i0.0.0.0          200.200.200.1                 100      0 200 50 
> >>>> ?
> >>>> *>i10.150.0.0/16    200.200.200.1                 100      0 200 50 
> >>>> ?
> >>>>
> >>>> C14# show ip route
> >>>> Codes: K - kernel route, C - connected, S - static, R - RIP,
> >>>>  O - OSPF, I - IS-IS, B - BGP, P - PIM, A - Babel,
> >>>>  > - selected route, * - FIB route
> >>>>
> >>>> B>  0.0.0.0/0 [200/0] via 200.200.200.1 (recursive), 00:00:32
> >>>> *                     via 200.200.200.1, eth3.21 onlink, 00:00:32
> >>>> B>  10.150.0.0/16 [200/0] via 200.200.200.1 (recursive), 00:00:32
> >>>> *                         via 200.200.200.1, eth3.21 onlink, 
> >>>> 00:00:32
> >>>> ------------
> >>>> Now, changing neighbor to no longer do next-hop-self, hence the 
> >>>> next hop
> >>>> will point to the new nexthop of 10.8.0.1 and I see the following
> >>>> outputs--
> >>>> ------------
> >>>> C14# show ip bgp
> >>>> BGP table version is 0, local router ID is 200.200.250.14
> >>>> Status codes: s suppressed, d damped, h history, * valid, > best, =
> >>>> multipath,
> >>>>         i internal, r RIB-failure, S Stale, R Removed
> >>>> Origin codes: i - IGP, e - EGP, ? - incomplete
> >>>>
> >>>> Network          Next Hop            Metric LocPrf Weight Path
> >>>> * i0.0.0.0          10.8.0.1                      100      0 200 50 
> >>>> ?
> >>>> * i10.150.0.0/16    10.8.0.1                      100      0 200 50 
> >>>> ?
> >>>>
> >>>>
> >>>> C14# show ip route
> >>>> Codes: K - kernel route, C - connected, S - static, R - RIP,
> >>>>  O - OSPF, I - IS-IS, B - BGP, P - PIM, A - Babel,
> >>>>  > - selected route, * - FIB route
> >>>>
> >>>> B>  0.0.0.0/0 [200/0] via 200.200.200.1 (recursive), 00:07:09
> >>>> *                     via 200.200.200.1, eth3.21 onlink, 00:07:09
> >>>> B>  10.150.0.0/16 [200/0] via 200.200.200.1 (recursive), 00:07:09
> >>>> *                         via 200.200.200.1, eth3.21 onlink, 
> >>>> 00:07:09
> >>>>
> >>>> Appreciate any pointers!
> >>>>
> >>>> Jacqueline
> >>>>
> >>>> _______________________________________________
> >>>> Quagga-dev mailing list
> >>>> [email protected]
> >>>> https://lists.quagga.net/mailman/listinfo/quagga-dev
> >>>>
> >>>> _______________________________________________
> >>> Quagga-dev mailing list
> >>> [email protected]
> >>> https://lists.quagga.net/mailman/listinfo/quagga-dev
> >>>
> >>
> 
> _______________________________________________
> Quagga-dev mailing list
> [email protected]
> https://lists.quagga.net/mailman/listinfo/quagga-dev
                                          
_______________________________________________
Quagga-dev mailing list
[email protected]
https://lists.quagga.net/mailman/listinfo/quagga-dev

Reply via email to