ipv4: add support for FreeBSD 11

From FreeBSD 11 both ip_len and ip_off fields of struct ip must be
provided in network byte order. See IP(4) on FreeBSD.

Change-Id: I091b551074767daf098cc1d6a256eddc4f55e304
Reviewed-on: https://go-review.googlesource.com/30736
Run-TryBot: Mikio Hara <mikioh.mikioh@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
diff --git a/ipv4/header_test.go b/ipv4/header_test.go
index 85cb9c4..4e57139 100644
--- a/ipv4/header_test.go
+++ b/ipv4/header_test.go
@@ -18,8 +18,9 @@
 	wireHeaderFromKernel          [HeaderLen]byte
 	wireHeaderToKernel            [HeaderLen]byte
 	wireHeaderFromTradBSDKernel   [HeaderLen]byte
-	wireHeaderFromFreeBSD10Kernel [HeaderLen]byte
 	wireHeaderToTradBSDKernel     [HeaderLen]byte
+	wireHeaderFromFreeBSD10Kernel [HeaderLen]byte
+	wireHeaderToFreeBSD10Kernel   [HeaderLen]byte
 	*Header
 }
 
@@ -47,6 +48,13 @@
 		172, 16, 254, 254,
 		192, 168, 0, 1,
 	},
+	wireHeaderToTradBSDKernel: [HeaderLen]byte{
+		0x45, 0x01, 0xef, 0xbe,
+		0xca, 0xfe, 0xdc, 0x45,
+		0xff, 0x01, 0xde, 0xad,
+		172, 16, 254, 254,
+		192, 168, 0, 1,
+	},
 	wireHeaderFromFreeBSD10Kernel: [HeaderLen]byte{
 		0x45, 0x01, 0xef, 0xbe,
 		0xca, 0xfe, 0xdc, 0x45,
@@ -54,7 +62,7 @@
 		172, 16, 254, 254,
 		192, 168, 0, 1,
 	},
-	wireHeaderToTradBSDKernel: [HeaderLen]byte{
+	wireHeaderToFreeBSD10Kernel: [HeaderLen]byte{
 		0x45, 0x01, 0xef, 0xbe,
 		0xca, 0xfe, 0xdc, 0x45,
 		0xff, 0x01, 0xde, 0xad,
@@ -92,10 +100,13 @@
 	case "darwin", "dragonfly", "netbsd":
 		wh = tt.wireHeaderToTradBSDKernel[:]
 	case "freebsd":
-		if freebsdVersion < 1000000 {
+		switch {
+		case freebsdVersion < 1000000:
 			wh = tt.wireHeaderToTradBSDKernel[:]
-		} else {
-			wh = tt.wireHeaderFromFreeBSD10Kernel[:]
+		case 1000000 <= freebsdVersion && freebsdVersion < 1100000:
+			wh = tt.wireHeaderToFreeBSD10Kernel[:]
+		default:
+			wh = tt.wireHeaderToKernel[:]
 		}
 	default:
 		wh = tt.wireHeaderToKernel[:]
@@ -116,10 +127,13 @@
 	case "darwin", "dragonfly", "netbsd":
 		wh = tt.wireHeaderFromTradBSDKernel[:]
 	case "freebsd":
-		if freebsdVersion < 1000000 {
+		switch {
+		case freebsdVersion < 1000000:
 			wh = tt.wireHeaderFromTradBSDKernel[:]
-		} else {
+		case 1000000 <= freebsdVersion && freebsdVersion < 1100000:
 			wh = tt.wireHeaderFromFreeBSD10Kernel[:]
+		default:
+			wh = tt.wireHeaderFromKernel[:]
 		}
 	default:
 		wh = tt.wireHeaderFromKernel[:]