From 6e3ad5b860ddb1e4dc97d13616749ea3c41d70b5 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Sat, 10 Mar 2018 16:15:46 -0500 Subject: [PATCH] lib: Add the ability for other people to call a nexthop write line Add code to allow nexthops to be written by people who are interested in writing their own nexthop line. Signed-off-by: Donald Sharp --- lib/nexthop_group.c | 82 ++++++++++++++++++++++----------------------- lib/nexthop_group.h | 3 ++ 2 files changed, 43 insertions(+), 42 deletions(-) diff --git a/lib/nexthop_group.c b/lib/nexthop_group.c index 09e7b3e71cae..e1c715f44506 100644 --- a/lib/nexthop_group.c +++ b/lib/nexthop_group.c @@ -315,57 +315,55 @@ struct cmd_node nexthop_group_node = { 1 }; +void nexthop_group_write_nexthop(struct vty *vty, struct nexthop *nh) +{ + char buf[100]; + struct vrf *vrf; + + vty_out(vty, " nexthop "); + + switch (nh->type) { + case NEXTHOP_TYPE_IFINDEX: + vty_out(vty, "%s", ifindex2ifname(nh->ifindex, nh->vrf_id)); + 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)); + break; + case NEXTHOP_TYPE_IPV6: + vty_out(vty, "%s", + inet_ntop(AF_INET6, &nh->gate.ipv6, buf, sizeof(buf))); + break; + 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)); + break; + case NEXTHOP_TYPE_BLACKHOLE: + break; + } + + if (nh->vrf_id) { + vrf = vrf_lookup_by_id(nh->vrf_id); + vty_out(vty, " nexthop-vrf %s", vrf->name); + } + vty_out(vty, "\n"); +} + static int nexthop_group_write(struct vty *vty) { struct nexthop_group_cmd *nhgc; struct nexthop *nh; - struct vrf *vrf; RB_FOREACH (nhgc, nhgc_entry_head, &nhgc_entries) { - char buf[100]; - vty_out(vty, "nexthop-group %s\n", nhgc->name); - for (nh = nhgc->nhg.nexthop; nh; nh = nh->next) { - - vty_out(vty, " nexthop "); - - switch (nh->type) { - case NEXTHOP_TYPE_IFINDEX: - vty_out(vty, "%s", - ifindex2ifname(nh->ifindex, - nh->vrf_id)); - 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)); - break; - case NEXTHOP_TYPE_IPV6: - vty_out(vty, "%s", - inet_ntop(AF_INET6, &nh->gate.ipv6, buf, - sizeof(buf))); - break; - 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)); - break; - case NEXTHOP_TYPE_BLACKHOLE: - break; - } + for (nh = nhgc->nhg.nexthop; nh; nh = nh->next) + nexthop_group_write_nexthop(vty, nh); - if (nh->vrf_id) { - vrf = vrf_lookup_by_id(nh->vrf_id); - vty_out(vty, " nexthop-vrf %s", vrf->name); - } - vty_out(vty, "\n"); - } vty_out(vty, "!\n"); } diff --git a/lib/nexthop_group.h b/lib/nexthop_group.h index b22e083e6bb0..c2e4c4d7573c 100644 --- a/lib/nexthop_group.h +++ b/lib/nexthop_group.h @@ -21,6 +21,8 @@ #ifndef __NEXTHOP_GROUP__ #define __NEXTHOP_GROUP__ +#include + /* * What is a nexthop group? * @@ -88,4 +90,5 @@ extern struct nexthop *nexthop_exists(struct nexthop_group *nhg, extern struct nexthop_group_cmd *nhgc_find(const char *name); +extern void nexthop_group_write_nexthop(struct vty *vty, struct nexthop *nh); #endif