summaryrefslogtreecommitdiff
path: root/zebra/zebra_nb_config.c
diff options
context:
space:
mode:
Diffstat (limited to 'zebra/zebra_nb_config.c')
-rw-r--r--zebra/zebra_nb_config.c41
1 files changed, 26 insertions, 15 deletions
diff --git a/zebra/zebra_nb_config.c b/zebra/zebra_nb_config.c
index e4501273bd..b4ed910b4d 100644
--- a/zebra/zebra_nb_config.c
+++ b/zebra/zebra_nb_config.c
@@ -1204,12 +1204,14 @@ int lib_vrf_zebra_l3vni_id_modify(struct nb_cb_modify_args *args)
switch (args->event) {
case NB_EV_PREPARE:
case NB_EV_ABORT:
- break;
+ return NB_OK;
case NB_EV_VALIDATE:
zvrf_evpn = zebra_vrf_get_evpn();
- if (!zvrf_evpn)
+ if (!zvrf_evpn) {
+ snprintf(args->errmsg, args->errmsg_len,
+ "evpn vrf is not present.");
return NB_ERR_VALIDATION;
-
+ }
vni = yang_dnode_get_uint32(args->dnode, NULL);
/* Get vrf info from parent node, reject configuration
* if zebra vrf already mapped to different vni id.
@@ -1217,10 +1219,16 @@ int lib_vrf_zebra_l3vni_id_modify(struct nb_cb_modify_args *args)
pn_dnode = yang_dnode_get_parent(args->dnode, "vrf");
if (pn_dnode) {
vrfname = yang_dnode_get_string(pn_dnode, "./name");
- vrf = vrf_lookup_by_name(vrfname);
- zvrf = zebra_vrf_lookup_by_id(vrf->vrf_id);
+ zvrf = zebra_vrf_lookup_by_name(vrfname);
+ if (!zvrf) {
+ snprintf(args->errmsg, args->errmsg_len,
+ "zebra vrf info not found for vrf:%s.",
+ vrfname);
+ return NB_ERR_VALIDATION;
+ }
if (zvrf->l3vni && zvrf->l3vni != vni) {
- zlog_debug(
+ snprintf(
+ args->errmsg, args->errmsg_len,
"vni %u cannot be configured as vni %u is already configured under the vrf",
vni, zvrf->l3vni);
return NB_ERR_VALIDATION;
@@ -1230,10 +1238,8 @@ int lib_vrf_zebra_l3vni_id_modify(struct nb_cb_modify_args *args)
/* Check if this VNI is already present in the system */
zl3vni = zl3vni_lookup(vni);
if (zl3vni) {
- if (IS_ZEBRA_DEBUG_VXLAN)
- zlog_debug(
- "VNI %u is already configured as L3-VNI",
- vni);
+ snprintf(args->errmsg, args->errmsg_len,
+ "VNI %u is already configured as L3-VNI", vni);
return NB_ERR_VALIDATION;
}
@@ -1241,7 +1247,7 @@ int lib_vrf_zebra_l3vni_id_modify(struct nb_cb_modify_args *args)
case NB_EV_APPLY:
vrf = nb_running_get_entry(args->dnode, NULL, true);
- zvrf = zebra_vrf_lookup_by_id(vrf->vrf_id);
+ zvrf = zebra_vrf_lookup_by_name(vrf->name);
vni = yang_dnode_get_uint32(args->dnode, NULL);
/* Note: This covers lib_vrf_zebra_prefix_only_modify() config
* along with l3vni config
@@ -1252,7 +1258,8 @@ int lib_vrf_zebra_l3vni_id_modify(struct nb_cb_modify_args *args)
pfx_only ? 1 : 0, 1)
!= 0) {
if (IS_ZEBRA_DEBUG_VXLAN)
- zlog_debug(
+ snprintf(
+ args->errmsg, args->errmsg_len,
"vrf vni %u mapping failed with error: %s",
vni, err);
return NB_ERR;
@@ -1279,17 +1286,21 @@ int lib_vrf_zebra_l3vni_id_destroy(struct nb_cb_destroy_args *args)
case NB_EV_PREPARE:
case NB_EV_ABORT:
case NB_EV_VALIDATE:
- break;
+ return NB_OK;
case NB_EV_APPLY:
vrf = nb_running_get_entry(args->dnode, NULL, true);
- zvrf = zebra_vrf_lookup_by_id(vrf->vrf_id);
+ zvrf = zebra_vrf_lookup_by_name(vrf->name);
vni = yang_dnode_get_uint32(args->dnode, NULL);
if (!zl3vni_lookup(vni))
return NB_OK;
- if (zvrf->l3vni != vni)
+ if (zvrf->l3vni != vni) {
+ snprintf(args->errmsg, args->errmsg_len,
+ "vrf %s has different vni %u mapped",
+ vrf->name, zvrf->l3vni);
return NB_ERR;
+ }
if (is_l3vni_for_prefix_routes_only(zvrf->l3vni))
filter = 1;