Merge pull request #8078 from idryzhov/fix-zebra-vni

zebra: fix vni configuration in default vrf
This commit is contained in:
Rafael Zalamena 2021-03-24 13:32:44 +00:00 committed by GitHub
commit b9f1b4d3d3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 46 additions and 36 deletions

View File

@ -201,19 +201,6 @@ lib_vrf_zebra_ribs_rib_route_nexthop_group_frr_nexthops_nexthop_get_next(
struct nb_cb_get_next_args *args); struct nb_cb_get_next_args *args);
int lib_vrf_zebra_ribs_rib_route_nexthop_group_frr_nexthops_nexthop_get_keys( int lib_vrf_zebra_ribs_rib_route_nexthop_group_frr_nexthops_nexthop_get_keys(
struct nb_cb_get_keys_args *args); struct nb_cb_get_keys_args *args);
int lib_vrf_zebra_ribs_rib_create(struct nb_cb_create_args *args);
int lib_vrf_zebra_ribs_rib_destroy(struct nb_cb_destroy_args *args);
const void *lib_vrf_zebra_ribs_rib_get_next(struct nb_cb_get_next_args *args);
int lib_vrf_zebra_ribs_rib_get_keys(struct nb_cb_get_keys_args *args);
const void *
lib_vrf_zebra_ribs_rib_lookup_entry(struct nb_cb_lookup_entry_args *args);
const void *
lib_vrf_zebra_ribs_rib_route_get_next(struct nb_cb_get_next_args *args);
int lib_vrf_zebra_ribs_rib_route_get_keys(struct nb_cb_get_keys_args *args);
const void *
lib_vrf_zebra_ribs_rib_route_lookup_entry(struct nb_cb_lookup_entry_args *args);
struct yang_data *
lib_vrf_zebra_ribs_rib_route_prefix_get_elem(struct nb_cb_get_elem_args *args);
const void *lib_vrf_zebra_ribs_rib_route_route_entry_get_next( const void *lib_vrf_zebra_ribs_rib_route_route_entry_get_next(
struct nb_cb_get_next_args *args); struct nb_cb_get_next_args *args);
int lib_vrf_zebra_ribs_rib_route_route_entry_get_keys( int lib_vrf_zebra_ribs_rib_route_route_entry_get_keys(

View File

@ -2564,10 +2564,8 @@ DEFUN (default_vrf_vni_mapping,
"VNI-ID\n" "VNI-ID\n"
"Prefix routes only \n") "Prefix routes only \n")
{ {
int ret = 0; char xpath[XPATH_MAXLEN];
char err[ERR_STR_SZ];
struct zebra_vrf *zvrf = NULL; struct zebra_vrf *zvrf = NULL;
vni_t vni = strtoul(argv[1]->arg, NULL, 10);
int filter = 0; int filter = 0;
zvrf = vrf_info_lookup(VRF_DEFAULT); zvrf = vrf_info_lookup(VRF_DEFAULT);
@ -2577,25 +2575,35 @@ DEFUN (default_vrf_vni_mapping,
if (argc == 3) if (argc == 3)
filter = 1; filter = 1;
ret = zebra_vxlan_process_vrf_vni_cmd(zvrf, vni, err, ERR_STR_SZ, snprintf(xpath, sizeof(xpath), FRR_VRF_KEY_XPATH "/frr-zebra:zebra",
filter, 1); VRF_DEFAULT_NAME);
if (ret != 0) { nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
vty_out(vty, "%s\n", err);
return CMD_WARNING; snprintf(xpath, sizeof(xpath),
FRR_VRF_KEY_XPATH "/frr-zebra:zebra/l3vni-id",
VRF_DEFAULT_NAME);
nb_cli_enqueue_change(vty, xpath, NB_OP_MODIFY, argv[1]->arg);
if (filter) {
snprintf(xpath, sizeof(xpath),
FRR_VRF_KEY_XPATH "/frr-zebra:zebra/prefix-only",
VRF_DEFAULT_NAME);
nb_cli_enqueue_change(vty, xpath, NB_OP_MODIFY, "true");
} }
return CMD_SUCCESS; return nb_cli_apply_changes(vty, NULL);
} }
DEFUN (no_default_vrf_vni_mapping, DEFUN (no_default_vrf_vni_mapping,
no_default_vrf_vni_mapping_cmd, no_default_vrf_vni_mapping_cmd,
"no vni " CMD_VNI_RANGE, "no vni " CMD_VNI_RANGE "[prefix-routes-only]",
NO_STR NO_STR
"VNI corresponding to DEFAULT VRF\n" "VNI corresponding to DEFAULT VRF\n"
"VNI-ID") "VNI-ID\n"
"Prefix routes only \n")
{ {
int ret = 0; char xpath[XPATH_MAXLEN];
char err[ERR_STR_SZ]; int filter = 0;
vni_t vni = strtoul(argv[2]->arg, NULL, 10); vni_t vni = strtoul(argv[2]->arg, NULL, 10);
struct zebra_vrf *zvrf = NULL; struct zebra_vrf *zvrf = NULL;
@ -2603,13 +2611,32 @@ DEFUN (no_default_vrf_vni_mapping,
if (!zvrf) if (!zvrf)
return CMD_WARNING; return CMD_WARNING;
ret = zebra_vxlan_process_vrf_vni_cmd(zvrf, vni, err, ERR_STR_SZ, 0, 0); if (argc == 4)
if (ret != 0) { filter = 1;
vty_out(vty, "%s\n", err);
if (zvrf->l3vni != vni) {
vty_out(vty, "VNI %d doesn't exist in VRF: %s \n", vni,
zvrf->vrf->name);
return CMD_WARNING; return CMD_WARNING;
} }
return CMD_SUCCESS; snprintf(xpath, sizeof(xpath),
FRR_VRF_KEY_XPATH "/frr-zebra:zebra/l3vni-id",
VRF_DEFAULT_NAME);
nb_cli_enqueue_change(vty, xpath, NB_OP_DESTROY, argv[2]->arg);
if (filter) {
snprintf(xpath, sizeof(xpath),
FRR_VRF_KEY_XPATH "/frr-zebra:zebra/prefix-only",
VRF_DEFAULT_NAME);
nb_cli_enqueue_change(vty, xpath, NB_OP_DESTROY, "true");
}
snprintf(xpath, sizeof(xpath), FRR_VRF_KEY_XPATH "/frr-zebra:zebra",
VRF_DEFAULT_NAME);
nb_cli_enqueue_change(vty, xpath, NB_OP_DESTROY, NULL);
return nb_cli_apply_changes(vty, NULL);
} }
DEFUN (vrf_vni_mapping, DEFUN (vrf_vni_mapping,
@ -2637,9 +2664,7 @@ DEFUN (vrf_vni_mapping,
nb_cli_enqueue_change(vty, "./frr-zebra:zebra/prefix-only", nb_cli_enqueue_change(vty, "./frr-zebra:zebra/prefix-only",
NB_OP_MODIFY, "true"); NB_OP_MODIFY, "true");
nb_cli_apply_changes(vty, NULL); return nb_cli_apply_changes(vty, NULL);
return CMD_SUCCESS;
} }
DEFUN (no_vrf_vni_mapping, DEFUN (no_vrf_vni_mapping,
@ -2676,9 +2701,7 @@ DEFUN (no_vrf_vni_mapping,
nb_cli_enqueue_change(vty, "./frr-zebra:zebra", NB_OP_DESTROY, NULL); nb_cli_enqueue_change(vty, "./frr-zebra:zebra", NB_OP_DESTROY, NULL);
nb_cli_apply_changes(vty, NULL); return nb_cli_apply_changes(vty, NULL);
return CMD_SUCCESS;
} }
/* show vrf */ /* show vrf */