aboutsummaryrefslogtreecommitdiffstats
path: root/driver
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2021-08-12 11:35:02 +0000
committerJason A. Donenfeld <Jason@zx2c4.com>2021-08-12 11:35:02 +0000
commit541344a881c39a5abe95f1b30b9eb8588fa2c18c (patch)
tree39cc2ec4d77914fce0d8ff2bd7da5dc4534d7737 /driver
parentdriver: device: initialize device removed event before registration (diff)
downloadwireguard-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.c15
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);