linux-headers (unknown)

(root)/
include/
linux/
tipc.h
       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  
      48  struct tipc_socket_addr {
      49  	__u32 ref;
      50  	__u32 node;
      51  };
      52  
      53  struct tipc_service_addr {
      54  	__u32 type;
      55  	__u32 instance;
      56  };
      57  
      58  struct tipc_service_range {
      59  	__u32 type;
      60  	__u32 lower;
      61  	__u32 upper;
      62  };
      63  
      64  /*
      65   * Application-accessible service types
      66   */
      67  
      68  #define TIPC_NODE_STATE		0	/* node state service type */
      69  #define TIPC_TOP_SRV		1	/* topology server service type */
      70  #define TIPC_LINK_STATE		2	/* link state service type */
      71  #define TIPC_RESERVED_TYPES	64	/* lowest user-allowed service type */
      72  
      73  /*
      74   * Publication scopes when binding service / service range
      75   */
      76  enum tipc_scope {
      77  	TIPC_CLUSTER_SCOPE = 2, /* 0 can also be used */
      78  	TIPC_NODE_SCOPE    = 3
      79  };
      80  
      81  /*
      82   * Limiting values for messages
      83   */
      84  
      85  #define TIPC_MAX_USER_MSG_SIZE	66000U
      86  
      87  /*
      88   * Message importance levels
      89   */
      90  
      91  #define TIPC_LOW_IMPORTANCE		0
      92  #define TIPC_MEDIUM_IMPORTANCE		1
      93  #define TIPC_HIGH_IMPORTANCE		2
      94  #define TIPC_CRITICAL_IMPORTANCE	3
      95  
      96  /*
      97   * Msg rejection/connection shutdown reasons
      98   */
      99  
     100  #define TIPC_OK			0
     101  #define TIPC_ERR_NO_NAME	1
     102  #define TIPC_ERR_NO_PORT	2
     103  #define TIPC_ERR_NO_NODE	3
     104  #define TIPC_ERR_OVERLOAD	4
     105  #define TIPC_CONN_SHUTDOWN	5
     106  
     107  /*
     108   * TIPC topology subscription service definitions
     109   */
     110  
     111  #define TIPC_SUB_PORTS          0x01    /* filter: evt at each match */
     112  #define TIPC_SUB_SERVICE        0x02    /* filter: evt at first up/last down */
     113  #define TIPC_SUB_CANCEL         0x04    /* filter: cancel a subscription */
     114  
     115  #define TIPC_WAIT_FOREVER	(~0)	/* timeout for permanent subscription */
     116  
     117  struct tipc_subscr {
     118  	struct tipc_service_range seq;	/* range of interest */
     119  	__u32 timeout;			/* subscription duration (in ms) */
     120  	__u32 filter;			/* bitmask of filter options */
     121  	char usr_handle[8];		/* available for subscriber use */
     122  };
     123  
     124  #define TIPC_PUBLISHED		1	/* publication event */
     125  #define TIPC_WITHDRAWN		2	/* withdrawal event */
     126  #define TIPC_SUBSCR_TIMEOUT	3	/* subscription timeout event */
     127  
     128  struct tipc_event {
     129  	__u32 event;			/* event type */
     130  	__u32 found_lower;		/* matching range */
     131  	__u32 found_upper;		/*    "      "    */
     132  	struct tipc_socket_addr port;	/* associated socket */
     133  	struct tipc_subscr s;		/* associated subscription */
     134  };
     135  
     136  /*
     137   * Socket API
     138   */
     139  
     140  #ifndef AF_TIPC
     141  #define AF_TIPC		30
     142  #endif
     143  
     144  #ifndef PF_TIPC
     145  #define PF_TIPC		AF_TIPC
     146  #endif
     147  
     148  #ifndef SOL_TIPC
     149  #define SOL_TIPC	271
     150  #endif
     151  
     152  #define TIPC_ADDR_MCAST         1
     153  #define TIPC_SERVICE_RANGE      1
     154  #define TIPC_SERVICE_ADDR       2
     155  #define TIPC_SOCKET_ADDR        3
     156  
     157  struct sockaddr_tipc {
     158  	unsigned short family;
     159  	unsigned char  addrtype;
     160  	signed   char  scope;
     161  	union {
     162  		struct tipc_socket_addr id;
     163  		struct tipc_service_range nameseq;
     164  		struct {
     165  			struct tipc_service_addr name;
     166  			__u32 domain;
     167  		} name;
     168  	} addr;
     169  };
     170  
     171  /*
     172   * Ancillary data objects supported by recvmsg()
     173   */
     174  
     175  #define TIPC_ERRINFO	1	/* error info */
     176  #define TIPC_RETDATA	2	/* returned data */
     177  #define TIPC_DESTNAME	3	/* destination name */
     178  
     179  /*
     180   * TIPC-specific socket option names
     181   */
     182  
     183  #define TIPC_IMPORTANCE		127	/* Default: TIPC_LOW_IMPORTANCE */
     184  #define TIPC_SRC_DROPPABLE	128	/* Default: based on socket type */
     185  #define TIPC_DEST_DROPPABLE	129	/* Default: based on socket type */
     186  #define TIPC_CONN_TIMEOUT	130	/* Default: 8000 (ms)  */
     187  #define TIPC_NODE_RECVQ_DEPTH	131	/* Default: none (read only) */
     188  #define TIPC_SOCK_RECVQ_DEPTH	132	/* Default: none (read only) */
     189  #define TIPC_MCAST_BROADCAST    133     /* Default: TIPC selects. No arg */
     190  #define TIPC_MCAST_REPLICAST    134     /* Default: TIPC selects. No arg */
     191  #define TIPC_GROUP_JOIN         135     /* Takes struct tipc_group_req* */
     192  #define TIPC_GROUP_LEAVE        136     /* No argument */
     193  #define TIPC_SOCK_RECVQ_USED    137     /* Default: none (read only) */
     194  #define TIPC_NODELAY            138     /* Default: false */
     195  
     196  /*
     197   * Flag values
     198   */
     199  #define TIPC_GROUP_LOOPBACK     0x1  /* Receive copy of sent msg when match */
     200  #define TIPC_GROUP_MEMBER_EVTS  0x2  /* Receive membership events in socket */
     201  
     202  struct tipc_group_req {
     203  	__u32 type;      /* group id */
     204  	__u32 instance;  /* member id */
     205  	__u32 scope;     /* cluster/node */
     206  	__u32 flags;
     207  };
     208  
     209  /*
     210   * Maximum sizes of TIPC bearer-related names (including terminating NULL)
     211   * The string formatting for each name element is:
     212   * media: media
     213   * interface: media:interface name
     214   * link: node:interface-node:interface
     215   */
     216  #define TIPC_NODEID_LEN         16
     217  #define TIPC_MAX_MEDIA_NAME	16
     218  #define TIPC_MAX_IF_NAME	16
     219  #define TIPC_MAX_BEARER_NAME	32
     220  #define TIPC_MAX_LINK_NAME	68
     221  
     222  #define SIOCGETLINKNAME        SIOCPROTOPRIVATE
     223  #define SIOCGETNODEID          (SIOCPROTOPRIVATE + 1)
     224  
     225  struct tipc_sioc_ln_req {
     226  	__u32 peer;
     227  	__u32 bearer_id;
     228  	char linkname[TIPC_MAX_LINK_NAME];
     229  };
     230  
     231  struct tipc_sioc_nodeid_req {
     232  	__u32 peer;
     233  	char node_id[TIPC_NODEID_LEN];
     234  };
     235  
     236  /*
     237   * TIPC Crypto, AEAD
     238   */
     239  #define TIPC_AEAD_ALG_NAME		(32)
     240  
     241  struct tipc_aead_key {
     242  	char alg_name[TIPC_AEAD_ALG_NAME];
     243  	unsigned int keylen;	/* in bytes */
     244  	char key[];
     245  };
     246  
     247  #define TIPC_AEAD_KEYLEN_MIN		(16 + 4)
     248  #define TIPC_AEAD_KEYLEN_MAX		(32 + 4)
     249  #define TIPC_AEAD_KEY_SIZE_MAX		(sizeof(struct tipc_aead_key) + \
     250  							TIPC_AEAD_KEYLEN_MAX)
     251  
     252  static __inline__ int tipc_aead_key_size(struct tipc_aead_key *key)
     253  {
     254  	return sizeof(*key) + key->keylen;
     255  }
     256  
     257  #define TIPC_REKEYING_NOW		(~0U)
     258  
     259  /* The macros and functions below are deprecated:
     260   */
     261  
     262  #define TIPC_CFG_SRV		0
     263  #define TIPC_ZONE_SCOPE         1
     264  
     265  #define TIPC_ADDR_NAMESEQ	1
     266  #define TIPC_ADDR_NAME		2
     267  #define TIPC_ADDR_ID		3
     268  
     269  #define TIPC_NODE_BITS          12
     270  #define TIPC_CLUSTER_BITS       12
     271  #define TIPC_ZONE_BITS          8
     272  
     273  #define TIPC_NODE_OFFSET        0
     274  #define TIPC_CLUSTER_OFFSET     TIPC_NODE_BITS
     275  #define TIPC_ZONE_OFFSET        (TIPC_CLUSTER_OFFSET + TIPC_CLUSTER_BITS)
     276  
     277  #define TIPC_NODE_SIZE          ((1UL << TIPC_NODE_BITS) - 1)
     278  #define TIPC_CLUSTER_SIZE       ((1UL << TIPC_CLUSTER_BITS) - 1)
     279  #define TIPC_ZONE_SIZE          ((1UL << TIPC_ZONE_BITS) - 1)
     280  
     281  #define TIPC_NODE_MASK		(TIPC_NODE_SIZE << TIPC_NODE_OFFSET)
     282  #define TIPC_CLUSTER_MASK	(TIPC_CLUSTER_SIZE << TIPC_CLUSTER_OFFSET)
     283  #define TIPC_ZONE_MASK		(TIPC_ZONE_SIZE << TIPC_ZONE_OFFSET)
     284  
     285  #define TIPC_ZONE_CLUSTER_MASK (TIPC_ZONE_MASK | TIPC_CLUSTER_MASK)
     286  
     287  #define tipc_portid tipc_socket_addr
     288  #define tipc_name tipc_service_addr
     289  #define tipc_name_seq tipc_service_range
     290  
     291  static __inline__ __u32 tipc_addr(unsigned int zone,
     292  			      unsigned int cluster,
     293  			      unsigned int node)
     294  {
     295  	return (zone << TIPC_ZONE_OFFSET) |
     296  		(cluster << TIPC_CLUSTER_OFFSET) |
     297  		node;
     298  }
     299  
     300  static __inline__ unsigned int tipc_zone(__u32 addr)
     301  {
     302  	return addr >> TIPC_ZONE_OFFSET;
     303  }
     304  
     305  static __inline__ unsigned int tipc_cluster(__u32 addr)
     306  {
     307  	return (addr & TIPC_CLUSTER_MASK) >> TIPC_CLUSTER_OFFSET;
     308  }
     309  
     310  static __inline__ unsigned int tipc_node(__u32 addr)
     311  {
     312  	return addr & TIPC_NODE_MASK;
     313  }
     314  
     315  #endif