unix: implement AF_TIPC sockets on Linux

Adds initial constants and types to use with SockaddrTIPC. For more
information on TIPC, see: http://tipc.sourceforge.net/.

Because the C struct sockaddr_tipc makes use of a union for its addr
field, I have created a wrapping layer in SockaddrTIPC that uses
an interface to determine which variant is in use.

Tests accompany this change due to the complexity of this code. There
is currently little test coverage in the Sockaddr-related code, but
perhaps this is something that could be picked up as a relatively
straightforward task for a new contributor.

Change-Id: I5033a0685cb7128d4b1a23d18aca71c202d0c0aa
Reviewed-on: https://go-review.googlesource.com/c/sys/+/187960
Run-TryBot: Matt Layher <mdlayher@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
Matt Layher
2019-09-04 00:50:37 +00:00
parent 1f305c863d
commit 43c01164e9
30 changed files with 2030 additions and 0 deletions
+67
View File
@@ -2000,6 +2000,8 @@ const (
SIOCDRARP = 0x8960
SIOCETHTOOL = 0x8946
SIOCGARP = 0x8954
SIOCGETLINKNAME = 0x89e0
SIOCGETNODEID = 0x89e1
SIOCGHWTSTAMP = 0x89b1
SIOCGIFADDR = 0x8915
SIOCGIFBR = 0x8940
@@ -2440,6 +2442,71 @@ const (
TIOCSTI = 0x5472
TIOCSWINSZ = 0x80087467
TIOCVHANGUP = 0x5437
TIPC_ADDR_ID = 0x3
TIPC_ADDR_MCAST = 0x1
TIPC_ADDR_NAME = 0x2
TIPC_ADDR_NAMESEQ = 0x1
TIPC_CFG_SRV = 0x0
TIPC_CLUSTER_BITS = 0xc
TIPC_CLUSTER_MASK = 0xfff000
TIPC_CLUSTER_OFFSET = 0xc
TIPC_CLUSTER_SIZE = 0xfff
TIPC_CONN_SHUTDOWN = 0x5
TIPC_CONN_TIMEOUT = 0x82
TIPC_CRITICAL_IMPORTANCE = 0x3
TIPC_DESTNAME = 0x3
TIPC_DEST_DROPPABLE = 0x81
TIPC_ERRINFO = 0x1
TIPC_ERR_NO_NAME = 0x1
TIPC_ERR_NO_NODE = 0x3
TIPC_ERR_NO_PORT = 0x2
TIPC_ERR_OVERLOAD = 0x4
TIPC_GROUP_JOIN = 0x87
TIPC_GROUP_LEAVE = 0x88
TIPC_GROUP_LOOPBACK = 0x1
TIPC_GROUP_MEMBER_EVTS = 0x2
TIPC_HIGH_IMPORTANCE = 0x2
TIPC_IMPORTANCE = 0x7f
TIPC_LINK_STATE = 0x2
TIPC_LOW_IMPORTANCE = 0x0
TIPC_MAX_BEARER_NAME = 0x20
TIPC_MAX_IF_NAME = 0x10
TIPC_MAX_LINK_NAME = 0x44
TIPC_MAX_MEDIA_NAME = 0x10
TIPC_MAX_USER_MSG_SIZE = 0x101d0
TIPC_MCAST_BROADCAST = 0x85
TIPC_MCAST_REPLICAST = 0x86
TIPC_MEDIUM_IMPORTANCE = 0x1
TIPC_NODEID_LEN = 0x10
TIPC_NODE_BITS = 0xc
TIPC_NODE_MASK = 0xfff
TIPC_NODE_OFFSET = 0x0
TIPC_NODE_RECVQ_DEPTH = 0x83
TIPC_NODE_SIZE = 0xfff
TIPC_NODE_STATE = 0x0
TIPC_OK = 0x0
TIPC_PUBLISHED = 0x1
TIPC_RESERVED_TYPES = 0x40
TIPC_RETDATA = 0x2
TIPC_SERVICE_ADDR = 0x2
TIPC_SERVICE_RANGE = 0x1
TIPC_SOCKET_ADDR = 0x3
TIPC_SOCK_RECVQ_DEPTH = 0x84
TIPC_SOCK_RECVQ_USED = 0x89
TIPC_SRC_DROPPABLE = 0x80
TIPC_SUBSCR_TIMEOUT = 0x3
TIPC_SUB_CANCEL = 0x4
TIPC_SUB_PORTS = 0x1
TIPC_SUB_SERVICE = 0x2
TIPC_TOP_SRV = 0x1
TIPC_WAIT_FOREVER = -0x1
TIPC_WITHDRAWN = 0x2
TIPC_ZONE_BITS = 0x8
TIPC_ZONE_CLUSTER_MASK = 0xfffff000
TIPC_ZONE_MASK = 0xff000000
TIPC_ZONE_OFFSET = 0x18
TIPC_ZONE_SCOPE = 0x1
TIPC_ZONE_SIZE = 0xff
TMPFS_MAGIC = 0x1021994
TOSTOP = 0x8000
TPACKET_ALIGNMENT = 0x10