From: Renato Westphal Date: Fri, 6 Sep 2019 03:57:14 +0000 (-0300) Subject: isisd: remove refcount from the isis_nexthop structure X-Git-Tag: frr-7.4~8^2~8 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=885e241337e2975b7318f316bb690ad8267ea70c;p=mirror%2Ffrr.git isisd: remove refcount from the isis_nexthop structure isisd implements an optimization that allows multiple routes to share the same nexthop (using a refcount) in order to save memory. Now that SR support is coming, however, it will be necessary to embed additional SR-related information inside the isis_nexthop structure. But this can only be done if the nexthops aren't shared among routes anymore. Removing this memory optimization should have minimal impact since the isis_nexthop structure is really small. On large networks with thousands of routes, the memory saving would be in the order of a few kilobytes. Not something we should be concerned about nowadays. Signed-off-by: Renato Westphal --- diff --git a/isisd/isis_route.c b/isisd/isis_route.c index 05394e0fe4..516e3f90b9 100644 --- a/isisd/isis_route.c +++ b/isisd/isis_route.c @@ -65,32 +65,18 @@ static struct isis_nexthop *isis_nexthop_create(int family, union g_addr *ip, { struct isis_nexthop *nexthop; - nexthop = nexthoplookup(isis->nexthops, family, ip, ifindex); - if (nexthop) { - nexthop->lock++; - return nexthop; - } - nexthop = XCALLOC(MTYPE_ISIS_NEXTHOP, sizeof(struct isis_nexthop)); nexthop->family = family; nexthop->ifindex = ifindex; nexthop->ip = *ip; - listnode_add(isis->nexthops, nexthop); - nexthop->lock++; return nexthop; } static void isis_nexthop_delete(struct isis_nexthop *nexthop) { - nexthop->lock--; - if (nexthop->lock == 0) { - listnode_delete(isis->nexthops, nexthop); - XFREE(MTYPE_ISIS_NEXTHOP, nexthop); - } - - return; + XFREE(MTYPE_ISIS_NEXTHOP, nexthop); } static struct isis_nexthop *nexthoplookup(struct list *nexthops, int family, diff --git a/isisd/isis_route.h b/isisd/isis_route.h index 2326bb8228..96bcdc3508 100644 --- a/isisd/isis_route.h +++ b/isisd/isis_route.h @@ -31,7 +31,6 @@ struct isis_nexthop { ifindex_t ifindex; int family; union g_addr ip; - unsigned int lock; }; struct isis_route_info { diff --git a/isisd/isisd.c b/isisd/isisd.c index 298629e246..2a8c503ae0 100644 --- a/isisd/isisd.c +++ b/isisd/isisd.c @@ -88,7 +88,6 @@ void isis_new(unsigned long process_id, vrf_id_t vrf_id) isis->area_list = list_new(); isis->init_circ_list = list_new(); isis->uptime = time(NULL); - isis->nexthops = list_new(); dyn_cache_init(); /* * uncomment the next line for full debugs diff --git a/isisd/isisd.h b/isisd/isisd.h index 052cc10928..53776b2ec6 100644 --- a/isisd/isisd.h +++ b/isisd/isisd.h @@ -69,7 +69,6 @@ struct isis { uint32_t router_id; /* Router ID from zebra */ struct list *area_list; /* list of IS-IS areas */ struct list *init_circ_list; - struct list *nexthops; /* IP next hops from this IS */ uint8_t max_area_addrs; /* maximumAreaAdresses */ struct area_addr *man_area_addrs; /* manualAreaAddresses */ uint32_t debugs; /* bitmap for debug */