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