mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
syscall: add netlink support for linux/386, linux/amd64, linux/arm
R=golang-dev, bradfitz CC=golang-dev https://golang.org/cl/4535078
This commit is contained in:
parent
0a2650f398
commit
1d550bdedf
9 changed files with 1145 additions and 190 deletions
|
|
@ -290,8 +290,33 @@ func (sa *SockaddrLinklayer) sockaddr() (uintptr, _Socklen, int) {
|
|||
return uintptr(unsafe.Pointer(&sa.raw)), SizeofSockaddrLinklayer, 0
|
||||
}
|
||||
|
||||
type SockaddrNetlink struct {
|
||||
Family uint16
|
||||
Pad uint16
|
||||
Pid uint32
|
||||
Groups uint32
|
||||
raw RawSockaddrNetlink
|
||||
}
|
||||
|
||||
func (sa *SockaddrNetlink) sockaddr() (uintptr, _Socklen, int) {
|
||||
sa.raw.Family = AF_NETLINK
|
||||
sa.raw.Pad = sa.Pad
|
||||
sa.raw.Pid = sa.Pid
|
||||
sa.raw.Groups = sa.Groups
|
||||
return uintptr(unsafe.Pointer(&sa.raw)), SizeofSockaddrNetlink, 0
|
||||
}
|
||||
|
||||
func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, int) {
|
||||
switch rsa.Addr.Family {
|
||||
case AF_NETLINK:
|
||||
pp := (*RawSockaddrNetlink)(unsafe.Pointer(rsa))
|
||||
sa := new(SockaddrNetlink)
|
||||
sa.Family = pp.Family
|
||||
sa.Pad = pp.Pad
|
||||
sa.Pid = pp.Pid
|
||||
sa.Groups = pp.Groups
|
||||
return sa, 0
|
||||
|
||||
case AF_PACKET:
|
||||
pp := (*RawSockaddrLinklayer)(unsafe.Pointer(rsa))
|
||||
sa := new(SockaddrLinklayer)
|
||||
|
|
@ -489,7 +514,7 @@ func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from
|
|||
oobn = int(msg.Controllen)
|
||||
recvflags = int(msg.Flags)
|
||||
// source address is only specified if the socket is unconnected
|
||||
if rsa.Addr.Family != 0 {
|
||||
if rsa.Addr.Family != AF_UNSPEC {
|
||||
from, errno = anyToSockaddr(&rsa)
|
||||
}
|
||||
return
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue