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]> 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]>> wrote:
> >
> >     Signed-off-by: Lou Berger <[email protected] <mailto:[email protected]
> >>
> >     Signed-off-by: David Lamparter <[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