]> git.proxmox.com Git - mirror_frr.git/commitdiff
lib: Allow nexthop simple display to take an alternate ifp name
authorDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 20 Aug 2020 15:56:05 +0000 (11:56 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Fri, 28 Aug 2020 11:51:06 +0000 (07:51 -0400)
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 <sharpd@cumulusnetworks.com>
lib/nexthop_group.c
lib/nexthop_group.h
pbrd/pbr_vty.c

index 696b17fedcc2ab25a18f88e403fd53f79b41c299..a8f6e8a40537eeaac29f2729bb298ca5ef7707ae 100644 (file)
@@ -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);
index 3024a013571ec99c456a7aeb88b311f488f58069..5f7bde0defbd1bb470723b8e4d49fe67c435db3b 100644 (file)
@@ -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);
 
index 86d088d44c85db9a1cde99f8797524f224e8fcc9..3ed227dd0283ef76ff52405c978eacaf59b7bf1a 100644 (file)
@@ -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));