tools: let wg(8) play with userspace implementation
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
		
							parent
							
								
									7689905c78
								
							
						
					
					
						commit
						8028d708cb
					
				| @ -21,6 +21,7 @@ add_custom_target(libwg-go.so WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/lib | ||||
|     ANDROID_TOOLCHAIN_ROOT=${ANDROID_TOOLCHAIN_ROOT} | ||||
|     ANDROID_LLVM_TRIPLE=${ANDROID_LLVM_TRIPLE} | ||||
|     ANDROID_SYSROOT=${ANDROID_SYSROOT} | ||||
|     ANDROID_PACKAGE_NAME=${ANDROID_PACKAGE_NAME} | ||||
|     CFLAGS=${CMAKE_C_FLAGS}\ -Wno-unused-command-line-argument | ||||
|     LDFLAGS=${CMAKE_SHARED_LINKER_FLAGS}\ -fuse-ld=gold | ||||
|     DESTDIR=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} | ||||
|  | ||||
| @ -54,5 +54,5 @@ $(DESTDIR)/libwg-go.so: $(FILES) src/git.zx2c4.com/wireguard-go/api-android.go s | ||||
| 	mkdir -p $(subst ../wireguard-go/,./src/git.zx2c4.com/wireguard-go/,$(dir $(FILES))) | ||||
| 	$(foreach FILE,$(FILES),ln -sfrt $(subst ../wireguard-go/,./src/git.zx2c4.com/wireguard-go/,$(dir $(FILE))) $(FILE);) | ||||
| 	GOPATH=$(PWD) go get -v -d git.zx2c4.com/wireguard-go | ||||
| 	GOPATH=$(PWD) go build -v -o $(DESTDIR)/libwg-go.so -buildmode c-shared git.zx2c4.com/wireguard-go | ||||
| 	GOPATH=$(PWD) go build -ldflags="-X main.socketDirectory=/data/data/$(ANDROID_PACKAGE_NAME)/cache/wireguard" -v -o $(DESTDIR)/libwg-go.so -buildmode c-shared git.zx2c4.com/wireguard-go | ||||
| 	go version > .gobuildversion | ||||
|  | ||||
| @ -16,6 +16,7 @@ import ( | ||||
| 	"io/ioutil" | ||||
| 	"log" | ||||
| 	"math" | ||||
| 	"net" | ||||
| 	"os" | ||||
| 	"os/signal" | ||||
| 	"runtime" | ||||
| @ -33,11 +34,16 @@ func (l AndroidLogger) Write(p []byte) (int, error) { | ||||
| 	return len(p), nil | ||||
| } | ||||
| 
 | ||||
| var tunnelHandles map[int32]*Device | ||||
| type TunnelHandle struct { | ||||
| 	device *Device | ||||
| 	uapi   net.Listener | ||||
| } | ||||
| 
 | ||||
| var tunnelHandles map[int32]TunnelHandle | ||||
| 
 | ||||
| func init() { | ||||
| 	roamingDisabled = true | ||||
| 	tunnelHandles = make(map[int32]*Device) | ||||
| 	tunnelHandles = make(map[int32]TunnelHandle) | ||||
| 	signals := make(chan os.Signal) | ||||
| 	signal.Notify(signals, unix.SIGUSR2) | ||||
| 	go func() { | ||||
| @ -85,6 +91,29 @@ func wgTurnOn(ifnameRef string, tun_fd int32, settings string) int32 { | ||||
| 		return -1 | ||||
| 	} | ||||
| 
 | ||||
| 	uapiFile, err := UAPIOpen(name) | ||||
| 	if err != nil { | ||||
| 		unix.Close(int(tun_fd)) | ||||
| 		logger.Error.Println(err) | ||||
| 		return -1 | ||||
| 	} | ||||
| 	uapi, err := UAPIListen(name, uapiFile) | ||||
| 	if err != nil { | ||||
| 		uapiFile.Close() | ||||
| 		unix.Close(int(tun_fd)) | ||||
| 		logger.Error.Println(err) | ||||
| 		return -1 | ||||
| 	} | ||||
| 	go func() { | ||||
| 		for { | ||||
| 			conn, err := uapi.Accept() | ||||
| 			if err != nil { | ||||
| 				return | ||||
| 			} | ||||
| 			go ipcHandle(device, conn) | ||||
| 		} | ||||
| 	}() | ||||
| 
 | ||||
| 	device.Up() | ||||
| 	logger.Info.Println("Device started") | ||||
| 
 | ||||
| @ -98,27 +127,28 @@ func wgTurnOn(ifnameRef string, tun_fd int32, settings string) int32 { | ||||
| 		unix.Close(int(tun_fd)) | ||||
| 		return -1 | ||||
| 	} | ||||
| 	tunnelHandles[i] = device | ||||
| 	tunnelHandles[i] = TunnelHandle{device: device, uapi: uapi} | ||||
| 	return i | ||||
| } | ||||
| 
 | ||||
| //export wgTurnOff
 | ||||
| func wgTurnOff(tunnelHandle int32) { | ||||
| 	device, ok := tunnelHandles[tunnelHandle] | ||||
| 	handle, ok := tunnelHandles[tunnelHandle] | ||||
| 	if !ok { | ||||
| 		return | ||||
| 	} | ||||
| 	delete(tunnelHandles, tunnelHandle) | ||||
| 	device.Close() | ||||
| 	handle.uapi.Close() | ||||
| 	handle.device.Close() | ||||
| } | ||||
| 
 | ||||
| //export wgGetSocketV4
 | ||||
| func wgGetSocketV4(tunnelHandle int32) int32 { | ||||
| 	device, ok := tunnelHandles[tunnelHandle] | ||||
| 	handle, ok := tunnelHandles[tunnelHandle] | ||||
| 	if !ok { | ||||
| 		return -1 | ||||
| 	} | ||||
| 	native, ok := device.net.bind.(*NativeBind) | ||||
| 	native, ok := handle.device.net.bind.(*NativeBind) | ||||
| 	if !ok { | ||||
| 		return -1 | ||||
| 	} | ||||
| @ -138,11 +168,11 @@ func wgGetSocketV4(tunnelHandle int32) int32 { | ||||
| 
 | ||||
| //export wgGetSocketV6
 | ||||
| func wgGetSocketV6(tunnelHandle int32) int32 { | ||||
| 	device, ok := tunnelHandles[tunnelHandle] | ||||
| 	handle, ok := tunnelHandles[tunnelHandle] | ||||
| 	if !ok { | ||||
| 		return -1 | ||||
| 	} | ||||
| 	native, ok := device.net.bind.(*NativeBind) | ||||
| 	native, ok := handle.device.net.bind.(*NativeBind) | ||||
| 	if !ok { | ||||
| 		return -1 | ||||
| 	} | ||||
|  | ||||
| @ -1 +1 @@ | ||||
| Subproject commit 6b3b1c3b918fcb9bbf1d876ad6d58c38932a2469 | ||||
| Subproject commit 3ad3e83c7aea762c7030b7aa7485f48083d7d9a9 | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user