Crate xdpsock[][src]

xdpsock

A rust interface for AF_XDP sockets using libbpf.

use xdpsock::{
   socket::{BindFlags, SocketConfig, SocketConfigBuilder, XdpFlags},
   umem::{UmemConfig, UmemConfigBuilder},
   xsk::Xsk2,
};

// Configuration
let umem_config = UmemConfigBuilder::new()
   .frame_count(8192)
   .comp_queue_size(4096)
   .fill_queue_size(4096)
   .build()
   .unwrap();

let socket_config = SocketConfigBuilder::new()
   .tx_queue_size(4096)
   .rx_queue_size(4096)
   .bind_flags(BindFlags::XDP_COPY) // Check your driver to see if you can use ZERO_COPY
   .xdp_flags(XdpFlags::XDP_FLAGS_SKB_MODE) // Check your driver to see if you can use DRV_MODE
   .build()
   .unwrap();

let n_tx_frames = umem_config.frame_count() / 2;

let ifname = "veth0";
let mut xsk = Xsk2::new(&ifname, 0, umem_config, socket_config, n_tx_frames as usize);

// Sending a packet
let pkt: Vec<u8> = vec![];
xsk.send(&pkt);

// Receiving a packet
let (recvd_pkt, len) = xsk.recv().expect("failed to recv");