diff --git a/ping/internal/conn/conn_unix.go b/ping/internal/conn/conn_unix.go index 20762b7..f8e5b80 100644 --- a/ping/internal/conn/conn_unix.go +++ b/ping/internal/conn/conn_unix.go @@ -3,9 +3,6 @@ package conn import ( - "net" - "time" - "golang.org/x/net/ipv4" "golang.org/x/net/ipv6" ) @@ -34,41 +31,3 @@ func setupV6Conn(c *ipv6.PacketConn) error { err = c.SetICMPFilter(&f) return err } - -func readV4(c *ipv4.PacketConn, len int) ( - payload []byte, - srcAddr net.Addr, - src, dst net.IP, - rlen, ttl int, - received time.Time, - err error, -) { - payload = make([]byte, len) - var cm *ipv4.ControlMessage - rlen, cm, srcAddr, err = c.ReadFrom(payload) - received = time.Now() - if cm == nil { - return - } - src, dst, ttl = cm.Src, cm.Dst, cm.TTL - return -} - -func readV6(c *ipv6.PacketConn, len int) ( - payload []byte, - srcAddr net.Addr, - src, dst net.IP, - rlen, ttl int, - received time.Time, - err error, -) { - payload = make([]byte, len) - var cm *ipv6.ControlMessage - rlen, cm, srcAddr, err = c.ReadFrom(payload) - received = time.Now() - if cm == nil { - return - } - src, dst, ttl = cm.Src, cm.Dst, cm.HopLimit - return -} diff --git a/ping/internal/conn/conn_windows.go b/ping/internal/conn/conn_windows.go new file mode 100644 index 0000000..d5ea693 --- /dev/null +++ b/ping/internal/conn/conn_windows.go @@ -0,0 +1,15 @@ +// see https://github.com/golang/net/blob/master/ipv4/control_windows.go#L14 +package conn + +import ( + "golang.org/x/net/ipv4" + "golang.org/x/net/ipv6" +) + +func setupV4Conn(c *ipv4.PacketConn) error { + return nil +} + +func setupV6Conn(c *ipv6.PacketConn) error { + return nil +} diff --git a/ping/internal/conn/read.go b/ping/internal/conn/read.go new file mode 100644 index 0000000..55a8bda --- /dev/null +++ b/ping/internal/conn/read.go @@ -0,0 +1,57 @@ +package conn + +import ( + "net" + "time" + + "golang.org/x/net/ipv4" + "golang.org/x/net/ipv6" +) + +func readV4(c *ipv4.PacketConn, len int) ( + payload []byte, + srcAddr net.Addr, + src, dst net.IP, + rlen, ttl int, + received time.Time, + err error, +) { + payload = make([]byte, len) + var cm *ipv4.ControlMessage + rlen, cm, srcAddr, err = c.ReadFrom(payload) + received = time.Now() + if cm != nil { + src, dst, ttl = cm.Src, cm.Dst, cm.TTL + } + if src == nil { + src = net.IPv4zero + } + if dst == nil { + dst = net.IPv4zero + } + return +} + +func readV6(c *ipv6.PacketConn, len int) ( + payload []byte, + srcAddr net.Addr, + src, dst net.IP, + rlen, ttl int, + received time.Time, + err error, +) { + payload = make([]byte, len) + var cm *ipv6.ControlMessage + rlen, cm, srcAddr, err = c.ReadFrom(payload) + received = time.Now() + if cm != nil { + src, dst, ttl = cm.Src, cm.Dst, cm.HopLimit + } + if src == nil { + src = net.IPv6zero + } + if dst == nil { + dst = net.IPv6zero + } + return +}