+DEFPY(pbr_map_vrf, pbr_map_vrf_cmd,
+ "[no] set vrf <NAME$vrf_name|unchanged>",
+ NO_STR
+ "Set for the PBR-MAP\n"
+ "Specify the VRF for this map\n"
+ "The VRF Name\n"
+ "Use the interface's VRF for lookup\n")
+{
+ struct pbr_map_sequence *pbrms = VTY_GET_CONTEXT(pbr_map_sequence);
+ int ret = CMD_SUCCESS;
+
+ if (no) {
+ pbr_map_delete_vrf(pbrms);
+
+ /* Reset all data */
+ pbrms->nhs_installed = false;
+ pbrms->vrf_name[0] = '\0';
+ pbrms->vrf_lookup = false;
+ pbrms->vrf_unchanged = false;
+
+ goto done;
+ }
+
+ if (pbrms->nhgrp_name || pbrms->nhg) {
+ vty_out(vty,
+ "A `set nexthop/nexthop-group XX` command already exits, please remove that first\n");
+ ret = CMD_WARNING_CONFIG_FAILED;
+ goto done;
+ }
+
+ if (pbrms->vrf_lookup || pbrms->vrf_unchanged) {
+ vty_out(vty, SET_VRF_EXISTS_STR);
+ ret = CMD_WARNING_CONFIG_FAILED;
+ goto done;
+ }
+
+ if (vrf_name) {
+ if (!pbr_vrf_lookup_by_name(vrf_name)) {
+ vty_out(vty, "Specified: %s is non-existent\n",
+ vrf_name);
+ ret = CMD_WARNING_CONFIG_FAILED;
+ goto done;
+ }
+
+ pbrms->vrf_lookup = true;
+ strlcpy(pbrms->vrf_name, vrf_name, sizeof(pbrms->vrf_name));
+ } else
+ pbrms->vrf_unchanged = true;
+
+ pbr_map_check(pbrms);
+
+done:
+ return ret;
+}
+