x/net/ipv4: fix freebsd/{386,arm}, linux/{386,arm} build

LGTM=iant
R=iant
CC=golang-codereviews
https://golang.org/cl/172360043
diff --git a/ipv4/defs_linux.go b/ipv4/defs_linux.go
index 2e473ab..2d36d6c 100644
--- a/ipv4/defs_linux.go
+++ b/ipv4/defs_linux.go
@@ -57,12 +57,12 @@
 	sysMCAST_MSFILTER            = C.MCAST_MSFILTER
 	sysIP_MULTICAST_ALL          = C.IP_MULTICAST_ALL
 
-	sysIP_PMTUDISC_DONT      = C.IP_PMTUDISC_DONT
-	sysIP_PMTUDISC_WANT      = C.IP_PMTUDISC_WANT
-	sysIP_PMTUDISC_DO        = C.IP_PMTUDISC_DO
-	sysIP_PMTUDISC_PROBE     = C.IP_PMTUDISC_PROBE
-	sysIP_PMTUDISC_INTERFACE = C.IP_PMTUDISC_INTERFACE
-	sysIP_PMTUDISC_OMIT      = C.IP_PMTUDISC_OMIT
+	//sysIP_PMTUDISC_DONT      = C.IP_PMTUDISC_DONT
+	//sysIP_PMTUDISC_WANT      = C.IP_PMTUDISC_WANT
+	//sysIP_PMTUDISC_DO        = C.IP_PMTUDISC_DO
+	//sysIP_PMTUDISC_PROBE     = C.IP_PMTUDISC_PROBE
+	//sysIP_PMTUDISC_INTERFACE = C.IP_PMTUDISC_INTERFACE
+	//sysIP_PMTUDISC_OMIT      = C.IP_PMTUDISC_OMIT
 
 	sysSO_EE_ORIGIN_NONE         = C.SO_EE_ORIGIN_NONE
 	sysSO_EE_ORIGIN_LOCAL        = C.SO_EE_ORIGIN_LOCAL
diff --git a/ipv4/gen.go b/ipv4/gen.go
index a1d65ef..09dcd03 100644
--- a/ipv4/gen.go
+++ b/ipv4/gen.go
@@ -63,7 +63,12 @@
 	if err != nil {
 		return err
 	}
-	if err := ioutil.WriteFile("zsys_"+runtime.GOOS+".go", b, 0644); err != nil {
+	zsys := "zsys_" + runtime.GOOS + ".go"
+	switch runtime.GOOS {
+	case "freebsd", "linux":
+		zsys = "zsys_" + runtime.GOOS + "_" + runtime.GOARCH + ".go"
+	}
+	if err := ioutil.WriteFile(zsys, b, 0644); err != nil {
 		return err
 	}
 	return nil
diff --git a/ipv4/zsys_freebsd_386.go b/ipv4/zsys_freebsd_386.go
new file mode 100644
index 0000000..6fd67e1
--- /dev/null
+++ b/ipv4/zsys_freebsd_386.go
@@ -0,0 +1,93 @@
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs defs_freebsd.go
+
+package ipv4
+
+const (
+	sysIP_OPTIONS     = 0x1
+	sysIP_HDRINCL     = 0x2
+	sysIP_TOS         = 0x3
+	sysIP_TTL         = 0x4
+	sysIP_RECVOPTS    = 0x5
+	sysIP_RECVRETOPTS = 0x6
+	sysIP_RECVDSTADDR = 0x7
+	sysIP_SENDSRCADDR = 0x7
+	sysIP_RETOPTS     = 0x8
+	sysIP_RECVIF      = 0x14
+	sysIP_ONESBCAST   = 0x17
+	sysIP_BINDANY     = 0x18
+	sysIP_RECVTTL     = 0x41
+	sysIP_MINTTL      = 0x42
+	sysIP_DONTFRAG    = 0x43
+	sysIP_RECVTOS     = 0x44
+
+	sysIP_MULTICAST_IF           = 0x9
+	sysIP_MULTICAST_TTL          = 0xa
+	sysIP_MULTICAST_LOOP         = 0xb
+	sysIP_ADD_MEMBERSHIP         = 0xc
+	sysIP_DROP_MEMBERSHIP        = 0xd
+	sysIP_MULTICAST_VIF          = 0xe
+	sysIP_ADD_SOURCE_MEMBERSHIP  = 0x46
+	sysIP_DROP_SOURCE_MEMBERSHIP = 0x47
+	sysIP_BLOCK_SOURCE           = 0x48
+	sysIP_UNBLOCK_SOURCE         = 0x49
+	sysMCAST_JOIN_GROUP          = 0x50
+	sysMCAST_LEAVE_GROUP         = 0x51
+	sysMCAST_JOIN_SOURCE_GROUP   = 0x52
+	sysMCAST_LEAVE_SOURCE_GROUP  = 0x53
+	sysMCAST_BLOCK_SOURCE        = 0x54
+	sysMCAST_UNBLOCK_SOURCE      = 0x55
+
+	sysSizeofSockaddrStorage = 0x80
+	sysSizeofSockaddrInet    = 0x10
+
+	sysSizeofIPMreq         = 0x8
+	sysSizeofIPMreqn        = 0xc
+	sysSizeofIPMreqSource   = 0xc
+	sysSizeofGroupReq       = 0x84
+	sysSizeofGroupSourceReq = 0x104
+)
+
+type sysSockaddrStorage struct {
+	Len         uint8
+	Family      uint8
+	X__ss_pad1  [6]int8
+	X__ss_align int64
+	X__ss_pad2  [112]int8
+}
+
+type sysSockaddrInet struct {
+	Len    uint8
+	Family uint8
+	Port   uint16
+	Addr   [4]byte /* in_addr */
+	Zero   [8]int8
+}
+
+type sysIPMreq struct {
+	Multiaddr [4]byte /* in_addr */
+	Interface [4]byte /* in_addr */
+}
+
+type sysIPMreqn struct {
+	Multiaddr [4]byte /* in_addr */
+	Address   [4]byte /* in_addr */
+	Ifindex   int32
+}
+
+type sysIPMreqSource struct {
+	Multiaddr  [4]byte /* in_addr */
+	Sourceaddr [4]byte /* in_addr */
+	Interface  [4]byte /* in_addr */
+}
+
+type sysGroupReq struct {
+	Interface uint32
+	Group     sysSockaddrStorage
+}
+
+type sysGroupSourceReq struct {
+	Interface uint32
+	Group     sysSockaddrStorage
+	Source    sysSockaddrStorage
+}
diff --git a/ipv4/zsys_freebsd.go b/ipv4/zsys_freebsd_amd64.go
similarity index 100%
rename from ipv4/zsys_freebsd.go
rename to ipv4/zsys_freebsd_amd64.go
diff --git a/ipv4/zsys_freebsd_arm.go b/ipv4/zsys_freebsd_arm.go
new file mode 100644
index 0000000..6fd67e1
--- /dev/null
+++ b/ipv4/zsys_freebsd_arm.go
@@ -0,0 +1,93 @@
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs defs_freebsd.go
+
+package ipv4
+
+const (
+	sysIP_OPTIONS     = 0x1
+	sysIP_HDRINCL     = 0x2
+	sysIP_TOS         = 0x3
+	sysIP_TTL         = 0x4
+	sysIP_RECVOPTS    = 0x5
+	sysIP_RECVRETOPTS = 0x6
+	sysIP_RECVDSTADDR = 0x7
+	sysIP_SENDSRCADDR = 0x7
+	sysIP_RETOPTS     = 0x8
+	sysIP_RECVIF      = 0x14
+	sysIP_ONESBCAST   = 0x17
+	sysIP_BINDANY     = 0x18
+	sysIP_RECVTTL     = 0x41
+	sysIP_MINTTL      = 0x42
+	sysIP_DONTFRAG    = 0x43
+	sysIP_RECVTOS     = 0x44
+
+	sysIP_MULTICAST_IF           = 0x9
+	sysIP_MULTICAST_TTL          = 0xa
+	sysIP_MULTICAST_LOOP         = 0xb
+	sysIP_ADD_MEMBERSHIP         = 0xc
+	sysIP_DROP_MEMBERSHIP        = 0xd
+	sysIP_MULTICAST_VIF          = 0xe
+	sysIP_ADD_SOURCE_MEMBERSHIP  = 0x46
+	sysIP_DROP_SOURCE_MEMBERSHIP = 0x47
+	sysIP_BLOCK_SOURCE           = 0x48
+	sysIP_UNBLOCK_SOURCE         = 0x49
+	sysMCAST_JOIN_GROUP          = 0x50
+	sysMCAST_LEAVE_GROUP         = 0x51
+	sysMCAST_JOIN_SOURCE_GROUP   = 0x52
+	sysMCAST_LEAVE_SOURCE_GROUP  = 0x53
+	sysMCAST_BLOCK_SOURCE        = 0x54
+	sysMCAST_UNBLOCK_SOURCE      = 0x55
+
+	sysSizeofSockaddrStorage = 0x80
+	sysSizeofSockaddrInet    = 0x10
+
+	sysSizeofIPMreq         = 0x8
+	sysSizeofIPMreqn        = 0xc
+	sysSizeofIPMreqSource   = 0xc
+	sysSizeofGroupReq       = 0x84
+	sysSizeofGroupSourceReq = 0x104
+)
+
+type sysSockaddrStorage struct {
+	Len         uint8
+	Family      uint8
+	X__ss_pad1  [6]int8
+	X__ss_align int64
+	X__ss_pad2  [112]int8
+}
+
+type sysSockaddrInet struct {
+	Len    uint8
+	Family uint8
+	Port   uint16
+	Addr   [4]byte /* in_addr */
+	Zero   [8]int8
+}
+
+type sysIPMreq struct {
+	Multiaddr [4]byte /* in_addr */
+	Interface [4]byte /* in_addr */
+}
+
+type sysIPMreqn struct {
+	Multiaddr [4]byte /* in_addr */
+	Address   [4]byte /* in_addr */
+	Ifindex   int32
+}
+
+type sysIPMreqSource struct {
+	Multiaddr  [4]byte /* in_addr */
+	Sourceaddr [4]byte /* in_addr */
+	Interface  [4]byte /* in_addr */
+}
+
+type sysGroupReq struct {
+	Interface uint32
+	Group     sysSockaddrStorage
+}
+
+type sysGroupSourceReq struct {
+	Interface uint32
+	Group     sysSockaddrStorage
+	Source    sysSockaddrStorage
+}
diff --git a/ipv4/zsys_linux.go b/ipv4/zsys_linux_386.go
similarity index 90%
copy from ipv4/zsys_linux.go
copy to ipv4/zsys_linux_386.go
index b938ef9..070e3a6 100644
--- a/ipv4/zsys_linux.go
+++ b/ipv4/zsys_linux_386.go
@@ -46,13 +46,6 @@
 	sysMCAST_MSFILTER            = 0x30
 	sysIP_MULTICAST_ALL          = 0x31
 
-	sysIP_PMTUDISC_DONT      = 0x0
-	sysIP_PMTUDISC_WANT      = 0x1
-	sysIP_PMTUDISC_DO        = 0x2
-	sysIP_PMTUDISC_PROBE     = 0x3
-	sysIP_PMTUDISC_INTERFACE = 0x4
-	sysIP_PMTUDISC_OMIT      = 0x5
-
 	sysSO_EE_ORIGIN_NONE         = 0x0
 	sysSO_EE_ORIGIN_LOCAL        = 0x1
 	sysSO_EE_ORIGIN_ICMP         = 0x2
@@ -68,8 +61,8 @@
 	sysSizeofIPMreq         = 0x8
 	sysSizeofIPMreqn        = 0xc
 	sysSizeofIPMreqSource   = 0xc
-	sysSizeofGroupReq       = 0x88
-	sysSizeofGroupSourceReq = 0x108
+	sysSizeofGroupReq       = 0x84
+	sysSizeofGroupSourceReq = 0x104
 )
 
 type sysKernelSockaddrStorage struct {
@@ -119,13 +112,11 @@
 
 type sysGroupReq struct {
 	Interface uint32
-	Pad_cgo_0 [4]byte
 	Group     sysKernelSockaddrStorage
 }
 
 type sysGroupSourceReq struct {
 	Interface uint32
-	Pad_cgo_0 [4]byte
 	Group     sysKernelSockaddrStorage
 	Source    sysKernelSockaddrStorage
 }
diff --git a/ipv4/zsys_linux.go b/ipv4/zsys_linux_amd64.go
similarity index 93%
rename from ipv4/zsys_linux.go
rename to ipv4/zsys_linux_amd64.go
index b938ef9..122a96d 100644
--- a/ipv4/zsys_linux.go
+++ b/ipv4/zsys_linux_amd64.go
@@ -46,13 +46,6 @@
 	sysMCAST_MSFILTER            = 0x30
 	sysIP_MULTICAST_ALL          = 0x31
 
-	sysIP_PMTUDISC_DONT      = 0x0
-	sysIP_PMTUDISC_WANT      = 0x1
-	sysIP_PMTUDISC_DO        = 0x2
-	sysIP_PMTUDISC_PROBE     = 0x3
-	sysIP_PMTUDISC_INTERFACE = 0x4
-	sysIP_PMTUDISC_OMIT      = 0x5
-
 	sysSO_EE_ORIGIN_NONE         = 0x0
 	sysSO_EE_ORIGIN_LOCAL        = 0x1
 	sysSO_EE_ORIGIN_ICMP         = 0x2
diff --git a/ipv4/zsys_linux.go b/ipv4/zsys_linux_arm.go
similarity index 90%
copy from ipv4/zsys_linux.go
copy to ipv4/zsys_linux_arm.go
index b938ef9..070e3a6 100644
--- a/ipv4/zsys_linux.go
+++ b/ipv4/zsys_linux_arm.go
@@ -46,13 +46,6 @@
 	sysMCAST_MSFILTER            = 0x30
 	sysIP_MULTICAST_ALL          = 0x31
 
-	sysIP_PMTUDISC_DONT      = 0x0
-	sysIP_PMTUDISC_WANT      = 0x1
-	sysIP_PMTUDISC_DO        = 0x2
-	sysIP_PMTUDISC_PROBE     = 0x3
-	sysIP_PMTUDISC_INTERFACE = 0x4
-	sysIP_PMTUDISC_OMIT      = 0x5
-
 	sysSO_EE_ORIGIN_NONE         = 0x0
 	sysSO_EE_ORIGIN_LOCAL        = 0x1
 	sysSO_EE_ORIGIN_ICMP         = 0x2
@@ -68,8 +61,8 @@
 	sysSizeofIPMreq         = 0x8
 	sysSizeofIPMreqn        = 0xc
 	sysSizeofIPMreqSource   = 0xc
-	sysSizeofGroupReq       = 0x88
-	sysSizeofGroupSourceReq = 0x108
+	sysSizeofGroupReq       = 0x84
+	sysSizeofGroupSourceReq = 0x104
 )
 
 type sysKernelSockaddrStorage struct {
@@ -119,13 +112,11 @@
 
 type sysGroupReq struct {
 	Interface uint32
-	Pad_cgo_0 [4]byte
 	Group     sysKernelSockaddrStorage
 }
 
 type sysGroupSourceReq struct {
 	Interface uint32
-	Pad_cgo_0 [4]byte
 	Group     sysKernelSockaddrStorage
 	Source    sysKernelSockaddrStorage
 }