use netring::afxdp::{XdpMode, XdpSocketBuilder};
fn main() -> Result<(), netring::Error> {
let iface = std::env::args().nth(1).unwrap_or_else(|| "lo".into());
eprintln!("Opening AF_XDP socket on {iface} (TX only, no BPF program needed)");
let mut xdp = XdpSocketBuilder::default()
.interface(&iface)
.queue_id(0)
.mode(XdpMode::Tx)
.build()?;
for i in 0u16..10 {
let mut frame = vec![0u8; 64];
frame[0..6].copy_from_slice(&[0xff; 6]);
frame[6..12].copy_from_slice(&[0x00; 6]);
frame[12..14].copy_from_slice(&0x0800u16.to_be_bytes());
frame[14..16].copy_from_slice(&i.to_be_bytes());
match xdp.send(&frame)? {
true => eprintln!(" queued frame {i}"),
false => eprintln!(" TX ring full, dropped frame {i}"),
}
}
xdp.flush()?;
eprintln!("Flushed — sent 10 frames via AF_XDP on {iface}");
Ok(())
}