summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRenato Westphal <renato@opensourcerouting.org>2019-09-06 00:57:14 -0300
committerOlivier Dugeon <olivier.dugeon@orange.com>2020-04-30 11:28:51 +0200
commit885e241337e2975b7318f316bb690ad8267ea70c (patch)
treeb2065db45140c8003b7a39011be7c60e30b153cc
parent9cd06cd7b9ee0a966d7ae9a7d23385a2d287845d (diff)
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 <renato@opensourcerouting.org>
-rw-r--r--isisd/isis_route.c16
-rw-r--r--isisd/isis_route.h1
-rw-r--r--isisd/isisd.c1
-rw-r--r--isisd/isisd.h1
4 files changed, 1 insertions, 18 deletions
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 */