linux/include/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, 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  66000
 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#if 0
 134/* The following filter options are not currently implemented */
 135#define TIPC_SUB_NO_BIND_EVTS   0x04    /* filter out "publish" events */
 136#define TIPC_SUB_NO_UNBIND_EVTS 0x08    /* filter out "withdraw" events */
 137#define TIPC_SUB_SINGLE_EVT     0x10    /* expire after first event */
 138#endif
 139
 140#define TIPC_WAIT_FOREVER       (~0)    /* timeout for permanent subscription */
 141
 142struct tipc_subscr {
 143        struct tipc_name_seq seq;       /* name sequence of interest */
 144        __u32 timeout;                  /* subscription duration (in ms) */
 145        __u32 filter;                   /* bitmask of filter options */
 146        char usr_handle[8];             /* available for subscriber use */
 147};
 148
 149#define TIPC_PUBLISHED          1       /* publication event */
 150#define TIPC_WITHDRAWN          2       /* withdraw event */
 151#define TIPC_SUBSCR_TIMEOUT     3       /* subscription timeout event */
 152
 153struct tipc_event {
 154        __u32 event;                    /* event type */
 155        __u32 found_lower;              /* matching name seq instances */
 156        __u32 found_upper;              /*    "      "    "     "      */
 157        struct tipc_portid port;        /* associated port */
 158        struct tipc_subscr s;           /* associated subscription */
 159};
 160
 161/*
 162 * Socket API
 163 */
 164
 165#ifndef AF_TIPC
 166#define AF_TIPC         30
 167#endif
 168
 169#ifndef PF_TIPC
 170#define PF_TIPC         AF_TIPC
 171#endif
 172
 173#ifndef SOL_TIPC
 174#define SOL_TIPC        271
 175#endif
 176
 177#define TIPC_ADDR_NAMESEQ       1
 178#define TIPC_ADDR_MCAST         1
 179#define TIPC_ADDR_NAME          2
 180#define TIPC_ADDR_ID            3
 181
 182struct sockaddr_tipc {
 183        unsigned short family;
 184        unsigned char  addrtype;
 185        signed   char  scope;
 186        union {
 187                struct tipc_portid id;
 188                struct tipc_name_seq nameseq;
 189                struct {
 190                        struct tipc_name name;
 191                        __u32 domain;
 192                } name;
 193        } addr;
 194};
 195
 196/*
 197 * Ancillary data objects supported by recvmsg()
 198 */
 199
 200#define TIPC_ERRINFO    1       /* error info */
 201#define TIPC_RETDATA    2       /* returned data */
 202#define TIPC_DESTNAME   3       /* destination name */
 203
 204/*
 205 * TIPC-specific socket option values
 206 */
 207
 208#define TIPC_IMPORTANCE         127     /* Default: TIPC_LOW_IMPORTANCE */
 209#define TIPC_SRC_DROPPABLE      128     /* Default: based on socket type */
 210#define TIPC_DEST_DROPPABLE     129     /* Default: based on socket type */
 211#define TIPC_CONN_TIMEOUT       130     /* Default: 8000 (ms)  */
 212#define TIPC_NODE_RECVQ_DEPTH   131     /* Default: none (read only) */
 213#define TIPC_SOCK_RECVQ_DEPTH   132     /* Default: none (read only) */
 214
 215#endif
 216