diff options
| author | Kaushik <kaushik@niralnetworks.com> | 2020-07-29 08:48:57 -0700 | 
|---|---|---|
| committer | Kaushik <kaushik@niralnetworks.com> | 2020-08-03 23:24:04 -0700 | 
| commit | 92d6f769880d031f4a46c4dc805284a430301a7d (patch) | |
| tree | 1f1a9e1c0d9dcfd2bc35dc06e07bc45404a6b2a5 /zebra/zebra_fpm_netlink.c | |
| parent | de5f29dabda30d58c8b25e82245b9ad2bae485b4 (diff) | |
lib,zebra,bgpd: Fix for nexthop as IPv4 mapped IPv6 address
Added a macro to validate the v4 mapped v6 address.
Modified bgp receive & send updates for v4 mapped v6 address as
nexthop and installing it as recursive nexthop in RIB.
Minor change in fpm while sending the routes for nexthop as
v4 mapped v6 address.
Signed-off-by: Kaushik <kaushik@niralnetworks.com>
Diffstat (limited to 'zebra/zebra_fpm_netlink.c')
| -rw-r--r-- | zebra/zebra_fpm_netlink.c | 12 | 
1 files changed, 10 insertions, 2 deletions
diff --git a/zebra/zebra_fpm_netlink.c b/zebra/zebra_fpm_netlink.c index a18885ddb7..5831093b50 100644 --- a/zebra/zebra_fpm_netlink.c +++ b/zebra/zebra_fpm_netlink.c @@ -364,6 +364,7 @@ static int netlink_route_info_encode(struct netlink_route_info *ri,  	struct rtattr *nest, *inner_nest;  	struct rtnexthop *rtnh;  	struct vxlan_encap_info_t *vxlan; +	struct in6_addr ipv6;  	struct {  		struct nlmsghdr n; @@ -423,8 +424,15 @@ static int netlink_route_info_encode(struct netlink_route_info *ri,  		nhi = &ri->nhs[0];  		if (nhi->gateway) { -			nl_attr_put(&req->n, in_buf_len, RTA_GATEWAY, -				    nhi->gateway, bytelen); +			if (nhi->type == NEXTHOP_TYPE_IPV4_IFINDEX +			    && ri->af == AF_INET6) { +				ipv4_to_ipv4_mapped_ipv6(&ipv6, +							 nhi->gateway->ipv4); +				nl_attr_put(&req->n, in_buf_len, RTA_GATEWAY, +					    &ipv6, bytelen); +			} else +				nl_attr_put(&req->n, in_buf_len, RTA_GATEWAY, +					    nhi->gateway, bytelen);  		}  		if (nhi->if_index) {  | 
