Added cross namespace TUN status detection
This commit is contained in:
parent
af464cff00
commit
471f7ff08e
@ -114,8 +114,8 @@ func updateBind(device *Device) error {
|
||||
|
||||
// decrease waitgroup to 0
|
||||
|
||||
go device.RoutineReceiveIncomming(ipv4.Version, netc.bind)
|
||||
go device.RoutineReceiveIncomming(ipv6.Version, netc.bind)
|
||||
go device.RoutineReceiveIncoming(ipv4.Version, netc.bind)
|
||||
go device.RoutineReceiveIncoming(ipv6.Version, netc.bind)
|
||||
|
||||
device.log.Debug.Println("UDP bind has been updated")
|
||||
}
|
||||
|
@ -93,10 +93,10 @@ func (device *Device) addToHandshakeQueue(
|
||||
}
|
||||
}
|
||||
|
||||
func (device *Device) RoutineReceiveIncomming(IP int, bind Bind) {
|
||||
func (device *Device) RoutineReceiveIncoming(IP int, bind Bind) {
|
||||
|
||||
logDebug := device.log.Debug
|
||||
logDebug.Println("Routine, receive incomming, IP version:", IP)
|
||||
logDebug.Println("Routine, receive incoming, IP version:", IP)
|
||||
|
||||
for {
|
||||
|
||||
|
@ -120,6 +120,7 @@ configure_peers() {
|
||||
|
||||
ip1 link set up dev wg1
|
||||
ip2 link set up dev wg2
|
||||
sleep 1
|
||||
}
|
||||
configure_peers
|
||||
|
||||
|
@ -321,8 +321,14 @@ func (peer *Peer) RoutineHandshakeInitiator() {
|
||||
goto BeginHandshakes
|
||||
|
||||
case <-timeout.C:
|
||||
// TODO: Clear source address for peer
|
||||
continue
|
||||
|
||||
// clear source address of peer
|
||||
|
||||
peer.mutex.Lock()
|
||||
if peer.endpoint != nil {
|
||||
peer.endpoint.ClearSrc()
|
||||
}
|
||||
peer.mutex.Unlock()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -11,6 +11,7 @@ import (
|
||||
"net"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
@ -60,15 +61,32 @@ func (tun *NativeTun) File() *os.File {
|
||||
return tun.fd
|
||||
}
|
||||
|
||||
func (tun *NativeTun) RoutineHackListener() {
|
||||
/* This is needed for the detection to work accross network namespaces
|
||||
* If you are reading this and know a better method, please get in touch.
|
||||
*/
|
||||
fd := int(tun.fd.Fd())
|
||||
for {
|
||||
_, err := unix.Write(fd, nil)
|
||||
switch err {
|
||||
case unix.EINVAL:
|
||||
tun.events <- TUNEventUp
|
||||
case unix.EIO:
|
||||
tun.events <- TUNEventDown
|
||||
default:
|
||||
}
|
||||
time.Sleep(time.Second / 10)
|
||||
}
|
||||
}
|
||||
|
||||
func (tun *NativeTun) RoutineNetlinkListener() {
|
||||
|
||||
sock := int(C.bind_rtmgrp())
|
||||
if sock < 0 {
|
||||
tun.errors <- errors.New("Failed to create netlink event listener")
|
||||
return
|
||||
}
|
||||
|
||||
tun.events <- TUNEventUp // TODO: Fix network namespace problem
|
||||
|
||||
for msg := make([]byte, 1<<16); ; {
|
||||
|
||||
msgn, _, _, _, err := unix.Recvmsg(sock, msg[:], nil, 0)
|
||||
@ -269,6 +287,7 @@ func CreateTUNFromFile(name string, fd *os.File) (TUNDevice, error) {
|
||||
}
|
||||
|
||||
go device.RoutineNetlinkListener()
|
||||
go device.RoutineHackListener() // cross namespace
|
||||
|
||||
// set default MTU
|
||||
|
||||
@ -324,6 +343,7 @@ func CreateTUN(name string) (TUNDevice, error) {
|
||||
}
|
||||
|
||||
go device.RoutineNetlinkListener()
|
||||
go device.RoutineHackListener() // cross namespace
|
||||
|
||||
// set default MTU
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user