return CMD_SUCCESS;
}
+static struct zebra_vrf *zebra_vty_get_unknown_vrf(struct vty *vty,
+ const char *vrf_name)
+{
+ struct zebra_vrf *zvrf;
+ struct vrf *vrf;
+
+ zvrf = zebra_vrf_lookup_by_name(vrf_name);
+
+ if (zvrf)
+ return zvrf;
+
+ vrf = vrf_get(VRF_UNKNOWN, vrf_name);
+ if (!vrf) {
+ vty_out(vty, "%% Could not create vrf %s\n", vrf_name);
+ return NULL;
+ }
+ zvrf = vrf->info;
+ if (!zvrf) {
+ vty_out(vty, "%% Could not create vrf-info %s\n",
+ vrf_name);
+ return NULL;
+ }
+ /* Mark as having FRR configuration */
+ vrf_set_user_cfged(vrf);
+
+ return zvrf;
+}
+
static int zebra_static_route(struct vty *vty, afi_t afi, safi_t safi,
const char *negate, const char *dest_str,
const char *mask_str, const char *src_str,
const char *label_str)
{
struct zebra_vrf *zvrf;
- struct vrf *vrf;
/* VRF id */
zvrf = zebra_vrf_lookup_by_name(vrf_name);
* Note: The VRF isn't active until we hear about it from the kernel.
*/
if (!zvrf) {
- vrf = vrf_get(VRF_UNKNOWN, vrf_name);
- if (!vrf) {
- vty_out(vty, "%% Could not create vrf %s\n", vrf_name);
- return CMD_WARNING_CONFIG_FAILED;
- }
- zvrf = vrf->info;
- if (!zvrf) {
- vty_out(vty, "%% Could not create vrf-info %s\n",
- vrf_name);
+ zvrf = zebra_vty_get_unknown_vrf(vty, vrf_name);
+ if (!zvrf)
return CMD_WARNING_CONFIG_FAILED;
- }
- /* Mark as having FRR configuration */
- vrf_set_user_cfged(vrf);
}
return zebra_static_route_leak(
vty, zvrf, zvrf, afi, safi, negate, dest_str, mask_str, src_str,
}
if (nexthop_vrf)
- nh_zvrf = zebra_vrf_lookup_by_name(nexthop_vrf);
+ nh_zvrf = zebra_vty_get_unknown_vrf(vty, nexthop_vrf);
else
nh_zvrf = zvrf;
}
if (nexthop_vrf)
- nh_zvrf = zebra_vrf_lookup_by_name(nexthop_vrf);
+ nh_zvrf = zebra_vty_get_unknown_vrf(vty, nexthop_vrf);
else
nh_zvrf = zvrf;
}
if (nexthop_vrf)
- nh_zvrf = zebra_vrf_lookup_by_name(nexthop_vrf);
+ nh_zvrf = zebra_vty_get_unknown_vrf(vty, nexthop_vrf);
else
nh_zvrf = zvrf;
}
if (nexthop_vrf)
- nh_zvrf = zebra_vrf_lookup_by_name(nexthop_vrf);
+ nh_zvrf = zebra_vty_get_unknown_vrf(vty, nexthop_vrf);
else
nh_zvrf = zvrf;
}
if (nexthop_vrf)
- nh_zvrf = zebra_vrf_lookup_by_name(nexthop_vrf);
+ nh_zvrf = zebra_vty_get_unknown_vrf(vty, nexthop_vrf);
else
nh_zvrf = zvrf;
struct zebra_vrf *nh_zvrf;
if (nexthop_vrf)
- nh_zvrf = zebra_vrf_lookup_by_name(nexthop_vrf);
+ nh_zvrf = zebra_vty_get_unknown_vrf(vty, nexthop_vrf);
else
nh_zvrf = zvrf;
}
if (nexthop_vrf)
- nh_zvrf = zebra_vrf_lookup_by_name(nexthop_vrf);
+ nh_zvrf = zebra_vty_get_unknown_vrf(vty, nexthop_vrf);
else
nh_zvrf = zvrf;
struct zebra_vrf *nh_zvrf;
if (nexthop_vrf)
- nh_zvrf = zebra_vrf_lookup_by_name(nexthop_vrf);
+ nh_zvrf = zebra_vty_get_unknown_vrf(vty, nexthop_vrf);
else
nh_zvrf = zvrf;