Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/if_wg/module/if_wg_session.c
Show First 20 Lines • Show All 353 Lines • ▼ Show 20 Lines | |||||
{ | { | ||||
int rc; | int rc; | ||||
struct thread *td; | struct thread *td; | ||||
union wg_sockaddr laddr; | union wg_sockaddr laddr; | ||||
struct sockaddr_in *sin; | struct sockaddr_in *sin; | ||||
struct sockaddr_in6 *sin6; | struct sockaddr_in6 *sin6; | ||||
struct ifnet *ifp; | struct ifnet *ifp; | ||||
if (so->so_port == 0) | |||||
return (0); | |||||
td = curthread; | td = curthread; | ||||
bzero(&laddr, sizeof(laddr)); | bzero(&laddr, sizeof(laddr)); | ||||
ifp = iflib_get_ifp(sc->wg_ctx); | ifp = iflib_get_ifp(sc->wg_ctx); | ||||
sin = &laddr.in4; | sin = &laddr.in4; | ||||
sin->sin_len = sizeof(laddr.in4); | sin->sin_len = sizeof(laddr.in4); | ||||
sin->sin_family = AF_INET; | sin->sin_family = AF_INET; | ||||
sin->sin_port = htons(so->so_port); | sin->sin_port = htons(so->so_port); | ||||
sin->sin_addr = (struct in_addr) { 0 }; | sin->sin_addr = (struct in_addr) { 0 }; | ||||
if ((rc = sobind(so->so_so4, &laddr.sa, td)) != 0) { | if ((rc = sobind(so->so_so4, &laddr.sa, td)) != 0) { | ||||
if_printf(ifp, "can't bind AF_INET socket %d\n", rc); | if_printf(ifp, "can't bind AF_INET socket %d\n", rc); | ||||
return (rc); | return (rc); | ||||
} | } | ||||
if (so->so_port == 0) { | |||||
rc = sosockaddr(so->so_so4, (struct sockaddr **)&sin); | |||||
if (rc != 0) { | |||||
if_printf(ifp, | |||||
"can't fetch listening port from socket, error %d\n", | |||||
rc); | |||||
return (rc); | |||||
} | |||||
so->so_port = ntohs(sin->sin_port); | |||||
} | |||||
sin6 = &laddr.in6; | sin6 = &laddr.in6; | ||||
sin6->sin6_len = sizeof(laddr.in6); | sin6->sin6_len = sizeof(laddr.in6); | ||||
sin6->sin6_family = AF_INET6; | sin6->sin6_family = AF_INET6; | ||||
sin6->sin6_port = htons(so->so_port); | sin6->sin6_port = htons(so->so_port); | ||||
sin6->sin6_addr = (struct in6_addr) { .s6_addr = { 0 } }; | sin6->sin6_addr = (struct in6_addr) { .s6_addr = { 0 } }; | ||||
rc = sobind(so->so_so6, &laddr.sa, td); | rc = sobind(so->so_so6, &laddr.sa, td); | ||||
if (rc) | if (rc) | ||||
▲ Show 20 Lines • Show All 1,600 Lines • Show Last 20 Lines |