diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2021-08-12 11:35:02 +0000 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2021-08-12 11:35:02 +0000 |
commit | 541344a881c39a5abe95f1b30b9eb8588fa2c18c (patch) | |
tree | 39cc2ec4d77914fce0d8ff2bd7da5dc4534d7737 /driver | |
parent | driver: device: initialize device removed event before registration (diff) | |
download | wireguard-nt-541344a881c39a5abe95f1b30b9eb8588fa2c18c.tar.xz wireguard-nt-541344a881c39a5abe95f1b30b9eb8588fa2c18c.zip |
driver: socket: group v4 and v6 sockopts
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'driver')
-rw-r--r-- | driver/socket.c | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/driver/socket.c b/driver/socket.c index 370fde6..23542b4 100644 --- a/driver/socket.c +++ b/driver/socket.c @@ -782,23 +782,20 @@ CreateAndBindSocket(_In_ WG_DEVICE *Wg, _Inout_ SOCKADDR *Sa, _Out_ SOCKET **Ret Status = SetSockOpt(Sock, IPPROTO_UDP, UDP_NOCHECKSUM, &True, sizeof(True)); if (!NT_SUCCESS(Status)) goto cleanupIrp; + Status = SetSockOpt(Sock, IPPROTO_IP, IP_PKTINFO, &True, sizeof(True)); + if (!NT_SUCCESS(Status)) + goto cleanupIrp; } else if (Sa->sa_family == AF_INET6) { Status = SetSockOpt(Sock, IPPROTO_IPV6, IPV6_V6ONLY, &True, sizeof(True)); if (!NT_SUCCESS(Status)) goto cleanupIrp; + Status = SetSockOpt(Sock, IPPROTO_IPV6, IPV6_PKTINFO, &True, sizeof(True)); + if (!NT_SUCCESS(Status)) + goto cleanupIrp; } - Status = SetSockOpt( - Sock, - Sa->sa_family == AF_INET6 ? IPPROTO_IPV6 : IPPROTO_IP, - Sa->sa_family == AF_INET6 ? IPV6_PKTINFO : IP_PKTINFO, - &True, - sizeof(True)); - if (!NT_SUCCESS(Status)) - goto cleanupIrp; - IoReuseIrp(Irp, STATUS_UNSUCCESSFUL); IoSetCompletionRoutine(Irp, RaiseEventOnComplete, &Done, TRUE, TRUE, TRUE); Status = ((WSK_PROVIDER_DATAGRAM_DISPATCH *)Sock->Dispatch)->WskBind(Sock, Sa, 0, Irp); |