diff options
| author | Renato Westphal <renato@opensourcerouting.org> | 2017-08-20 21:18:50 -0300 | 
|---|---|---|
| committer | Renato Westphal <renato@opensourcerouting.org> | 2017-08-23 18:58:35 -0300 | 
| commit | 6f27a9f6a52aefc26f4c6ee633975cfc9942f5ac (patch) | |
| tree | 7b3af891b7c748ca949eaa74018c2cad13d4891c /nhrpd/nhrp_route.c | |
| parent | c0721de4d4cfad92893271cb5b036dab1fe011b6 (diff) | |
nhrpd: use the new API to send routes to zebra
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
Diffstat (limited to 'nhrpd/nhrp_route.c')
| -rw-r--r-- | nhrpd/nhrp_route.c | 52 | 
1 files changed, 28 insertions, 24 deletions
diff --git a/nhrpd/nhrp_route.c b/nhrpd/nhrp_route.c index 5116ad068c..3062b23a6d 100644 --- a/nhrpd/nhrp_route.c +++ b/nhrpd/nhrp_route.c @@ -108,24 +108,27 @@ void nhrp_route_announce(int add, enum nhrp_cache_type type, const struct prefix  	SET_FLAG(flags, ZEBRA_FLAG_INTERNAL);  	if (p->family == AF_INET) { -		struct in_addr *nexthop_ipv4; -		struct zapi_ipv4 api; +		struct zapi_route api; +		struct zapi_nexthop *api_nh = &api.nexthops[0];;  		memset(&api, 0, sizeof(api));  		api.flags = flags;  		api.type = ZEBRA_ROUTE_NHRP;  		api.safi = SAFI_UNICAST; +		api.prefix = *p;  		SET_FLAG(api.message, ZAPI_MESSAGE_NEXTHOP); +		api.nexthop_num = 1;  		if (nexthop) { -			nexthop_ipv4 = (struct in_addr *) sockunion_get_addr(nexthop); -			api.nexthop_num = 1; -			api.nexthop = &nexthop_ipv4; +			api_nh->gate.ipv4 = nexthop->sin.sin_addr; +			api_nh->type = NEXTHOP_TYPE_IPV4;  		}  		if (ifp) { -			SET_FLAG(api.message, ZAPI_MESSAGE_IFINDEX); -			api.ifindex_num = 1; -			api.ifindex = &ifp->ifindex; +			api_nh->ifindex = ifp->ifindex; +			if (api_nh->type == NEXTHOP_TYPE_IPV4) +				api_nh->type = NEXTHOP_TYPE_IPV4_IFINDEX; +			else +				api_nh->type = NEXTHOP_TYPE_IFINDEX;  		}  		if (mtu) {  			SET_FLAG(api.message, ZAPI_MESSAGE_MTU); @@ -139,32 +142,34 @@ void nhrp_route_announce(int add, enum nhrp_cache_type type, const struct prefix  				add ? "add" : "del",  				inet_ntop(AF_INET, &p->u.prefix4, buf[0], sizeof(buf[0])),  				p->prefixlen, -				nexthop ? inet_ntop(AF_INET, api.nexthop[0], buf[1], sizeof(buf[1])) : "<onlink>", +				nexthop ? inet_ntop(AF_INET, &api_nh->gate.ipv4, buf[1], sizeof(buf[1])) : "<onlink>",  				api.metric, api.nexthop_num, ifp->name);  		} -		zapi_ipv4_route( -			add ? ZEBRA_IPV4_ROUTE_ADD : ZEBRA_IPV4_ROUTE_DELETE, -			zclient, (struct prefix_ipv4 *) p, &api); +		zclient_route_send(add ? ZEBRA_ROUTE_ADD : ZEBRA_ROUTE_DELETE, +				   zclient, &api);  	} else if (p->family == AF_INET6) { -		struct in6_addr *nexthop_ipv6; -		struct zapi_ipv6 api; +		struct zapi_route api; +		struct zapi_nexthop *api_nh = &api.nexthops[0];;  		memset(&api, 0, sizeof(api));  		api.flags = flags;  		api.type = ZEBRA_ROUTE_NHRP;  		api.safi = SAFI_UNICAST; +		api.prefix = *p;  		SET_FLAG(api.message, ZAPI_MESSAGE_NEXTHOP); +		api.nexthop_num = 1;  		if (nexthop) { -			nexthop_ipv6 = (struct in6_addr *) sockunion_get_addr(nexthop); -			api.nexthop_num = 1; -			api.nexthop = &nexthop_ipv6; +			api_nh->gate.ipv6 = nexthop->sin6.sin6_addr; +			api_nh->type = NEXTHOP_TYPE_IPV6;  		}  		if (ifp) { -			SET_FLAG(api.message, ZAPI_MESSAGE_IFINDEX); -			api.ifindex_num = 1; -			api.ifindex = &ifp->ifindex; +			api_nh->ifindex = ifp->ifindex; +			if (api_nh->type == NEXTHOP_TYPE_IPV6) +				api_nh->type = NEXTHOP_TYPE_IPV6_IFINDEX; +			else +				api_nh->type = NEXTHOP_TYPE_IFINDEX;  		}  		if (mtu) {  			SET_FLAG(api.message, ZAPI_MESSAGE_MTU); @@ -178,13 +183,12 @@ void nhrp_route_announce(int add, enum nhrp_cache_type type, const struct prefix  				add ? "add" : "del",  				inet_ntop(AF_INET6, &p->u.prefix6, buf[0], sizeof(buf[0])),  				p->prefixlen, -				nexthop ? inet_ntop(AF_INET6, api.nexthop[0], buf[1], sizeof(buf[1])) : "<onlink>", +				nexthop ? inet_ntop(AF_INET6, &api_nh->gate.ipv6, buf[1], sizeof(buf[1])) : "<onlink>",  				api.metric, api.nexthop_num, ifp->name);  		} -		zapi_ipv6_route( -			add ? ZEBRA_IPV6_ROUTE_ADD : ZEBRA_IPV6_ROUTE_DELETE, -			zclient, (struct prefix_ipv6 *) p, NULL, &api); +		zclient_route_send(add ? ZEBRA_ROUTE_ADD : ZEBRA_ROUTE_DELETE, +				   zclient, &api);  	}  }  | 
