device: put AllowedIPs mutex before what it guards, unexport fields

Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
Brad Fitzpatrick 2025-11-21 09:42:42 -08:00 committed by 世界
parent 6f5e8b1947
commit 70b09a6edd
No known key found for this signature in database
GPG key ID: CD109927C34A63C4

View file

@ -205,14 +205,14 @@ func (node *trieEntry) lookup(ip []byte) *Peer {
}
type AllowedIPs struct {
IPv4 *trieEntry
IPv6 *trieEntry
mutex sync.RWMutex
mu sync.RWMutex
ipv4 *trieEntry
ipv6 *trieEntry
}
func (table *AllowedIPs) EntriesForPeer(peer *Peer, cb func(prefix netip.Prefix) bool) {
table.mutex.RLock()
defer table.mutex.RUnlock()
table.mu.RLock()
defer table.mu.RUnlock()
for elem := peer.trieEntries.Front(); elem != nil; elem = elem.Next() {
node := elem.Value.(*trieEntry)
@ -278,8 +278,8 @@ func (table *AllowedIPs) Remove(prefix netip.Prefix, peer *Peer) {
}
func (table *AllowedIPs) RemoveByPeer(peer *Peer) {
table.mutex.Lock()
defer table.mutex.Unlock()
table.mu.Lock()
defer table.mu.Unlock()
var next *list.Element
for elem := peer.trieEntries.Front(); elem != nil; elem = next {
@ -289,28 +289,28 @@ func (table *AllowedIPs) RemoveByPeer(peer *Peer) {
}
func (table *AllowedIPs) Insert(prefix netip.Prefix, peer *Peer) {
table.mutex.Lock()
defer table.mutex.Unlock()
table.mu.Lock()
defer table.mu.Unlock()
if prefix.Addr().Is6() {
ip := prefix.Addr().As16()
parentIndirection{&table.IPv6, 2}.insert(ip[:], uint8(prefix.Bits()), peer)
parentIndirection{&table.ipv6, 2}.insert(ip[:], uint8(prefix.Bits()), peer)
} else if prefix.Addr().Is4() {
ip := prefix.Addr().As4()
parentIndirection{&table.IPv4, 2}.insert(ip[:], uint8(prefix.Bits()), peer)
parentIndirection{&table.ipv4, 2}.insert(ip[:], uint8(prefix.Bits()), peer)
} else {
panic(errors.New("inserting unknown address type"))
}
}
func (table *AllowedIPs) Lookup(ip []byte) *Peer {
table.mutex.RLock()
defer table.mutex.RUnlock()
table.mu.RLock()
defer table.mu.RUnlock()
switch len(ip) {
case net.IPv6len:
return table.IPv6.lookup(ip)
return table.ipv6.lookup(ip)
case net.IPv4len:
return table.IPv4.lookup(ip)
return table.ipv4.lookup(ip)
default:
panic(errors.New("looking up unknown address type"))
}