Yes, I missed this.  I suspect you're right and it's only needed when
doing vrf i/o.

Lou

On 1/5/2016 11:02 AM, Vivek Venkatraman wrote:
> You might have missed my comment interspersed in the code below - "VPN
> routes shouldn't require a bgp_cleanup_table() because they are not
> installed in zebra.".
>
> On Tue, Jan 5, 2016 at 6:57 AM, Lou Berger <[email protected]
> <mailto:[email protected]>> wrote:
>
>     Right.
>
>     Lou
>
>     On 1/5/2016 8:04 AM, Vivek Venkatraman wrote:
>     > Are the changes (fixes) here primarily related to cleaning up memory
>     > when a BGP instance is deleted?
>     >
>     > On Thu, Dec 24, 2015 at 10:10 AM, Lou Berger <[email protected]
>     <mailto:[email protected]>
>     > <mailto:[email protected] <mailto:[email protected]>>> wrote:
>     >
>     >     Signed-off-by: Lou Berger <[email protected]
>     <mailto:[email protected]> <mailto:[email protected]
>     <mailto:[email protected]>>>
>     >     Signed-off-by: David Lamparter
>     <[email protected] <mailto:[email protected]>
>     >     <mailto:[email protected]
>     <mailto:[email protected]>>>
>     >     ---
>     >      /* Delete all kernel routes. */
>     >      void
>     >      bgp_cleanup_routes (void)
>     >      {
>     >        struct bgp *bgp;
>     >        struct listnode *node, *nnode;
>     >     -  struct bgp_node *rn;
>     >     -  struct bgp_table *table;
>     >     -  struct bgp_info *ri;
>     >     +  afi_t afi;
>     >
>     >        for (ALL_LIST_ELEMENTS (bm->bgp, node, nnode, bgp))
>     >          {
>     >     -      table = bgp->rib[AFI_IP][SAFI_UNICAST];
>     >     +      for (afi = AFI_IP; afi < AFI_MAX; ++afi)
>     >     +       {
>     >     +         struct bgp_node *rn;
>     >
>     >     -      for (rn = bgp_table_top (table); rn; rn =
>     bgp_route_next (rn))
>     >     -       for (ri = rn->info; ri; ri = ri->next)
>     >     -         if (CHECK_FLAG (ri->flags, BGP_INFO_SELECTED)
>     >     -             && ri->type == ZEBRA_ROUTE_BGP
>     >     -             && ri->sub_type == BGP_ROUTE_NORMAL)
>     >     -           bgp_zebra_withdraw (&rn->p, ri,SAFI_UNICAST);
>     >     +         bgp_cleanup_table(bgp->rib[afi][SAFI_UNICAST],
>     >     SAFI_UNICAST);
>     >
>     >     -      table = bgp->rib[AFI_IP6][SAFI_UNICAST];
>     >     +         /*
>     >     +          * VPN and ENCAP tables are two-level (RD is top
>     level)
>     >     +          */
>     >     +         for (rn =
>     bgp_table_top(bgp->rib[afi][SAFI_MPLS_VPN]); rn;
>     >     +               rn = bgp_route_next (rn))
>     >     +             if (rn->info)
>     >     +                {
>     >     +                   bgp_cleanup_table((struct bgp_table
>     >     *)(rn->info), SAFI_MPLS_VPN);
>     >
>     >
>     > VPN routes shouldn't require a bgp_cleanup_table() because they are
>     > not installed in zebra.
>     >
>     >
>     >     +                   bgp_table_finish ((struct bgp_table
>     >     **)&(rn->info));
>     >     +                  rn->info = NULL;
>     >     +                  bgp_unlock_node(rn);
>     >     +                }
>     >
>     >     -      for (rn = bgp_table_top (table); rn; rn =
>     bgp_route_next (rn))
>     >     -       for (ri = rn->info; ri; ri = ri->next)
>     >     -         if (CHECK_FLAG (ri->flags, BGP_INFO_SELECTED)
>     >     -             && ri->type == ZEBRA_ROUTE_BGP
>     >     -             && ri->sub_type == BGP_ROUTE_NORMAL)
>     >     -           bgp_zebra_withdraw (&rn->p, ri,SAFI_UNICAST);
>     >          }
>     >      }
>     >
>
>
>



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

Reply via email to