unix: add sockaddr and defines for PPPoE sockets.

This commit is contained in:
David Anderson
2018-11-14 21:43:42 -08:00
parent 66b7b1311a
commit 4054817608
14 changed files with 74 additions and 0 deletions

View File

@@ -48,6 +48,7 @@ package unix
#include <sys/wait.h>
#include <linux/filter.h>
#include <linux/icmpv6.h>
#include <linux/if_pppox.h>
#include <linux/keyctl.h>
#include <linux/netfilter/nf_tables.h>
#include <linux/netfilter/nfnetlink.h>
@@ -168,6 +169,7 @@ union sockaddr_all {
struct sockaddr_un s4;
struct sockaddr_ll s5;
struct sockaddr_nl s6;
struct sockaddr_pppox s7;
};
struct sockaddr_any {
@@ -432,6 +434,8 @@ type RawSockaddrVM C.struct_sockaddr_vm
type RawSockaddrXDP C.struct_sockaddr_xdp
type RawSockaddrPPPoX [C.sizeof_struct_sockaddr_pppox]byte
type RawSockaddr C.struct_sockaddr
type RawSockaddrAny C.struct_sockaddr_any
@@ -480,6 +484,7 @@ const (
SizeofSockaddrALG = C.sizeof_struct_sockaddr_alg
SizeofSockaddrVM = C.sizeof_struct_sockaddr_vm
SizeofSockaddrXDP = C.sizeof_struct_sockaddr_xdp
SizeofSockaddrPPPoX = C.sizeof_struct_sockaddr_pppox
SizeofLinger = C.sizeof_struct_linger
SizeofIovec = C.sizeof_struct_iovec
SizeofIPMreq = C.sizeof_struct_ip_mreq

View File

@@ -12,6 +12,10 @@
package unix
import (
"encoding/binary"
"errors"
"fmt"
"net"
"syscall"
"unsafe"
)
@@ -710,6 +714,35 @@ func (sa *SockaddrXDP) sockaddr() (unsafe.Pointer, _Socklen, error) {
return unsafe.Pointer(&sa.raw), SizeofSockaddrXDP, nil
}
type SockaddrPPPoE struct {
SID uint16
Remote net.HardwareAddr
Dev string
raw RawSockaddrPPPoX
}
func (sa *SockaddrPPPoE) sockaddr() (unsafe.Pointer, _Socklen, error) {
if len(sa.Remote) != 6 {
return nil, 0, errors.New("wrong size MAC address")
}
if len(sa.Dev) > IFNAMSIZ-1 {
return nil, 0, fmt.Errorf("Dev name %q too long, max %d chars", sa.Dev, IFNAMSIZ-1)
}
*(*uint16)(unsafe.Pointer(&sa.raw[0])) = AF_PPPOX
// PX_PROTO_OE = 0, so just zero the field out by hand.
for i := 2; i < 6; i++ {
sa.raw[i] = 0
}
binary.BigEndian.PutUint16(sa.raw[6:8], sa.SID)
copy(sa.raw[8:14], sa.Remote)
for i := 14; i < 14+IFNAMSIZ; i++ {
sa.raw[i] = 0
}
copy(sa.raw[14:], sa.Dev)
return unsafe.Pointer(&sa.raw), SizeofSockaddrPPPoX, nil
}
func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
switch rsa.Addr.Family {
case AF_NETLINK:

View File

@@ -286,6 +286,8 @@ type RawSockaddrXDP struct {
Shared_umem_fd uint32
}
type RawSockaddrPPPoX [0x1e]byte
type RawSockaddr struct {
Family uint16
Data [14]int8
@@ -421,6 +423,7 @@ const (
SizeofSockaddrALG = 0x58
SizeofSockaddrVM = 0x10
SizeofSockaddrXDP = 0x10
SizeofSockaddrPPPoX = 0x1e
SizeofLinger = 0x8
SizeofIovec = 0x8
SizeofIPMreq = 0x8

View File

@@ -288,6 +288,8 @@ type RawSockaddrXDP struct {
Shared_umem_fd uint32
}
type RawSockaddrPPPoX [0x1e]byte
type RawSockaddr struct {
Family uint16
Data [14]int8
@@ -425,6 +427,7 @@ const (
SizeofSockaddrALG = 0x58
SizeofSockaddrVM = 0x10
SizeofSockaddrXDP = 0x10
SizeofSockaddrPPPoX = 0x1e
SizeofLinger = 0x8
SizeofIovec = 0x10
SizeofIPMreq = 0x8

View File

@@ -289,6 +289,8 @@ type RawSockaddrXDP struct {
Shared_umem_fd uint32
}
type RawSockaddrPPPoX [0x1e]byte
type RawSockaddr struct {
Family uint16
Data [14]uint8
@@ -424,6 +426,7 @@ const (
SizeofSockaddrALG = 0x58
SizeofSockaddrVM = 0x10
SizeofSockaddrXDP = 0x10
SizeofSockaddrPPPoX = 0x1e
SizeofLinger = 0x8
SizeofIovec = 0x8
SizeofIPMreq = 0x8

View File

@@ -289,6 +289,8 @@ type RawSockaddrXDP struct {
Shared_umem_fd uint32
}
type RawSockaddrPPPoX [0x1e]byte
type RawSockaddr struct {
Family uint16
Data [14]int8
@@ -426,6 +428,7 @@ const (
SizeofSockaddrALG = 0x58
SizeofSockaddrVM = 0x10
SizeofSockaddrXDP = 0x10
SizeofSockaddrPPPoX = 0x1e
SizeofLinger = 0x8
SizeofIovec = 0x10
SizeofIPMreq = 0x8

View File

@@ -287,6 +287,8 @@ type RawSockaddrXDP struct {
Shared_umem_fd uint32
}
type RawSockaddrPPPoX [0x1e]byte
type RawSockaddr struct {
Family uint16
Data [14]int8
@@ -422,6 +424,7 @@ const (
SizeofSockaddrALG = 0x58
SizeofSockaddrVM = 0x10
SizeofSockaddrXDP = 0x10
SizeofSockaddrPPPoX = 0x1e
SizeofLinger = 0x8
SizeofIovec = 0x8
SizeofIPMreq = 0x8

View File

@@ -289,6 +289,8 @@ type RawSockaddrXDP struct {
Shared_umem_fd uint32
}
type RawSockaddrPPPoX [0x1e]byte
type RawSockaddr struct {
Family uint16
Data [14]int8
@@ -426,6 +428,7 @@ const (
SizeofSockaddrALG = 0x58
SizeofSockaddrVM = 0x10
SizeofSockaddrXDP = 0x10
SizeofSockaddrPPPoX = 0x1e
SizeofLinger = 0x8
SizeofIovec = 0x10
SizeofIPMreq = 0x8

View File

@@ -289,6 +289,8 @@ type RawSockaddrXDP struct {
Shared_umem_fd uint32
}
type RawSockaddrPPPoX [0x1e]byte
type RawSockaddr struct {
Family uint16
Data [14]int8
@@ -426,6 +428,7 @@ const (
SizeofSockaddrALG = 0x58
SizeofSockaddrVM = 0x10
SizeofSockaddrXDP = 0x10
SizeofSockaddrPPPoX = 0x1e
SizeofLinger = 0x8
SizeofIovec = 0x10
SizeofIPMreq = 0x8

View File

@@ -287,6 +287,8 @@ type RawSockaddrXDP struct {
Shared_umem_fd uint32
}
type RawSockaddrPPPoX [0x1e]byte
type RawSockaddr struct {
Family uint16
Data [14]int8
@@ -422,6 +424,7 @@ const (
SizeofSockaddrALG = 0x58
SizeofSockaddrVM = 0x10
SizeofSockaddrXDP = 0x10
SizeofSockaddrPPPoX = 0x1e
SizeofLinger = 0x8
SizeofIovec = 0x8
SizeofIPMreq = 0x8

View File

@@ -290,6 +290,8 @@ type RawSockaddrXDP struct {
Shared_umem_fd uint32
}
type RawSockaddrPPPoX [0x1e]byte
type RawSockaddr struct {
Family uint16
Data [14]uint8
@@ -427,6 +429,7 @@ const (
SizeofSockaddrALG = 0x58
SizeofSockaddrVM = 0x10
SizeofSockaddrXDP = 0x10
SizeofSockaddrPPPoX = 0x1e
SizeofLinger = 0x8
SizeofIovec = 0x10
SizeofIPMreq = 0x8

View File

@@ -290,6 +290,8 @@ type RawSockaddrXDP struct {
Shared_umem_fd uint32
}
type RawSockaddrPPPoX [0x1e]byte
type RawSockaddr struct {
Family uint16
Data [14]uint8
@@ -427,6 +429,7 @@ const (
SizeofSockaddrALG = 0x58
SizeofSockaddrVM = 0x10
SizeofSockaddrXDP = 0x10
SizeofSockaddrPPPoX = 0x1e
SizeofLinger = 0x8
SizeofIovec = 0x10
SizeofIPMreq = 0x8

View File

@@ -289,6 +289,8 @@ type RawSockaddrXDP struct {
Shared_umem_fd uint32
}
type RawSockaddrPPPoX [0x1e]byte
type RawSockaddr struct {
Family uint16
Data [14]uint8
@@ -426,6 +428,7 @@ const (
SizeofSockaddrALG = 0x58
SizeofSockaddrVM = 0x10
SizeofSockaddrXDP = 0x10
SizeofSockaddrPPPoX = 0x1e
SizeofLinger = 0x8
SizeofIovec = 0x10
SizeofIPMreq = 0x8

View File

@@ -288,6 +288,8 @@ type RawSockaddrXDP struct {
Shared_umem_fd uint32
}
type RawSockaddrPPPoX [0x1e]byte
type RawSockaddr struct {
Family uint16
Data [14]int8
@@ -425,6 +427,7 @@ const (
SizeofSockaddrALG = 0x58
SizeofSockaddrVM = 0x10
SizeofSockaddrXDP = 0x10
SizeofSockaddrPPPoX = 0x1e
SizeofLinger = 0x8
SizeofIovec = 0x10
SizeofIPMreq = 0x8