mirror of
https://github.com/rwinkhart/sys.git
synced 2026-08-28 04:46:44 -04:00
unix: implement RFCOMM sockets on Linux
Add the SockaddrRFCOMM type and the ability to accept BTPROTO_L2CAP and BTPROTO_RFCOMM protocol sockets. Fixes golang/go#22211 Change-Id: I580b526c5392b90663499af0f2ebe6f55b1f8154 Reviewed-on: https://go-review.googlesource.com/122457 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com>
This commit is contained in:
committed by
Tobias Klauser
parent
7b495ad4e7
commit
1b2967e3c2
@@ -191,6 +191,13 @@ struct sockaddr_l2 {
|
|||||||
uint8_t l2_bdaddr_type;
|
uint8_t l2_bdaddr_type;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// copied from /usr/include/net/bluetooth/rfcomm.h
|
||||||
|
struct sockaddr_rc {
|
||||||
|
sa_family_t rc_family;
|
||||||
|
uint8_t rc_bdaddr[6];
|
||||||
|
uint8_t rc_channel;
|
||||||
|
};
|
||||||
|
|
||||||
// copied from /usr/include/linux/un.h
|
// copied from /usr/include/linux/un.h
|
||||||
struct my_sockaddr_un {
|
struct my_sockaddr_un {
|
||||||
sa_family_t sun_family;
|
sa_family_t sun_family;
|
||||||
@@ -401,6 +408,8 @@ type RawSockaddrHCI C.struct_sockaddr_hci
|
|||||||
|
|
||||||
type RawSockaddrL2 C.struct_sockaddr_l2
|
type RawSockaddrL2 C.struct_sockaddr_l2
|
||||||
|
|
||||||
|
type RawSockaddrRFCOMM C.struct_sockaddr_rc
|
||||||
|
|
||||||
type RawSockaddrCAN C.struct_sockaddr_can
|
type RawSockaddrCAN C.struct_sockaddr_can
|
||||||
|
|
||||||
type RawSockaddrALG C.struct_sockaddr_alg
|
type RawSockaddrALG C.struct_sockaddr_alg
|
||||||
@@ -450,6 +459,7 @@ const (
|
|||||||
SizeofSockaddrNetlink = C.sizeof_struct_sockaddr_nl
|
SizeofSockaddrNetlink = C.sizeof_struct_sockaddr_nl
|
||||||
SizeofSockaddrHCI = C.sizeof_struct_sockaddr_hci
|
SizeofSockaddrHCI = C.sizeof_struct_sockaddr_hci
|
||||||
SizeofSockaddrL2 = C.sizeof_struct_sockaddr_l2
|
SizeofSockaddrL2 = C.sizeof_struct_sockaddr_l2
|
||||||
|
SizeofSockaddrRFCOMM = C.sizeof_struct_sockaddr_rc
|
||||||
SizeofSockaddrCAN = C.sizeof_struct_sockaddr_can
|
SizeofSockaddrCAN = C.sizeof_struct_sockaddr_can
|
||||||
SizeofSockaddrALG = C.sizeof_struct_sockaddr_alg
|
SizeofSockaddrALG = C.sizeof_struct_sockaddr_alg
|
||||||
SizeofSockaddrVM = C.sizeof_struct_sockaddr_vm
|
SizeofSockaddrVM = C.sizeof_struct_sockaddr_vm
|
||||||
|
|||||||
+4
-4
@@ -206,7 +206,7 @@ func (sa *SockaddrDatalink) sockaddr() (unsafe.Pointer, _Socklen, error) {
|
|||||||
return unsafe.Pointer(&sa.raw), SizeofSockaddrDatalink, nil
|
return unsafe.Pointer(&sa.raw), SizeofSockaddrDatalink, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {
|
func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
|
||||||
switch rsa.Addr.Family {
|
switch rsa.Addr.Family {
|
||||||
case AF_LINK:
|
case AF_LINK:
|
||||||
pp := (*RawSockaddrDatalink)(unsafe.Pointer(rsa))
|
pp := (*RawSockaddrDatalink)(unsafe.Pointer(rsa))
|
||||||
@@ -286,7 +286,7 @@ func Accept(fd int) (nfd int, sa Sockaddr, err error) {
|
|||||||
Close(nfd)
|
Close(nfd)
|
||||||
return 0, nil, ECONNABORTED
|
return 0, nil, ECONNABORTED
|
||||||
}
|
}
|
||||||
sa, err = anyToSockaddr(&rsa)
|
sa, err = anyToSockaddr(fd, &rsa)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
Close(nfd)
|
Close(nfd)
|
||||||
nfd = 0
|
nfd = 0
|
||||||
@@ -306,7 +306,7 @@ func Getsockname(fd int) (sa Sockaddr, err error) {
|
|||||||
rsa.Addr.Family = AF_UNIX
|
rsa.Addr.Family = AF_UNIX
|
||||||
rsa.Addr.Len = SizeofSockaddrUnix
|
rsa.Addr.Len = SizeofSockaddrUnix
|
||||||
}
|
}
|
||||||
return anyToSockaddr(&rsa)
|
return anyToSockaddr(fd, &rsa)
|
||||||
}
|
}
|
||||||
|
|
||||||
//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error)
|
//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error)
|
||||||
@@ -356,7 +356,7 @@ func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from
|
|||||||
recvflags = int(msg.Flags)
|
recvflags = int(msg.Flags)
|
||||||
// source address is only specified if the socket is unconnected
|
// source address is only specified if the socket is unconnected
|
||||||
if rsa.Addr.Family != AF_UNSPEC {
|
if rsa.Addr.Family != AF_UNSPEC {
|
||||||
from, err = anyToSockaddr(&rsa)
|
from, err = anyToSockaddr(fd, &rsa)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) {
|
|||||||
if len > SizeofSockaddrAny {
|
if len > SizeofSockaddrAny {
|
||||||
panic("RawSockaddrAny too small")
|
panic("RawSockaddrAny too small")
|
||||||
}
|
}
|
||||||
sa, err = anyToSockaddr(&rsa)
|
sa, err = anyToSockaddr(fd, &rsa)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
Close(nfd)
|
Close(nfd)
|
||||||
nfd = 0
|
nfd = 0
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) {
|
|||||||
if len > SizeofSockaddrAny {
|
if len > SizeofSockaddrAny {
|
||||||
panic("RawSockaddrAny too small")
|
panic("RawSockaddrAny too small")
|
||||||
}
|
}
|
||||||
sa, err = anyToSockaddr(&rsa)
|
sa, err = anyToSockaddr(fd, &rsa)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
Close(nfd)
|
Close(nfd)
|
||||||
nfd = 0
|
nfd = 0
|
||||||
|
|||||||
+70
-5
@@ -489,6 +489,47 @@ func (sa *SockaddrL2) sockaddr() (unsafe.Pointer, _Socklen, error) {
|
|||||||
return unsafe.Pointer(&sa.raw), SizeofSockaddrL2, nil
|
return unsafe.Pointer(&sa.raw), SizeofSockaddrL2, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SockaddrRFCOMM implements the Sockaddr interface for AF_BLUETOOTH type sockets
|
||||||
|
// using the RFCOMM protocol.
|
||||||
|
//
|
||||||
|
// Server example:
|
||||||
|
//
|
||||||
|
// fd, _ := Socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM)
|
||||||
|
// _ = unix.Bind(fd, &unix.SockaddrRFCOMM{
|
||||||
|
// Channel: 1,
|
||||||
|
// Addr: [6]uint8{0, 0, 0, 0, 0, 0}, // BDADDR_ANY or 00:00:00:00:00:00
|
||||||
|
// })
|
||||||
|
// _ = Listen(fd, 1)
|
||||||
|
// nfd, sa, _ := Accept(fd)
|
||||||
|
// fmt.Printf("conn addr=%v fd=%d", sa.(*unix.SockaddrRFCOMM).Addr, nfd)
|
||||||
|
// Read(nfd, buf)
|
||||||
|
//
|
||||||
|
// Client example:
|
||||||
|
//
|
||||||
|
// fd, _ := Socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM)
|
||||||
|
// _ = Connect(fd, &SockaddrRFCOMM{
|
||||||
|
// Channel: 1,
|
||||||
|
// Addr: [6]byte{0x11, 0x22, 0x33, 0xaa, 0xbb, 0xcc}, // CC:BB:AA:33:22:11
|
||||||
|
// })
|
||||||
|
// Write(fd, []byte(`hello`))
|
||||||
|
type SockaddrRFCOMM struct {
|
||||||
|
// Addr represents a bluetooth address, byte ordering is little-endian.
|
||||||
|
Addr [6]uint8
|
||||||
|
|
||||||
|
// Channel is a designated bluetooth channel, only 1-30 are available for use.
|
||||||
|
// Since Linux 2.6.7 and further zero value is the first available channel.
|
||||||
|
Channel uint8
|
||||||
|
|
||||||
|
raw RawSockaddrRFCOMM
|
||||||
|
}
|
||||||
|
|
||||||
|
func (sa *SockaddrRFCOMM) sockaddr() (unsafe.Pointer, _Socklen, error) {
|
||||||
|
sa.raw.Family = AF_BLUETOOTH
|
||||||
|
sa.raw.Channel = sa.Channel
|
||||||
|
sa.raw.Bdaddr = sa.Addr
|
||||||
|
return unsafe.Pointer(&sa.raw), SizeofSockaddrRFCOMM, nil
|
||||||
|
}
|
||||||
|
|
||||||
// SockaddrCAN implements the Sockaddr interface for AF_CAN type sockets.
|
// SockaddrCAN implements the Sockaddr interface for AF_CAN type sockets.
|
||||||
// The RxID and TxID fields are used for transport protocol addressing in
|
// The RxID and TxID fields are used for transport protocol addressing in
|
||||||
// (CAN_TP16, CAN_TP20, CAN_MCNET, and CAN_ISOTP), they can be left with
|
// (CAN_TP16, CAN_TP20, CAN_MCNET, and CAN_ISOTP), they can be left with
|
||||||
@@ -651,7 +692,7 @@ func (sa *SockaddrVM) sockaddr() (unsafe.Pointer, _Socklen, error) {
|
|||||||
return unsafe.Pointer(&sa.raw), SizeofSockaddrVM, nil
|
return unsafe.Pointer(&sa.raw), SizeofSockaddrVM, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {
|
func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
|
||||||
switch rsa.Addr.Family {
|
switch rsa.Addr.Family {
|
||||||
case AF_NETLINK:
|
case AF_NETLINK:
|
||||||
pp := (*RawSockaddrNetlink)(unsafe.Pointer(rsa))
|
pp := (*RawSockaddrNetlink)(unsafe.Pointer(rsa))
|
||||||
@@ -728,6 +769,30 @@ func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {
|
|||||||
Port: pp.Port,
|
Port: pp.Port,
|
||||||
}
|
}
|
||||||
return sa, nil
|
return sa, nil
|
||||||
|
case AF_BLUETOOTH:
|
||||||
|
proto, err := GetsockoptInt(fd, SOL_SOCKET, SO_PROTOCOL)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
// only BTPROTO_L2CAP and BTPROTO_RFCOMM can accept connections
|
||||||
|
switch proto {
|
||||||
|
case BTPROTO_L2CAP:
|
||||||
|
pp := (*RawSockaddrL2)(unsafe.Pointer(rsa))
|
||||||
|
sa := &SockaddrL2{
|
||||||
|
PSM: pp.Psm,
|
||||||
|
CID: pp.Cid,
|
||||||
|
Addr: pp.Bdaddr,
|
||||||
|
AddrType: pp.Bdaddr_type,
|
||||||
|
}
|
||||||
|
return sa, nil
|
||||||
|
case BTPROTO_RFCOMM:
|
||||||
|
pp := (*RawSockaddrRFCOMM)(unsafe.Pointer(rsa))
|
||||||
|
sa := &SockaddrRFCOMM{
|
||||||
|
Channel: pp.Channel,
|
||||||
|
Addr: pp.Bdaddr,
|
||||||
|
}
|
||||||
|
return sa, nil
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return nil, EAFNOSUPPORT
|
return nil, EAFNOSUPPORT
|
||||||
}
|
}
|
||||||
@@ -739,7 +804,7 @@ func Accept(fd int) (nfd int, sa Sockaddr, err error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
sa, err = anyToSockaddr(&rsa)
|
sa, err = anyToSockaddr(fd, &rsa)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
Close(nfd)
|
Close(nfd)
|
||||||
nfd = 0
|
nfd = 0
|
||||||
@@ -757,7 +822,7 @@ func Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) {
|
|||||||
if len > SizeofSockaddrAny {
|
if len > SizeofSockaddrAny {
|
||||||
panic("RawSockaddrAny too small")
|
panic("RawSockaddrAny too small")
|
||||||
}
|
}
|
||||||
sa, err = anyToSockaddr(&rsa)
|
sa, err = anyToSockaddr(fd, &rsa)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
Close(nfd)
|
Close(nfd)
|
||||||
nfd = 0
|
nfd = 0
|
||||||
@@ -771,7 +836,7 @@ func Getsockname(fd int) (sa Sockaddr, err error) {
|
|||||||
if err = getsockname(fd, &rsa, &len); err != nil {
|
if err = getsockname(fd, &rsa, &len); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
return anyToSockaddr(&rsa)
|
return anyToSockaddr(fd, &rsa)
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) {
|
func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) {
|
||||||
@@ -960,7 +1025,7 @@ func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from
|
|||||||
recvflags = int(msg.Flags)
|
recvflags = int(msg.Flags)
|
||||||
// source address is only specified if the socket is unconnected
|
// source address is only specified if the socket is unconnected
|
||||||
if rsa.Addr.Family != AF_UNSPEC {
|
if rsa.Addr.Family != AF_UNSPEC {
|
||||||
from, err = anyToSockaddr(&rsa)
|
from, err = anyToSockaddr(fd, &rsa)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ func Getsockname(fd int) (sa Sockaddr, err error) {
|
|||||||
if err = getsockname(fd, &rsa, &len); err != nil {
|
if err = getsockname(fd, &rsa, &len); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
return anyToSockaddr(&rsa)
|
return anyToSockaddr(fd, &rsa)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetsockoptString returns the string value of the socket option opt for the
|
// GetsockoptString returns the string value of the socket option opt for the
|
||||||
@@ -360,7 +360,7 @@ func Futimes(fd int, tv []Timeval) error {
|
|||||||
return futimesat(fd, nil, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
|
return futimesat(fd, nil, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
|
||||||
}
|
}
|
||||||
|
|
||||||
func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {
|
func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
|
||||||
switch rsa.Addr.Family {
|
switch rsa.Addr.Family {
|
||||||
case AF_UNIX:
|
case AF_UNIX:
|
||||||
pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa))
|
pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa))
|
||||||
@@ -411,7 +411,7 @@ func Accept(fd int) (nfd int, sa Sockaddr, err error) {
|
|||||||
if nfd == -1 {
|
if nfd == -1 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
sa, err = anyToSockaddr(&rsa)
|
sa, err = anyToSockaddr(fd, &rsa)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
Close(nfd)
|
Close(nfd)
|
||||||
nfd = 0
|
nfd = 0
|
||||||
@@ -448,7 +448,7 @@ func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from
|
|||||||
oobn = int(msg.Accrightslen)
|
oobn = int(msg.Accrightslen)
|
||||||
// source address is only specified if the socket is unconnected
|
// source address is only specified if the socket is unconnected
|
||||||
if rsa.Addr.Family != AF_UNSPEC {
|
if rsa.Addr.Family != AF_UNSPEC {
|
||||||
from, err = anyToSockaddr(&rsa)
|
from, err = anyToSockaddr(fd, &rsa)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -219,7 +219,7 @@ func Getpeername(fd int) (sa Sockaddr, err error) {
|
|||||||
if err = getpeername(fd, &rsa, &len); err != nil {
|
if err = getpeername(fd, &rsa, &len); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
return anyToSockaddr(&rsa)
|
return anyToSockaddr(fd, &rsa)
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetsockoptByte(fd, level, opt int) (value byte, err error) {
|
func GetsockoptByte(fd, level, opt int) (value byte, err error) {
|
||||||
@@ -291,7 +291,7 @@ func Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if rsa.Addr.Family != AF_UNSPEC {
|
if rsa.Addr.Family != AF_UNSPEC {
|
||||||
from, err = anyToSockaddr(&rsa)
|
from, err = anyToSockaddr(fd, &rsa)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -248,6 +248,13 @@ type RawSockaddrL2 struct {
|
|||||||
_ [1]byte
|
_ [1]byte
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type RawSockaddrRFCOMM struct {
|
||||||
|
Family uint16
|
||||||
|
Bdaddr [6]uint8
|
||||||
|
Channel uint8
|
||||||
|
_ [1]byte
|
||||||
|
}
|
||||||
|
|
||||||
type RawSockaddrCAN struct {
|
type RawSockaddrCAN struct {
|
||||||
Family uint16
|
Family uint16
|
||||||
_ [2]byte
|
_ [2]byte
|
||||||
@@ -401,6 +408,7 @@ const (
|
|||||||
SizeofSockaddrNetlink = 0xc
|
SizeofSockaddrNetlink = 0xc
|
||||||
SizeofSockaddrHCI = 0x6
|
SizeofSockaddrHCI = 0x6
|
||||||
SizeofSockaddrL2 = 0xe
|
SizeofSockaddrL2 = 0xe
|
||||||
|
SizeofSockaddrRFCOMM = 0xa
|
||||||
SizeofSockaddrCAN = 0x10
|
SizeofSockaddrCAN = 0x10
|
||||||
SizeofSockaddrALG = 0x58
|
SizeofSockaddrALG = 0x58
|
||||||
SizeofSockaddrVM = 0x10
|
SizeofSockaddrVM = 0x10
|
||||||
|
|||||||
@@ -250,6 +250,13 @@ type RawSockaddrL2 struct {
|
|||||||
_ [1]byte
|
_ [1]byte
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type RawSockaddrRFCOMM struct {
|
||||||
|
Family uint16
|
||||||
|
Bdaddr [6]uint8
|
||||||
|
Channel uint8
|
||||||
|
_ [1]byte
|
||||||
|
}
|
||||||
|
|
||||||
type RawSockaddrCAN struct {
|
type RawSockaddrCAN struct {
|
||||||
Family uint16
|
Family uint16
|
||||||
_ [2]byte
|
_ [2]byte
|
||||||
@@ -405,6 +412,7 @@ const (
|
|||||||
SizeofSockaddrNetlink = 0xc
|
SizeofSockaddrNetlink = 0xc
|
||||||
SizeofSockaddrHCI = 0x6
|
SizeofSockaddrHCI = 0x6
|
||||||
SizeofSockaddrL2 = 0xe
|
SizeofSockaddrL2 = 0xe
|
||||||
|
SizeofSockaddrRFCOMM = 0xa
|
||||||
SizeofSockaddrCAN = 0x10
|
SizeofSockaddrCAN = 0x10
|
||||||
SizeofSockaddrALG = 0x58
|
SizeofSockaddrALG = 0x58
|
||||||
SizeofSockaddrVM = 0x10
|
SizeofSockaddrVM = 0x10
|
||||||
|
|||||||
@@ -251,6 +251,13 @@ type RawSockaddrL2 struct {
|
|||||||
_ [1]byte
|
_ [1]byte
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type RawSockaddrRFCOMM struct {
|
||||||
|
Family uint16
|
||||||
|
Bdaddr [6]uint8
|
||||||
|
Channel uint8
|
||||||
|
_ [1]byte
|
||||||
|
}
|
||||||
|
|
||||||
type RawSockaddrCAN struct {
|
type RawSockaddrCAN struct {
|
||||||
Family uint16
|
Family uint16
|
||||||
_ [2]byte
|
_ [2]byte
|
||||||
@@ -404,6 +411,7 @@ const (
|
|||||||
SizeofSockaddrNetlink = 0xc
|
SizeofSockaddrNetlink = 0xc
|
||||||
SizeofSockaddrHCI = 0x6
|
SizeofSockaddrHCI = 0x6
|
||||||
SizeofSockaddrL2 = 0xe
|
SizeofSockaddrL2 = 0xe
|
||||||
|
SizeofSockaddrRFCOMM = 0xa
|
||||||
SizeofSockaddrCAN = 0x10
|
SizeofSockaddrCAN = 0x10
|
||||||
SizeofSockaddrALG = 0x58
|
SizeofSockaddrALG = 0x58
|
||||||
SizeofSockaddrVM = 0x10
|
SizeofSockaddrVM = 0x10
|
||||||
|
|||||||
@@ -251,6 +251,13 @@ type RawSockaddrL2 struct {
|
|||||||
_ [1]byte
|
_ [1]byte
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type RawSockaddrRFCOMM struct {
|
||||||
|
Family uint16
|
||||||
|
Bdaddr [6]uint8
|
||||||
|
Channel uint8
|
||||||
|
_ [1]byte
|
||||||
|
}
|
||||||
|
|
||||||
type RawSockaddrCAN struct {
|
type RawSockaddrCAN struct {
|
||||||
Family uint16
|
Family uint16
|
||||||
_ [2]byte
|
_ [2]byte
|
||||||
@@ -406,6 +413,7 @@ const (
|
|||||||
SizeofSockaddrNetlink = 0xc
|
SizeofSockaddrNetlink = 0xc
|
||||||
SizeofSockaddrHCI = 0x6
|
SizeofSockaddrHCI = 0x6
|
||||||
SizeofSockaddrL2 = 0xe
|
SizeofSockaddrL2 = 0xe
|
||||||
|
SizeofSockaddrRFCOMM = 0xa
|
||||||
SizeofSockaddrCAN = 0x10
|
SizeofSockaddrCAN = 0x10
|
||||||
SizeofSockaddrALG = 0x58
|
SizeofSockaddrALG = 0x58
|
||||||
SizeofSockaddrVM = 0x10
|
SizeofSockaddrVM = 0x10
|
||||||
|
|||||||
@@ -249,6 +249,13 @@ type RawSockaddrL2 struct {
|
|||||||
_ [1]byte
|
_ [1]byte
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type RawSockaddrRFCOMM struct {
|
||||||
|
Family uint16
|
||||||
|
Bdaddr [6]uint8
|
||||||
|
Channel uint8
|
||||||
|
_ [1]byte
|
||||||
|
}
|
||||||
|
|
||||||
type RawSockaddrCAN struct {
|
type RawSockaddrCAN struct {
|
||||||
Family uint16
|
Family uint16
|
||||||
_ [2]byte
|
_ [2]byte
|
||||||
@@ -402,6 +409,7 @@ const (
|
|||||||
SizeofSockaddrNetlink = 0xc
|
SizeofSockaddrNetlink = 0xc
|
||||||
SizeofSockaddrHCI = 0x6
|
SizeofSockaddrHCI = 0x6
|
||||||
SizeofSockaddrL2 = 0xe
|
SizeofSockaddrL2 = 0xe
|
||||||
|
SizeofSockaddrRFCOMM = 0xa
|
||||||
SizeofSockaddrCAN = 0x10
|
SizeofSockaddrCAN = 0x10
|
||||||
SizeofSockaddrALG = 0x58
|
SizeofSockaddrALG = 0x58
|
||||||
SizeofSockaddrVM = 0x10
|
SizeofSockaddrVM = 0x10
|
||||||
|
|||||||
@@ -251,6 +251,13 @@ type RawSockaddrL2 struct {
|
|||||||
_ [1]byte
|
_ [1]byte
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type RawSockaddrRFCOMM struct {
|
||||||
|
Family uint16
|
||||||
|
Bdaddr [6]uint8
|
||||||
|
Channel uint8
|
||||||
|
_ [1]byte
|
||||||
|
}
|
||||||
|
|
||||||
type RawSockaddrCAN struct {
|
type RawSockaddrCAN struct {
|
||||||
Family uint16
|
Family uint16
|
||||||
_ [2]byte
|
_ [2]byte
|
||||||
@@ -406,6 +413,7 @@ const (
|
|||||||
SizeofSockaddrNetlink = 0xc
|
SizeofSockaddrNetlink = 0xc
|
||||||
SizeofSockaddrHCI = 0x6
|
SizeofSockaddrHCI = 0x6
|
||||||
SizeofSockaddrL2 = 0xe
|
SizeofSockaddrL2 = 0xe
|
||||||
|
SizeofSockaddrRFCOMM = 0xa
|
||||||
SizeofSockaddrCAN = 0x10
|
SizeofSockaddrCAN = 0x10
|
||||||
SizeofSockaddrALG = 0x58
|
SizeofSockaddrALG = 0x58
|
||||||
SizeofSockaddrVM = 0x10
|
SizeofSockaddrVM = 0x10
|
||||||
|
|||||||
@@ -251,6 +251,13 @@ type RawSockaddrL2 struct {
|
|||||||
_ [1]byte
|
_ [1]byte
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type RawSockaddrRFCOMM struct {
|
||||||
|
Family uint16
|
||||||
|
Bdaddr [6]uint8
|
||||||
|
Channel uint8
|
||||||
|
_ [1]byte
|
||||||
|
}
|
||||||
|
|
||||||
type RawSockaddrCAN struct {
|
type RawSockaddrCAN struct {
|
||||||
Family uint16
|
Family uint16
|
||||||
_ [2]byte
|
_ [2]byte
|
||||||
@@ -406,6 +413,7 @@ const (
|
|||||||
SizeofSockaddrNetlink = 0xc
|
SizeofSockaddrNetlink = 0xc
|
||||||
SizeofSockaddrHCI = 0x6
|
SizeofSockaddrHCI = 0x6
|
||||||
SizeofSockaddrL2 = 0xe
|
SizeofSockaddrL2 = 0xe
|
||||||
|
SizeofSockaddrRFCOMM = 0xa
|
||||||
SizeofSockaddrCAN = 0x10
|
SizeofSockaddrCAN = 0x10
|
||||||
SizeofSockaddrALG = 0x58
|
SizeofSockaddrALG = 0x58
|
||||||
SizeofSockaddrVM = 0x10
|
SizeofSockaddrVM = 0x10
|
||||||
|
|||||||
@@ -249,6 +249,13 @@ type RawSockaddrL2 struct {
|
|||||||
_ [1]byte
|
_ [1]byte
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type RawSockaddrRFCOMM struct {
|
||||||
|
Family uint16
|
||||||
|
Bdaddr [6]uint8
|
||||||
|
Channel uint8
|
||||||
|
_ [1]byte
|
||||||
|
}
|
||||||
|
|
||||||
type RawSockaddrCAN struct {
|
type RawSockaddrCAN struct {
|
||||||
Family uint16
|
Family uint16
|
||||||
_ [2]byte
|
_ [2]byte
|
||||||
@@ -402,6 +409,7 @@ const (
|
|||||||
SizeofSockaddrNetlink = 0xc
|
SizeofSockaddrNetlink = 0xc
|
||||||
SizeofSockaddrHCI = 0x6
|
SizeofSockaddrHCI = 0x6
|
||||||
SizeofSockaddrL2 = 0xe
|
SizeofSockaddrL2 = 0xe
|
||||||
|
SizeofSockaddrRFCOMM = 0xa
|
||||||
SizeofSockaddrCAN = 0x10
|
SizeofSockaddrCAN = 0x10
|
||||||
SizeofSockaddrALG = 0x58
|
SizeofSockaddrALG = 0x58
|
||||||
SizeofSockaddrVM = 0x10
|
SizeofSockaddrVM = 0x10
|
||||||
|
|||||||
@@ -252,6 +252,13 @@ type RawSockaddrL2 struct {
|
|||||||
_ [1]byte
|
_ [1]byte
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type RawSockaddrRFCOMM struct {
|
||||||
|
Family uint16
|
||||||
|
Bdaddr [6]uint8
|
||||||
|
Channel uint8
|
||||||
|
_ [1]byte
|
||||||
|
}
|
||||||
|
|
||||||
type RawSockaddrCAN struct {
|
type RawSockaddrCAN struct {
|
||||||
Family uint16
|
Family uint16
|
||||||
_ [2]byte
|
_ [2]byte
|
||||||
@@ -407,6 +414,7 @@ const (
|
|||||||
SizeofSockaddrNetlink = 0xc
|
SizeofSockaddrNetlink = 0xc
|
||||||
SizeofSockaddrHCI = 0x6
|
SizeofSockaddrHCI = 0x6
|
||||||
SizeofSockaddrL2 = 0xe
|
SizeofSockaddrL2 = 0xe
|
||||||
|
SizeofSockaddrRFCOMM = 0xa
|
||||||
SizeofSockaddrCAN = 0x10
|
SizeofSockaddrCAN = 0x10
|
||||||
SizeofSockaddrALG = 0x58
|
SizeofSockaddrALG = 0x58
|
||||||
SizeofSockaddrVM = 0x10
|
SizeofSockaddrVM = 0x10
|
||||||
|
|||||||
@@ -252,6 +252,13 @@ type RawSockaddrL2 struct {
|
|||||||
_ [1]byte
|
_ [1]byte
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type RawSockaddrRFCOMM struct {
|
||||||
|
Family uint16
|
||||||
|
Bdaddr [6]uint8
|
||||||
|
Channel uint8
|
||||||
|
_ [1]byte
|
||||||
|
}
|
||||||
|
|
||||||
type RawSockaddrCAN struct {
|
type RawSockaddrCAN struct {
|
||||||
Family uint16
|
Family uint16
|
||||||
_ [2]byte
|
_ [2]byte
|
||||||
@@ -407,6 +414,7 @@ const (
|
|||||||
SizeofSockaddrNetlink = 0xc
|
SizeofSockaddrNetlink = 0xc
|
||||||
SizeofSockaddrHCI = 0x6
|
SizeofSockaddrHCI = 0x6
|
||||||
SizeofSockaddrL2 = 0xe
|
SizeofSockaddrL2 = 0xe
|
||||||
|
SizeofSockaddrRFCOMM = 0xa
|
||||||
SizeofSockaddrCAN = 0x10
|
SizeofSockaddrCAN = 0x10
|
||||||
SizeofSockaddrALG = 0x58
|
SizeofSockaddrALG = 0x58
|
||||||
SizeofSockaddrVM = 0x10
|
SizeofSockaddrVM = 0x10
|
||||||
|
|||||||
@@ -250,6 +250,13 @@ type RawSockaddrL2 struct {
|
|||||||
_ [1]byte
|
_ [1]byte
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type RawSockaddrRFCOMM struct {
|
||||||
|
Family uint16
|
||||||
|
Bdaddr [6]uint8
|
||||||
|
Channel uint8
|
||||||
|
_ [1]byte
|
||||||
|
}
|
||||||
|
|
||||||
type RawSockaddrCAN struct {
|
type RawSockaddrCAN struct {
|
||||||
Family uint16
|
Family uint16
|
||||||
_ [2]byte
|
_ [2]byte
|
||||||
@@ -405,6 +412,7 @@ const (
|
|||||||
SizeofSockaddrNetlink = 0xc
|
SizeofSockaddrNetlink = 0xc
|
||||||
SizeofSockaddrHCI = 0x6
|
SizeofSockaddrHCI = 0x6
|
||||||
SizeofSockaddrL2 = 0xe
|
SizeofSockaddrL2 = 0xe
|
||||||
|
SizeofSockaddrRFCOMM = 0xa
|
||||||
SizeofSockaddrCAN = 0x10
|
SizeofSockaddrCAN = 0x10
|
||||||
SizeofSockaddrALG = 0x58
|
SizeofSockaddrALG = 0x58
|
||||||
SizeofSockaddrVM = 0x10
|
SizeofSockaddrVM = 0x10
|
||||||
|
|||||||
Reference in New Issue
Block a user