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;