|
@@ -9,9 +9,14 @@ import (
|
|
|
"net"
|
|
"net"
|
|
|
"runtime"
|
|
"runtime"
|
|
|
|
|
|
|
|
|
|
+ "golang.org/x/net/internal/socket"
|
|
|
"golang.org/x/net/ipv4"
|
|
"golang.org/x/net/ipv4"
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
|
|
+// freebsdVersion is set in sys_freebsd.go.
|
|
|
|
|
+// See http://www.freebsd.org/doc/en/books/porters-handbook/freebsd-versions.html.
|
|
|
|
|
+var freebsdVersion uint32
|
|
|
|
|
+
|
|
|
// ParseIPv4Header parses b as an IPv4 header of ICMP error message
|
|
// ParseIPv4Header parses b as an IPv4 header of ICMP error message
|
|
|
// invoking packet, which is contained in ICMP error message.
|
|
// invoking packet, which is contained in ICMP error message.
|
|
|
func ParseIPv4Header(b []byte) (*ipv4.Header, error) {
|
|
func ParseIPv4Header(b []byte) (*ipv4.Header, error) {
|
|
@@ -36,12 +41,12 @@ func ParseIPv4Header(b []byte) (*ipv4.Header, error) {
|
|
|
}
|
|
}
|
|
|
switch runtime.GOOS {
|
|
switch runtime.GOOS {
|
|
|
case "darwin":
|
|
case "darwin":
|
|
|
- h.TotalLen = int(nativeEndian.Uint16(b[2:4]))
|
|
|
|
|
|
|
+ h.TotalLen = int(socket.NativeEndian.Uint16(b[2:4]))
|
|
|
case "freebsd":
|
|
case "freebsd":
|
|
|
if freebsdVersion >= 1000000 {
|
|
if freebsdVersion >= 1000000 {
|
|
|
h.TotalLen = int(binary.BigEndian.Uint16(b[2:4]))
|
|
h.TotalLen = int(binary.BigEndian.Uint16(b[2:4]))
|
|
|
} else {
|
|
} else {
|
|
|
- h.TotalLen = int(nativeEndian.Uint16(b[2:4]))
|
|
|
|
|
|
|
+ h.TotalLen = int(socket.NativeEndian.Uint16(b[2:4]))
|
|
|
}
|
|
}
|
|
|
default:
|
|
default:
|
|
|
h.TotalLen = int(binary.BigEndian.Uint16(b[2:4]))
|
|
h.TotalLen = int(binary.BigEndian.Uint16(b[2:4]))
|