From 5eb6be6d1d3567d4af2b56a213535b5c2e6b7309 Mon Sep 17 00:00:00 2001 From: Christian Svensson Date: Sun, 16 Aug 2020 20:36:03 +0200 Subject: [PATCH] AF_IUCV work --- unix/linux/types.go | 3 +++ unix/syscall_linux.go | 19 +++++++++++++++++++ unix/ztypes_linux.go | 10 ++++++++++ 3 files changed, 32 insertions(+) diff --git a/unix/linux/types.go b/unix/linux/types.go index 31a20c7b..419ed247 100644 --- a/unix/linux/types.go +++ b/unix/linux/types.go @@ -540,6 +540,8 @@ type RawSockaddrL2TPIP C.struct_sockaddr_l2tpip type RawSockaddrL2TPIP6 C.struct_sockaddr_l2tpip6 +type RawSockaddrIUCV C.struct_sockaddr_iucv + type RawSockaddr C.struct_sockaddr type RawSockaddrAny C.struct_sockaddr_any @@ -594,6 +596,7 @@ const ( SizeofSockaddrTIPC = C.sizeof_struct_sockaddr_tipc SizeofSockaddrL2TPIP = C.sizeof_struct_sockaddr_l2tpip SizeofSockaddrL2TPIP6 = C.sizeof_struct_sockaddr_l2tpip6 + SizeofSockaddrIUCV = C.sizeof_struct_sockaddr_iucv SizeofLinger = C.sizeof_struct_linger SizeofIovec = C.sizeof_struct_iovec SizeofIPMreq = C.sizeof_struct_ip_mreq diff --git a/unix/syscall_linux.go b/unix/syscall_linux.go index 027bcafd..f66c515b 100644 --- a/unix/syscall_linux.go +++ b/unix/syscall_linux.go @@ -885,6 +885,25 @@ func (sa *SockaddrL2TPIP6) sockaddr() (unsafe.Pointer, _Socklen, error) { return unsafe.Pointer(&sa.raw), SizeofSockaddrL2TPIP6, nil } +// SockaddrIUCV implements the Sockaddr interface for AF_IUCV sockets. +type SockaddrIUCV struct { + UserID string + Name string + raw RawSockaddrIUCV +} + +func (sa *SockaddrIUCV) sockaddr() (unsafe.Pointer, _Socklen, error) { + sa.raw.Family = AF_IUCV + for i := 0; i < 8; i++ { + sa.raw.Nodeid[i] = ' ' + sa.raw.User_id[i] = ' ' + sa.raw.Name[i] = ' ' + } + copy(sa.raw.User_id[:], []byte(sa.UserID)) + copy(sa.raw.Name[:], []byte(sa.Name)) + return unsafe.Pointer(&sa.raw), SizeofSockaddrIUCV, nil +} + func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { switch rsa.Addr.Family { case AF_NETLINK: diff --git a/unix/ztypes_linux.go b/unix/ztypes_linux.go index 83364d75..801f042d 100644 --- a/unix/ztypes_linux.go +++ b/unix/ztypes_linux.go @@ -310,6 +310,15 @@ type RawSockaddrL2TPIP6 struct { Conn_id uint32 } +type RawSockaddrIUCV struct { + Family uint16 + Port uint16 + Addr uint32 + Nodeid [8]byte + User_id [8]byte + Name [8]byte +} + type _Socklen uint32 type Linger struct { @@ -422,6 +431,7 @@ const ( SizeofSockaddrTIPC = 0x10 SizeofSockaddrL2TPIP = 0x10 SizeofSockaddrL2TPIP6 = 0x20 + SizeofSockaddrIUCV = 0x20 SizeofLinger = 0x8 SizeofIPMreq = 0x8 SizeofIPMreqn = 0xc