zebra_mac_t *zrmac);
/* l3-vni related APIs*/
-static int is_vni_l3(vni_t);
static zebra_l3vni_t *zl3vni_lookup(vni_t vni);
static void *zl3vni_alloc(void *p);
static zebra_l3vni_t *zl3vni_add(vni_t vni, vrf_id_t vrf_id);
zns = zebra_ns_lookup(NS_DEFAULT);
for (rn = route_top(zns->if_table); rn; rn = route_next(rn)) {
vni_t vni;
+ zebra_vni_t *zvni = NULL;
+ zebra_l3vni_t *zl3vni = NULL;
struct zebra_if *zif;
struct zebra_l2info_vxlan *vxl;
vxl = &zif->l2info.vxl;
vni = vxl->vni;
- if (is_vni_l3(vni)) {
- zebra_l3vni_t *zl3vni = NULL;
+ /* L3-VNI and L2-VNI are handled seperately */
+ zl3vni = zl3vni_lookup(vni);
+ if (zl3vni) {
if (IS_ZEBRA_DEBUG_VXLAN)
zlog_debug("create L3-VNI hash for Intf %s(%u) L3-VNI %u",
ifp->name, ifp->ifindex, vni);
- zl3vni = zl3vni_lookup(vni);
- if (!zl3vni) {
- zlog_err(
- "Failed to locate L3-VNI hash at UP, IF %s(%u) VNI %u",
- ifp->name, ifp->ifindex, vni);
- return;
- }
-
/* associate with vxlan_if */
zl3vni->local_vtep_ip = vxl->vtep_ip;
zl3vni->vxlan_if = ifp;
zebra_vxlan_process_l3vni_oper_up(zl3vni);
} else {
- zebra_vni_t *zvni = NULL;
- zebra_l3vni_t *zl3vni = NULL;
struct interface *vlan_if = NULL;
if (IS_ZEBRA_DEBUG_VXLAN)
return 0;
}
-static int is_vni_l3(vni_t vni)
-{
- zebra_l3vni_t *zl3vni = NULL;
-
- zl3vni = zl3vni_lookup(vni);
- if (zl3vni)
- return 1;
- return 0;
-}
-
static struct interface *zl3vni_map_to_vxlan_if(zebra_l3vni_t *zl3vni)
{
struct zebra_ns *zns = NULL;
vni_t vni;
struct zebra_if *zif = NULL;
struct zebra_l2info_vxlan *vxl = NULL;
+ zebra_l3vni_t *zl3vni = NULL;
+ zebra_vni_t *zvni;
/* Check if EVPN is enabled. */
if (!is_evpn_enabled())
vxl = &zif->l2info.vxl;
vni = vxl->vni;
-
- if (is_vni_l3(vni)) {
-
+ zl3vni = zl3vni_lookup(vni);
+ if (zl3vni) {
/* process-if-down for l3-vni */
- zebra_l3vni_t *zl3vni = NULL;
-
if (IS_ZEBRA_DEBUG_VXLAN)
zlog_debug("Intf %s(%u) L3-VNI %u is DOWN",
ifp->name, ifp->ifindex, vni);
- zl3vni = zl3vni_lookup(vni);
- if (!zl3vni) {
- zlog_err(
- "Failed to locate L3-VNI hash at DOWN, IF %s(%u) VNI %u",
- ifp->name, ifp->ifindex, vni);
- return -1;
- }
-
zebra_vxlan_process_l3vni_oper_down(zl3vni);
-
} else {
/* process if-down for l2-vni */
- zebra_vni_t *zvni;
-
if (IS_ZEBRA_DEBUG_VXLAN)
zlog_debug("Intf %s(%u) L2-VNI %u is DOWN",
ifp->name, ifp->ifindex, vni);
vni_t vni;
struct zebra_if *zif = NULL;
struct zebra_l2info_vxlan *vxl = NULL;
+ zebra_vni_t *zvni = NULL;
+ zebra_l3vni_t *zl3vni = NULL;
/* Check if EVPN is enabled. */
if (!is_evpn_enabled())
vxl = &zif->l2info.vxl;
vni = vxl->vni;
- if (is_vni_l3(vni)) {
+ zl3vni = zl3vni_lookup(vni);
+ if (zl3vni) {
/* Handle L3-VNI add */
zebra_l3vni_t *zl3vni = NULL;
zlog_debug("Intf %s(%u) L3-VNI %u is UP",
ifp->name, ifp->ifindex, vni);
- zl3vni = zl3vni_lookup(vni);
- if (!zl3vni) {
- zlog_err(
- "Failed to locate L3-VNI hash at UP, IF %s(%u) VNI %u",
- ifp->name, ifp->ifindex, vni);
- return -1;
- }
-
/* we need to associate with SVI, if any, we can associate with
* svi-if only after association with vxlan-intf is complete
*/
zebra_vxlan_process_l3vni_oper_up(zl3vni);
} else {
/* Handle L2-VNI add */
-
- zebra_vni_t *zvni = NULL;
- zebra_l3vni_t *zl3vni = NULL;
struct interface *vlan_if = NULL;
if (IS_ZEBRA_DEBUG_VXLAN)
vni_t vni;
struct zebra_if *zif = NULL;
struct zebra_l2info_vxlan *vxl = NULL;
+ zebra_vni_t *zvni = NULL;
+ zebra_l3vni_t *zl3vni = NULL;
/* Check if EVPN is enabled. */
if (!is_evpn_enabled())
vxl = &zif->l2info.vxl;
vni = vxl->vni;
- if (is_vni_l3(vni)) {
+ zl3vni = zl3vni_lookup(vni);
+ if (zl3vni) {
/* process if-del for l3-vni */
zebra_l3vni_t *zl3vni = NULL;
zlog_debug("Del L3-VNI %u intf %s(%u)",
vni, ifp->name, ifp->ifindex);
- zl3vni = zl3vni_lookup(vni);
- if (!zl3vni) {
- zlog_err(
- "Failed to locate L3-VNI hash at del, IF %s(%u) VNI %u",
- ifp->name, ifp->ifindex, vni);
- return 0;
- }
-
/* process oper-down for l3-vni */
zebra_vxlan_process_l3vni_oper_down(zl3vni);
} else {
/* process if-del for l2-vni*/
- zebra_vni_t *zvni = NULL;
- zebra_l3vni_t *zl3vni = NULL;
-
if (IS_ZEBRA_DEBUG_VXLAN)
zlog_debug("Del L2-VNI %u intf %s(%u)",
vni, ifp->name, ifp->ifindex);
return -1;
}
}
-
return 0;
}
vni_t vni;
struct zebra_if *zif = NULL;
struct zebra_l2info_vxlan *vxl = NULL;
+ zebra_vni_t *zvni = NULL;
+ zebra_l3vni_t *zl3vni = NULL;
/* Check if EVPN is enabled. */
if (!is_evpn_enabled())
vxl = &zif->l2info.vxl;
vni = vxl->vni;
- if (is_vni_l3(vni)) {
- zebra_l3vni_t *zl3vni = NULL;
-
- zl3vni = zl3vni_lookup(vni);
- if (!zl3vni) {
- zlog_err(
- "Failed to find L3-VNI hash on update, IF %s(%u) VNI %u",
- ifp->name, ifp->ifindex, vni);
- return -1;
- }
+ zl3vni = zl3vni_lookup(vni);
+ if (zl3vni) {
if (IS_ZEBRA_DEBUG_VXLAN)
zlog_debug(
zebra_vxlan_process_l3vni_oper_up(zl3vni);
}
} else {
- zebra_vni_t *zvni = NULL;
/* Update VNI hash. */
zvni = zvni_lookup(vni);
vni_t vni;
struct zebra_if *zif = NULL;
struct zebra_l2info_vxlan *vxl = NULL;
+ zebra_vni_t *zvni = NULL;
+ zebra_l3vni_t *zl3vni = NULL;
/* Check if EVPN is enabled. */
if (!is_evpn_enabled())
vxl = &zif->l2info.vxl;
vni = vxl->vni;
- if (is_vni_l3(vni)) {
+ zl3vni = zl3vni_lookup(vni);
+ if (zl3vni) {
/* process if-add for l3-vni*/
- zebra_l3vni_t *zl3vni = NULL;
-
if (IS_ZEBRA_DEBUG_VXLAN)
zlog_debug(
"Add L3-VNI %u intf %s(%u) VLAN %u local IP %s master %u",
vxl->access_vlan, inet_ntoa(vxl->vtep_ip),
zif->brslave_info.bridge_ifindex);
- /*
- * we expect the l3-vni has entry to be present here.
- * The only place l3-vni is created in zebra is vrf-vni mapping
- * command. This might change when we have the switchd support
- * for l3-vxlan interface.
- */
- zl3vni = zl3vni_lookup(vni);
- if (!zl3vni) {
- zlog_err(
- "Failed to locate L3-VNI hash at del, IF %s(%u) VNI %u",
- ifp->name, ifp->ifindex, vni);
- return 0;
- }
-
/* associate with vxlan_if */
zl3vni->local_vtep_ip = vxl->vtep_ip;
zl3vni->vxlan_if = ifp;
} else {
/* process if-add for l2-vni */
- zebra_vni_t *zvni = NULL;
- zebra_l3vni_t *zl3vni = NULL;
struct interface *vlan_if = NULL;
/* Create or update VNI hash. */