lib: convert vrf cmd to northbound config callback

Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
This commit is contained in:
Chirag Shah 2020-03-21 14:35:14 -07:00 committed by Santosh P K
parent 6fd8972aef
commit 8b4cb7a64b

View File

@ -37,6 +37,7 @@
#include "nexthop_group.h" #include "nexthop_group.h"
#include "lib_errors.h" #include "lib_errors.h"
#include "northbound.h" #include "northbound.h"
#include "northbound_cli.h"
/* default VRF ID value used when VRF backend is not NETNS */ /* default VRF ID value used when VRF backend is not NETNS */
#define VRF_DEFAULT_INTERNAL 0 #define VRF_DEFAULT_INTERNAL 0
@ -613,6 +614,8 @@ int vrf_handler_create(struct vty *vty, const char *vrfname,
struct vrf **vrf) struct vrf **vrf)
{ {
struct vrf *vrfp; struct vrf *vrfp;
char xpath_list[XPATH_MAXLEN];
int ret;
if (strlen(vrfname) > VRF_NAMSIZ) { if (strlen(vrfname) > VRF_NAMSIZ) {
if (vty) if (vty)
@ -627,13 +630,24 @@ int vrf_handler_create(struct vty *vty, const char *vrfname,
return CMD_WARNING_CONFIG_FAILED; return CMD_WARNING_CONFIG_FAILED;
} }
vrfp = vrf_get(VRF_UNKNOWN, vrfname); if (vty) {
snprintf(xpath_list, sizeof(xpath_list),
"/frr-vrf:lib/vrf[name='%s']", vrfname);
if (vty) nb_cli_enqueue_change(vty, xpath_list, NB_OP_CREATE, NULL);
VTY_PUSH_CONTEXT(VRF_NODE, vrfp); ret = nb_cli_apply_changes(vty, xpath_list);
if (ret == CMD_SUCCESS) {
VTY_PUSH_XPATH(VRF_NODE, xpath_list);
vrfp = vrf_lookup_by_name(vrfname);
if (vrfp)
VTY_PUSH_CONTEXT(VRF_NODE, vrfp);
}
} else {
vrfp = vrf_get(VRF_UNKNOWN, vrfname);
if (vrf) if (vrf)
*vrf = vrfp; *vrf = vrfp;
}
return CMD_SUCCESS; return CMD_SUCCESS;
} }
@ -736,6 +750,7 @@ DEFUN (no_vrf,
"VRF's name\n") "VRF's name\n")
{ {
const char *vrfname = argv[2]->arg; const char *vrfname = argv[2]->arg;
char xpath_list[XPATH_MAXLEN];
struct vrf *vrfp; struct vrf *vrfp;
@ -751,11 +766,11 @@ DEFUN (no_vrf,
return CMD_WARNING_CONFIG_FAILED; return CMD_WARNING_CONFIG_FAILED;
} }
/* Clear configured flag and invoke delete. */ snprintf(xpath_list, sizeof(xpath_list), "/frr-vrf:lib/vrf[name='%s']",
UNSET_FLAG(vrfp->status, VRF_CONFIGURED); vrfname);
vrf_delete(vrfp);
return CMD_SUCCESS; nb_cli_enqueue_change(vty, xpath_list, NB_OP_DESTROY, NULL);
return nb_cli_apply_changes(vty, xpath_list);
} }
@ -1048,7 +1063,6 @@ static int lib_vrf_destroy(enum nb_event event, const struct lyd_node *dnode)
{ {
struct vrf *vrfp; struct vrf *vrfp;
switch (event) { switch (event) {
case NB_EV_VALIDATE: case NB_EV_VALIDATE:
vrfp = nb_running_get_entry(dnode, NULL, true); vrfp = nb_running_get_entry(dnode, NULL, true);
@ -1063,6 +1077,7 @@ static int lib_vrf_destroy(enum nb_event event, const struct lyd_node *dnode)
break; break;
case NB_EV_APPLY: case NB_EV_APPLY:
vrfp = nb_running_unset_entry(dnode); vrfp = nb_running_unset_entry(dnode);
/* Clear configured flag and invoke delete. */ /* Clear configured flag and invoke delete. */
UNSET_FLAG(vrfp->status, VRF_CONFIGURED); UNSET_FLAG(vrfp->status, VRF_CONFIGURED);
vrf_delete(vrfp); vrf_delete(vrfp);