diff --git a/net/packet/ip4.go b/net/packet/ip4.go index 5fa8b5064..e71674b84 100644 --- a/net/packet/ip4.go +++ b/net/packet/ip4.go @@ -7,7 +7,6 @@ package packet import ( "encoding/binary" "fmt" - "net" "inet.af/netaddr" ) @@ -15,17 +14,7 @@ import ( // IP4 is an IPv4 address. type IP4 uint32 -// NewIP converts a standard library IP address into an IP. -// It panics if b is not an IPv4 address. -func NewIP4(b net.IP) IP4 { - b4 := b.To4() - if b4 == nil { - panic(fmt.Sprintf("To4(%v) failed", b)) - } - return IP4(binary.BigEndian.Uint32(b4)) -} - -// IPFromNetaddr converts a netaddr.IP to an IP. +// IPFromNetaddr converts a netaddr.IP to an IP. Panics if !ip.Is4. func IP4FromNetaddr(ip netaddr.IP) IP4 { ipbytes := ip.As4() return IP4(binary.BigEndian.Uint32(ipbytes[:])) diff --git a/net/packet/packet_test.go b/net/packet/packet_test.go index 6378d38d9..951b9605a 100644 --- a/net/packet/packet_test.go +++ b/net/packet/packet_test.go @@ -6,7 +6,6 @@ package packet import ( "bytes" - "net" "reflect" "testing" @@ -31,7 +30,7 @@ func mustIP6(s string) IP6 { func TestIP4String(t *testing.T) { const str = "1.2.3.4" - ip := NewIP4(net.ParseIP(str)) + ip := mustIP4(str) var got string allocs := testing.AllocsPerRun(1000, func() { diff --git a/wgengine/filter/filter_test.go b/wgengine/filter/filter_test.go index 6c5682b79..7466cdef5 100644 --- a/wgengine/filter/filter_test.go +++ b/wgengine/filter/filter_test.go @@ -9,7 +9,6 @@ import ( "encoding/hex" "encoding/json" "fmt" - "net" "strconv" "strings" "testing" @@ -25,6 +24,14 @@ var TCP = packet.TCP var UDP = packet.UDP var Fragment = packet.Fragment +func mustIP4(s string) packet.IP4 { + ip, err := netaddr.ParseIP(s) + if err != nil { + panic(err) + } + return packet.IP4FromNetaddr(ip) +} + func pfx(s string) netaddr.IPPrefix { pfx, err := netaddr.ParseIPPrefix(s) if err != nil { @@ -435,19 +442,19 @@ func TestOmitDropLogging(t *testing.T) { }, { name: "v4_multicast_out_low", - pkt: &packet.Parsed{IPVersion: 4, DstIP4: packet.NewIP4(net.ParseIP("224.0.0.0"))}, + pkt: &packet.Parsed{IPVersion: 4, DstIP4: mustIP4("224.0.0.0")}, dir: out, want: true, }, { name: "v4_multicast_out_high", - pkt: &packet.Parsed{IPVersion: 4, DstIP4: packet.NewIP4(net.ParseIP("239.255.255.255"))}, + pkt: &packet.Parsed{IPVersion: 4, DstIP4: mustIP4("239.255.255.255")}, dir: out, want: true, }, { name: "v4_link_local_unicast", - pkt: &packet.Parsed{IPVersion: 4, DstIP4: packet.NewIP4(net.ParseIP("169.254.1.2"))}, + pkt: &packet.Parsed{IPVersion: 4, DstIP4: mustIP4("169.254.1.2")}, dir: out, want: true, }, diff --git a/wgengine/userspace.go b/wgengine/userspace.go index 564c24b43..2b4ff7db8 100644 --- a/wgengine/userspace.go +++ b/wgengine/userspace.go @@ -515,7 +515,7 @@ func (p *pinger) run(ctx context.Context, peerKey wgcfg.Key, ips []wgcfg.IP, src start := time.Now() var dstIPs []packet.IP4 for _, ip := range ips { - dstIPs = append(dstIPs, packet.NewIP4(ip.IP())) + dstIPs = append(dstIPs, packet.IP4FromNetaddr(netaddr.IPFrom16(ip.Addr))) } payload := []byte("magicsock_spray") // no meaning @@ -555,7 +555,7 @@ func (e *userspaceEngine) pinger(peerKey wgcfg.Key, ips []wgcfg.IP) { e.wgLock.Lock() if len(e.lastCfgFull.Addresses) > 0 { - srcIP = packet.NewIP4(e.lastCfgFull.Addresses[0].IP.IP()) + srcIP = packet.IP4FromNetaddr(netaddr.IPFrom16(e.lastCfgFull.Addresses[0].IP.Addr)) } e.wgLock.Unlock()