linux/include/uapi/linux/tipc.h
<<
>>
Prefs
   1/*
   2 * include/uapi/linux/tipc.h: Header for TIPC socket interface
   3 *
   4 * Copyright (c) 2003-2006, Ericsson AB
   5 * Copyright (c) 2005, 2010-2011, Wind River Systems
   6 * All rights reserved.
   7 *
   8 * Redistribution and use in source and binary forms, with or without
   9 * modification, are permitted provided that the following conditions are met:
  10 *
  11 * 1. Redistributions of source code must retain the above copyright
  12 *    notice, this list of conditions and the following disclaimer.
  13 * 2. Redistributions in binary form must reproduce the above copyright
  14 *    notice, this list of conditions and the following disclaimer in the
  15 *    documentation and/or other materials provided with the distribution.
  16 * 3. Neither the names of the copyright holders nor the names of its
  17 *    contributors may be used to endorse or promote products derived from
  18 *    this software without specific prior written permission.
  19 *
  20 * Alternatively, this software may be distributed under the terms of the
  21 * GNU General Public License ("GPL") version 2 as published by the Free
  22 * Software Foundation.
  23 *
  24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  27 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  28 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  29 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  30 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  31 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  32 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  33 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  34 * POSSIBILITY OF SUCH DAMAGE.
  35 */
  36
  37#ifndef _LINUX_TIPC_H_
  38#define _LINUX_TIPC_H_
  39
  40#include <linux/types.h>
  41#include <linux/sockios.h>
  42
  43/*
  44 * TIPC addressing primitives
  45 */
  46
  47struct tipc_portid {
  48        __u32 ref;
  49        __u32 node;
  50};
  51
  52struct tipc_name {
  53        __u32 type;
  54        __u32 instance;
  55};
  56
  57struct tipc_name_seq {
  58        __u32 type;
  59        __u32 lower;
  60        __u32 upper;
  61};
  62
  63static inline __u32 tipc_addr(unsigned int zone,
  64                              unsigned int cluster,
  65                              unsigned int node)
  66{
  67        return (zone << 24) | (cluster << 12) | node;
  68}
  69
  70static inline unsigned int tipc_zone(__u32 addr)
  71{
  72        return addr >> 24;
  73}
  74
  75static inline unsigned int tipc_cluster(__u32 addr)
  76{
  77        return (addr >> 12) & 0xfff;
  78}
  79
  80static inline unsigned int tipc_node(__u32 addr)
  81{
  82        return addr & 0xfff;
  83}
  84
  85/*
  86 * Application-accessible port name types
  87 */
  88
  89#define TIPC_CFG_SRV            0       /* configuration service name type */
  90#define TIPC_TOP_SRV            1       /* topology service name type */
  91#define TIPC_LINK_STATE         2       /* link state name type */
  92#define TIPC_RESERVED_TYPES     64      /* lowest user-publishable name type */
  93
  94/*
  95 * Publication scopes when binding port names and port name sequences
  96 */
  97
  98#define TIPC_ZONE_SCOPE         1
  99#define TIPC_CLUSTER_SCOPE      2
 100#define TIPC_NODE_SCOPE         3
 101
 102/*
 103 * Limiting values for messages
 104 */
 105
 106#define TIPC_MAX_USER_MSG_SIZE  66000U
 107
 108/*
 109 * Message importance levels
 110 */
 111
 112#define TIPC_LOW_IMPORTANCE             0
 113#define TIPC_MEDIUM_IMPORTANCE          1
 114#define TIPC_HIGH_IMPORTANCE            2
 115#define TIPC_CRITICAL_IMPORTANCE        3
 116
 117/*
 118 * Msg rejection/connection shutdown reasons
 119 */
 120
 121#define TIPC_OK                 0
 122#define TIPC_ERR_NO_NAME        1
 123#define TIPC_ERR_NO_PORT        2
 124#define TIPC_ERR_NO_NODE        3
 125#define TIPC_ERR_OVERLOAD       4
 126#define TIPC_CONN_SHUTDOWN      5
 127
 128/*
 129 * TIPC topology subscription service definitions
 130 */
 131
 132#define TIPC_SUB_PORTS          0x01    /* filter for port availability */
 133#define TIPC_SUB_SERVICE        0x02    /* filter for service availability */
 134#define TIPC_SUB_CANCEL         0x04    /* cancel a subscription */
 135
 136#define TIPC_WAIT_FOREVER       (~0)    /* timeout for permanent subscription */
 137
 138struct tipc_subscr {
 139        struct tipc_name_seq seq;       /* name sequence of interest */
 140        __u32 timeout;                  /* subscription duration (in ms) */
 141        __u32 filter;                   /* bitmask of filter options */
 142        char usr_handle[8];             /* available for subscriber use */
 143};
 144
 145#define TIPC_PUBLISHED          1       /* publication event */
 146#define TIPC_WITHDRAWN          2       /* withdraw event */
 147#define TIPC_SUBSCR_TIMEOUT     3       /* subscription timeout event */
 148
 149struct tipc_event {
 150        __u32 event;                    /* event type */
 151        __u32 found_lower;              /* matching name seq instances */
 152        __u32 found_upper;              /*    "      "    "     "      */
 153        struct tipc_portid port;        /* associated port */
 154        struct tipc_subscr s;           /* associated subscription */
 155};
 156
 157/*
 158 * Socket API
 159 */
 160
 161#ifndef AF_TIPC
 162#define AF_TIPC         30
 163#endif
 164
 165#ifndef PF_TIPC
 166#define PF_TIPC         AF_TIPC
 167#endif
 168
 169#ifndef SOL_TIPC
 170#define SOL_TIPC        271
 171#endif
 172
 173#define TIPC_ADDR_NAMESEQ       1
 174#define TIPC_ADDR_MCAST         1
 175#define TIPC_ADDR_NAME          2
 176#define TIPC_ADDR_ID            3
 177
 178struct sockaddr_tipc {
 179        unsigned short family;
 180        unsigned char  addrtype;
 181        signed   char  scope;
 182        union {
 183                struct tipc_portid id;
 184                struct tipc_name_seq nameseq;
 185                struct {
 186                        struct tipc_name name;
 187                        __u32 domain;
 188                } name;
 189        } addr;
 190};
 191
 192/*
 193 * Ancillary data objects supported by recvmsg()
 194 */
 195
 196#define TIPC_ERRINFO    1       /* error info */
 197#define TIPC_RETDATA    2       /* returned data */
 198#define TIPC_DESTNAME   3       /* destination name */
 199
 200/*
 201 * TIPC-specific socket option values
 202 */
 203
 204#define TIPC_IMPORTANCE         127     /* Default: TIPC_LOW_IMPORTANCE */
 205#define TIPC_SRC_DROPPABLE      128     /* Default: based on socket type */
 206#define TIPC_DEST_DROPPABLE     129     /* Default: based on socket type */
 207#define TIPC_CONN_TIMEOUT       130     /* Default: 8000 (ms)  */
 208#define TIPC_NODE_RECVQ_DEPTH   131     /* Default: none (read only) */
 209#define TIPC_SOCK_RECVQ_DEPTH   132     /* Default: none (read only) */
 210
 211/*
 212 * Maximum sizes of TIPC bearer-related names (including terminating NULL)
 213 * The string formatting for each name element is:
 214 * media: media
 215 * interface: media:interface name
 216 * link: Z.C.N:interface-Z.C.N:interface
 217 *
 218 */
 219
 220#define TIPC_MAX_MEDIA_NAME     16
 221#define TIPC_MAX_IF_NAME        16
 222#define TIPC_MAX_BEARER_NAME    32
 223#define TIPC_MAX_LINK_NAME      60
 224
 225#define SIOCGETLINKNAME         SIOCPROTOPRIVATE
 226
 227struct tipc_sioc_ln_req {
 228        __u32 peer;
 229        __u32 bearer_id;
 230        char linkname[TIPC_MAX_LINK_NAME];
 231};
 232#endif
 233