162306a36Sopenharmony_ci.. SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci 362306a36Sopenharmony_ci================= 462306a36Sopenharmony_ciLinux Kernel TIPC 562306a36Sopenharmony_ci================= 662306a36Sopenharmony_ci 762306a36Sopenharmony_ciIntroduction 862306a36Sopenharmony_ci============ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ciTIPC (Transparent Inter Process Communication) is a protocol that is specially 1162306a36Sopenharmony_cidesigned for intra-cluster communication. It can be configured to transmit 1262306a36Sopenharmony_cimessages either on UDP or directly across Ethernet. Message delivery is 1362306a36Sopenharmony_cisequence guaranteed, loss free and flow controlled. Latency times are shorter 1462306a36Sopenharmony_cithan with any other known protocol, while maximal throughput is comparable to 1562306a36Sopenharmony_cithat of TCP. 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ciTIPC Features 1862306a36Sopenharmony_ci------------- 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci- Cluster wide IPC service 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci Have you ever wished you had the convenience of Unix Domain Sockets even when 2362306a36Sopenharmony_ci transmitting data between cluster nodes? Where you yourself determine the 2462306a36Sopenharmony_ci addresses you want to bind to and use? Where you don't have to perform DNS 2562306a36Sopenharmony_ci lookups and worry about IP addresses? Where you don't have to start timers 2662306a36Sopenharmony_ci to monitor the continuous existence of peer sockets? And yet without the 2762306a36Sopenharmony_ci downsides of that socket type, such as the risk of lingering inodes? 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci Welcome to the Transparent Inter Process Communication service, TIPC in short, 3062306a36Sopenharmony_ci which gives you all of this, and a lot more. 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci- Service Addressing 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci A fundamental concept in TIPC is that of Service Addressing which makes it 3562306a36Sopenharmony_ci possible for a programmer to chose his own address, bind it to a server 3662306a36Sopenharmony_ci socket and let client programs use only that address for sending messages. 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci- Service Tracking 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci A client wanting to wait for the availability of a server, uses the Service 4162306a36Sopenharmony_ci Tracking mechanism to subscribe for binding and unbinding/close events for 4262306a36Sopenharmony_ci sockets with the associated service address. 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci The service tracking mechanism can also be used for Cluster Topology Tracking, 4562306a36Sopenharmony_ci i.e., subscribing for availability/non-availability of cluster nodes. 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci Likewise, the service tracking mechanism can be used for Cluster Connectivity 4862306a36Sopenharmony_ci Tracking, i.e., subscribing for up/down events for individual links between 4962306a36Sopenharmony_ci cluster nodes. 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ci- Transmission Modes 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci Using a service address, a client can send datagram messages to a server socket. 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ci Using the same address type, it can establish a connection towards an accepting 5662306a36Sopenharmony_ci server socket. 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci It can also use a service address to create and join a Communication Group, 5962306a36Sopenharmony_ci which is the TIPC manifestation of a brokerless message bus. 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci Multicast with very good performance and scalability is available both in 6262306a36Sopenharmony_ci datagram mode and in communication group mode. 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci- Inter Node Links 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ci Communication between any two nodes in a cluster is maintained by one or two 6762306a36Sopenharmony_ci Inter Node Links, which both guarantee data traffic integrity and monitor 6862306a36Sopenharmony_ci the peer node's availability. 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ci- Cluster Scalability 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ci By applying the Overlapping Ring Monitoring algorithm on the inter node links 7362306a36Sopenharmony_ci it is possible to scale TIPC clusters up to 1000 nodes with a maintained 7462306a36Sopenharmony_ci neighbor failure discovery time of 1-2 seconds. For smaller clusters this 7562306a36Sopenharmony_ci time can be made much shorter. 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_ci- Neighbor Discovery 7862306a36Sopenharmony_ci 7962306a36Sopenharmony_ci Neighbor Node Discovery in the cluster is done by Ethernet broadcast or UDP 8062306a36Sopenharmony_ci multicast, when any of those services are available. If not, configured peer 8162306a36Sopenharmony_ci IP addresses can be used. 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ci- Configuration 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ci When running TIPC in single node mode no configuration whatsoever is needed. 8662306a36Sopenharmony_ci When running in cluster mode TIPC must as a minimum be given a node address 8762306a36Sopenharmony_ci (before Linux 4.17) and told which interface to attach to. The "tipc" 8862306a36Sopenharmony_ci configuration tool makes is possible to add and maintain many more 8962306a36Sopenharmony_ci configuration parameters. 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ci- Performance 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_ci TIPC message transfer latency times are better than in any other known protocol. 9462306a36Sopenharmony_ci Maximal byte throughput for inter-node connections is still somewhat lower than 9562306a36Sopenharmony_ci for TCP, while they are superior for intra-node and inter-container throughput 9662306a36Sopenharmony_ci on the same host. 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_ci- Language Support 9962306a36Sopenharmony_ci 10062306a36Sopenharmony_ci The TIPC user API has support for C, Python, Perl, Ruby, D and Go. 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_ciMore Information 10362306a36Sopenharmony_ci---------------- 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ci- How to set up TIPC: 10662306a36Sopenharmony_ci 10762306a36Sopenharmony_ci http://tipc.io/getting_started.html 10862306a36Sopenharmony_ci 10962306a36Sopenharmony_ci- How to program with TIPC: 11062306a36Sopenharmony_ci 11162306a36Sopenharmony_ci http://tipc.io/programming.html 11262306a36Sopenharmony_ci 11362306a36Sopenharmony_ci- How to contribute to TIPC: 11462306a36Sopenharmony_ci 11562306a36Sopenharmony_ci- http://tipc.io/contacts.html 11662306a36Sopenharmony_ci 11762306a36Sopenharmony_ci- More details about TIPC specification: 11862306a36Sopenharmony_ci 11962306a36Sopenharmony_ci http://tipc.io/protocol.html 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_ci 12262306a36Sopenharmony_ciImplementation 12362306a36Sopenharmony_ci============== 12462306a36Sopenharmony_ci 12562306a36Sopenharmony_ciTIPC is implemented as a kernel module in net/tipc/ directory. 12662306a36Sopenharmony_ci 12762306a36Sopenharmony_ciTIPC Base Types 12862306a36Sopenharmony_ci--------------- 12962306a36Sopenharmony_ci 13062306a36Sopenharmony_ci.. kernel-doc:: net/tipc/subscr.h 13162306a36Sopenharmony_ci :internal: 13262306a36Sopenharmony_ci 13362306a36Sopenharmony_ci.. kernel-doc:: net/tipc/bearer.h 13462306a36Sopenharmony_ci :internal: 13562306a36Sopenharmony_ci 13662306a36Sopenharmony_ci.. kernel-doc:: net/tipc/name_table.h 13762306a36Sopenharmony_ci :internal: 13862306a36Sopenharmony_ci 13962306a36Sopenharmony_ci.. kernel-doc:: net/tipc/name_distr.h 14062306a36Sopenharmony_ci :internal: 14162306a36Sopenharmony_ci 14262306a36Sopenharmony_ci.. kernel-doc:: net/tipc/bcast.c 14362306a36Sopenharmony_ci :internal: 14462306a36Sopenharmony_ci 14562306a36Sopenharmony_ciTIPC Bearer Interfaces 14662306a36Sopenharmony_ci---------------------- 14762306a36Sopenharmony_ci 14862306a36Sopenharmony_ci.. kernel-doc:: net/tipc/bearer.c 14962306a36Sopenharmony_ci :internal: 15062306a36Sopenharmony_ci 15162306a36Sopenharmony_ci.. kernel-doc:: net/tipc/udp_media.c 15262306a36Sopenharmony_ci :internal: 15362306a36Sopenharmony_ci 15462306a36Sopenharmony_ciTIPC Crypto Interfaces 15562306a36Sopenharmony_ci---------------------- 15662306a36Sopenharmony_ci 15762306a36Sopenharmony_ci.. kernel-doc:: net/tipc/crypto.c 15862306a36Sopenharmony_ci :internal: 15962306a36Sopenharmony_ci 16062306a36Sopenharmony_ciTIPC Discoverer Interfaces 16162306a36Sopenharmony_ci-------------------------- 16262306a36Sopenharmony_ci 16362306a36Sopenharmony_ci.. kernel-doc:: net/tipc/discover.c 16462306a36Sopenharmony_ci :internal: 16562306a36Sopenharmony_ci 16662306a36Sopenharmony_ciTIPC Link Interfaces 16762306a36Sopenharmony_ci-------------------- 16862306a36Sopenharmony_ci 16962306a36Sopenharmony_ci.. kernel-doc:: net/tipc/link.c 17062306a36Sopenharmony_ci :internal: 17162306a36Sopenharmony_ci 17262306a36Sopenharmony_ciTIPC msg Interfaces 17362306a36Sopenharmony_ci------------------- 17462306a36Sopenharmony_ci 17562306a36Sopenharmony_ci.. kernel-doc:: net/tipc/msg.c 17662306a36Sopenharmony_ci :internal: 17762306a36Sopenharmony_ci 17862306a36Sopenharmony_ciTIPC Name Interfaces 17962306a36Sopenharmony_ci-------------------- 18062306a36Sopenharmony_ci 18162306a36Sopenharmony_ci.. kernel-doc:: net/tipc/name_table.c 18262306a36Sopenharmony_ci :internal: 18362306a36Sopenharmony_ci 18462306a36Sopenharmony_ci.. kernel-doc:: net/tipc/name_distr.c 18562306a36Sopenharmony_ci :internal: 18662306a36Sopenharmony_ci 18762306a36Sopenharmony_ciTIPC Node Management Interfaces 18862306a36Sopenharmony_ci------------------------------- 18962306a36Sopenharmony_ci 19062306a36Sopenharmony_ci.. kernel-doc:: net/tipc/node.c 19162306a36Sopenharmony_ci :internal: 19262306a36Sopenharmony_ci 19362306a36Sopenharmony_ciTIPC Socket Interfaces 19462306a36Sopenharmony_ci---------------------- 19562306a36Sopenharmony_ci 19662306a36Sopenharmony_ci.. kernel-doc:: net/tipc/socket.c 19762306a36Sopenharmony_ci :internal: 19862306a36Sopenharmony_ci 19962306a36Sopenharmony_ciTIPC Network Topology Interfaces 20062306a36Sopenharmony_ci-------------------------------- 20162306a36Sopenharmony_ci 20262306a36Sopenharmony_ci.. kernel-doc:: net/tipc/subscr.c 20362306a36Sopenharmony_ci :internal: 20462306a36Sopenharmony_ci 20562306a36Sopenharmony_ciTIPC Server Interfaces 20662306a36Sopenharmony_ci---------------------- 20762306a36Sopenharmony_ci 20862306a36Sopenharmony_ci.. kernel-doc:: net/tipc/topsrv.c 20962306a36Sopenharmony_ci :internal: 21062306a36Sopenharmony_ci 21162306a36Sopenharmony_ciTIPC Trace Interfaces 21262306a36Sopenharmony_ci--------------------- 21362306a36Sopenharmony_ci 21462306a36Sopenharmony_ci.. kernel-doc:: net/tipc/trace.c 21562306a36Sopenharmony_ci :internal: 216