| .. SPDX-License-Identifier: GPL-2.0 | 
 |  | 
 | ================= | 
 | Linux Kernel TIPC | 
 | ================= | 
 |  | 
 | Introduction | 
 | ============ | 
 |  | 
 | TIPC (Transparent Inter Process Communication) is a protocol that is specially | 
 | designed for intra-cluster communication. It can be configured to transmit | 
 | messages either on UDP or directly across Ethernet. Message delivery is | 
 | sequence guaranteed, loss free and flow controlled. Latency times are shorter | 
 | than with any other known protocol, while maximal throughput is comparable to | 
 | that of TCP. | 
 |  | 
 | TIPC Features | 
 | ------------- | 
 |  | 
 | - Cluster wide IPC service | 
 |  | 
 |   Have you ever wished you had the convenience of Unix Domain Sockets even when | 
 |   transmitting data between cluster nodes? Where you yourself determine the | 
 |   addresses you want to bind to and use? Where you don't have to perform DNS | 
 |   lookups and worry about IP addresses? Where you don't have to start timers | 
 |   to monitor the continuous existence of peer sockets? And yet without the | 
 |   downsides of that socket type, such as the risk of lingering inodes? | 
 |  | 
 |   Welcome to the Transparent Inter Process Communication service, TIPC in short, | 
 |   which gives you all of this, and a lot more. | 
 |  | 
 | - Service Addressing | 
 |  | 
 |   A fundamental concept in TIPC is that of Service Addressing which makes it | 
 |   possible for a programmer to chose his own address, bind it to a server | 
 |   socket and let client programs use only that address for sending messages. | 
 |  | 
 | - Service Tracking | 
 |  | 
 |   A client wanting to wait for the availability of a server, uses the Service | 
 |   Tracking mechanism to subscribe for binding and unbinding/close events for | 
 |   sockets with the associated service address. | 
 |  | 
 |   The service tracking mechanism can also be used for Cluster Topology Tracking, | 
 |   i.e., subscribing for availability/non-availability of cluster nodes. | 
 |  | 
 |   Likewise, the service tracking mechanism can be used for Cluster Connectivity | 
 |   Tracking, i.e., subscribing for up/down events for individual links between | 
 |   cluster nodes. | 
 |  | 
 | - Transmission Modes | 
 |  | 
 |   Using a service address, a client can send datagram messages to a server socket. | 
 |  | 
 |   Using the same address type, it can establish a connection towards an accepting | 
 |   server socket. | 
 |  | 
 |   It can also use a service address to create and join a Communication Group, | 
 |   which is the TIPC manifestation of a brokerless message bus. | 
 |  | 
 |   Multicast with very good performance and scalability is available both in | 
 |   datagram mode and in communication group mode. | 
 |  | 
 | - Inter Node Links | 
 |  | 
 |   Communication between any two nodes in a cluster is maintained by one or two | 
 |   Inter Node Links, which both guarantee data traffic integrity and monitor | 
 |   the peer node's availability. | 
 |  | 
 | - Cluster Scalability | 
 |  | 
 |   By applying the Overlapping Ring Monitoring algorithm on the inter node links | 
 |   it is possible to scale TIPC clusters up to 1000 nodes with a maintained | 
 |   neighbor failure discovery time of 1-2 seconds. For smaller clusters this | 
 |   time can be made much shorter. | 
 |  | 
 | - Neighbor Discovery | 
 |  | 
 |   Neighbor Node Discovery in the cluster is done by Ethernet broadcast or UDP | 
 |   multicast, when any of those services are available. If not, configured peer | 
 |   IP addresses can be used. | 
 |  | 
 | - Configuration | 
 |  | 
 |   When running TIPC in single node mode no configuration whatsoever is needed. | 
 |   When running in cluster mode TIPC must as a minimum be given a node address | 
 |   (before Linux 4.17) and told which interface to attach to. The "tipc" | 
 |   configuration tool makes is possible to add and maintain many more | 
 |   configuration parameters. | 
 |  | 
 | - Performance | 
 |  | 
 |   TIPC message transfer latency times are better than in any other known protocol. | 
 |   Maximal byte throughput for inter-node connections is still somewhat lower than | 
 |   for TCP, while they are superior for intra-node and inter-container throughput | 
 |   on the same host. | 
 |  | 
 | - Language Support | 
 |  | 
 |   The TIPC user API has support for C, Python, Perl, Ruby, D and Go. | 
 |  | 
 | More Information | 
 | ---------------- | 
 |  | 
 | - How to set up TIPC: | 
 |  | 
 |   http://tipc.io/getting_started.html | 
 |  | 
 | - How to program with TIPC: | 
 |  | 
 |   http://tipc.io/programming.html | 
 |  | 
 | - How to contribute to TIPC: | 
 |  | 
 | - http://tipc.io/contacts.html | 
 |  | 
 | - More details about TIPC specification: | 
 |  | 
 |   http://tipc.io/protocol.html | 
 |  | 
 |  | 
 | Implementation | 
 | ============== | 
 |  | 
 | TIPC is implemented as a kernel module in net/tipc/ directory. | 
 |  | 
 | TIPC Base Types | 
 | --------------- | 
 |  | 
 | .. kernel-doc:: net/tipc/subscr.h | 
 |    :internal: | 
 |  | 
 | .. kernel-doc:: net/tipc/bearer.h | 
 |    :internal: | 
 |  | 
 | .. kernel-doc:: net/tipc/name_table.h | 
 |    :internal: | 
 |  | 
 | .. kernel-doc:: net/tipc/name_distr.h | 
 |    :internal: | 
 |  | 
 | .. kernel-doc:: net/tipc/bcast.c | 
 |    :internal: | 
 |  | 
 | TIPC Bearer Interfaces | 
 | ---------------------- | 
 |  | 
 | .. kernel-doc:: net/tipc/bearer.c | 
 |    :internal: | 
 |  | 
 | .. kernel-doc:: net/tipc/udp_media.c | 
 |    :internal: | 
 |  | 
 | TIPC Crypto Interfaces | 
 | ---------------------- | 
 |  | 
 | .. kernel-doc:: net/tipc/crypto.c | 
 |    :internal: | 
 |  | 
 | TIPC Discoverer Interfaces | 
 | -------------------------- | 
 |  | 
 | .. kernel-doc:: net/tipc/discover.c | 
 |    :internal: | 
 |  | 
 | TIPC Link Interfaces | 
 | -------------------- | 
 |  | 
 | .. kernel-doc:: net/tipc/link.c | 
 |    :internal: | 
 |  | 
 | TIPC msg Interfaces | 
 | ------------------- | 
 |  | 
 | .. kernel-doc:: net/tipc/msg.c | 
 |    :internal: | 
 |  | 
 | TIPC Name Interfaces | 
 | -------------------- | 
 |  | 
 | .. kernel-doc:: net/tipc/name_table.c | 
 |    :internal: | 
 |  | 
 | .. kernel-doc:: net/tipc/name_distr.c | 
 |    :internal: | 
 |  | 
 | TIPC Node Management Interfaces | 
 | ------------------------------- | 
 |  | 
 | .. kernel-doc:: net/tipc/node.c | 
 |    :internal: | 
 |  | 
 | TIPC Socket Interfaces | 
 | ---------------------- | 
 |  | 
 | .. kernel-doc:: net/tipc/socket.c | 
 |    :internal: | 
 |  | 
 | TIPC Network Topology Interfaces | 
 | -------------------------------- | 
 |  | 
 | .. kernel-doc:: net/tipc/subscr.c | 
 |    :internal: | 
 |  | 
 | TIPC Server Interfaces | 
 | ---------------------- | 
 |  | 
 | .. kernel-doc:: net/tipc/topsrv.c | 
 |    :internal: | 
 |  | 
 | TIPC Trace Interfaces | 
 | --------------------- | 
 |  | 
 | .. kernel-doc:: net/tipc/trace.c | 
 |    :internal: |