In the "Raw Ethernet Programming: Basic Introduction - Code Example" post, when trying to run the receiver code, it fails when trying to create the qp. "I get Couldn't create RSS QP" and the code exits. Any thoughts on what might be wrong? Thanks.

I am trying to to run this on a computer that has four MCX515A-CCAT installed. Each NIC is connected, point-to-point, with another computer. In the past, I’ve successfully transferred data between the two computers using RDMA UD and RDMA UC.

DEST_MAC in the code has been updated with the mac address of the card (mlx5_0) that I am

trying to work with.

The OS is RHEL7.6. Below I’ve pasted some of the information that is output by the mlnx_tune -r command.

Driver Status

OK: MLNX_OFED_LINUX-4.7- (OFED-4.7-1.0.0)

ConnectX-5 Device Status on PCI 18:00.0

FW version 16.26.1040

OK: PCI Width x16

OK: PCI Speed 8GT/s

PCI Max Payload Size 256

PCI Max Read Request 512

Local CPUs list [0, 1, 2, 3, 4, 5, 6, 7, 16, 17, 18, 19, 20, 21, 22, 23]

enp24s0 (Port 1) Status

Link Type eth

OK: Link status Up

Speed 100GbE

MTU 5000

OK: TX nocache copy ‘off’

I found a work around to my problem, although I don’t fully understand it. When I was running the example program as a normal user, the call to ibv_create_qp would fail. If I changed the qp type from IBV_QPT_RAW_PACKET to IBV_QPT_RC, the code would make it past ibv_create_qp. When the qp type is IBV_QPT_RAW_PACKET, the only way the program would make it past ibv_create_qp is if it were run as user root.

To get the code running as it does in the example, I had to make a few changes. DST_MAC, SRC_MAC, and DEST_MAC were updated to be the mac addresses of the NICs being used. Those were explained in the comments in the code and were to be expected. I also had to update the .src_mac field to SRC_MAC in the register steering rule section of the mp_rq.c file.