How to have Connectx Rx packets into a large block of contiguous memory as opposed to per packet descriptors

I am working on a project where we want to be able to give the Connectx NIC (we are using Connectx-6 Dx cards currently) a large block of contiguous memory and to have the NIC Rx and packet packets off the wire into that memory until we tell it switch to another contiguous block of memory.

As an example, say we tell the NIC to serially pack all packets into large buffer A, then after X microseconds we have it switch to large buffer B as we then process buffer A in user-space.

Is that possible today?

Depend what OS libs you use.

EG, linux socket API.

include/sys/socket.h

I don’t follow… How does using socket() do what I described?

I am currently using DPDK and processing packets on a per packet basis, but open to other suggestions.

It sounds like the closest thing to what you want would be to use the ibverbs API and multi-packet receive queue (MPRQ) mode. It’s not well-documented, but it is discussed in the DPDK documentation: https://doc.dpdk.org/guides/nics/mlx5.html