]> git.ipfire.org Git - thirdparty/wireguard-go.git/commitdiff
device: allow blackholing sockets
authorJason A. Donenfeld <Jason@zx2c4.com>
Mon, 21 Oct 2019 11:29:57 +0000 (13:29 +0200)
committerJason A. Donenfeld <Jason@zx2c4.com>
Mon, 21 Oct 2019 11:29:57 +0000 (13:29 +0200)
device/boundif_windows.go
device/conn_default.go

index 7879a43785e31808d19fda1bc1ac7c09f215c4f5..69084152815b6bcdd608da711dc2e498d8465720 100644 (file)
@@ -18,7 +18,7 @@ const (
        sockoptIPV6_UNICAST_IF = 31
 )
 
-func (device *Device) BindSocketToInterface4(interfaceIndex uint32) error {
+func (device *Device) BindSocketToInterface4(interfaceIndex uint32, blackhole bool) error {
        /* MSDN says for IPv4 this needs to be in net byte order, so that it's like an IP address with leading zeros. */
        bytes := make([]byte, 4)
        binary.BigEndian.PutUint32(bytes, interfaceIndex)
@@ -41,10 +41,11 @@ func (device *Device) BindSocketToInterface4(interfaceIndex uint32) error {
        if err != nil {
                return err
        }
+       device.net.bind.(*nativeBind).blackhole4 = blackhole
        return nil
 }
 
-func (device *Device) BindSocketToInterface6(interfaceIndex uint32) error {
+func (device *Device) BindSocketToInterface6(interfaceIndex uint32, blackhole bool) error {
        sysconn, err := device.net.bind.(*nativeBind).ipv6.SyscallConn()
        if err != nil {
                return err
@@ -58,5 +59,6 @@ func (device *Device) BindSocketToInterface6(interfaceIndex uint32) error {
        if err != nil {
                return err
        }
+       device.net.bind.(*nativeBind).blackhole6 = blackhole
        return nil
 }
index 820bb96b693fea8a73484e996d5e16fda0a72e2f..661f57d97eea5084f62b32bfe8ad3dae7209ac7c 100644 (file)
@@ -21,8 +21,10 @@ import (
  */
 
 type nativeBind struct {
-       ipv4 *net.UDPConn
-       ipv6 *net.UDPConn
+       ipv4       *net.UDPConn
+       ipv6       *net.UDPConn
+       blackhole4 bool
+       blackhole6 bool
 }
 
 type NativeEndpoint net.UDPAddr
@@ -159,11 +161,17 @@ func (bind *nativeBind) Send(buff []byte, endpoint Endpoint) error {
                if bind.ipv4 == nil {
                        return syscall.EAFNOSUPPORT
                }
+               if bind.blackhole4 {
+                       return nil
+               }
                _, err = bind.ipv4.WriteToUDP(buff, (*net.UDPAddr)(nend))
        } else {
                if bind.ipv6 == nil {
                        return syscall.EAFNOSUPPORT
                }
+               if bind.blackhole6 {
+                       return nil
+               }
                _, err = bind.ipv6.WriteToUDP(buff, (*net.UDPAddr)(nend))
        }
        return err