Skip to content

Commit

Permalink
lib: Add the ability for other people to call a nexthop write line
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
donaldsharp committed Mar 11, 2018
1 parent 9b9f67c commit 6e3ad5b
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 42 deletions.
82 changes: 40 additions & 42 deletions lib/nexthop_group.c
Original file line number Diff line number Diff line change
Expand Up @@ -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");
}

Expand Down
3 changes: 3 additions & 0 deletions lib/nexthop_group.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
#ifndef __NEXTHOP_GROUP__
#define __NEXTHOP_GROUP__

#include <vty.h>

/*
* What is a nexthop group?
*
Expand Down Expand Up @@ -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

0 comments on commit 6e3ad5b

Please sign in to comment.