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
