if (zif->brslave_info.br_if != br_if)
continue;
- vni_id = zebra_vxlan_if_access_vlan_vni_find(zif, vid,
- br_if);
+ vni_id =
+ zebra_vxlan_if_access_vlan_vni_find(zif, br_if);
if (vni_id) {
found = 1;
break;
}
-
}
}
if (zif->brslave_info.br_if != br_if)
continue;
- vni_id = zebra_vxlan_if_access_vlan_vni_find(zif, vid,
- br_if);
- if (vni_id)
+ vni_id =
+ zebra_vxlan_if_access_vlan_vni_find(zif, br_if);
+ if (vni_id) {
found = 1;
- break;
+ break;
+ }
}
}
if (if_is_operative(vxlan_if)
&& vxlan_zif->brslave_info.br_if) {
vni = zebra_vxlan_if_vni_find(vxlan_zif, zevpn->vni);
- vlan_if =
- zvni_map_to_svi(vni->access_vlan,
- vxlan_zif->brslave_info.br_if);
- if (vlan_if)
- zebra_evpn_acc_bd_svi_mac_add(vlan_if);
+ /* VLAN-VNI mappings may not exist */
+ if (vni) {
+ vlan_if = zvni_map_to_svi(
+ vni->access_vlan,
+ vxlan_zif->brslave_info.br_if);
+ if (vlan_if)
+ zebra_evpn_acc_bd_svi_mac_add(vlan_if);
+ }
}
}
}
if (zif->brslave_info.br_if != in_param->br_if)
continue;
- vni_id = zebra_vxlan_if_access_vlan_vni_find(zif, in_param->vid,
- in_param->br_if);
+ vni_id = zebra_vxlan_if_access_vlan_vni_find(
+ zif, in_param->br_if);
if (vni_id) {
found = 1;
break;
return vnip;
}
+ /* For SVD, the VNI value is a required parameter. */
assert(vni);
memset(&vni_tmp, 0, sizeof(vni_tmp));
hash_walk(vni_info->vni_table, zebra_vxlan_if_vni_walk_callback, &ctx);
}
-vni_t zebra_vxlan_if_access_vlan_vni_find(struct zebra_if *zif, vlanid_t vid,
+vni_t zebra_vxlan_if_access_vlan_vni_find(struct zebra_if *zif,
struct interface *br_if)
{
struct zebra_vxlan_vni *vni = NULL;
- /* Expected to be called only for vlan-unware bridges */
- assert(!IS_ZEBRA_IF_BRIDGE_VLAN_AWARE((struct zebra_if *)br_if->info));
+ /* Expected to be called only for vlan-unware bridges. In this case,
+ * we only support a per-VNI VXLAN interface model.
+ */
+ if (!IS_ZEBRA_VXLAN_IF_VNI(zif))
+ return 0;
+
vni = zebra_vxlan_if_vni_find(zif, 0);
assert(vni);
void *),
void *arg);
extern vni_t zebra_vxlan_if_access_vlan_vni_find(struct zebra_if *zif,
- vlanid_t vid,
struct interface *br_if);
extern int zebra_vxlan_if_vni_mcast_group_update(struct interface *ifp,
vni_t vni_id,