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
|
// decrease waitgroup to 0
|
||||||
|
|
||||||
go device.RoutineReceiveIncomming(ipv4.Version, netc.bind)
|
go device.RoutineReceiveIncoming(ipv4.Version, netc.bind)
|
||||||
go device.RoutineReceiveIncomming(ipv6.Version, netc.bind)
|
go device.RoutineReceiveIncoming(ipv6.Version, netc.bind)
|
||||||
|
|
||||||
device.log.Debug.Println("UDP bind has been updated")
|
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 := device.log.Debug
|
||||||
logDebug.Println("Routine, receive incomming, IP version:", IP)
|
logDebug.Println("Routine, receive incoming, IP version:", IP)
|
||||||
|
|
||||||
for {
|
for {
|
||||||
|
|
||||||
|
|
|
@ -120,6 +120,7 @@ configure_peers() {
|
||||||
|
|
||||||
ip1 link set up dev wg1
|
ip1 link set up dev wg1
|
||||||
ip2 link set up dev wg2
|
ip2 link set up dev wg2
|
||||||
|
sleep 1
|
||||||
}
|
}
|
||||||
configure_peers
|
configure_peers
|
||||||
|
|
||||||
|
|
|
@ -321,8 +321,14 @@ func (peer *Peer) RoutineHandshakeInitiator() {
|
||||||
goto BeginHandshakes
|
goto BeginHandshakes
|
||||||
|
|
||||||
case <-timeout.C:
|
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"
|
"net"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -60,15 +61,32 @@ func (tun *NativeTun) File() *os.File {
|
||||||
return tun.fd
|
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() {
|
func (tun *NativeTun) RoutineNetlinkListener() {
|
||||||
|
|
||||||
sock := int(C.bind_rtmgrp())
|
sock := int(C.bind_rtmgrp())
|
||||||
if sock < 0 {
|
if sock < 0 {
|
||||||
tun.errors <- errors.New("Failed to create netlink event listener")
|
tun.errors <- errors.New("Failed to create netlink event listener")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
tun.events <- TUNEventUp // TODO: Fix network namespace problem
|
|
||||||
|
|
||||||
for msg := make([]byte, 1<<16); ; {
|
for msg := make([]byte, 1<<16); ; {
|
||||||
|
|
||||||
msgn, _, _, _, err := unix.Recvmsg(sock, msg[:], nil, 0)
|
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.RoutineNetlinkListener()
|
||||||
|
go device.RoutineHackListener() // cross namespace
|
||||||
|
|
||||||
// set default MTU
|
// set default MTU
|
||||||
|
|
||||||
|
@ -324,6 +343,7 @@ func CreateTUN(name string) (TUNDevice, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
go device.RoutineNetlinkListener()
|
go device.RoutineNetlinkListener()
|
||||||
|
go device.RoutineHackListener() // cross namespace
|
||||||
|
|
||||||
// set default MTU
|
// set default MTU
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue