diff options
| author | Donald Sharp <sharpd@cumulusnetworks.com> | 2018-03-10 16:15:46 -0500 | 
|---|---|---|
| committer | Donald Sharp <sharpd@cumulusnetworks.com> | 2018-03-14 08:32:39 -0400 | 
| commit | 1b7bce04d50b9cb5982813a76f844cedd01f02a6 (patch) | |
| tree | 677dc37937f1cdb31b0e82151c853db6435425cf /lib | |
| parent | d604266ced3bebd0907c76908e70e70884a353cc (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>
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/nexthop_group.c | 82 | ||||
| -rw-r--r-- | 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 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  | 
