]> git.proxmox.com Git - mirror_frr.git/commitdiff
isisd: remove refcount from the isis_nexthop structure
authorRenato Westphal <renato@opensourcerouting.org>
Fri, 6 Sep 2019 03:57:14 +0000 (00:57 -0300)
committerOlivier Dugeon <olivier.dugeon@orange.com>
Thu, 30 Apr 2020 09:28:51 +0000 (11:28 +0200)
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 <renato@opensourcerouting.org>
isisd/isis_route.c
isisd/isis_route.h
isisd/isisd.c
isisd/isisd.h

index 05394e0fe4bc8a2ac67fef377706845a80cd25a3..516e3f90b9a1f7b9dab982874b054ba8d2e5a7d4 100644 (file)
@@ -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,
index 2326bb8228c05569573c615de7d460a73cdf9d90..96bcdc3508cc6852302f4d16b6f714d031b336da 100644 (file)
@@ -31,7 +31,6 @@ struct isis_nexthop {
        ifindex_t ifindex;
        int family;
        union g_addr ip;
-       unsigned int lock;
 };
 
 struct isis_route_info {
index 298629e246b331daab0985071bffa617f878b7aa..2a8c503ae057d1849145b35dba297cd856b5b79f 100644 (file)
@@ -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
index 052cc109286975481b6c5aeb4884a85848c0c34f..53776b2ec6a4ac7032e4d12c7af4b3c04affd07b 100644 (file)
@@ -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 */