Version: 1
-Previous: aedafb597f82e6b6649111f35fbb238e20a3757b
-Head: 827b4dbdb0cc47f1ccf1f8385a8636147f3b0233
+Previous: fc63ca85a100afd66667b38f06c0a01f406ec01f
+Head: 096a4c37a98b2c1bc46e0661ef8604f7a3a7ddc9
Applied:
- dsocket: 142a13708f69f13c6676f4d97f06ffdb6d50ec40
- refresh-temp: 827b4dbdb0cc47f1ccf1f8385a8636147f3b0233
+ dsocket: 096a4c37a98b2c1bc46e0661ef8604f7a3a7ddc9
Unapplied:
udpong: 9be27dcb8cb68c71a2db871b8f25e35a494c31a3
test-udp: f6c78ad2a26f452cf166aff1baa7b76160bd8bf7
rsocket: Add datagram support
+Add datagram support through the rsocket API.
+
+Datagram support is handled through an entirely different protocol and
+internal implementation than streaming sockets. Unlike connected rsockets,
+datagram rsockets are not necessarily bound to a network (IP) address.
+A datagram socket may use any number of network (IP) addresses, including
+those which map to different RDMA devices. As a result, a single datagram
+rsocket must support using multiple RDMA devices and ports, and a datagram
+rsocket references a single UDP socket, plus zero or more UD QPs.
+
+Rsockets uses headers inserted before user data sent over UDP sockets to
+resolve remote UD QP numbers. When a user first attempts to send a datagram
+to a remote address (IP and UDP port), rsockets will take the following steps:
+
+1. Store the destination address into a lookup table.
+2. Resolve which local network address should be used when sending
+ to the specified destination.
+3. Allocate a UD QP on the RDMA device associated with the local address.
+4. Send the user's datagram to the remote UDP socket.
+
+A header is inserted before the user's datagram. The header specifies the
+UD QP number associated with the local network address (IP and UDP port) of
+the send.
+
+A service thread is used to process messages received on the UDP socket. This
+thread updates the rsocket lookup tables with the remote QPN and path record
+data. The service thread forwards data received on the UDP socket to an
+rsocket QP. After the remote QPN and path records have been resolved, datagram
+communication between two nodes are done over the UD QP.
+
Signed-off-by: Sean Hefty <sean.hefty@intel.com>