This project was initially put together to demo the AF_Packet support in .NET Core (as of 3.0 Preview 6)
What's working now?
- Socket server to simulate an application with both local and remote clients
- Number of local and remote clients can be scaled up/down by changing the int to the number you want
- Packet capture threads are explicitly bound to a given interface
- Packet capture threads per interface can be scaled up/down by changing the int to the number you want
- Inbound/Outbound capture on local interface
- Inbound/Outbound capture on network interface
- Packet fanout, specifically hash mode for capturing across multiple threads
- BPF Filtering (hardcoded pseudo asm, but proves the concept)
What's in the works?
- Generate BPF pseudo asm
- Experiment with using MMAP and bypassing .NET's ReceiveAsync. The idea is that the kernel can just shove the packets straight into our userspace without it having to do it's copy before we get it.