summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDonatas Abraitis <donatas.abraitis@gmail.com>2020-07-04 09:07:24 +0300
committerGitHub <noreply@github.com>2020-07-04 09:07:24 +0300
commit807c31d5822a7af5a8d07a0a72f73df67fd970ed (patch)
tree2dfc2dff69d11ce53eea5c7fb50bb8b0d2471e90
parenta596d47a276a07f145d01cd644aaceb06bed2616 (diff)
parent0189f7226fe8e1ee5a365ff2654922dd5aae7753 (diff)
Merge pull request #6666 from donaldsharp/pbr_interface
pbrd: Be a bit more lenient with `set nexthop A.B.C.D <intf>`
-rw-r--r--pbrd/pbr_vty.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/pbrd/pbr_vty.c b/pbrd/pbr_vty.c
index 54029206cc..cd9096cbc8 100644
--- a/pbrd/pbr_vty.c
+++ b/pbrd/pbr_vty.c
@@ -312,7 +312,7 @@ DEFPY(pbr_map_nexthop, pbr_map_nexthop_cmd,
vrf = vrf_lookup_by_id(VRF_DEFAULT);
if (!vrf) {
- vty_out(vty, "Specified: %s is non-existent\n", vrf_name);
+ vty_out(vty, "Specified VRF: %s is non-existent\n", vrf_name);
return CMD_WARNING_CONFIG_FAILED;
}
@@ -320,13 +320,24 @@ DEFPY(pbr_map_nexthop, pbr_map_nexthop_cmd,
nhop.vrf_id = vrf->vrf_id;
if (intf) {
- nhop.ifindex = ifname2ifindex(intf, vrf->vrf_id);
- if (nhop.ifindex == IFINDEX_INTERNAL) {
- vty_out(vty,
- "Specified Intf %s does not exist in vrf: %s\n",
- intf, vrf->name);
+ struct interface *ifp;
+
+ ifp = if_lookup_by_name_all_vrf(intf);
+ if (!ifp) {
+ vty_out(vty, "Specified Intf %s does not exist\n",
+ intf);
return CMD_WARNING_CONFIG_FAILED;
}
+ if (ifp->vrf_id != vrf->vrf_id) {
+ struct vrf *actual;
+
+ actual = vrf_lookup_by_id(ifp->vrf_id);
+ vty_out(vty,
+ "Specified Intf %s is not in vrf %s but is in vrf %s, using actual vrf\n",
+ ifp->name, vrf->name, actual->name);
+ }
+ nhop.ifindex = ifp->ifindex;
+ nhop.vrf_id = ifp->vrf_id;
}
if (addr) {