Expand description
§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");
Re-exports§
pub use socket::BindFlags;
pub use socket::LibbpfFlags;
pub use socket::RxQueue;
pub use socket::Socket;
pub use socket::SocketConfig;
pub use socket::SocketConfigBuilder;
pub use socket::TxQueue;
pub use socket::XdpFlags;
pub use umem::AccessError;
pub use umem::CompQueue;
pub use umem::DataError;
pub use umem::FillQueue;
pub use umem::Frame;
pub use umem::Umem;
pub use umem::UmemBuilder;
pub use umem::UmemConfig;
pub use umem::UmemConfigBuilder;
pub use umem::WriteError;