We're looking for someone to implement an extension to the Linux network stack. What we're trying to achieve is the aggregation of UDP packets to and from a user-space program, so that multiple packets can be passed in either direction using a single system call. Furthermore, inbound packets are likely to be coming in to a variety of ports.
How we think this can be done:
- a kernel module which:
* for packets on the way in to the machine
- hooks the network stack using NF_HOOK
- checks incoming UDP packets against a list of ports supplied by our user-space program
- if it finds a match, buffers the packet and prevents it being processed further by the vanilla network stack.
* provides user-space interfaces to:
- receive the currently buffered packets (like recv, but returning multiple packets in one call)
- transmit multiple packets
- add and remove ports from the list that we're interested in.
An alternative way of thinking about this is as a version of SOCK_RAW which
(a) filters inbound packets and blocks those that we're interested in from the rest of the network stack, and
(b) aggregates packets to and from user space.
The reason for doing this? We've an application which handles large numbers of small UDP packets on a collection of different ports, and it's spending most of its time context-switching between user-space and the kernel.
We're open to suggestions of other ways to achieve this end.
We're looking for someone experienced in this field: please don't PM me a portfolio of websites created in PHP..