mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-06 12:52:49 +00:00
Merge pull request #1889 from donaldsharp/static_stuff1
zebra: Auto create the nexthop-vrf if needed.
This commit is contained in:
commit
bff428d057
@ -249,7 +249,11 @@ static int zebra_static_route_holdem(struct zebra_vrf *zvrf,
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
assert(!"We should not have found a duplicate and not remove it");
|
||||
/*
|
||||
* If a person enters the same line again
|
||||
* we need to silently accept it
|
||||
*/
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
listnode_add_sort(static_list, shr);
|
||||
@ -489,6 +493,34 @@ static int zebra_static_route_leak(
|
||||
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,
|
||||
@ -498,7 +530,6 @@ static int zebra_static_route(struct vty *vty, afi_t afi, safi_t safi,
|
||||
const char *label_str)
|
||||
{
|
||||
struct zebra_vrf *zvrf;
|
||||
struct vrf *vrf;
|
||||
|
||||
/* VRF id */
|
||||
zvrf = zebra_vrf_lookup_by_name(vrf_name);
|
||||
@ -513,19 +544,9 @@ static int zebra_static_route(struct vty *vty, afi_t afi, safi_t safi,
|
||||
* 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);
|
||||
zvrf = zebra_vty_get_unknown_vrf(vty, vrf_name);
|
||||
if (!zvrf)
|
||||
return CMD_WARNING_CONFIG_FAILED;
|
||||
}
|
||||
zvrf = vrf->info;
|
||||
if (!zvrf) {
|
||||
vty_out(vty, "%% Could not create vrf-info %s\n",
|
||||
vrf_name);
|
||||
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,
|
||||
@ -777,14 +798,14 @@ DEFPY(ip_route_address_interface,
|
||||
ifname = NULL;
|
||||
}
|
||||
|
||||
zvrf = zebra_vrf_lookup_by_name(vrf);
|
||||
zvrf = zebra_vty_get_unknown_vrf(vty, vrf);
|
||||
if (!zvrf) {
|
||||
vty_out(vty, "%% vrf %s is not defined\n", vrf);
|
||||
return CMD_WARNING_CONFIG_FAILED;
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
@ -835,7 +856,7 @@ DEFPY(ip_route_address_interface_vrf,
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
@ -884,14 +905,14 @@ DEFPY(ip_route,
|
||||
ifname = NULL;
|
||||
}
|
||||
|
||||
zvrf = zebra_vrf_lookup_by_name(vrf);
|
||||
zvrf = zebra_vty_get_unknown_vrf(vty, vrf);
|
||||
if (!zvrf) {
|
||||
vty_out(vty, "%% vrf %s is not defined\n", vrf);
|
||||
return CMD_WARNING_CONFIG_FAILED;
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
@ -941,7 +962,7 @@ DEFPY(ip_route_vrf,
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
@ -2388,14 +2409,14 @@ DEFPY(ipv6_route_address_interface,
|
||||
struct zebra_vrf *zvrf;
|
||||
struct zebra_vrf *nh_zvrf;
|
||||
|
||||
zvrf = zebra_vrf_lookup_by_name(vrf);
|
||||
zvrf = zebra_vty_get_unknown_vrf(vty, vrf);
|
||||
if (!zvrf) {
|
||||
vty_out(vty, "%% vrf %s is not defined\n", vrf);
|
||||
return CMD_WARNING_CONFIG_FAILED;
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
@ -2439,7 +2460,7 @@ DEFPY(ipv6_route_address_interface_vrf,
|
||||
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;
|
||||
|
||||
@ -2482,14 +2503,14 @@ DEFPY(ipv6_route,
|
||||
struct zebra_vrf *zvrf;
|
||||
struct zebra_vrf *nh_zvrf;
|
||||
|
||||
zvrf = zebra_vrf_lookup_by_name(vrf);
|
||||
zvrf = zebra_vty_get_unknown_vrf(vty, vrf);
|
||||
if (!zvrf) {
|
||||
vty_out(vty, "%% vrf %s is not defined\n", vrf);
|
||||
return CMD_WARNING_CONFIG_FAILED;
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
@ -2532,7 +2553,7 @@ DEFPY(ipv6_route_vrf,
|
||||
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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user