version 1.163, 2015/02/02 03:14:02 |
version 1.164, 2015/04/24 08:53:06 |
|
|
bool tso; |
bool tso; |
struct route ip6route; |
struct route ip6route; |
struct rtentry *rt = NULL; |
struct rtentry *rt = NULL; |
const struct sockaddr_in6 *dst = NULL; |
const struct sockaddr_in6 *dst; |
struct sockaddr_in6 src_sa, dst_sa; |
struct sockaddr_in6 src_sa, dst_sa; |
int error = 0; |
int error = 0; |
struct in6_ifaddr *ia = NULL; |
struct in6_ifaddr *ia = NULL; |
|
|
/* scope check is done. */ |
/* scope check is done. */ |
|
|
if (rt == NULL || IN6_IS_ADDR_MULTICAST(&ip6->ip6_dst)) { |
if (rt == NULL || IN6_IS_ADDR_MULTICAST(&ip6->ip6_dst)) { |
if (dst == NULL) |
dst = satocsin6(rtcache_getdst(ro)); |
dst = satocsin6(rtcache_getdst(ro)); |
|
KASSERT(dst != NULL); |
KASSERT(dst != NULL); |
} else if (opt && rtcache_validate(&opt->ip6po_nextroute) != NULL) { |
} else if (opt && rtcache_validate(&opt->ip6po_nextroute) != NULL) { |
/* |
/* |
|
|
dst = (struct sockaddr_in6 *)opt->ip6po_nexthop; |
dst = (struct sockaddr_in6 *)opt->ip6po_nexthop; |
} else if ((rt->rt_flags & RTF_GATEWAY)) |
} else if ((rt->rt_flags & RTF_GATEWAY)) |
dst = (struct sockaddr_in6 *)rt->rt_gateway; |
dst = (struct sockaddr_in6 *)rt->rt_gateway; |
else if (dst == NULL) |
else |
dst = satocsin6(rtcache_getdst(ro)); |
dst = satocsin6(rtcache_getdst(ro)); |
|
|
/* |
/* |