phobos/std/c/linux/tipc.d
2013-07-03 00:06:32 +00:00

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,
}