]> Cypherpunks repositories - gostls13.git/commitdiff
syscall: update multicast socket options for darwin, freebsd, linux, openbsd
authorMikio Hara <mikioh.mikioh@gmail.com>
Sat, 1 Oct 2011 09:45:06 +0000 (18:45 +0900)
committerMikio Hara <mikioh.mikioh@gmail.com>
Sat, 1 Oct 2011 09:45:06 +0000 (18:45 +0900)
R=golang-dev, dave
CC=golang-dev
https://golang.org/cl/5137042

src/pkg/syscall/syscall_bsd.go
src/pkg/syscall/syscall_freebsd.go
src/pkg/syscall/syscall_linux.go
src/pkg/syscall/types_freebsd.c
src/pkg/syscall/types_linux.c
src/pkg/syscall/ztypes_freebsd_386.go
src/pkg/syscall/ztypes_freebsd_amd64.go
src/pkg/syscall/ztypes_linux_386.go
src/pkg/syscall/ztypes_linux_amd64.go
src/pkg/syscall/ztypes_linux_arm.go

index 57d15ff4a63b8067e632cc1b89bfbf4ce7ddc0f1..a90a4175d16581620cfb63584944364bd707f15a 100644 (file)
@@ -377,6 +377,26 @@ func GetsockoptInt(fd, level, opt int) (value, errno int) {
        return int(n), errno
 }
 
+func GetsockoptInet4Addr(fd, level, opt int) (value [4]byte, errno int) {
+       vallen := _Socklen(4)
+       errno = getsockopt(fd, level, opt, uintptr(unsafe.Pointer(&value[0])), &vallen)
+       return value, errno
+}
+
+func GetsockoptIPMreq(fd, level, opt int) (*IPMreq, int) {
+       var value IPMreq
+       vallen := _Socklen(SizeofIPMreq)
+       errno := getsockopt(fd, level, opt, uintptr(unsafe.Pointer(&value)), &vallen)
+       return &value, errno
+}
+
+func GetsockoptIPv6Mreq(fd, level, opt int) (*IPv6Mreq, int) {
+       var value IPv6Mreq
+       vallen := _Socklen(SizeofIPv6Mreq)
+       errno := getsockopt(fd, level, opt, uintptr(unsafe.Pointer(&value)), &vallen)
+       return &value, errno
+}
+
 func SetsockoptByte(fd, level, opt int, value byte) (errno int) {
        var n = byte(value)
        return setsockopt(fd, level, opt, uintptr(unsafe.Pointer(&n)), 1)
@@ -387,6 +407,10 @@ func SetsockoptInt(fd, level, opt int, value int) (errno int) {
        return setsockopt(fd, level, opt, uintptr(unsafe.Pointer(&n)), 4)
 }
 
+func SetsockoptInet4Addr(fd, level, opt int, value [4]byte) (errno int) {
+       return setsockopt(fd, level, opt, uintptr(unsafe.Pointer(&value[0])), 4)
+}
+
 func SetsockoptTimeval(fd, level, opt int, tv *Timeval) (errno int) {
        return setsockopt(fd, level, opt, uintptr(unsafe.Pointer(tv)), unsafe.Sizeof(*tv))
 }
index 18988c0a873db991abc364bc001cb2d37242ed50..aa12560eba8506c3b59e7bbf7b8ac31a34e4dd71 100644 (file)
@@ -71,6 +71,17 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, errno
        return -1, ENOSYS
 }
 
+func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, int) {
+       var value IPMreqn
+       vallen := _Socklen(SizeofIPMreqn)
+       errno := getsockopt(fd, level, opt, uintptr(unsafe.Pointer(&value)), &vallen)
+       return &value, errno
+}
+
+func SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (errno int) {
+       return setsockopt(fd, level, opt, uintptr(unsafe.Pointer(mreq)), unsafe.Sizeof(*mreq))
+}
+
 /*
  * Exposed directly
  */
index 9fc2605c4b21589be2783a79805249bb5c9a2444..d4eb1bf9231cc13ac9f9794d960fc34633888ec6 100644 (file)
@@ -450,11 +450,42 @@ func GetsockoptInt(fd, level, opt int) (value, errno int) {
        return int(n), errno
 }
 
+func GetsockoptInet4Addr(fd, level, opt int) (value [4]byte, errno int) {
+       vallen := _Socklen(4)
+       errno = getsockopt(fd, level, opt, uintptr(unsafe.Pointer(&value[0])), &vallen)
+       return value, errno
+}
+
+func GetsockoptIPMreq(fd, level, opt int) (*IPMreq, int) {
+       var value IPMreq
+       vallen := _Socklen(SizeofIPMreq)
+       errno := getsockopt(fd, level, opt, uintptr(unsafe.Pointer(&value)), &vallen)
+       return &value, errno
+}
+
+func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, int) {
+       var value IPMreqn
+       vallen := _Socklen(SizeofIPMreqn)
+       errno := getsockopt(fd, level, opt, uintptr(unsafe.Pointer(&value)), &vallen)
+       return &value, errno
+}
+
+func GetsockoptIPv6Mreq(fd, level, opt int) (*IPv6Mreq, int) {
+       var value IPv6Mreq
+       vallen := _Socklen(SizeofIPv6Mreq)
+       errno := getsockopt(fd, level, opt, uintptr(unsafe.Pointer(&value)), &vallen)
+       return &value, errno
+}
+
 func SetsockoptInt(fd, level, opt int, value int) (errno int) {
        var n = int32(value)
        return setsockopt(fd, level, opt, uintptr(unsafe.Pointer(&n)), 4)
 }
 
+func SetsockoptInet4Addr(fd, level, opt int, value [4]byte) (errno int) {
+       return setsockopt(fd, level, opt, uintptr(unsafe.Pointer(&value[0])), 4)
+}
+
 func SetsockoptTimeval(fd, level, opt int, tv *Timeval) (errno int) {
        return setsockopt(fd, level, opt, uintptr(unsafe.Pointer(tv)), unsafe.Sizeof(*tv))
 }
@@ -467,6 +498,10 @@ func SetsockoptIPMreq(fd, level, opt int, mreq *IPMreq) (errno int) {
        return setsockopt(fd, level, opt, uintptr(unsafe.Pointer(mreq)), unsafe.Sizeof(*mreq))
 }
 
+func SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (errno int) {
+       return setsockopt(fd, level, opt, uintptr(unsafe.Pointer(mreq)), unsafe.Sizeof(*mreq))
+}
+
 func SetsockoptIPv6Mreq(fd, level, opt int, mreq *IPv6Mreq) (errno int) {
        return setsockopt(fd, level, opt, uintptr(unsafe.Pointer(mreq)), unsafe.Sizeof(*mreq))
 }
index 1494661cfe35b777b139e6f8ff083f21c9559ad2..792886e34fb92817bec212195704e23d4f04a20f 100644 (file)
@@ -116,6 +116,7 @@ typedef socklen_t $_Socklen;
 typedef struct linger $Linger;
 typedef struct iovec $Iovec;
 typedef struct ip_mreq $IPMreq;
+typedef struct ip_mreqn $IPMreqn;
 typedef struct ipv6_mreq $IPv6Mreq;
 typedef struct msghdr $Msghdr;
 typedef struct cmsghdr $Cmsghdr;
@@ -129,6 +130,7 @@ enum {
        $SizeofSockaddrDatalink = sizeof(struct sockaddr_dl),
        $SizeofLinger = sizeof(struct linger),
        $SizeofIPMreq = sizeof(struct ip_mreq),
+       $SizeofIPMreqn = sizeof(struct ip_mreqn),
        $SizeofIPv6Mreq = sizeof(struct ipv6_mreq),
        $SizeofMsghdr = sizeof(struct msghdr),
        $SizeofCmsghdr = sizeof(struct cmsghdr),
index d8ba389b5afe61a428b2119822524446d0cfeaeb..3cf0e2e0d0607b2bc4b88b88c031eef7e931dd7f 100644 (file)
@@ -114,6 +114,7 @@ typedef socklen_t $_Socklen;
 typedef struct linger $Linger;
 typedef struct iovec $Iovec;
 typedef struct ip_mreq $IPMreq;
+typedef struct ip_mreqn $IPMreqn;
 typedef struct ipv6_mreq $IPv6Mreq;
 typedef struct msghdr $Msghdr;
 typedef struct cmsghdr $Cmsghdr;
@@ -130,6 +131,7 @@ enum {
        $SizeofSockaddrNetlink = sizeof(struct sockaddr_nl),
        $SizeofLinger = sizeof(struct linger),
        $SizeofIPMreq = sizeof(struct ip_mreq),
+       $SizeofIPMreqn = sizeof(struct ip_mreqn),
        $SizeofIPv6Mreq = sizeof(struct ipv6_mreq),
        $SizeofMsghdr = sizeof(struct msghdr),
        $SizeofCmsghdr = sizeof(struct cmsghdr),
index 01cf2fbda71867846bb19b5ca97971c42f2750e1..7e0ab52b89d119239c59b889c2478b9471aca849 100644 (file)
@@ -33,6 +33,7 @@ const (
        SizeofSockaddrDatalink = 0x36
        SizeofLinger           = 0x8
        SizeofIPMreq           = 0x8
+       SizeofIPMreqn          = 0xc
        SizeofIPv6Mreq         = 0x14
        SizeofMsghdr           = 0x1c
        SizeofCmsghdr          = 0xc
@@ -227,6 +228,12 @@ type IPMreq struct {
        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
index d6a05ae68af9333762c808cd44602db22de064d6..6b65a7fe654d206a77a4c0b33dc42af827095a51 100644 (file)
@@ -33,6 +33,7 @@ const (
        SizeofSockaddrDatalink = 0x36
        SizeofLinger           = 0x8
        SizeofIPMreq           = 0x8
+       SizeofIPMreqn          = 0xc
        SizeofIPv6Mreq         = 0x14
        SizeofMsghdr           = 0x30
        SizeofCmsghdr          = 0xc
@@ -228,6 +229,12 @@ type IPMreq struct {
        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
index 46c92b4169e2b64783ad7ee91ec10c237a07346f..0ec479037eefd2672dcb8416b7007cd49c4466b5 100644 (file)
@@ -20,6 +20,7 @@ const (
        SizeofSockaddrNetlink   = 0xc
        SizeofLinger            = 0x8
        SizeofIPMreq            = 0x8
+       SizeofIPMreqn           = 0xc
        SizeofIPv6Mreq          = 0x14
        SizeofMsghdr            = 0x1c
        SizeofCmsghdr           = 0xc
@@ -308,6 +309,12 @@ type IPMreq struct {
        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
index 793c2b0702df39974e6c093168bed8fbd2ea1d5f..1ad4c8bfe6b9465b630d8c55a47fb47345f51206 100644 (file)
@@ -20,6 +20,7 @@ const (
        SizeofSockaddrNetlink   = 0xc
        SizeofLinger            = 0x8
        SizeofIPMreq            = 0x8
+       SizeofIPMreqn           = 0xc
        SizeofIPv6Mreq          = 0x14
        SizeofMsghdr            = 0x38
        SizeofCmsghdr           = 0x10
@@ -308,6 +309,12 @@ type IPMreq struct {
        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
index c56afbe5dcb62e41f802184631dee93c0320b95a..9fb7e347b69fe9c3c256ab156ae4a766fe399287 100644 (file)
@@ -25,6 +25,7 @@ const (
        SizeofSockaddrNetlink   = 0xc
        SizeofLinger            = 0x8
        SizeofIPMreq            = 0x8
+       SizeofIPMreqn           = 0xc
        SizeofIPv6Mreq          = 0x14
        SizeofMsghdr            = 0x1c
        SizeofCmsghdr           = 0xc
@@ -315,6 +316,12 @@ type IPMreq struct {
        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