Back to home page

OSCL-LXR

 
 

    


0001 .. SPDX-License-Identifier: GPL-2.0
0002 
0003 =================
0004 Linux Kernel TIPC
0005 =================
0006 
0007 Introduction
0008 ============
0009 
0010 TIPC (Transparent Inter Process Communication) is a protocol that is specially
0011 designed for intra-cluster communication. It can be configured to transmit
0012 messages either on UDP or directly across Ethernet. Message delivery is
0013 sequence guaranteed, loss free and flow controlled. Latency times are shorter
0014 than with any other known protocol, while maximal throughput is comparable to
0015 that of TCP.
0016 
0017 TIPC Features
0018 -------------
0019 
0020 - Cluster wide IPC service
0021 
0022   Have you ever wished you had the convenience of Unix Domain Sockets even when
0023   transmitting data between cluster nodes? Where you yourself determine the
0024   addresses you want to bind to and use? Where you don't have to perform DNS
0025   lookups and worry about IP addresses? Where you don't have to start timers
0026   to monitor the continuous existence of peer sockets? And yet without the
0027   downsides of that socket type, such as the risk of lingering inodes?
0028 
0029   Welcome to the Transparent Inter Process Communication service, TIPC in short,
0030   which gives you all of this, and a lot more.
0031 
0032 - Service Addressing
0033 
0034   A fundamental concept in TIPC is that of Service Addressing which makes it
0035   possible for a programmer to chose his own address, bind it to a server
0036   socket and let client programs use only that address for sending messages.
0037 
0038 - Service Tracking
0039 
0040   A client wanting to wait for the availability of a server, uses the Service
0041   Tracking mechanism to subscribe for binding and unbinding/close events for
0042   sockets with the associated service address.
0043 
0044   The service tracking mechanism can also be used for Cluster Topology Tracking,
0045   i.e., subscribing for availability/non-availability of cluster nodes.
0046 
0047   Likewise, the service tracking mechanism can be used for Cluster Connectivity
0048   Tracking, i.e., subscribing for up/down events for individual links between
0049   cluster nodes.
0050 
0051 - Transmission Modes
0052 
0053   Using a service address, a client can send datagram messages to a server socket.
0054 
0055   Using the same address type, it can establish a connection towards an accepting
0056   server socket.
0057 
0058   It can also use a service address to create and join a Communication Group,
0059   which is the TIPC manifestation of a brokerless message bus.
0060 
0061   Multicast with very good performance and scalability is available both in
0062   datagram mode and in communication group mode.
0063 
0064 - Inter Node Links
0065 
0066   Communication between any two nodes in a cluster is maintained by one or two
0067   Inter Node Links, which both guarantee data traffic integrity and monitor
0068   the peer node's availability.
0069 
0070 - Cluster Scalability
0071 
0072   By applying the Overlapping Ring Monitoring algorithm on the inter node links
0073   it is possible to scale TIPC clusters up to 1000 nodes with a maintained
0074   neighbor failure discovery time of 1-2 seconds. For smaller clusters this
0075   time can be made much shorter.
0076 
0077 - Neighbor Discovery
0078 
0079   Neighbor Node Discovery in the cluster is done by Ethernet broadcast or UDP
0080   multicast, when any of those services are available. If not, configured peer
0081   IP addresses can be used.
0082 
0083 - Configuration
0084 
0085   When running TIPC in single node mode no configuration whatsoever is needed.
0086   When running in cluster mode TIPC must as a minimum be given a node address
0087   (before Linux 4.17) and told which interface to attach to. The "tipc"
0088   configuration tool makes is possible to add and maintain many more
0089   configuration parameters.
0090 
0091 - Performance
0092 
0093   TIPC message transfer latency times are better than in any other known protocol.
0094   Maximal byte throughput for inter-node connections is still somewhat lower than
0095   for TCP, while they are superior for intra-node and inter-container throughput
0096   on the same host.
0097 
0098 - Language Support
0099 
0100   The TIPC user API has support for C, Python, Perl, Ruby, D and Go.
0101 
0102 More Information
0103 ----------------
0104 
0105 - How to set up TIPC:
0106 
0107   http://tipc.io/getting_started.html
0108 
0109 - How to program with TIPC:
0110 
0111   http://tipc.io/programming.html
0112 
0113 - How to contribute to TIPC:
0114 
0115 - http://tipc.io/contacts.html
0116 
0117 - More details about TIPC specification:
0118 
0119   http://tipc.io/protocol.html
0120 
0121 
0122 Implementation
0123 ==============
0124 
0125 TIPC is implemented as a kernel module in net/tipc/ directory.
0126 
0127 TIPC Base Types
0128 ---------------
0129 
0130 .. kernel-doc:: net/tipc/subscr.h
0131    :internal:
0132 
0133 .. kernel-doc:: net/tipc/bearer.h
0134    :internal:
0135 
0136 .. kernel-doc:: net/tipc/name_table.h
0137    :internal:
0138 
0139 .. kernel-doc:: net/tipc/name_distr.h
0140    :internal:
0141 
0142 .. kernel-doc:: net/tipc/bcast.c
0143    :internal:
0144 
0145 TIPC Bearer Interfaces
0146 ----------------------
0147 
0148 .. kernel-doc:: net/tipc/bearer.c
0149    :internal:
0150 
0151 .. kernel-doc:: net/tipc/udp_media.c
0152    :internal:
0153 
0154 TIPC Crypto Interfaces
0155 ----------------------
0156 
0157 .. kernel-doc:: net/tipc/crypto.c
0158    :internal:
0159 
0160 TIPC Discoverer Interfaces
0161 --------------------------
0162 
0163 .. kernel-doc:: net/tipc/discover.c
0164    :internal:
0165 
0166 TIPC Link Interfaces
0167 --------------------
0168 
0169 .. kernel-doc:: net/tipc/link.c
0170    :internal:
0171 
0172 TIPC msg Interfaces
0173 -------------------
0174 
0175 .. kernel-doc:: net/tipc/msg.c
0176    :internal:
0177 
0178 TIPC Name Interfaces
0179 --------------------
0180 
0181 .. kernel-doc:: net/tipc/name_table.c
0182    :internal:
0183 
0184 .. kernel-doc:: net/tipc/name_distr.c
0185    :internal:
0186 
0187 TIPC Node Management Interfaces
0188 -------------------------------
0189 
0190 .. kernel-doc:: net/tipc/node.c
0191    :internal:
0192 
0193 TIPC Socket Interfaces
0194 ----------------------
0195 
0196 .. kernel-doc:: net/tipc/socket.c
0197    :internal:
0198 
0199 TIPC Network Topology Interfaces
0200 --------------------------------
0201 
0202 .. kernel-doc:: net/tipc/subscr.c
0203    :internal:
0204 
0205 TIPC Server Interfaces
0206 ----------------------
0207 
0208 .. kernel-doc:: net/tipc/topsrv.c
0209    :internal:
0210 
0211 TIPC Trace Interfaces
0212 ---------------------
0213 
0214 .. kernel-doc:: net/tipc/trace.c
0215    :internal: