link_if = ifp;
zebra_vxlan_svi_up(ifp, link_if);
} else if (IS_ZEBRA_IF_VLAN(ifp)) {
- link_if = zif->link;
+ link_if = if_lookup_by_index_per_ns(zebra_ns_lookup(NS_DEFAULT),
+ zif->link_ifindex);
if (link_if)
zebra_vxlan_svi_up(ifp, link_if);
}
link_if = ifp;
zebra_vxlan_svi_down(ifp, link_if);
} else if (IS_ZEBRA_IF_VLAN(ifp)) {
- link_if = zif->link;
+ link_if = if_lookup_by_index_per_ns(zebra_ns_lookup(NS_DEFAULT),
+ zif->link_ifindex);
if (link_if)
zebra_vxlan_svi_down(ifp, link_if);
}
vlanid_t vid = 0;
zebra_vni_t *zvni;
+ if (!br_if)
+ return NULL;
+
/* Make sure the linked interface is a bridge. */
if (!IS_ZEBRA_IF_BRIDGE(br_if))
return NULL;
if (!ifp_zif)
return -1;
- svi_if = ifp_zif->link;
+ /*
+ * for a MACVLAN interface the link represents the svi_if
+ */
+ svi_if = if_lookup_by_index_per_ns(zebra_ns_lookup(NS_DEFAULT),
+ ifp_zif->link_ifindex);
if (!svi_if) {
zlog_err("%u:MACVLAN %s(%u) without link information",
ifp->vrf_id, ifp->name, ifp->ifindex);
}
if (IS_ZEBRA_IF_VLAN(svi_if)) {
+ /*
+ * If it is a vlan aware bridge then the link gives the
+ * bridge information
+ */
+ struct interface *svi_if_link = NULL;
+
svi_if_zif = svi_if->info;
- if (svi_if_zif)
- zvni = zvni_map_svi(svi_if, svi_if_zif->link);
+ if (svi_if_zif) {
+ svi_if_link = if_lookup_by_index_per_ns(
+ zebra_ns_lookup(
+ NS_DEFAULT),
+ svi_if_zif->link_ifindex);
+ zvni = zvni_map_svi(svi_if, svi_if_link);
+ }
} else if (IS_ZEBRA_IF_BRIDGE(svi_if)) {
+ /*
+ * If it is a vlan unaware bridge then svi is the bridge
+ * itself
+ */
zvni = zvni_map_svi(svi_if, svi_if);
}
} else if (IS_ZEBRA_IF_VLAN(ifp)) {
struct zebra_if *svi_if_zif =
- NULL; /* Zebra daemon specific info for SVI*/
+ NULL; /* Zebra daemon specific info for SVI */
+ struct interface *svi_if_link =
+ NULL; /* link info for the SVI = bridge info */
svi_if_zif = ifp->info;
- if (svi_if_zif)
- zvni = zvni_map_svi(ifp, svi_if_zif->link);
+ svi_if_link =
+ if_lookup_by_index_per_ns(zebra_ns_lookup(NS_DEFAULT),
+ svi_if_zif->link_ifindex);
+ if (svi_if_zif && svi_if_link)
+ zvni = zvni_map_svi(ifp, svi_if_link);
} else if (IS_ZEBRA_IF_BRIDGE(ifp)) {
zvni = zvni_map_svi(ifp, ifp);
}