diff options
| author | Renato Westphal <renato@opensourcerouting.org> | 2017-04-30 10:26:06 -0300 |
|---|---|---|
| committer | Renato Westphal <renato@opensourcerouting.org> | 2017-05-01 09:19:47 -0300 |
| commit | b8af3fbbafc83b22c3215f3eb97a6465324cc10a (patch) | |
| tree | 55eb163625af8fa0df6db8012a30f9efcaee5e0d /zebra/interface.c | |
| parent | d5414843c2f5173be2bf76c179eece0620313fd4 (diff) | |
zebra: fix detection of interface renames
Restore the original logic in netlink_link_change() which works like this:
* once an interface event is detected, lookup the associated interface
by its name;
* call the set_ifindex() function;
* set_ifindex() will lookup the interface again but now by its ifindex. If
the lookups by name and ifindex yield to different results, then the
interface was renamed and set_ifindex() will take care of that.
In the future, zns->if_table will be split into two different data
structures to allow faster lookups by both name and ifindex.
Fixes Issue #397.
Regression introduced by commit 12f6fb9.
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
Diffstat (limited to 'zebra/interface.c')
| -rw-r--r-- | zebra/interface.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/zebra/interface.c b/zebra/interface.c index 444f3bd587..b227409586 100644 --- a/zebra/interface.c +++ b/zebra/interface.c @@ -211,6 +211,23 @@ if_lookup_by_index_per_ns (struct zebra_ns *ns, u_int32_t ifindex) return ifp; } +/* Look up an interface by name within a NS */ +struct interface * +if_lookup_by_name_per_ns (struct zebra_ns *ns, const char *ifname) +{ + struct route_node *rn; + struct interface *ifp; + + for (rn = route_top (ns->if_table); rn; rn = route_next (rn)) + { + ifp = (struct interface *)rn->info; + if (ifp && strcmp (ifp->name, ifname) == 0) + return (ifp); + } + + return NULL; +} + const char * ifindex2ifname_per_ns (struct zebra_ns *zns, unsigned int ifindex) { |
