mirror of
https://github.com/dlang/phobos.git
synced 2025-04-30 07:00:37 +03:00
211 lines
3.6 KiB
D
211 lines
3.6 KiB
D
/**
|
|
* Interface for Linux TIPC sockets, /usr/include/linux/tipc.h
|
|
*
|
|
* Copyright: Public Domain
|
|
* License: Public Domain
|
|
* Authors: Leandro Lucarella
|
|
*/
|
|
|
|
module std.c.linux.tipc;
|
|
|
|
version (linux):
|
|
|
|
extern (C):
|
|
|
|
struct tipc_portid
|
|
{
|
|
uint ref_;
|
|
uint node;
|
|
}
|
|
|
|
struct tipc_name
|
|
{
|
|
uint type;
|
|
uint instance;
|
|
}
|
|
|
|
struct tipc_name_seq
|
|
{
|
|
uint type;
|
|
uint lower;
|
|
uint upper;
|
|
}
|
|
|
|
struct tipc_subscr
|
|
{
|
|
tipc_name_seq seq;
|
|
uint timeout;
|
|
uint filter;
|
|
ubyte[8] usr_handle;
|
|
}
|
|
|
|
struct tipc_event
|
|
{
|
|
uint event;
|
|
uint found_lower;
|
|
uint found_upper;
|
|
tipc_portid port;
|
|
tipc_subscr s;
|
|
}
|
|
|
|
struct sockaddr_tipc
|
|
{
|
|
ushort family;
|
|
ubyte addrtype;
|
|
byte scope_;
|
|
union Addr
|
|
{
|
|
tipc_portid id;
|
|
tipc_name_seq nameseq;
|
|
static struct Name
|
|
{
|
|
tipc_name name;
|
|
uint domain;
|
|
}
|
|
Name name;
|
|
}
|
|
Addr addr;
|
|
}
|
|
|
|
uint tipc_addr(uint zone, uint cluster, uint node)
|
|
{
|
|
return (zone << 24) | (cluster << 12) | node;
|
|
}
|
|
|
|
unittest
|
|
{
|
|
assert (tipc_addr(0, 0, 0) == 0);
|
|
assert (tipc_addr(1, 1, 1) == 16781313);
|
|
assert (tipc_addr(2, 1, 27) == 33558555);
|
|
assert (tipc_addr(3, 1, 63) == 50335807);
|
|
}
|
|
|
|
uint tipc_zone(uint addr)
|
|
{
|
|
return addr >> 24;
|
|
}
|
|
|
|
unittest
|
|
{
|
|
assert (tipc_zone(0u) == 0);
|
|
assert (tipc_zone(16781313u) == 1);
|
|
assert (tipc_zone(33558555u) == 2);
|
|
assert (tipc_zone(50335807u) == 3);
|
|
}
|
|
|
|
uint tipc_cluster(uint addr)
|
|
{
|
|
return (addr >> 12) & 0xfff;
|
|
}
|
|
|
|
unittest
|
|
{
|
|
assert (tipc_cluster(0u) == 0);
|
|
assert (tipc_cluster(16781313u) == 1);
|
|
assert (tipc_cluster(33558555u) == 1);
|
|
assert (tipc_cluster(50335807u) == 1);
|
|
}
|
|
|
|
uint tipc_node(uint addr)
|
|
{
|
|
return addr & 0xfff;
|
|
}
|
|
|
|
unittest
|
|
{
|
|
assert (tipc_node(0u) == 0);
|
|
assert (tipc_node(16781313u) == 1);
|
|
assert (tipc_node(33558555u) == 27);
|
|
assert (tipc_node(50335807u) == 63);
|
|
}
|
|
|
|
enum: int
|
|
{
|
|
TIPC_CFG_SRV = 0,
|
|
TIPC_TOP_SRV = 1,
|
|
TIPC_RESERVED_TYPES = 64,
|
|
}
|
|
|
|
enum: int
|
|
{
|
|
TIPC_ZONE_SCOPE = 1,
|
|
TIPC_CLUSTER_SCOPE = 2,
|
|
TIPC_NODE_SCOPE = 3,
|
|
}
|
|
|
|
enum: int
|
|
{
|
|
TIPC_MAX_USER_MSG_SIZE = 66000,
|
|
}
|
|
|
|
enum: int
|
|
{
|
|
TIPC_LOW_IMPORTANCE = 0,
|
|
TIPC_MEDIUM_IMPORTANCE = 1,
|
|
TIPC_HIGH_IMPORTANCE = 2,
|
|
TIPC_CRITICAL_IMPORTANCE = 3,
|
|
}
|
|
|
|
enum: int
|
|
{
|
|
TIPC_OK = 0,
|
|
TIPC_ERR_NO_NAME = 1,
|
|
TIPC_ERR_NO_PORT = 2,
|
|
TIPC_ERR_NO_NODE = 3,
|
|
TIPC_ERR_OVERLOAD = 4,
|
|
TIPC_CONN_SHUTDOWN = 5,
|
|
}
|
|
|
|
enum: int
|
|
{
|
|
TIPC_SUB_PORTS = 0x01,
|
|
TIPC_SUB_SERVICE = 0x02,
|
|
TIPC_SUB_CANCEL = 0x04,
|
|
}
|
|
|
|
version (none) enum: int
|
|
{
|
|
TIPC_SUB_NO_BIND_EVTS = 0x04,
|
|
TIPC_SUB_NO_UNBIND_EVTS = 0x08,
|
|
TIPC_SUB_SINGLE_EVT = 0x10,
|
|
}
|
|
|
|
enum: int
|
|
{
|
|
TIPC_WAIT_FOREVER = ~0,
|
|
}
|
|
|
|
enum: int
|
|
{
|
|
|
|
TIPC_PUBLISHED = 1,
|
|
TIPC_WITHDRAWN = 2,
|
|
TIPC_SUBSCR_TIMEOUT = 3,
|
|
}
|
|
|
|
enum: int
|
|
{
|
|
AF_TIPC = 30,
|
|
PF_TIPC = 30,
|
|
SOL_TIPC = 271,
|
|
TIPC_ADDR_NAMESEQ = 1,
|
|
TIPC_ADDR_MCAST = 1,
|
|
TIPC_ADDR_NAME = 2,
|
|
TIPC_ADDR_ID = 3,
|
|
}
|
|
|
|
enum: int
|
|
{
|
|
TIPC_ERRINFO = 1,
|
|
TIPC_RETDATA = 2,
|
|
TIPC_DESTNAME = 3,
|
|
}
|
|
|
|
enum: int
|
|
{
|
|
TIPC_IMPORTANCE = 127,
|
|
TIPC_SRC_DROPPABLE = 128,
|
|
TIPC_DEST_DROPPABLE = 129,
|
|
TIPC_CONN_TIMEOUT = 130,
|
|
}
|
|
|