diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-03-03 04:47:11 +0100 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-03-03 05:43:42 +0100 |
commit | 49cc63467812ed9946f4a98eb73658f2ce0b2aac (patch) | |
tree | b6e1f54465e57ae0161fcd61a701d41c18902b09 /app/tools/libwg-go/src | |
parent | c93e81c632d2be7faa53ad2803a61444710ae962 (diff) |
libwg-go: don't use submodule
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'app/tools/libwg-go/src')
-rw-r--r-- | app/tools/libwg-go/src/api-android.go | 198 | ||||
-rw-r--r-- | app/tools/libwg-go/src/jni.c | 59 | ||||
-rw-r--r-- | app/tools/libwg-go/src/queueconstants.go | 16 | ||||
-rw-r--r-- | app/tools/libwg-go/src/tun/api-android.go | 33 |
4 files changed, 0 insertions, 306 deletions
diff --git a/app/tools/libwg-go/src/api-android.go b/app/tools/libwg-go/src/api-android.go deleted file mode 100644 index ddf175ab..00000000 --- a/app/tools/libwg-go/src/api-android.go +++ /dev/null @@ -1,198 +0,0 @@ -/* SPDX-License-Identifier: Apache-2.0 - * - * Copyright (C) 2017-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved. - */ - -package main - -// #cgo LDFLAGS: -llog -// #include <android/log.h> -import "C" - -import ( - "bufio" - "golang.org/x/sys/unix" - "golang.zx2c4.com/wireguard/tun" - "log" - "math" - "net" - "os" - "os/signal" - "runtime" - "strings" - "unsafe" -) - -type AndroidLogger struct { - level C.int - interfaceName string -} - -func (l AndroidLogger) Write(p []byte) (int, error) { - C.__android_log_write(l.level, C.CString("WireGuard/GoBackend/"+l.interfaceName), C.CString(string(p))) - return len(p), nil -} - -type TunnelHandle struct { - device *Device - uapi net.Listener -} - -var tunnelHandles map[int32]TunnelHandle - -func init() { - roamingDisabled = true - tunnelHandles = make(map[int32]TunnelHandle) - signals := make(chan os.Signal) - signal.Notify(signals, unix.SIGUSR2) - go func() { - buf := make([]byte, os.Getpagesize()) - for { - select { - case <-signals: - n := runtime.Stack(buf, true) - buf[n] = 0 - C.__android_log_write(C.ANDROID_LOG_ERROR, C.CString("WireGuard/GoBackend/Stacktrace"), (*C.char)(unsafe.Pointer(&buf[0]))) - } - } - }() -} - -//export wgTurnOn -func wgTurnOn(ifnameRef string, tunFd int32, settings string) int32 { - interfaceName := string([]byte(ifnameRef)) - - logger := &Logger{ - Debug: log.New(&AndroidLogger{level: C.ANDROID_LOG_DEBUG, interfaceName: interfaceName}, "", 0), - Info: log.New(&AndroidLogger{level: C.ANDROID_LOG_INFO, interfaceName: interfaceName}, "", 0), - Error: log.New(&AndroidLogger{level: C.ANDROID_LOG_ERROR, interfaceName: interfaceName}, "", 0), - } - - logger.Debug.Println("Debug log enabled") - - tun, name, err := tun.CreateTUNFromFD(int(tunFd)) - if err != nil { - unix.Close(int(tunFd)) - logger.Error.Println(err) - return -1 - } - - logger.Info.Println("Attaching to interface", name) - device := NewDevice(tun, logger) - - logger.Debug.Println("Interface has MTU", device.tun.mtu) - - setError := ipcSetOperation(device, bufio.NewReader(strings.NewReader(settings))) - if setError != nil { - unix.Close(int(tunFd)) - logger.Error.Println(setError) - return -1 - } - - var uapi net.Listener - - uapiFile, err := UAPIOpen(name) - if err != nil { - logger.Error.Println(err) - } else { - uapi, err = UAPIListen(name, uapiFile) - if err != nil { - uapiFile.Close() - logger.Error.Println(err) - } else { - go func() { - for { - conn, err := uapi.Accept() - if err != nil { - return - } - go ipcHandle(device, conn) - } - }() - } - } - - device.Up() - logger.Info.Println("Device started") - - var i int32 - for i = 0; i < math.MaxInt32; i++ { - if _, exists := tunnelHandles[i]; !exists { - break - } - } - if i == math.MaxInt32 { - unix.Close(int(tunFd)) - return -1 - } - tunnelHandles[i] = TunnelHandle{device: device, uapi: uapi} - return i -} - -//export wgTurnOff -func wgTurnOff(tunnelHandle int32) { - handle, ok := tunnelHandles[tunnelHandle] - if !ok { - return - } - delete(tunnelHandles, tunnelHandle) - if handle.uapi != nil { - handle.uapi.Close() - } - handle.device.Close() -} - -//export wgGetSocketV4 -func wgGetSocketV4(tunnelHandle int32) int32 { - handle, ok := tunnelHandles[tunnelHandle] - if !ok { - return -1 - } - native, ok := handle.device.net.bind.(*NativeBind) - if !ok { - return -1 - } - fd := int32(-1) - conn, err := native.ipv4.SyscallConn() - if err != nil { - return -1 - } - err = conn.Control(func(f uintptr) { - fd = int32(f) - }) - if err != nil { - return -1 - } - return fd -} - -//export wgGetSocketV6 -func wgGetSocketV6(tunnelHandle int32) int32 { - handle, ok := tunnelHandles[tunnelHandle] - if !ok { - return -1 - } - native, ok := handle.device.net.bind.(*NativeBind) - if !ok { - return -1 - } - fd := int32(-1) - conn, err := native.ipv6.SyscallConn() - if err != nil { - return -1 - } - err = conn.Control(func(f uintptr) { - fd = int32(f) - }) - if err != nil { - return -1 - } - return fd -} - -//export wgVersion -func wgVersion() *C.char { - return C.CString(WireGuardGoVersion) -} - -func main() {} diff --git a/app/tools/libwg-go/src/jni.c b/app/tools/libwg-go/src/jni.c deleted file mode 100644 index f6229a49..00000000 --- a/app/tools/libwg-go/src/jni.c +++ /dev/null @@ -1,59 +0,0 @@ -/* SPDX-License-Identifier: Apache-2.0 - * - * Copyright © 2017-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved. - */ - -#include <jni.h> -#include <stdlib.h> -#include <string.h> - -struct go_string { const char *str; long n; }; -extern int wgTurnOn(struct go_string ifname, int tun_fd, struct go_string settings); -extern void wgTurnOff(int handle); -extern int wgGetSocketV4(int handle); -extern int wgGetSocketV6(int handle); -extern char *wgVersion(); - -JNIEXPORT jint JNICALL Java_com_wireguard_android_backend_GoBackend_wgTurnOn(JNIEnv *env, jclass c, jstring ifname, jint tun_fd, jstring settings) -{ - const char *ifname_str = (*env)->GetStringUTFChars(env, ifname, 0); - size_t ifname_len = (*env)->GetStringUTFLength(env, ifname); - const char *settings_str = (*env)->GetStringUTFChars(env, settings, 0); - size_t settings_len = (*env)->GetStringUTFLength(env, settings); - int ret = wgTurnOn((struct go_string){ - .str = ifname_str, - .n = ifname_len - }, tun_fd, (struct go_string){ - .str = settings_str, - .n = settings_len - }); - (*env)->ReleaseStringUTFChars(env, ifname, ifname_str); - (*env)->ReleaseStringUTFChars(env, settings, settings_str); - return ret; -} - -JNIEXPORT void JNICALL Java_com_wireguard_android_backend_GoBackend_wgTurnOff(JNIEnv *env, jclass c, jint handle) -{ - wgTurnOff(handle); -} - -JNIEXPORT jint JNICALL Java_com_wireguard_android_backend_GoBackend_wgGetSocketV4(JNIEnv *env, jclass c, jint handle) -{ - return wgGetSocketV4(handle); -} - -JNIEXPORT jint JNICALL Java_com_wireguard_android_backend_GoBackend_wgGetSocketV6(JNIEnv *env, jclass c, jint handle) -{ - return wgGetSocketV6(handle); -} - -JNIEXPORT jstring JNICALL Java_com_wireguard_android_backend_GoBackend_wgVersion(JNIEnv *env, jclass c) -{ - jstring ret; - char *version = wgVersion(); - if (!version) - return NULL; - ret = (*env)->NewStringUTF(env, version); - free(version); - return ret; -} diff --git a/app/tools/libwg-go/src/queueconstants.go b/app/tools/libwg-go/src/queueconstants.go deleted file mode 100644 index dd11bf10..00000000 --- a/app/tools/libwg-go/src/queueconstants.go +++ /dev/null @@ -1,16 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 - * - * Copyright (C) 2017-2019 WireGuard LLC. All Rights Reserved. - */ - -package main - -/* Reduce memory consumption for Android */ - -const ( - QueueOutboundSize = 1024 - QueueInboundSize = 1024 - QueueHandshakeSize = 1024 - MaxSegmentSize = 2200 - PreallocatedBuffersPerPool = 4096 -) diff --git a/app/tools/libwg-go/src/tun/api-android.go b/app/tools/libwg-go/src/tun/api-android.go deleted file mode 100644 index 75e80c5a..00000000 --- a/app/tools/libwg-go/src/tun/api-android.go +++ /dev/null @@ -1,33 +0,0 @@ -/* SPDX-License-Identifier: Apache-2.0 - * - * Copyright (C) 2017-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved. - */ - -package tun - -import ( - "golang.zx2c4.com/wireguard/rwcancel" - "os" -) - -func CreateTUNFromFD(tunFd int) (TUNDevice, string, error) { - file := os.NewFile(uintptr(tunFd), "/dev/tun") - tun := &nativeTun{ - tunFile: file, - fd: file.Fd(), - events: make(chan TUNEvent, 5), - errors: make(chan error, 5), - nopi: true, - } - var err error - tun.fdCancel, err = rwcancel.NewRWCancel(int(tun.fd)) - if err != nil { - return nil, "", err - } - name, err := tun.Name() - if err != nil { - tun.fdCancel.Cancel() - return nil, "", err - } - return tun, name, nil -} |