Another thing never tested ever.
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
--- /dev/null
+/* SPDX-License-Identifier: MIT
+ *
+ * Copyright (C) 2017-2020 WireGuard LLC. All Rights Reserved.
+ */
+
+package conn
+
+func (bind *nativeBind) PeekLookAtSocketFd4() (fd int, err error) {
+ sysconn, err := bind.ipv4.SyscallConn()
+ if err != nil {
+ return -1, err
+ }
+ err = sysconn.Control(func(f uintptr) {
+ fd = int(f)
+ })
+ if err != nil {
+ return -1, err
+ }
+ return
+}
+
+func (bind *nativeBind) PeekLookAtSocketFd6() (fd int, err error) {
+ sysconn, err := bind.ipv6.SyscallConn()
+ if err != nil {
+ return -1, err
+ }
+ err = sysconn.Control(func(f uintptr) {
+ fd = int(f)
+ })
+ if err != nil {
+ return -1, err
+ }
+ return
+}
BindSocketToInterface6(interfaceIndex uint32, blackhole bool) error
}
+// PeekLookAtSocketFd is implemented by Bind objects that support having their
+// file descriptor peeked at.
+type PeekLookAtSocketFd interface {
+ PeekLookAtSocketFd4() (fd int, err error)
+ PeekLookAtSocketFd6() (fd int, err error)
+}
+
// An Endpoint maintains the source/destination caching for a peer.
//
// dst : the remote address of a peer ("endpoint" in uapi terminology)
}
return nil
}
+
+// TODO(crawshaw): this method is a compatibility shim. Replace with direct use of conn.
+func (device *Device) PeekLookAtSocketFd4() (fd int, err error) {
+ if device.net.bind == nil {
+ return -1, errors.New("Bind is not yet initialized")
+ }
+
+ if iface, ok := device.net.bind.(conn.PeekLookAtSocketFd); ok {
+ return iface.PeekLookAtSocketFd4()
+ }
+ return -1, errors.New("unimplemented")
+}
+
+// TODO(crawshaw): this method is a compatibility shim. Replace with direct use of conn.
+func (device *Device) PeekLookAtSocketFd6() (fd int, err error) {
+ if device.net.bind == nil {
+ return -1, errors.New("Bind is not yet initialized")
+ }
+
+ if iface, ok := device.net.bind.(conn.PeekLookAtSocketFd); ok {
+ return iface.PeekLookAtSocketFd6()
+ }
+ return -1, errors.New("unimplemented")
+}
+++ /dev/null
-/* SPDX-License-Identifier: MIT
- *
- * Copyright (C) 2017-2020 WireGuard LLC. All Rights Reserved.
- */
-
-package device
-
-import "errors"
-
-func (device *Device) PeekLookAtSocketFd4() (fd int, err error) {
- nb, ok := device.net.bind.(*nativeBind)
- if !ok {
- return 0, errors.New("no socket exists")
- }
- sysconn, err := nb.ipv4.SyscallConn()
- if err != nil {
- return
- }
- err = sysconn.Control(func(f uintptr) {
- fd = int(f)
- })
- if err != nil {
- return
- }
- return
-}
-
-func (device *Device) PeekLookAtSocketFd6() (fd int, err error) {
- nb, ok := device.net.bind.(*nativeBind)
- if !ok {
- return 0, errors.New("no socket exists")
- }
- sysconn, err := nb.ipv6.SyscallConn()
- if err != nil {
- return
- }
- err = sysconn.Control(func(f uintptr) {
- fd = int(f)
- })
- if err != nil {
- return
- }
- return
-}