mirror of
https://github.com/cwinfo/yggdrasil-go.git
synced 2024-11-25 23:01:38 +00:00
Move tunDevice into router
This commit is contained in:
parent
d9b376b3ad
commit
10157483f9
@ -160,9 +160,9 @@ func (a *admin) init(c *Core, listenaddr string) {
|
||||
}()
|
||||
|
||||
return admin_info{
|
||||
a.core.tun.iface.Name(): admin_info{
|
||||
"tap_mode": a.core.tun.iface.IsTAP(),
|
||||
"mtu": a.core.tun.mtu,
|
||||
a.core.router.tun.iface.Name(): admin_info{
|
||||
"tap_mode": a.core.router.tun.iface.IsTAP(),
|
||||
"mtu": a.core.router.tun.mtu,
|
||||
},
|
||||
}, nil
|
||||
})
|
||||
@ -185,8 +185,8 @@ func (a *admin) init(c *Core, listenaddr string) {
|
||||
return admin_info{}, errors.New("Failed to configure adapter")
|
||||
} else {
|
||||
return admin_info{
|
||||
a.core.tun.iface.Name(): admin_info{
|
||||
"tap_mode": a.core.tun.iface.IsTAP(),
|
||||
a.core.router.tun.iface.Name(): admin_info{
|
||||
"tap_mode": a.core.router.tun.iface.IsTAP(),
|
||||
"mtu": ifmtu,
|
||||
},
|
||||
}, nil
|
||||
@ -539,12 +539,12 @@ func (a *admin) removePeer(p string) error {
|
||||
// startTunWithMTU creates the tun/tap device, sets its address, and sets the MTU to the provided value.
|
||||
func (a *admin) startTunWithMTU(ifname string, iftapmode bool, ifmtu int) error {
|
||||
// Close the TUN first if open
|
||||
_ = a.core.tun.close()
|
||||
_ = a.core.router.tun.close()
|
||||
// Then reconfigure and start it
|
||||
addr := a.core.router.addr
|
||||
straddr := fmt.Sprintf("%s/%v", net.IP(addr[:]).String(), 8*len(address_prefix)-1)
|
||||
if ifname != "none" {
|
||||
err := a.core.tun.setup(ifname, iftapmode, straddr, ifmtu)
|
||||
err := a.core.router.tun.setup(ifname, iftapmode, straddr, ifmtu)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -559,9 +559,9 @@ func (a *admin) startTunWithMTU(ifname string, iftapmode bool, ifmtu int) error
|
||||
a.core.sessions.sendPingPong(sinfo, false)
|
||||
}
|
||||
// Aaaaand... go!
|
||||
go a.core.tun.read()
|
||||
go a.core.router.tun.read()
|
||||
}
|
||||
go a.core.tun.write()
|
||||
go a.core.router.tun.write()
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -28,7 +28,6 @@ type Core struct {
|
||||
sessions sessions
|
||||
router router
|
||||
dht dht
|
||||
tun tunDevice
|
||||
admin admin
|
||||
searches searches
|
||||
multicast multicast
|
||||
@ -59,7 +58,6 @@ func (c *Core) init(bpub *boxPubKey,
|
||||
c.peers.init(c)
|
||||
c.router.init(c)
|
||||
c.switchTable.init(c, c.sigPub) // TODO move before peers? before router?
|
||||
c.tun.init(c)
|
||||
}
|
||||
|
||||
// Get the current build name. This is usually injected if built from git,
|
||||
@ -188,7 +186,7 @@ func (c *Core) Start(nc *config.NodeConfig, log *log.Logger) error {
|
||||
}
|
||||
|
||||
ip := net.IP(c.router.addr[:]).String()
|
||||
if err := c.tun.start(nc.IfName, nc.IfTAPMode, fmt.Sprintf("%s/%d", ip, 8*len(address_prefix)-1), nc.IfMTU); err != nil {
|
||||
if err := c.router.tun.start(nc.IfName, nc.IfTAPMode, fmt.Sprintf("%s/%d", ip, 8*len(address_prefix)-1), nc.IfMTU); err != nil {
|
||||
c.log.Println("Failed to start TUN/TAP")
|
||||
return err
|
||||
}
|
||||
@ -200,7 +198,7 @@ func (c *Core) Start(nc *config.NodeConfig, log *log.Logger) error {
|
||||
// Stops the Yggdrasil node.
|
||||
func (c *Core) Stop() {
|
||||
c.log.Println("Stopping...")
|
||||
c.tun.close()
|
||||
c.router.tun.close()
|
||||
c.admin.close()
|
||||
}
|
||||
|
||||
@ -293,10 +291,10 @@ func (c *Core) GetTUNDefaultIfTAPMode() bool {
|
||||
|
||||
// Gets the current TUN/TAP interface name.
|
||||
func (c *Core) GetTUNIfName() string {
|
||||
return c.tun.iface.Name()
|
||||
return c.router.tun.iface.Name()
|
||||
}
|
||||
|
||||
// Gets the current TUN/TAP interface MTU.
|
||||
func (c *Core) GetTUNIfMTU() int {
|
||||
return c.tun.mtu
|
||||
return c.router.tun.mtu
|
||||
}
|
||||
|
@ -30,6 +30,10 @@ import (
|
||||
"golang.org/x/net/ipv6"
|
||||
)
|
||||
|
||||
type adapter struct {
|
||||
tunDevice
|
||||
}
|
||||
|
||||
// The router struct has channels to/from the tun/tap device and a self peer (0), which is how messages are passed between this node and the peers/switch layer.
|
||||
// The router's mainLoop goroutine is responsible for managing all information related to the dht, searches, and crypto sessions.
|
||||
type router struct {
|
||||
@ -39,6 +43,7 @@ type router struct {
|
||||
in <-chan []byte // packets we received from the network, link to peer's "out"
|
||||
out func([]byte) // packets we're sending to the network, link to peer's "in"
|
||||
toRecv chan router_recvPacket // packets to handle via recvPacket()
|
||||
tun tunDevice // TUN/TAP adapter
|
||||
recv chan<- []byte // place where the tun pulls received packets from
|
||||
send <-chan []byte // place where the tun puts outgoing packets
|
||||
reset chan struct{} // signal that coords changed (re-init sessions/dht)
|
||||
@ -75,11 +80,12 @@ func (r *router) init(core *Core) {
|
||||
send := make(chan []byte, 32)
|
||||
r.recv = recv
|
||||
r.send = send
|
||||
r.core.tun.recv = recv
|
||||
r.core.tun.send = send
|
||||
r.tun.recv = recv
|
||||
r.tun.send = send
|
||||
r.reset = make(chan struct{}, 1)
|
||||
r.admin = make(chan func(), 32)
|
||||
r.cryptokey.init(r.core)
|
||||
r.tun.init(r.core)
|
||||
// go r.mainLoop()
|
||||
}
|
||||
|
||||
@ -279,7 +285,7 @@ func (r *router) sendPacket(bs []byte) {
|
||||
}
|
||||
|
||||
// Create the ICMPv6 response from it
|
||||
icmpv6Buf, err := r.core.tun.icmpv6.create_icmpv6_tun(
|
||||
icmpv6Buf, err := r.tun.icmpv6.create_icmpv6_tun(
|
||||
bs[8:24], bs[24:40],
|
||||
ipv6.ICMPTypeDestinationUnreachable, 1, ptb)
|
||||
if err == nil {
|
||||
@ -304,7 +310,7 @@ func (r *router) sendPacket(bs []byte) {
|
||||
}
|
||||
|
||||
// Create the ICMPv6 response from it
|
||||
icmpv6Buf, err := r.core.tun.icmpv6.create_icmpv6_tun(
|
||||
icmpv6Buf, err := r.tun.icmpv6.create_icmpv6_tun(
|
||||
bs[8:24], bs[24:40],
|
||||
ipv6.ICMPTypePacketTooBig, 0, ptb)
|
||||
if err == nil {
|
||||
|
@ -273,7 +273,7 @@ func (ss *sessions) createSession(theirPermKey *boxPubKey) *sessionInfo {
|
||||
sinfo.mySesPriv = *priv
|
||||
sinfo.myNonce = *newBoxNonce()
|
||||
sinfo.theirMTU = 1280
|
||||
sinfo.myMTU = uint16(ss.core.tun.mtu)
|
||||
sinfo.myMTU = uint16(ss.core.router.tun.mtu)
|
||||
now := time.Now()
|
||||
sinfo.time = now
|
||||
sinfo.mtuTime = now
|
||||
|
Loading…
Reference in New Issue
Block a user