vppn/node/shared.go
2025-01-22 14:09:43 +01:00

60 lines
1001 B
Go

package node
import (
"net/netip"
"sync/atomic"
)
type sharedState struct {
// Immutable:
HubAddress string
APIKey string
NetName string
LocalIP byte
LocalPub bool
LocalAddr netip.AddrPort
PrivKey []byte
PrivSignKey []byte
// Mutable:
Routes [256]*atomic.Pointer[peerRoute]
RelayIP *atomic.Pointer[byte]
// Messages for supervisor main loop.
Messages chan any
}
func newSharedState(
netName,
hubAddress,
apiKey string,
conf localConfig,
) (
ss sharedState,
) {
ss.HubAddress = hubAddress
ss.APIKey = apiKey
ss.NetName = netName
ss.LocalIP = conf.PeerIP
ip, ok := netip.AddrFromSlice(conf.PublicIP)
if ok {
ss.LocalPub = true
ss.LocalAddr = netip.AddrPortFrom(ip, conf.Port)
}
ss.PrivKey = conf.PrivKey
ss.PrivSignKey = conf.PrivSignKey
for i := range ss.Routes {
ss.Routes[i] = &atomic.Pointer[peerRoute]{}
ss.Routes[i].Store(&peerRoute{})
}
ss.RelayIP = &atomic.Pointer[byte]{}
ss.Messages = make(chan any, 1024)
return
}