summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@cumulusnetworks.com>2018-03-10 16:15:46 -0500
committerDonald Sharp <sharpd@cumulusnetworks.com>2018-03-14 08:32:39 -0400
commit1b7bce04d50b9cb5982813a76f844cedd01f02a6 (patch)
tree677dc37937f1cdb31b0e82151c853db6435425cf
parentd604266ced3bebd0907c76908e70e70884a353cc (diff)
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 <sharpd@cumulusnetworks.com>
-rw-r--r--lib/nexthop_group.c82
-rw-r--r--lib/nexthop_group.h3
2 files changed, 43 insertions, 42 deletions
diff --git a/lib/nexthop_group.c b/lib/nexthop_group.c
index 0cfbeb8f40..e486247244 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_DEFAULT) {
+ 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 b22e083e6b..c2e4c4d757 100644
--- a/lib/nexthop_group.h
+++ b/lib/nexthop_group.h
@@ -21,6 +21,8 @@
#ifndef __NEXTHOP_GROUP__
#define __NEXTHOP_GROUP__
+#include <vty.h>
+
/*
* 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