Description
Context
Currently, the XDP programs created by catpowder will capture all traffic on the interface. This is not necessarily desirable, as it will prevent regular traffic from flowing through the Windows kernel data path. Additionally, the port allocation schema will not respect ports reserved by the kernel.
Proposed Solution
Restructure the Catpowder windows LibOS to rebind XDP rules when a socket is bound or connected. Scope the rules such that XDP only inspects traffic relevant to the protocol/port. Add a new port manager to the layer4 components to replace the ephemeral port allocation and port binding which will validate ports against kernel-allocated ports (e.g., but creating a WinSock socket and binding it) and reserve those ports for use by Demikernel (i.e., so that no other application can attempt to use them through the kernel networking stack)
Alternative Solutions
I have no idea whether this is supported by XDP for Windows, but in theory unneeded traffic could be re-injected to the driver stack for processing by the kernel.