unix: add IPMreqn and {Get,Set}sockoptIPMreqn on darwin
Change-Id: Id145cc8d86b71ff3ef603b5d0aae4bdd0e4c3f2b
Reviewed-on: https://go-review.googlesource.com/c/sys/+/312410
Trust: Tobias Klauser <tobias.klauser@gmail.com>
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
diff --git a/unix/syscall_darwin.go b/unix/syscall_darwin.go
index 1223d7a..9945e5f 100644
--- a/unix/syscall_darwin.go
+++ b/unix/syscall_darwin.go
@@ -378,6 +378,17 @@
return
}
+func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) {
+ var value IPMreqn
+ vallen := _Socklen(SizeofIPMreqn)
+ errno := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
+ return &value, errno
+}
+
+func SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) {
+ return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq))
+}
+
// GetsockoptXucred is a getsockopt wrapper that returns an Xucred struct.
// The usual level and opt are SOL_LOCAL and LOCAL_PEERCRED, respectively.
func GetsockoptXucred(fd, level, opt int) (*Xucred, error) {
diff --git a/unix/types_darwin.go b/unix/types_darwin.go
index 81f8875..e65c0de 100644
--- a/unix/types_darwin.go
+++ b/unix/types_darwin.go
@@ -160,6 +160,8 @@
type IPMreq C.struct_ip_mreq
+type IPMreqn C.struct_ip_mreqn
+
type IPv6Mreq C.struct_ipv6_mreq
type Msghdr C.struct_msghdr
@@ -185,6 +187,7 @@
SizeofLinger = C.sizeof_struct_linger
SizeofIovec = C.sizeof_struct_iovec
SizeofIPMreq = C.sizeof_struct_ip_mreq
+ SizeofIPMreqn = C.sizeof_struct_ip_mreqn
SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
SizeofMsghdr = C.sizeof_struct_msghdr
SizeofCmsghdr = C.sizeof_struct_cmsghdr
diff --git a/unix/ztypes_darwin_386.go b/unix/ztypes_darwin_386.go
index 54db433..883b64a 100644
--- a/unix/ztypes_darwin_386.go
+++ b/unix/ztypes_darwin_386.go
@@ -221,6 +221,12 @@
Interface [4]byte /* in_addr */
}
+type IPMreqn struct {
+ Multiaddr [4]byte /* in_addr */
+ Address [4]byte /* in_addr */
+ Ifindex int32
+}
+
type IPv6Mreq struct {
Multiaddr [16]byte /* in6_addr */
Interface uint32
@@ -272,6 +278,7 @@
SizeofLinger = 0x8
SizeofIovec = 0x8
SizeofIPMreq = 0x8
+ SizeofIPMreqn = 0xc
SizeofIPv6Mreq = 0x14
SizeofMsghdr = 0x1c
SizeofCmsghdr = 0xc
diff --git a/unix/ztypes_darwin_amd64.go b/unix/ztypes_darwin_amd64.go
index eb73e52..2673e6c 100644
--- a/unix/ztypes_darwin_amd64.go
+++ b/unix/ztypes_darwin_amd64.go
@@ -233,6 +233,12 @@
Interface [4]byte /* in_addr */
}
+type IPMreqn struct {
+ Multiaddr [4]byte /* in_addr */
+ Address [4]byte /* in_addr */
+ Ifindex int32
+}
+
type IPv6Mreq struct {
Multiaddr [16]byte /* in6_addr */
Interface uint32
@@ -285,6 +291,7 @@
SizeofLinger = 0x8
SizeofIovec = 0x10
SizeofIPMreq = 0x8
+ SizeofIPMreqn = 0xc
SizeofIPv6Mreq = 0x14
SizeofMsghdr = 0x30
SizeofCmsghdr = 0xc
diff --git a/unix/ztypes_darwin_arm.go b/unix/ztypes_darwin_arm.go
index 8606d65..eef5133 100644
--- a/unix/ztypes_darwin_arm.go
+++ b/unix/ztypes_darwin_arm.go
@@ -221,6 +221,12 @@
Interface [4]byte /* in_addr */
}
+type IPMreqn struct {
+ Multiaddr [4]byte /* in_addr */
+ Address [4]byte /* in_addr */
+ Ifindex int32
+}
+
type IPv6Mreq struct {
Multiaddr [16]byte /* in6_addr */
Interface uint32
@@ -272,6 +278,7 @@
SizeofLinger = 0x8
SizeofIovec = 0x8
SizeofIPMreq = 0x8
+ SizeofIPMreqn = 0xc
SizeofIPv6Mreq = 0x14
SizeofMsghdr = 0x1c
SizeofCmsghdr = 0xc
diff --git a/unix/ztypes_darwin_arm64.go b/unix/ztypes_darwin_arm64.go
index dcb51f8..1465cbc 100644
--- a/unix/ztypes_darwin_arm64.go
+++ b/unix/ztypes_darwin_arm64.go
@@ -233,6 +233,12 @@
Interface [4]byte /* in_addr */
}
+type IPMreqn struct {
+ Multiaddr [4]byte /* in_addr */
+ Address [4]byte /* in_addr */
+ Ifindex int32
+}
+
type IPv6Mreq struct {
Multiaddr [16]byte /* in6_addr */
Interface uint32
@@ -285,6 +291,7 @@
SizeofLinger = 0x8
SizeofIovec = 0x10
SizeofIPMreq = 0x8
+ SizeofIPMreqn = 0xc
SizeofIPv6Mreq = 0x14
SizeofMsghdr = 0x30
SizeofCmsghdr = 0xc