goto done;
}
- if (pbrms->vrf_lookup || pbrms->vrf_unchanged) {
- vty_out(vty, SET_VRF_EXISTS_STR);
- ret = CMD_WARNING_CONFIG_FAILED;
+ /*
+ * Determine if a set vrf * command already exists.
+ *
+ * If its equivalent, just return success.
+ *
+ * Else, return failure, we don't allow atomic swaps yet.
+ */
+ if (vrf_name && pbrms->vrf_lookup) {
+ /* New vrf specified and one already exists */
+
+ /* Is this vrf different from one already configured? */
+ if (strncmp(pbrms->vrf_name, vrf_name, sizeof(pbrms->vrf_name))
+ != 0)
+ goto vrf_exists;
+
+ goto done;
+
+ } else if (!vrf_name && pbrms->vrf_unchanged) {
+ /* Unchanged specified and unchanged already exists */
goto done;
+
+ } else if (vrf_name && pbrms->vrf_unchanged) {
+ /* New vrf specified and unchanged is already set */
+ goto vrf_exists;
+
+ } else if (!vrf_name && pbrms->vrf_lookup) {
+ /* Unchanged specified and vrf to lookup already exists */
+ goto vrf_exists;
}
+ /* Create new lookup VRF or Unchanged */
if (vrf_name) {
if (!pbr_vrf_lookup_by_name(vrf_name)) {
vty_out(vty, "Specified: %s is non-existent\n",
done:
return ret;
+
+vrf_exists:
+ vty_out(vty, SET_VRF_EXISTS_STR);
+ ret = CMD_WARNING_CONFIG_FAILED;
+ return ret;
}
DEFPY (pbr_policy,