-/* $OpenBSD: in_pcb.c,v 1.208 2016/06/30 12:36:27 mpi Exp $ */
+/* $OpenBSD: in_pcb.c,v 1.209 2016/07/05 09:17:10 mpi Exp $ */
/* $NetBSD: in_pcb.c,v 1.25 1996/02/13 23:41:53 christos Exp $ */
/*
u_int rtableid)
{
struct sockaddr_in *sin2;
+ struct in_ifaddr *ia = NULL;
/*
* If the socket(if any) is already bound, use that bound address
ifp = if_get(mopts->imo_ifidx);
if (ifp != NULL) {
- struct in_ifaddr *ia = NULL;
-
if (ifp->if_rdomain == rtable_l2(rtableid))
IFP_TO_IA(ifp, ia);
if (ia == NULL) {
* If we found a route, use the address
* corresponding to the outgoing interface.
*/
- if (ro->ro_rt != NULL) {
- *insrc = &satosin(ro->ro_rt->rt_addr)->sin_addr;
- return (0);
- }
+ if (ro->ro_rt != NULL)
+ ia = ifatoia(ro->ro_rt->rt_ifa);
- return (EADDRNOTAVAIL);
+ if (ia == NULL)
+ return (EADDRNOTAVAIL);
+
+ *insrc = &ia->ia_addr.sin_addr;
+ return (0);
}
void
-/* $OpenBSD: in6_src.c,v 1.74 2016/06/30 12:36:27 mpi Exp $ */
+/* $OpenBSD: in6_src.c,v 1.75 2016/07/05 09:17:10 mpi Exp $ */
/* $KAME: in6_src.c,v 1.36 2001/02/06 04:08:17 itojun Exp $ */
/*
ia6 = in6_ifawithscope(ifp, dst, rtableid);
if_put(ifp);
}
- if (ia6 == NULL) { /* xxx scope error ?*/
- *in6src =
- &satosin6(ro->ro_rt->rt_addr)->sin6_addr;
- return (0);
- }
+ if (ia6 == NULL) /* xxx scope error ?*/
+ ia6 = ifatoia6(ro->ro_rt->rt_ifa);
}
if (ia6 == NULL)
return (EHOSTUNREACH); /* no route */