summaryrefslogtreecommitdiffstats
path: root/babeld/babel_interface.c
diff options
context:
space:
mode:
authorRenato Westphal <renato@opensourcerouting.org>2017-10-03 03:06:04 +0200
committerRenato Westphal <renato@opensourcerouting.org>2017-10-10 14:05:02 +0200
commitff880b78ef2d480b381d29487812279d57c0bbac (patch)
tree6c3996876d32ec10973145aba99aecf514a017ba /babeld/babel_interface.c
parent*: eliminate IFINDEX_DELETED in favor of IFINDEX_INTERNAL (diff)
downloadfrr-ff880b78ef2d480b381d29487812279d57c0bbac.tar.xz
frr-ff880b78ef2d480b381d29487812279d57c0bbac.zip
*: introduce new rb-tree to optimize interface lookup by ifindex
Performance tests showed that, when running on a system with a large number of interfaces, some daemons would spend a considerable amount of time in the if_lookup_by_index() function. Introduce a new rb-tree to solve this problem. With this change, we need to use the if_set_index() function whenever we want to change the ifindex of an interface. This is necessary to ensure that the 'ifaces_by_index' rb-tree is updated accordingly. The return value of all insert/remove operations in the interface rb-trees is checked to ensure that an error is logged if a corruption is detected. Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
Diffstat (limited to 'babeld/babel_interface.c')
-rw-r--r--babeld/babel_interface.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/babeld/babel_interface.c b/babeld/babel_interface.c
index 49c848d49..5bc48e8a2 100644
--- a/babeld/babel_interface.c
+++ b/babeld/babel_interface.c
@@ -138,7 +138,7 @@ babel_interface_delete (int cmd, struct zclient *client, zebra_size_t length, vr
/* To support pseudo interface do not free interface structure. */
/* if_delete(ifp); */
- ifp->ifindex = IFINDEX_INTERNAL;
+ if_set_index(ifp, IFINDEX_INTERNAL);
return 0;
}