SPI: Semantics for joining multipoint leaves

In the following, a multipoint socket is frequently characterized by describing its role in one of the two planes (control or data). It should be understood that this same socket has a role in the other plane, but this is not mentioned in order to keep the references short. For example a reference to a "c_root socket" could refer to either a c_root/d_root or a c_root/d_leaf socket.

In rooted control plane schemes, new leaf nodes are added to a multipoint session in one or both of two different ways. In the first method, the root uses WSPJoinLeaf to initiate a connection with a leaf node and invite it to become a participant. On the leaf node, the peer application must have created a c_leaf socket and used WSPListen to set it into listen mode. The leaf node will receive an FD_ACCEPT indication when invited to join the session, and signals its willingness to join by calling WSPAccept. The root application will receive an FD_CONNECT indication when the join operation has been completed.

In the second method, the roles are essentially reversed. The root client creates a c_root socket and sets it into listen mode. A leaf node wishing to join the session creates a c_leaf socket and uses WSPJoinLeaf to initiate the connection and request admittance. The root client receives FD_ACCEPT when an incoming admittance request arrives, and admits the leaf node by calling WSPAccept. The leaf node receives FD_CONNECT when it has been admitted.

In a non-rooted control plane, where all nodes are c_leaf's, the WSPJoinLeaf function is used to initiate the inclusion of a node into an existing multipoint session. An FD_CONNECT indication is provided when the join has been completed and the returned socket descriptor is useable in the multipoint session. In the case of IP multicast, this would correspond to the IP_ADD_MEMBERSHIP socket option.

There are, therefore, three instances where a client would use WSPJoinLeaf:

  1. Acting as a multipoint root and inviting a new leaf to join the session
  2. Acting as a leaf making an admittance request to a rooted multipoint session
  3. Acting as a leaf seeking admittance to a non-rooted multipoint session (e.g. IP multicast)