Lines Matching defs:ro

205 route_cache(struct route *ro, const struct in_addr *dst,
213 if (rtisvalid(ro->ro_rt) &&
214 ro->ro_generation == gen &&
215 ro->ro_tableid == rtableid &&
216 ro->ro_dstsa.sa_family == AF_INET &&
217 ro->ro_dstsin.sin_addr.s_addr == dst->s_addr) {
219 !ISSET(ro->ro_rt->rt_flags, RTF_MPATH) ||
220 (ro->ro_srcin.s_addr != INADDR_ANY &&
221 ro->ro_srcin.s_addr == src->s_addr)) {
228 rtfree(ro->ro_rt);
229 memset(ro, 0, sizeof(*ro));
230 ro->ro_generation = gen;
231 ro->ro_tableid = rtableid;
233 ro->ro_dstsin.sin_family = AF_INET;
234 ro->ro_dstsin.sin_len = sizeof(struct sockaddr_in);
235 ro->ro_dstsin.sin_addr = *dst;
237 ro->ro_srcin = *src;
247 route_mpath(struct route *ro, const struct in_addr *dst,
250 if (route_cache(ro, dst, src, rtableid)) {
253 if (ro->ro_srcin.s_addr != INADDR_ANY)
254 s = &ro->ro_srcin.s_addr;
255 ro->ro_rt = rtalloc_mpath(&ro->ro_dstsa, s, ro->ro_tableid);
257 return (ro->ro_rt);
262 route6_cache(struct route *ro, const struct in6_addr *dst,
270 if (rtisvalid(ro->ro_rt) &&
271 ro->ro_generation == gen &&
272 ro->ro_tableid == rtableid &&
273 ro->ro_dstsa.sa_family == AF_INET6 &&
274 IN6_ARE_ADDR_EQUAL(&ro->ro_dstsin6.sin6_addr, dst)) {
276 !ISSET(ro->ro_rt->rt_flags, RTF_MPATH) ||
277 (!IN6_IS_ADDR_UNSPECIFIED(&ro->ro_srcin6) &&
278 IN6_ARE_ADDR_EQUAL(&ro->ro_srcin6, src))) {
285 rtfree(ro->ro_rt);
286 memset(ro, 0, sizeof(*ro));
287 ro->ro_generation = gen;
288 ro->ro_tableid = rtableid;
290 ro->ro_dstsin6.sin6_family = AF_INET6;
291 ro->ro_dstsin6.sin6_len = sizeof(struct sockaddr_in6);
292 ro->ro_dstsin6.sin6_addr = *dst;
294 ro->ro_srcin6 = *src;
300 route6_mpath(struct route *ro, const struct in6_addr *dst,
303 if (route6_cache(ro, dst, src, rtableid)) {
306 if (!IN6_IS_ADDR_UNSPECIFIED(&ro->ro_srcin6))
307 s = &ro->ro_srcin6.s6_addr32[0];
308 ro->ro_rt = rtalloc_mpath(&ro->ro_dstsa, s, ro->ro_tableid);
310 return (ro->ro_rt);