package unix
import "unsafe"
func UnixCredentials (ucred *Ucred ) []byte {
b := make ([]byte , CmsgSpace (SizeofUcred ))
h := (*Cmsghdr )(unsafe .Pointer (&b [0 ]))
h .Level = SOL_SOCKET
h .Type = SCM_CREDENTIALS
h .SetLen (CmsgLen (SizeofUcred ))
*(*Ucred )(h .data (0 )) = *ucred
return b
}
func ParseUnixCredentials (m *SocketControlMessage ) (*Ucred , error ) {
if m .Header .Level != SOL_SOCKET {
return nil , EINVAL
}
if m .Header .Type != SCM_CREDENTIALS {
return nil , EINVAL
}
ucred := *(*Ucred )(unsafe .Pointer (&m .Data [0 ]))
return &ucred , nil
}
func PktInfo4 (info *Inet4Pktinfo ) []byte {
b := make ([]byte , CmsgSpace (SizeofInet4Pktinfo ))
h := (*Cmsghdr )(unsafe .Pointer (&b [0 ]))
h .Level = SOL_IP
h .Type = IP_PKTINFO
h .SetLen (CmsgLen (SizeofInet4Pktinfo ))
*(*Inet4Pktinfo )(h .data (0 )) = *info
return b
}
func PktInfo6 (info *Inet6Pktinfo ) []byte {
b := make ([]byte , CmsgSpace (SizeofInet6Pktinfo ))
h := (*Cmsghdr )(unsafe .Pointer (&b [0 ]))
h .Level = SOL_IPV6
h .Type = IPV6_PKTINFO
h .SetLen (CmsgLen (SizeofInet6Pktinfo ))
*(*Inet6Pktinfo )(h .data (0 )) = *info
return b
}
func ParseOrigDstAddr (m *SocketControlMessage ) (Sockaddr , error ) {
switch {
case m .Header .Level == SOL_IP && m .Header .Type == IP_ORIGDSTADDR :
pp := (*RawSockaddrInet4 )(unsafe .Pointer (&m .Data [0 ]))
sa := new (SockaddrInet4 )
p := (*[2 ]byte )(unsafe .Pointer (&pp .Port ))
sa .Port = int (p [0 ])<<8 + int (p [1 ])
sa .Addr = pp .Addr
return sa , nil
case m .Header .Level == SOL_IPV6 && m .Header .Type == IPV6_ORIGDSTADDR :
pp := (*RawSockaddrInet6 )(unsafe .Pointer (&m .Data [0 ]))
sa := new (SockaddrInet6 )
p := (*[2 ]byte )(unsafe .Pointer (&pp .Port ))
sa .Port = int (p [0 ])<<8 + int (p [1 ])
sa .ZoneId = pp .Scope_id
sa .Addr = pp .Addr
return sa , nil
default :
return nil , EINVAL
}
}
The pages are generated with Golds v0.6.7 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds .