64 lines
1.3 KiB
Go
64 lines
1.3 KiB
Go
package node
|
|
|
|
import (
|
|
"net"
|
|
"net/netip"
|
|
"net/url"
|
|
"sync/atomic"
|
|
)
|
|
|
|
const (
|
|
bufferSize = 1536
|
|
if_mtu = 1200
|
|
if_queue_len = 2048
|
|
controlCipherOverhead = 16
|
|
dataCipherOverhead = 16
|
|
signOverhead = 64
|
|
)
|
|
|
|
var multicastAddr = net.UDPAddrFromAddrPort(netip.AddrPortFrom(
|
|
netip.AddrFrom4([4]byte{224, 0, 0, 157}),
|
|
4560))
|
|
|
|
var (
|
|
hubURL *url.URL
|
|
apiKey string
|
|
|
|
// Configuration for this peer.
|
|
netName string
|
|
localIP byte
|
|
localPub bool
|
|
localAddr netip.AddrPort
|
|
privKey []byte
|
|
privSignKey []byte
|
|
|
|
// TODO: Doesn't need to be global.
|
|
// Duplicate checkers for incoming packets.
|
|
dupChecks [256]*dupCheck = func() (out [256]*dupCheck) {
|
|
for i := range out {
|
|
out[i] = newDupCheck(0)
|
|
}
|
|
return
|
|
}()
|
|
|
|
// TODO: Doesn't need to be global .
|
|
// Messages for the supervisor.
|
|
messages = make(chan any, 1024)
|
|
|
|
// TODO: Doesn't need to be global .
|
|
// Global routing table.
|
|
routingTable [256]*atomic.Pointer[peerRoute] = func() (out [256]*atomic.Pointer[peerRoute]) {
|
|
for i := range out {
|
|
out[i] = &atomic.Pointer[peerRoute]{}
|
|
out[i].Store(&peerRoute{})
|
|
}
|
|
return
|
|
}()
|
|
|
|
// Managed by the relayManager.
|
|
relayIP = &atomic.Pointer[byte]{}
|
|
|
|
// TODO: Only used by supervisor: can make local there.
|
|
publicAddrs = newPubAddrStore()
|
|
)
|