]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.go1.12] syscall: on AIX use nsendmsg and nrecvmsg, define SockaddrDat...
authorClément Chigot <clement.chigot@atos.net>
Wed, 3 Apr 2019 11:58:57 +0000 (13:58 +0200)
committerIan Lance Taylor <iant@golang.org>
Fri, 6 Sep 2019 18:03:07 +0000 (18:03 +0000)
This commit changes sendmsg, recvmsg to use nsendmsg, nrecvmsg on AIX.
These syscalls support the new msghdr structure (with Control
and Controllen) which is needed for golang.org/x/net.
Also define SockaddrDataLink.

Fixes #33982

Change-Id: I233fbd24f9eb86648e0d4d50c2b56da3626292d0
Reviewed-on: https://go-review.googlesource.com/c/go/+/170537
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com>
(cherry picked from commit e014184c438699b1637b1d623492f33669105002)
Reviewed-on: https://go-review.googlesource.com/c/go/+/193608
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/syscall/syscall_aix.go
src/syscall/types_aix.go
src/syscall/zsyscall_aix_ppc64.go
src/syscall/ztypes_aix_ppc64.go

index 6512761c3381a62d222f26fe05a8564b12e54830..8b5d6523a9542a262256ed8943a80f84af166083 100644 (file)
@@ -217,8 +217,11 @@ func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int,
 //sys  recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)
 //sys  sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)
 //sys  Shutdown(s int, how int) (err error)
-//sys  recvmsg(s int, msg *Msghdr, flags int) (n int, err error)
-//sys  sendmsg(s int, msg *Msghdr, flags int) (n int, err error)
+
+// In order to use msghdr structure with Control, Controllen in golang.org/x/net,
+// nrecvmsg and nsendmsg must be used.
+//sys  recvmsg(s int, msg *Msghdr, flags int) (n int, err error) = nrecvmsg
+//sys  sendmsg(s int, msg *Msghdr, flags int) (n int, err error) = nsendmsg
 
 func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) {
        if sa.Port < 0 || sa.Port > 0xFFFF {
@@ -434,6 +437,18 @@ func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {
        return nil, EAFNOSUPPORT
 }
 
+type SockaddrDatalink struct {
+       Len    uint8
+       Family uint8
+       Index  uint16
+       Type   uint8
+       Nlen   uint8
+       Alen   uint8
+       Slen   uint8
+       Data   [120]uint8
+       raw    RawSockaddrDatalink
+}
+
 /*
  * Wait
  */
index b961bdb197eaac372e7e7cda6a504d0b1ddbec58..abb5545a1d23d08b36c0e2761e4ac6e8d6c06ba9 100644 (file)
@@ -23,6 +23,7 @@ package syscall
 #include <sys/statfs.h>
 
 #include <net/if.h>
+#include <net/if_dl.h>
 #include <netinet/in.h>
 #include <netinet/icmp6.h>
 
@@ -112,6 +113,8 @@ type RawSockaddrInet6 C.struct_sockaddr_in6
 
 type RawSockaddrUnix C.struct_sockaddr_un
 
+type RawSockaddrDatalink C.struct_sockaddr_dl
+
 type RawSockaddr C.struct_sockaddr
 
 type RawSockaddrAny C.struct_sockaddr_any
@@ -133,16 +136,17 @@ type Linger C.struct_linger
 type Msghdr C.struct_msghdr
 
 const (
-       SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in
-       SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
-       SizeofSockaddrAny   = C.sizeof_struct_sockaddr_any
-       SizeofSockaddrUnix  = C.sizeof_struct_sockaddr_un
-       SizeofLinger        = C.sizeof_struct_linger
-       SizeofIPMreq        = C.sizeof_struct_ip_mreq
-       SizeofIPv6Mreq      = C.sizeof_struct_ipv6_mreq
-       SizeofMsghdr        = C.sizeof_struct_msghdr
-       SizeofCmsghdr       = C.sizeof_struct_cmsghdr
-       SizeofICMPv6Filter  = C.sizeof_struct_icmp6_filter
+       SizeofSockaddrInet4    = C.sizeof_struct_sockaddr_in
+       SizeofSockaddrInet6    = C.sizeof_struct_sockaddr_in6
+       SizeofSockaddrAny      = C.sizeof_struct_sockaddr_any
+       SizeofSockaddrUnix     = C.sizeof_struct_sockaddr_un
+       SizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl
+       SizeofLinger           = C.sizeof_struct_linger
+       SizeofIPMreq           = C.sizeof_struct_ip_mreq
+       SizeofIPv6Mreq         = C.sizeof_struct_ipv6_mreq
+       SizeofMsghdr           = C.sizeof_struct_msghdr
+       SizeofCmsghdr          = C.sizeof_struct_cmsghdr
+       SizeofICMPv6Filter     = C.sizeof_struct_icmp6_filter
 )
 
 // Ptrace requests
index fe27dcadf2802345aaaad097f4b37f795c6c0ea2..3d9939b14102b4f0725d187cef2b0df4dc38d378 100644 (file)
@@ -32,8 +32,8 @@ import "unsafe"
 //go:cgo_import_dynamic libc_recvfrom recvfrom "libc.a/shr_64.o"
 //go:cgo_import_dynamic libc_sendto sendto "libc.a/shr_64.o"
 //go:cgo_import_dynamic libc_Shutdown shutdown "libc.a/shr_64.o"
-//go:cgo_import_dynamic libc_recvmsg recvmsg "libc.a/shr_64.o"
-//go:cgo_import_dynamic libc_sendmsg sendmsg "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_nrecvmsg nrecvmsg "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_nsendmsg nsendmsg "libc.a/shr_64.o"
 //go:cgo_import_dynamic libc_accept accept "libc.a/shr_64.o"
 //go:cgo_import_dynamic libc_Openat openat "libc.a/shr_64.o"
 //go:cgo_import_dynamic libc_ptrace64 ptrace64 "libc.a/shr_64.o"
@@ -120,8 +120,8 @@ import "unsafe"
 //go:linkname libc_recvfrom libc_recvfrom
 //go:linkname libc_sendto libc_sendto
 //go:linkname libc_Shutdown libc_Shutdown
-//go:linkname libc_recvmsg libc_recvmsg
-//go:linkname libc_sendmsg libc_sendmsg
+//go:linkname libc_nrecvmsg libc_nrecvmsg
+//go:linkname libc_nsendmsg libc_nsendmsg
 //go:linkname libc_accept libc_accept
 //go:linkname libc_Openat libc_Openat
 //go:linkname libc_ptrace64 libc_ptrace64
@@ -211,8 +211,8 @@ var (
        libc_recvfrom,
        libc_sendto,
        libc_Shutdown,
-       libc_recvmsg,
-       libc_sendmsg,
+       libc_nrecvmsg,
+       libc_nsendmsg,
        libc_accept,
        libc_Openat,
        libc_ptrace64,
@@ -573,7 +573,7 @@ func Shutdown(s int, how int) (err error) {
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
-       r0, _, e1 := syscall6(uintptr(unsafe.Pointer(&libc_recvmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)
+       r0, _, e1 := syscall6(uintptr(unsafe.Pointer(&libc_nrecvmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)
        n = int(r0)
        if e1 != 0 {
                err = errnoErr(e1)
@@ -584,7 +584,7 @@ func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
-       r0, _, e1 := syscall6(uintptr(unsafe.Pointer(&libc_sendmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)
+       r0, _, e1 := syscall6(uintptr(unsafe.Pointer(&libc_nsendmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)
        n = int(r0)
        if e1 != 0 {
                err = errnoErr(e1)
index 314266ea797768e6ca9b3d39b1cb67208ce808b4..e226907d23018b356d896fa1fc30c97e8fc9b14c 100644 (file)
@@ -168,6 +168,17 @@ type RawSockaddrUnix struct {
        Path   [1023]uint8
 }
 
+type RawSockaddrDatalink struct {
+       Len    uint8
+       Family uint8
+       Index  uint16
+       Type   uint8
+       Nlen   uint8
+       Alen   uint8
+       Slen   uint8
+       Data   [120]uint8
+}
+
 type RawSockaddr struct {
        Len    uint8
        Family uint8
@@ -224,16 +235,17 @@ type Msghdr struct {
 }
 
 const (
-       SizeofSockaddrInet4 = 0x10
-       SizeofSockaddrInet6 = 0x1c
-       SizeofSockaddrAny   = 0x404
-       SizeofSockaddrUnix  = 0x401
-       SizeofLinger        = 0x8
-       SizeofIPMreq        = 0x8
-       SizeofIPv6Mreq      = 0x14
-       SizeofMsghdr        = 0x30
-       SizeofCmsghdr       = 0xc
-       SizeofICMPv6Filter  = 0x20
+       SizeofSockaddrInet4    = 0x10
+       SizeofSockaddrInet6    = 0x1c
+       SizeofSockaddrAny      = 0x404
+       SizeofSockaddrUnix     = 0x401
+       SizeofSockaddrDatalink = 0x80
+       SizeofLinger           = 0x8
+       SizeofIPMreq           = 0x8
+       SizeofIPv6Mreq         = 0x14
+       SizeofMsghdr           = 0x30
+       SizeofCmsghdr          = 0xc
+       SizeofICMPv6Filter     = 0x20
 )
 
 const (