The iWARP Port Mapper Daemon provides a user space service (iwpmd) for the iWarp drivers to claim tcp ports through the standard socket interface.
The kernel space support for the port mapper is part of the iw_cm module. The ib_core module includes netlink support, which is used by the port mapper clients to exchange messages with iwpmd. Both modules iw_cm and ib_core need to be loaded in order for the libiwpm service to start successfully.
Iwarp Port Mapping Details
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.
- -s, --systemd
- Enable systemd integration.
SIGUSR1 will force a dump of the current mappings to the system message log.
SIGTERM/SIGHUP will force iwpmd to exit.