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>
This commit is contained in:
Donald Sharp 2018-03-10 16:15:46 -05:00
parent d604266ced
commit 1b7bce04d5
2 changed files with 43 additions and 42 deletions

View File

@ -315,57 +315,55 @@ struct cmd_node nexthop_group_node = {
1 1
}; };
static int nexthop_group_write(struct vty *vty) void nexthop_group_write_nexthop(struct vty *vty, struct nexthop *nh)
{ {
struct nexthop_group_cmd *nhgc;
struct nexthop *nh;
struct vrf *vrf;
RB_FOREACH (nhgc, nhgc_entry_head, &nhgc_entries) {
char buf[100]; char buf[100];
struct vrf *vrf;
vty_out(vty, "nexthop-group %s\n", nhgc->name);
for (nh = nhgc->nhg.nexthop; nh; nh = nh->next) {
vty_out(vty, " nexthop "); vty_out(vty, " nexthop ");
switch (nh->type) { switch (nh->type) {
case NEXTHOP_TYPE_IFINDEX: case NEXTHOP_TYPE_IFINDEX:
vty_out(vty, "%s", vty_out(vty, "%s", ifindex2ifname(nh->ifindex, nh->vrf_id));
ifindex2ifname(nh->ifindex,
nh->vrf_id));
break; break;
case NEXTHOP_TYPE_IPV4: case NEXTHOP_TYPE_IPV4:
vty_out(vty, "%s", inet_ntoa(nh->gate.ipv4)); vty_out(vty, "%s", inet_ntoa(nh->gate.ipv4));
break; break;
case NEXTHOP_TYPE_IPV4_IFINDEX: case NEXTHOP_TYPE_IPV4_IFINDEX:
vty_out(vty, "%s %s", inet_ntoa(nh->gate.ipv4), vty_out(vty, "%s %s", inet_ntoa(nh->gate.ipv4),
ifindex2ifname(nh->ifindex, ifindex2ifname(nh->ifindex, nh->vrf_id));
nh->vrf_id));
break; break;
case NEXTHOP_TYPE_IPV6: case NEXTHOP_TYPE_IPV6:
vty_out(vty, "%s", vty_out(vty, "%s",
inet_ntop(AF_INET6, &nh->gate.ipv6, buf, inet_ntop(AF_INET6, &nh->gate.ipv6, buf, sizeof(buf)));
sizeof(buf)));
break; break;
case NEXTHOP_TYPE_IPV6_IFINDEX: case NEXTHOP_TYPE_IPV6_IFINDEX:
vty_out(vty, "%s %s", vty_out(vty, "%s %s",
inet_ntop(AF_INET6, &nh->gate.ipv6, buf, inet_ntop(AF_INET6, &nh->gate.ipv6, buf, sizeof(buf)),
sizeof(buf)), ifindex2ifname(nh->ifindex, nh->vrf_id));
ifindex2ifname(nh->ifindex,
nh->vrf_id));
break; break;
case NEXTHOP_TYPE_BLACKHOLE: case NEXTHOP_TYPE_BLACKHOLE:
break; break;
} }
if (nh->vrf_id) { if (nh->vrf_id != VRF_DEFAULT) {
vrf = vrf_lookup_by_id(nh->vrf_id); vrf = vrf_lookup_by_id(nh->vrf_id);
vty_out(vty, " nexthop-vrf %s", vrf->name); vty_out(vty, " nexthop-vrf %s", vrf->name);
} }
vty_out(vty, "\n"); vty_out(vty, "\n");
} }
static int nexthop_group_write(struct vty *vty)
{
struct nexthop_group_cmd *nhgc;
struct nexthop *nh;
RB_FOREACH (nhgc, nhgc_entry_head, &nhgc_entries) {
vty_out(vty, "nexthop-group %s\n", nhgc->name);
for (nh = nhgc->nhg.nexthop; nh; nh = nh->next)
nexthop_group_write_nexthop(vty, nh);
vty_out(vty, "!\n"); vty_out(vty, "!\n");
} }

View File

@ -21,6 +21,8 @@
#ifndef __NEXTHOP_GROUP__ #ifndef __NEXTHOP_GROUP__
#define __NEXTHOP_GROUP__ #define __NEXTHOP_GROUP__
#include <vty.h>
/* /*
* What is a nexthop group? * 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 struct nexthop_group_cmd *nhgc_find(const char *name);
extern void nexthop_group_write_nexthop(struct vty *vty, struct nexthop *nh);
#endif #endif