All of lore.kernel.org
 help / color / mirror / Atom feed
* [net-next 00/18] tipc: Introduce Communcation Group feature
@ 2017-10-12 14:02 Jon Maloy
  2017-10-12 14:02 ` [net-next 01/18] tipc: add ability to order and receive topology events in driver Jon Maloy
                   ` (17 more replies)
  0 siblings, 18 replies; 22+ messages in thread
From: Jon Maloy @ 2017-10-12 14:02 UTC (permalink / raw)
  To: davem, netdev; +Cc: parthasarathy.bhuvaragan, ying.xue, tipc-discussion

With this commit series we introduce a 'Group Communication' feature in
order to resolve the datagram and multicast flow control problem. This 
new feature makes it possible to instantiate multiple virtual brokerless
message buses by just creating member sockets.

The main features are as follows:
---------------------------------
- Sockets can join a group via a new setsockopt() call TIPC_GROUP_JOIN.
  If it is the first socket of the group this implies creation of the
  group. This call takes four parameters: 'type' serves as group 
  identifier, 'instance' serves as member identifier, and 'scope' 
  indicates the visibility of the group (node/cluster/zone). Finally,
  'flags' indicates different options for the socket joining the group. 
  For the time being, there are only two such flags: 1) 'LOOPBACK'
  indicates if the creator of the socket wants to receive a copy of 
  broadcast or multicast messages it sends to the group, 2) EVENTS 
  indicates if it wants to receive membership (JOINED/LEFT) events for
  the other members of the group.

- Groups are closed, i.e., sockets which have not joined a group will
  not be able to send messages to or receive messages from members of
  the group, and vice versa. A socket can only be member of one group
  at a time.

- There are four transmission modes.
  1: Unicast. The sender transmits a message using the port identity
     (node:port tuple) of the receiving socket.
  2: Anycast. The sender transmits a message using a port name (type:
     instance:scope) of one of the receiving sockets. If more than
     one member socket matches the given address a destination is 
     selected according to a round-robin algorithm, but also considering
     the destination load (advertised window size) as an additional
     criteria.
  3: Multicast. The sender transmits a message using a port name 
     (type:instance:scope) of one or more of the receiving sockets.
     All sockets in the group matching the given address will receive
     a copy of the message. 
  4: Broadcast. The sender transmits a message using the primtive
     send(). All members of the group, irrespective of their member
     identity (instance) number receive a copy of the message.

- TIPC broadcast is used for carrying messages in mode 3 or 4 when
  this is deemed more efficient, i.e., depending on number of actual
  destinations.

- All transmission modes are flow controlled, so that messages never
  are dropped or rejected, just like we are used to from connection
  oriented communication. A special algorithm guarantees that this is
  true even for multipoint-to-point communication, i.e., at occasions
  where many source sockets may decide to send simultaneously towards
  the same  destination socket.

- Sequence order is always guaranteed, even between the different
  transmission modes.

- Member join/leave events are received in all other member sockets
  in guaranteed order. I.e., a 'JOINED' (an empty message with the OOB
  bit set) will always be received before the first data message from
  a new member, and a 'LEAVE' (like 'JOINED', but with EOR bit set) will
  always arrive after the last data message from a leaving member.

Jon Maloy (18):
  tipc: add ability to order and receive topology events in driver
  tipc: improve address sanity check in tipc_connect()
  tipc: add ability to obtain node availability status from other files
  tipc: refactor function filter_rcv()
  tipc: add new function for sending multiple small messages
  tipc: improve destination linked list
  tipc: introduce communication groups
  tipc: add second source address to recvmsg()/recvfrom()
  tipc: receive group membership events via member socket
  tipc: introduce flow control for group broadcast messages
  tipc: introduce group unicast messaging
  tipc: introduce group anycast messaging
  tipc: introduce group multicast messaging
  tipc: guarantee group unicast doesn't bypass group broadcast
  tipc: guarantee that group broadcast doesn't bypass group unicast
  tipc: guarantee delivery of UP event before first broadcast
  tipc: guarantee delivery of last broadcast before DOWN event
  tipc: add multipoint-to-point flow control

 include/uapi/linux/tipc.h |  15 +
 net/tipc/Makefile         |   2 +-
 net/tipc/bcast.c          |  18 +-
 net/tipc/core.h           |   5 +
 net/tipc/group.c          | 874 ++++++++++++++++++++++++++++++++++++++++++++++
 net/tipc/group.h          |  73 ++++
 net/tipc/link.c           |   9 +-
 net/tipc/msg.c            |   7 +
 net/tipc/msg.h            | 110 +++++-
 net/tipc/name_table.c     | 174 ++++++---
 net/tipc/name_table.h     |  28 +-
 net/tipc/node.c           |  42 ++-
 net/tipc/node.h           |   5 +-
 net/tipc/server.c         | 121 +++++--
 net/tipc/server.h         |   5 +-
 net/tipc/socket.c         | 770 +++++++++++++++++++++++++++++++---------
 16 files changed, 1988 insertions(+), 270 deletions(-)
 create mode 100644 net/tipc/group.c
 create mode 100644 net/tipc/group.h

-- 
2.1.4

^ permalink raw reply	[flat|nested] 22+ messages in thread

end of thread, other threads:[~2017-10-12 18:57 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-10-12 14:02 [net-next 00/18] tipc: Introduce Communcation Group feature Jon Maloy
2017-10-12 14:02 ` [net-next 01/18] tipc: add ability to order and receive topology events in driver Jon Maloy
2017-10-12 18:54   ` David Miller
2017-10-12 14:02 ` [net-next 02/18] tipc: improve address sanity check in tipc_connect() Jon Maloy
2017-10-12 14:02 ` [net-next 03/18] tipc: add ability to obtain node availability status from other files Jon Maloy
2017-10-12 14:02 ` [net-next 04/18] tipc: refactor function filter_rcv() Jon Maloy
2017-10-12 18:56   ` David Miller
2017-10-12 14:02 ` [net-next 05/18] tipc: add new function for sending multiple small messages Jon Maloy
2017-10-12 14:02 ` [net-next 06/18] tipc: improve destination linked list Jon Maloy
2017-10-12 18:57   ` David Miller
2017-10-12 14:02 ` [net-next 07/18] tipc: introduce communication groups Jon Maloy
2017-10-12 14:02 ` [net-next 08/18] tipc: add second source address to recvmsg()/recvfrom() Jon Maloy
2017-10-12 14:02 ` [net-next 09/18] tipc: receive group membership events via member socket Jon Maloy
2017-10-12 14:02 ` [net-next 10/18] tipc: introduce flow control for group broadcast messages Jon Maloy
2017-10-12 14:02 ` [net-next 11/18] tipc: introduce group unicast messaging Jon Maloy
2017-10-12 14:02 ` [net-next 12/18] tipc: introduce group anycast messaging Jon Maloy
2017-10-12 14:02 ` [net-next 13/18] tipc: introduce group multicast messaging Jon Maloy
2017-10-12 14:02 ` [net-next 14/18] tipc: guarantee group unicast doesn't bypass group broadcast Jon Maloy
2017-10-12 14:02 ` [net-next 15/18] tipc: guarantee that group broadcast doesn't bypass group unicast Jon Maloy
2017-10-12 14:02 ` [net-next 16/18] tipc: guarantee delivery of UP event before first broadcast Jon Maloy
2017-10-12 14:02 ` [net-next 17/18] tipc: guarantee delivery of last broadcast before DOWN event Jon Maloy
2017-10-12 14:02 ` [net-next 18/18] tipc: add multipoint-to-point flow control Jon Maloy

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.