diff options
| author | David Lamparter <equinox@diac24.net> | 2018-09-21 23:06:26 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-09-21 23:06:26 +0200 |
| commit | bf07c256a3a9f2517ce0038291a348cb8dbf3979 (patch) | |
| tree | 56108b88c0778ff29635d1d03440ba9f77e3e21b /zebra/interface.c | |
| parent | 630d5912a581842e643539fd03f61ca81f2dd71a (diff) | |
| parent | 98efddf1d7e0c61d309091397885721f7d57cfaf (diff) | |
Merge pull request #3021 from donaldsharp/more_upstream
zebra_vxlan fixes
Diffstat (limited to 'zebra/interface.c')
| -rw-r--r-- | zebra/interface.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/zebra/interface.c b/zebra/interface.c index ca90c18cf2..8e492b8069 100644 --- a/zebra/interface.c +++ b/zebra/interface.c @@ -999,6 +999,39 @@ void zebra_if_update_link(struct interface *ifp, ifindex_t link_ifindex, link_ifindex); } +/* + * during initial link dump kernel does not order lower devices before + * upper devices so we need to fixup link dependencies at the end of dump + */ +void zebra_if_update_all_links(void) +{ + struct route_node *rn; + struct interface *ifp; + struct zebra_if *zif; + struct zebra_ns *ns; + + if (IS_ZEBRA_DEBUG_KERNEL) + zlog_info("fixup link dependencies"); + + ns = zebra_ns_lookup(NS_DEFAULT); + for (rn = route_top(ns->if_table); rn; rn = route_next(rn)) { + ifp = (struct interface *)rn->info; + if (!ifp) + continue; + zif = ifp->info; + if ((zif->link_ifindex != IFINDEX_INTERNAL) && !zif->link) { + zif->link = if_lookup_by_index_per_ns(ns, + zif->link_ifindex); + if (IS_ZEBRA_DEBUG_KERNEL) + zlog_debug("interface %s/%d's lower fixup to %s/%d", + ifp->name, ifp->ifindex, + zif->link?zif->link->name:"unk", + zif->link_ifindex); + } + } +} + + /* Output prefix string to vty. */ static int prefix_vty_out(struct vty *vty, struct prefix *p) |
