The iWARP Port Mapper implementation is based on the port mapper specification section in the Sockets
Direct Protocol: http://www.rdmaconsortium.org/home/draft-pinkerton-iwarp-sdp-v1.0.pdf
Existing iWARP RDMA providers use the same IP address as the native TCP/IP stack when creating RDMA
connections. They need a mechanism to claim the TCP ports used for RDMA connections to prevent TCP port
collisions when other host applications use TCP ports. The iWARP Port Mapper provides a standard
mechanism to accomplish this. Without this service it is possible for RDMA application to bind/listen on
the same port which is already being used by native TCP host application. If that happens the incoming
TCP connection data can be passed to the RDMA stack with error.
The iWARP Connection Manager (port mapper client) sends to the IWPM service the local IP address and TCP
port it has received from the RDMA application, when starting a connection. The IWPM service performs a
socket bind from user space to get an available TCP port, called a mapped port, and communicates it back
to the client. In that sense, the IWPM service is used to map the TCP port, which the RDMA application
uses to any port available from the host TCP port space. The mapped ports are used in iWARP RDMA
connections to avoid collisions with native TCP stack which is aware that these ports are taken. When an
RDMA connection using a mapped port is terminated, the client notifies the IWPM service, which then
releases the TCP port.
The message exchange between iwpmd and the iWARP Connection Manager (between user space and kernel space)
is implemented using netlink sockets.