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>
This commit is contained in:
Renato Westphal 2019-09-06 00:57:14 -03:00 committed by Olivier Dugeon
parent 9cd06cd7b9
commit 885e241337
4 changed files with 1 additions and 18 deletions

View File

@ -65,34 +65,20 @@ 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;
}
static struct isis_nexthop *nexthoplookup(struct list *nexthops, int family,
union g_addr *ip, ifindex_t ifindex)
{

View File

@ -31,7 +31,6 @@ struct isis_nexthop {
ifindex_t ifindex;
int family;
union g_addr ip;
unsigned int lock;
};
struct isis_route_info {

View 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

View 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 */