vpn/nic: add RemovePeer func

This commit is contained in:
rkonfj
2024-11-30 16:50:08 +08:00
parent 843064e735
commit bc1bb9d059
3 changed files with 25 additions and 0 deletions
+5
View File
@@ -247,6 +247,7 @@ func (v *P2PVPN) listenPacketConn(ctx context.Context) (c *p2p.PacketConn, err e
p2pOptions := []p2p.Option{
p2p.PeerMeta("version", Version),
p2p.ListenPeerUp(v.addPeer),
p2p.ListenPeerLeave(v.removePeer),
p2p.KeepAlivePeriod(6 * time.Second),
}
if v.Config.Port > 0 {
@@ -290,6 +291,10 @@ func (v *P2PVPN) addPeer(pi disco.PeerID, m url.Values) {
v.nic.AddPeer(nic.Peer{Addr: pi, IPv4: m.Get("alias1"), IPv6: m.Get("alias2"), Meta: m})
}
func (v *P2PVPN) removePeer(pi disco.PeerID) {
v.nic.RemovePeer(pi)
}
func (v *P2PVPN) loginIfNecessary(ctx context.Context) (disco.SecretStore, error) {
if len(v.Config.SecretFile) == 0 {
currentUser, err := user.Current()
+7
View File
@@ -63,6 +63,13 @@ func (c *Cache[K, V]) Put(key K, value V) {
c.cache[key] = elem
}
func (c *Cache[K, V]) Del(key K) {
if v, ok := c.cache[key]; ok {
c.list.Remove(v)
delete(c.cache, key)
}
}
func (c *Cache[K, V]) Clear() {
clear(c.cache)
c.list.Init()
+13
View File
@@ -88,6 +88,19 @@ func (r *VirtualNIC) AddPeer(peer Peer) {
}
}
func (r *VirtualNIC) RemovePeer(addr net.Addr) {
r.init()
r.peersMutex.Lock()
defer r.peersMutex.Unlock()
_, v, ok := r.peers.Find(func(s string, p *Peer) bool {
return p.Addr == addr
})
if ok {
r.peers.Del(v.IPv4)
r.peers.Del(v.IPv6)
}
}
func (r *VirtualNIC) AddRoute(dst *net.IPNet, via net.IP) bool {
r.init()
r.peersMutex.Lock()