mirror of
https://github.com/yggdrasil-network/yggdrasil-go.git
synced 2025-04-28 22:25:07 +03:00
add a udp close packet, and partial support for a removePeer admin call (sends close to UDP peers, but doesn't close TCP connections yet)
This commit is contained in:
parent
96399d586d
commit
0459f88b92
2 changed files with 95 additions and 3 deletions
|
@ -3,6 +3,7 @@ package yggdrasil
|
|||
import "net"
|
||||
import "os"
|
||||
import "bytes"
|
||||
import "errors"
|
||||
import "fmt"
|
||||
import "sort"
|
||||
import "strings"
|
||||
|
@ -63,6 +64,13 @@ func (a *admin) init(c *Core, listenaddr string) {
|
|||
*out = []byte("Failed to add peer: " + saddr[0] + "\n")
|
||||
}
|
||||
})
|
||||
a.addHandler("removePeer", []string{"<peer>"}, func(out *[]byte, saddr ...string) {
|
||||
if a.removePeer(saddr[0]) == nil {
|
||||
*out = []byte("Removing peer: " + saddr[0] + "\n")
|
||||
} else {
|
||||
*out = []byte("Failed to remove peer: " + saddr[0] + "\n")
|
||||
}
|
||||
})
|
||||
a.addHandler("setTunTap", []string{"<ifname|auto|none>", "[<tun|tap>]", "[<mtu>]"}, func(out *[]byte, ifparams ...string) {
|
||||
// Set sane defaults
|
||||
iftapmode := false
|
||||
|
@ -216,6 +224,30 @@ func (a *admin) addPeer(p string) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (a *admin) removePeer(p string) error {
|
||||
pAddr := p
|
||||
if p[:4] == "tcp:" || p[:4] == "udp:" {
|
||||
pAddr = p[4:]
|
||||
}
|
||||
switch {
|
||||
case len(p) >= 4 && p[:4] == "udp:":
|
||||
// Connect to peer over UDP
|
||||
udpAddr, err := net.ResolveUDPAddr("udp", pAddr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
var addr connAddr
|
||||
addr.fromUDPAddr(udpAddr)
|
||||
a.core.udp.sendClose(addr)
|
||||
return nil
|
||||
case len(p) >= 4 && p[:4] == "tcp:":
|
||||
default:
|
||||
// Connect to peer over TCP
|
||||
return errors.New("Removing TCP peer not yet supported")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (a *admin) startTunWithMTU(ifname string, iftapmode bool, ifmtu int) error {
|
||||
// Close the TUN first if open
|
||||
_ = a.core.tun.close()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue