aboutsummaryrefslogtreecommitdiffstats
path: root/conn
diff options
context:
space:
mode:
Diffstat (limited to 'conn')
-rw-r--r--conn/boundif_android.go34
-rw-r--r--conn/conn.go7
2 files changed, 41 insertions, 0 deletions
diff --git a/conn/boundif_android.go b/conn/boundif_android.go
new file mode 100644
index 0000000..3e10607
--- /dev/null
+++ b/conn/boundif_android.go
@@ -0,0 +1,34 @@
+/* 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
+}
diff --git a/conn/conn.go b/conn/conn.go
index 6e04386..c0ca3b8 100644
--- a/conn/conn.go
+++ b/conn/conn.go
@@ -57,6 +57,13 @@ type BindSocketToInterface interface {
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)