linux/include/uapi/linux/tipc.h
<<
>>
Prefs
   1/*
   2 * include/linux/tipc.h: Include file 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
  42/*
  43 * TIPC addressing primitives
  44 */
  45
  46struct tipc_portid {
  47        __u32 ref;
  48        __u32 node;
  49};
  50
  51struct tipc_name {
  52        __u32 type;
  53        __u32 instance;
  54};
  55
  56struct tipc_name_seq {
  57        __u32 type;
  58        __u32 lower;
  59        __u32 upper;
  60};
  61
  62static inline __u32 tipc_addr(unsigned int zone,
  63                              unsigned int cluster,
  64                              unsigned int node)
  65{
  66        return (zone << 24) | (cluster << 12) | node;
  67}
  68
  69static inline unsigned int tipc_zone(__u32 addr)
  70{
  71        return addr >> 24;
  72}
  73
  74static inline unsigned int tipc_cluster(__u32 addr)
  75{
  76        return (addr >> 12) & 0xfff;
  77}
  78
  79static inline unsigned int tipc_node(__u32 addr)
  80{
  81        return addr & 0xfff;
  82}
  83
  84/*
  85 * Application-accessible port name types
  86 */
  87
  88#define TIPC_CFG_SRV            0       /* configuration service name type */
  89#define TIPC_TOP_SRV            1       /* topology service name type */
  90#define TIPC_RESERVED_TYPES     64      /* lowest user-publishable name type */
  91
  92/*
  93 * Publication scopes when binding port names and port name sequences
  94 */
  95
  96#define TIPC_ZONE_SCOPE         1
  97#define TIPC_CLUSTER_SCOPE      2
  98#define TIPC_NODE_SCOPE         3
  99
 100/*
 101 * Limiting values for messages
 102 */
 103
 104#define TIPC_MAX_USER_MSG_SIZE  66000U
 105
 106/*
 107 * Message importance levels
 108 */
 109
 110#define TIPC_LOW_IMPORTANCE             0
 111#define TIPC_MEDIUM_IMPORTANCE          1
 112#define TIPC_HIGH_IMPORTANCE            2
 113#define TIPC_CRITICAL_IMPORTANCE        3
 114
 115/*
 116 * Msg rejection/connection shutdown reasons
 117 */
 118
 119#define TIPC_OK                 0
 120#define TIPC_ERR_NO_NAME        1
 121#define TIPC_ERR_NO_PORT        2
 122#define TIPC_ERR_NO_NODE        3
 123#define TIPC_ERR_OVERLOAD       4
 124#define TIPC_CONN_SHUTDOWN      5
 125
 126/*
 127 * TIPC topology subscription service definitions
 128 */
 129
 130#define TIPC_SUB_PORTS          0x01    /* filter for port availability */
 131#define TIPC_SUB_SERVICE        0x02    /* filter for service availability */
 132#define TIPC_SUB_CANCEL         0x04    /* cancel a subscription */
 133
 134#define TIPC_WAIT_FOREVER       (~0)    /* timeout for permanent subscription */
 135
 136struct tipc_subscr {
 137        struct tipc_name_seq seq;       /* name sequence of interest */
 138        __u32 timeout;                  /* subscription duration (in ms) */
 139        __u32 filter;                   /* bitmask of filter options */
 140        char usr_handle[8];             /* available for subscriber use */
 141};
 142
 143#define TIPC_PUBLISHED          1       /* publication event */
 144#define TIPC_WITHDRAWN          2       /* withdraw event */
 145#define TIPC_SUBSCR_TIMEOUT     3       /* subscription timeout event */
 146
 147struct tipc_event {
 148        __u32 event;                    /* event type */
 149        __u32 found_lower;              /* matching name seq instances */
 150        __u32 found_upper;              /*    "      "    "     "      */
 151        struct tipc_portid port;        /* associated port */
 152        struct tipc_subscr s;           /* associated subscription */
 153};
 154
 155/*
 156 * Socket API
 157 */
 158
 159#ifndef AF_TIPC
 160#define AF_TIPC         30
 161#endif
 162
 163#ifndef PF_TIPC
 164#define PF_TIPC         AF_TIPC
 165#endif
 166
 167#ifndef SOL_TIPC
 168#define SOL_TIPC        271
 169#endif
 170
 171#define TIPC_ADDR_NAMESEQ       1
 172#define TIPC_ADDR_MCAST         1
 173#define TIPC_ADDR_NAME          2
 174#define TIPC_ADDR_ID            3
 175
 176struct sockaddr_tipc {
 177        unsigned short family;
 178        unsigned char  addrtype;
 179        signed   char  scope;
 180        union {
 181                struct tipc_portid id;
 182                struct tipc_name_seq nameseq;
 183                struct {
 184                        struct tipc_name name;
 185                        __u32 domain;
 186                } name;
 187        } addr;
 188};
 189
 190/*
 191 * Ancillary data objects supported by recvmsg()
 192 */
 193
 194#define TIPC_ERRINFO    1       /* error info */
 195#define TIPC_RETDATA    2       /* returned data */
 196#define TIPC_DESTNAME   3       /* destination name */
 197
 198/*
 199 * TIPC-specific socket option values
 200 */
 201
 202#define TIPC_IMPORTANCE         127     /* Default: TIPC_LOW_IMPORTANCE */
 203#define TIPC_SRC_DROPPABLE      128     /* Default: based on socket type */
 204#define TIPC_DEST_DROPPABLE     129     /* Default: based on socket type */
 205#define TIPC_CONN_TIMEOUT       130     /* Default: 8000 (ms)  */
 206#define TIPC_NODE_RECVQ_DEPTH   131     /* Default: none (read only) */
 207#define TIPC_SOCK_RECVQ_DEPTH   132     /* Default: none (read only) */
 208
 209#endif
 210