diff options
| author | Stephen Worley <sworley@nvidia.com> | 2021-04-01 11:55:05 -0400 | 
|---|---|---|
| committer | Stephen Worley <sworley@nvidia.com> | 2023-02-13 18:12:05 -0500 | 
| commit | 90aaed169f9c7f365a1c8bb3a43da5f5ed611cdf (patch) | |
| tree | 7bbab0821dcf70f8e7b947170d9a0ad30d8bb948 /lib/nexthop_group.c | |
| parent | 5fa6bfffb1201c98960ea8a3808d6e1e7ed8c312 (diff) | |
lib,sharpd: add ability for sharpd to install vni labels
Add the ability for sharpd to install vni labels for testing.
This patch is just for testing/dev work purposes with evpn.
It adds some code to vty for nexthop-groups so we can explicitly
add a label to nexthops and then let sharpd encode them to zebra.
Signed-off-by: Stephen Worley <sworley@nvidia.com>
Diffstat (limited to 'lib/nexthop_group.c')
| -rw-r--r-- | lib/nexthop_group.c | 32 | 
1 files changed, 22 insertions, 10 deletions
diff --git a/lib/nexthop_group.c b/lib/nexthop_group.c index 7e27798062..fd7eee213c 100644 --- a/lib/nexthop_group.c +++ b/lib/nexthop_group.c @@ -41,6 +41,7 @@ struct nexthop_hold {  	char *intf;  	bool onlink;  	char *labels; +	vni_t vni;  	uint32_t weight;  	char *backup_str;  }; @@ -803,12 +804,13 @@ static bool nexthop_group_parse_nexthop(struct nexthop *nhop,  					const union sockunion *addr,  					const char *intf, bool onlink,  					const char *name, const char *labels, -					int *lbl_ret, uint32_t weight, -					const char *backup_str) +					vni_t vni, int *lbl_ret, +					uint32_t weight, const char *backup_str)  {  	int ret = 0;  	struct vrf *vrf;  	int num; +	uint8_t labelnum = 0;  	memset(nhop, 0, sizeof(*nhop)); @@ -849,10 +851,9 @@ static bool nexthop_group_parse_nexthop(struct nexthop *nhop,  		nhop->type = NEXTHOP_TYPE_IFINDEX;  	if (labels) { -		uint8_t num = 0;  		mpls_label_t larray[MPLS_MAX_LABELS]; -		ret = mpls_str2label(labels, &num, larray); +		ret = mpls_str2label(labels, &labelnum, larray);  		/* Return label parse result */  		if (lbl_ret) @@ -860,9 +861,14 @@ static bool nexthop_group_parse_nexthop(struct nexthop *nhop,  		if (ret < 0)  			return false; -		else if (num > 0) -			nexthop_add_labels(nhop, ZEBRA_LSP_NONE, -					   num, larray); +		else if (labelnum > 0) +			nexthop_add_labels(nhop, ZEBRA_LSP_NONE, labelnum, +					   larray); +	} else if (vni) { +		mpls_label_t label = MPLS_INVALID_LABEL; + +		vni2label(vni, &label); +		nexthop_add_labels(nhop, ZEBRA_LSP_EVPN, 1, &label);  	}  	nhop->weight = weight; @@ -889,7 +895,7 @@ static bool nexthop_group_parse_nhh(struct nexthop *nhop,  {  	return (nexthop_group_parse_nexthop(  		nhop, nhh->addr, nhh->intf, nhh->onlink, nhh->nhvrf_name, -		nhh->labels, NULL, nhh->weight, nhh->backup_str)); +		nhh->labels, nhh->vni, NULL, nhh->weight, nhh->backup_str));  }  DEFPY(ecmp_nexthops, ecmp_nexthops_cmd, @@ -901,6 +907,7 @@ DEFPY(ecmp_nexthops, ecmp_nexthops_cmd,  	[{ \  	   nexthop-vrf NAME$vrf_name \  	   |label WORD \ +	   |vni (1-16777215) \             |weight (1-255) \             |backup-idx WORD \  	}]", @@ -915,6 +922,8 @@ DEFPY(ecmp_nexthops, ecmp_nexthops_cmd,        "The nexthop-vrf Name\n"        "Specify label(s) for this nexthop\n"        "One or more labels in the range (16-1048575) separated by '/'\n" +      "Specify VNI(s) for this nexthop\n" +      "VNI in the range (1-16777215)\n"        "Weight to be used by the nexthop for purposes of ECMP\n"        "Weight value to be used\n"        "Specify backup nexthop indexes in another group\n" @@ -939,8 +948,8 @@ DEFPY(ecmp_nexthops, ecmp_nexthops_cmd,  	}  	legal = nexthop_group_parse_nexthop(&nhop, addr, intf, !!onlink, -					    vrf_name, label, &lbl_ret, weight, -					    backup_idx); +					    vrf_name, label, vni, &lbl_ret, +					    weight, backup_idx);  	if (nhop.type == NEXTHOP_TYPE_IPV6  	    && IN6_IS_ADDR_LINKLOCAL(&nhop.gate.ipv6)) { @@ -1166,6 +1175,9 @@ static void nexthop_group_write_nexthop_internal(struct vty *vty,  	if (nh->labels)  		vty_out(vty, " label %s", nh->labels); +	if (nh->vni) +		vty_out(vty, " vni %u", nh->vni); +  	if (nh->weight)  		vty_out(vty, " weight %u", nh->weight);  | 
