net/tstun: rename natConfig to peerConfig

So that we can use this for additional, non-NAT configuration without it
being confusing.

Updates #cleanup

Signed-off-by: Andrew Dunham <andrew@du.nham.ca>
Change-Id: I1658d59c9824217917a94ee76d2d08f0a682986f
pull/11958/head
Andrew Dunham 6 months ago
parent 10497acc95
commit 59d5e5f0b9

@ -106,8 +106,8 @@ type Wrapper struct {
// timeNow, if non-nil, will be used to obtain the current time. // timeNow, if non-nil, will be used to obtain the current time.
timeNow func() time.Time timeNow func() time.Time
// natConfig stores the current NAT configuration. // peerConfig stores the current NAT configuration.
natConfig atomic.Pointer[natConfig] peerConfig atomic.Pointer[peerConfig]
// vectorBuffer stores the oldest unconsumed packet vector from tdev. It is // vectorBuffer stores the oldest unconsumed packet vector from tdev. It is
// allocated in wrap() and the underlying arrays should never grow. // allocated in wrap() and the underlying arrays should never grow.
@ -505,9 +505,9 @@ func (t *Wrapper) sendVectorOutbound(r tunVectorReadResult) {
// snat does SNAT on p if the destination address requires a different source address. // snat does SNAT on p if the destination address requires a different source address.
func (t *Wrapper) snat(p *packet.Parsed) { func (t *Wrapper) snat(p *packet.Parsed) {
nc := t.natConfig.Load() pc := t.peerConfig.Load()
oldSrc := p.Src.Addr() oldSrc := p.Src.Addr()
newSrc := nc.selectSrcIP(oldSrc, p.Dst.Addr()) newSrc := pc.selectSrcIP(oldSrc, p.Dst.Addr())
if oldSrc != newSrc { if oldSrc != newSrc {
checksum.UpdateSrcAddr(p, newSrc) checksum.UpdateSrcAddr(p, newSrc)
} }
@ -515,9 +515,9 @@ func (t *Wrapper) snat(p *packet.Parsed) {
// dnat does destination NAT on p. // dnat does destination NAT on p.
func (t *Wrapper) dnat(p *packet.Parsed) { func (t *Wrapper) dnat(p *packet.Parsed) {
nc := t.natConfig.Load() pc := t.peerConfig.Load()
oldDst := p.Dst.Addr() oldDst := p.Dst.Addr()
newDst := nc.mapDstIP(oldDst) newDst := pc.mapDstIP(oldDst)
if newDst != oldDst { if newDst != oldDst {
checksum.UpdateDstAddr(p, newDst) checksum.UpdateDstAddr(p, newDst)
} }
@ -545,11 +545,11 @@ func findV6(addrs []netip.Prefix) netip.Addr {
return netip.Addr{} return netip.Addr{}
} }
// natConfig is the configuration for NAT. // peerConfig is the configuration for different peers.
// It should be treated as immutable. // It should be treated as immutable.
// //
// The nil value is a valid configuration. // The nil value is a valid configuration.
type natConfig struct { type peerConfig struct {
// nativeAddr4 and nativeAddr6 are the IPv4/IPv6 Tailscale Addresses of // nativeAddr4 and nativeAddr6 are the IPv4/IPv6 Tailscale Addresses of
// the current node. // the current node.
// //
@ -573,12 +573,12 @@ type natConfig struct {
masqAddrCounts map[netip.Addr]int masqAddrCounts map[netip.Addr]int
} }
func (c *natConfig) String() string { func (c *peerConfig) String() string {
if c == nil { if c == nil {
return "natConfig(nil)" return "peerConfig(nil)"
} }
var b strings.Builder var b strings.Builder
b.WriteString("natConfig{") b.WriteString("peerConfig{")
fmt.Fprintf(&b, "nativeAddr4: %v, ", c.nativeAddr4) fmt.Fprintf(&b, "nativeAddr4: %v, ", c.nativeAddr4)
fmt.Fprintf(&b, "nativeAddr6: %v, ", c.nativeAddr6) fmt.Fprintf(&b, "nativeAddr6: %v, ", c.nativeAddr6)
fmt.Fprint(&b, "listenAddrs: [") fmt.Fprint(&b, "listenAddrs: [")
@ -610,7 +610,7 @@ func (c *natConfig) String() string {
// mapDstIP returns the destination IP to use for a packet to dst. // mapDstIP returns the destination IP to use for a packet to dst.
// If dst is not one of the listen addresses, it is returned as-is, // If dst is not one of the listen addresses, it is returned as-is,
// otherwise the native address is returned. // otherwise the native address is returned.
func (c *natConfig) mapDstIP(oldDst netip.Addr) netip.Addr { func (c *peerConfig) mapDstIP(oldDst netip.Addr) netip.Addr {
if c == nil { if c == nil {
return oldDst return oldDst
} }
@ -627,7 +627,7 @@ func (c *natConfig) mapDstIP(oldDst netip.Addr) netip.Addr {
// selectSrcIP returns the source IP to use for a packet to dst. // selectSrcIP returns the source IP to use for a packet to dst.
// If the packet is not from the native address, it is returned as-is. // If the packet is not from the native address, it is returned as-is.
func (c *natConfig) selectSrcIP(oldSrc, dst netip.Addr) netip.Addr { func (c *peerConfig) selectSrcIP(oldSrc, dst netip.Addr) netip.Addr {
if c == nil { if c == nil {
return oldSrc return oldSrc
} }
@ -644,9 +644,9 @@ func (c *natConfig) selectSrcIP(oldSrc, dst netip.Addr) netip.Addr {
return eip return eip
} }
// natConfigFromWGConfig generates a natConfig from nm. If NAT is not required, // peerConfigFromWGConfig generates a peerConfig from nm. If NAT is not required,
// it returns nil. // and no additional configuration is present, it returns nil.
func natConfigFromWGConfig(wcfg *wgcfg.Config) *natConfig { func peerConfigFromWGConfig(wcfg *wgcfg.Config) *peerConfig {
if wcfg == nil { if wcfg == nil {
return nil return nil
} }
@ -728,7 +728,7 @@ func natConfigFromWGConfig(wcfg *wgcfg.Config) *natConfig {
if len(listenAddrs) == 0 && len(masqAddrCounts) == 0 { if len(listenAddrs) == 0 && len(masqAddrCounts) == 0 {
return nil return nil
} }
return &natConfig{ return &peerConfig{
nativeAddr4: nativeAddr4, nativeAddr4: nativeAddr4,
nativeAddr6: nativeAddr6, nativeAddr6: nativeAddr6,
listenAddrs: views.MapOf(listenAddrs), listenAddrs: views.MapOf(listenAddrs),
@ -739,11 +739,11 @@ func natConfigFromWGConfig(wcfg *wgcfg.Config) *natConfig {
// SetNetMap is called when a new NetworkMap is received. // SetNetMap is called when a new NetworkMap is received.
func (t *Wrapper) SetWGConfig(wcfg *wgcfg.Config) { func (t *Wrapper) SetWGConfig(wcfg *wgcfg.Config) {
cfg := natConfigFromWGConfig(wcfg) cfg := peerConfigFromWGConfig(wcfg)
old := t.natConfig.Swap(cfg) old := t.peerConfig.Swap(cfg)
if !reflect.DeepEqual(old, cfg) { if !reflect.DeepEqual(old, cfg) {
t.logf("nat config: %v", cfg) t.logf("peer config: %v", cfg)
} }
} }

@ -602,8 +602,8 @@ func TestFilterDiscoLoop(t *testing.T) {
} }
// TODO(andrew-d): refactor this test to no longer use addrFam, after #11945 // TODO(andrew-d): refactor this test to no longer use addrFam, after #11945
// removed it in natConfigFromWGConfig // removed it in peerConfigFromWGConfig
func TestNATCfg(t *testing.T) { func TestPeerCfg_NAT(t *testing.T) {
node := func(ip, masqIP netip.Addr, otherAllowedIPs ...netip.Prefix) wgcfg.Peer { node := func(ip, masqIP netip.Addr, otherAllowedIPs ...netip.Prefix) wgcfg.Peer {
p := wgcfg.Peer{ p := wgcfg.Peer{
PublicKey: key.NewNode().Public(), PublicKey: key.NewNode().Public(),
@ -802,19 +802,19 @@ func TestNATCfg(t *testing.T) {
for _, tc := range tests { for _, tc := range tests {
t.Run(fmt.Sprintf("%v/%v", addrFam, tc.name), func(t *testing.T) { t.Run(fmt.Sprintf("%v/%v", addrFam, tc.name), func(t *testing.T) {
ncfg := natConfigFromWGConfig(tc.wcfg) pcfg := peerConfigFromWGConfig(tc.wcfg)
for peer, want := range tc.snatMap { for peer, want := range tc.snatMap {
if got := ncfg.selectSrcIP(selfNativeIP, peer); got != want { if got := pcfg.selectSrcIP(selfNativeIP, peer); got != want {
t.Errorf("selectSrcIP[%v]: got %v; want %v", peer, got, want) t.Errorf("selectSrcIP[%v]: got %v; want %v", peer, got, want)
} }
} }
for dstIP, want := range tc.dnatMap { for dstIP, want := range tc.dnatMap {
if got := ncfg.mapDstIP(dstIP); got != want { if got := pcfg.mapDstIP(dstIP); got != want {
t.Errorf("mapDstIP[%v]: got %v; want %v", dstIP, got, want) t.Errorf("mapDstIP[%v]: got %v; want %v", dstIP, got, want)
} }
} }
if t.Failed() { if t.Failed() {
t.Logf("%v", ncfg) t.Logf("%v", pcfg)
} }
}) })
} }

Loading…
Cancel
Save