From: Donald Sharp Date: Thu, 20 Aug 2020 15:56:05 +0000 (-0400) Subject: lib: Allow nexthop simple display to take an alternate ifp name X-Git-Tag: base_7.5~27^2~4 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=a251884bff9ef5fac7ec1ff399fb0f5472565b55;p=matthieu%2Ffrr.git lib: Allow nexthop simple display to take an alternate ifp name The nexthop_group_write_nexthop_simple function outputs the interface name, because we've stored the ifindex. The problem is that there are ephermeal interfaces in linux that can be destroyed/recreated. Allow us to keep that data and do something a bit smarter to allow show run's and other show commands to continue to work when the interface is deleted. Signed-off-by: Donald Sharp --- diff --git a/lib/nexthop_group.c b/lib/nexthop_group.c index 696b17fedc..a8f6e8a405 100644 --- a/lib/nexthop_group.c +++ b/lib/nexthop_group.c @@ -953,22 +953,28 @@ static struct cmd_node nexthop_group_node = { }; void nexthop_group_write_nexthop_simple(struct vty *vty, - const struct nexthop *nh) + const struct nexthop *nh, + char *altifname) { char buf[100]; + char *ifname; vty_out(vty, "nexthop "); + if (altifname) + ifname = altifname; + else + ifname = (char *)ifindex2ifname(nh->ifindex, nh->vrf_id); + switch (nh->type) { case NEXTHOP_TYPE_IFINDEX: - vty_out(vty, "%s", ifindex2ifname(nh->ifindex, nh->vrf_id)); + vty_out(vty, "%s", ifname); break; case NEXTHOP_TYPE_IPV4: vty_out(vty, "%s", inet_ntoa(nh->gate.ipv4)); break; case NEXTHOP_TYPE_IPV4_IFINDEX: - vty_out(vty, "%s %s", inet_ntoa(nh->gate.ipv4), - ifindex2ifname(nh->ifindex, nh->vrf_id)); + vty_out(vty, "%s %s", inet_ntoa(nh->gate.ipv4), ifname); break; case NEXTHOP_TYPE_IPV6: vty_out(vty, "%s", @@ -977,7 +983,7 @@ void nexthop_group_write_nexthop_simple(struct vty *vty, case NEXTHOP_TYPE_IPV6_IFINDEX: vty_out(vty, "%s %s", inet_ntop(AF_INET6, &nh->gate.ipv6, buf, sizeof(buf)), - ifindex2ifname(nh->ifindex, nh->vrf_id)); + ifname); break; case NEXTHOP_TYPE_BLACKHOLE: break; @@ -989,7 +995,7 @@ void nexthop_group_write_nexthop(struct vty *vty, const struct nexthop *nh) struct vrf *vrf; int i; - nexthop_group_write_nexthop_simple(vty, nh); + nexthop_group_write_nexthop_simple(vty, nh, NULL); if (nh->vrf_id != VRF_DEFAULT) { vrf = vrf_lookup_by_id(nh->vrf_id); diff --git a/lib/nexthop_group.h b/lib/nexthop_group.h index 3024a01357..5f7bde0def 100644 --- a/lib/nexthop_group.h +++ b/lib/nexthop_group.h @@ -136,7 +136,8 @@ extern bool nexthop_group_equal(const struct nexthop_group *nhg1, extern struct nexthop_group_cmd *nhgc_find(const char *name); extern void nexthop_group_write_nexthop_simple(struct vty *vty, - const struct nexthop *nh); + const struct nexthop *nh, + char *altifname); extern void nexthop_group_write_nexthop(struct vty *vty, const struct nexthop *nh); diff --git a/pbrd/pbr_vty.c b/pbrd/pbr_vty.c index 86d088d44c..3ed227dd02 100644 --- a/pbrd/pbr_vty.c +++ b/pbrd/pbr_vty.c @@ -627,7 +627,7 @@ pbrms_nexthop_group_write_individual_nexthop( struct pbr_nexthop_cache lookup; struct pbr_nexthop_cache *pnhc; - nexthop_group_write_nexthop_simple(vty, pbrms->nhg->nexthop); + nexthop_group_write_nexthop_simple(vty, pbrms->nhg->nexthop, NULL); memset(&find, 0, sizeof(find)); strlcpy(find.name, pbrms->internal_nhg_name, sizeof(find.name));