re PR go/69966 (libgo: Port syscall.SetsockoptUcred from golang)
authorIan Lance Taylor <ian@gcc.gnu.org>
Fri, 26 Feb 2016 17:36:00 +0000 (17:36 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Fri, 26 Feb 2016 17:36:00 +0000 (17:36 +0000)
PR go/69966
    syscall: Add new Getsockopt functions.

    Add GetsockoptICMPv6Filter, GetsockoptIPv6MTUInfo, GetsockoptUcred as
    appropriate.  These functions exist in the master library.

    For GCC PR 69966.

    Reviewed-on: https://go-review.googlesource.com/19960

From-SVN: r233747

gcc/go/gofrontend/MERGE
libgo/go/syscall/socket.go
libgo/go/syscall/socket_bsd.go
libgo/go/syscall/socket_linux.go
libgo/mksysinfo.sh

index 9bebd30c431f830d9bd889700ae971ce60571972..07ae4d0f00c506bc0ce9505ca32cd97c3e894d08 100644 (file)
@@ -1,4 +1,4 @@
-156f5f0152797ac2afe5f23803aeb3c7b8f8418e
+3de822d11255d439fac9717897b017aae2de18c2
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
index d96a717303b3b7ceb4a2afa4c0bc71f20e1d3b40..93bbc389f4d3bdea96c92a24aabe27d543f56ff7 100644 (file)
@@ -251,6 +251,13 @@ func GetsockoptIPv6Mreq(fd, level, opt int) (*IPv6Mreq, error) {
        return &value, err
 }
 
+func GetsockoptICMPv6Filter(fd, level, opt int) (*ICMPv6Filter, error) {
+       var value ICMPv6Filter
+       vallen := Socklen_t(SizeofICMPv6Filter)
+       err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
+       return &value, err
+}
+
 //sys  setsockopt(s int, level int, name int, val unsafe.Pointer, vallen Socklen_t) (err error)
 //setsockopt(s _C_int, level _C_int, optname _C_int, val *byte, vallen Socklen_t) _C_int
 
index 72d7180b6ed03a2191e6f0d4719e0952e6783916..c8da1022218be01e9cbc61893fb6ccc3ff3579b9 100644 (file)
@@ -80,3 +80,10 @@ func BindToDevice(fd int, device string) (err error) {
 func anyToSockaddrOS(rsa *RawSockaddrAny) (Sockaddr, error) {
        return nil, EAFNOSUPPORT
 }
+
+func GetsockoptIPv6MTUInfo(fd, level, opt int) (*IPv6MTUInfo, error) {
+       var value IPv6MTUInfo
+       vallen := Socklen_t(SizeofIPv6MTUInfo)
+       err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
+       return &value, err
+}
index 5064e77122167c0b667750c124ccee1da7e50aab..3c3098e0564a0252ccee9a8e77ca29ddcc9cb5bc 100644 (file)
@@ -168,6 +168,20 @@ func anyToSockaddrOS(rsa *RawSockaddrAny) (Sockaddr, error) {
        return nil, EAFNOSUPPORT
 }
 
+func GetsockoptIPv6MTUInfo(fd, level, opt int) (*IPv6MTUInfo, error) {
+       var value IPv6MTUInfo
+       vallen := Socklen_t(SizeofIPv6MTUInfo)
+       err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
+       return &value, err
+}
+
+func GetsockoptUcred(fd, level, opt int) (*Ucred, error) {
+       var value Ucred
+       vallen := Socklen_t(SizeofUcred)
+       err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
+       return &value, err
+}
+
 //sysnb        EpollCreate(size int) (fd int, err error)
 //epoll_create(size _C_int) _C_int
 
index 9062c2c92369880c7a5df2efe271d8a48fe688bf..1271e1a550f666a327ba36b41d691e8cda5c7940 100755 (executable)
@@ -870,6 +870,14 @@ if ! grep 'type ICMPv6Filter ' ${OUT} > /dev/null 2>&1; then
   echo 'type ICMPv6Filter struct { Data [8]uint32 }' >> ${OUT}
 fi
 
+# The ip6_mtuinfo struct.
+grep '^type _ip6_mtuinfo ' gen-sysinfo.go | \
+    sed -e 's/_ip6_mtuinfo/IPv6MTUInfo/' \
+      -e 's/ip6m_addr/Addr/' \
+      -e 's/_sockaddr_in6/RawSockaddrInet6/' \
+      -e 's/ip6m_mtu/Mtu/' \
+    >> ${OUT}
+
 # Try to guess the type to use for fd_set.
 fd_set=`grep '^type _fd_set ' gen-sysinfo.go || true`
 fds_bits_type="_C_long"
@@ -1464,7 +1472,7 @@ set cmsghdr Cmsghdr ip_mreq IPMreq ip_mreqn IPMreqn ipv6_mreq IPv6Mreq \
     msghdr Msghdr nlattr NlAttr nlmsgerr NlMsgerr nlmsghdr NlMsghdr \
     rtattr RtAttr rtgenmsg RtGenmsg rtmsg RtMsg rtnexthop RtNexthop \
     sock_filter SockFilter sock_fprog SockFprog ucred Ucred \
-    icmp6_filter ICMPv6Filter
+    icmp6_filter ICMPv6Filter ip6_mtuinfo IPv6MTUInfo
 while test $# != 0; do
     nc=$1
     ngo=$2