Here is a list of some things that I have implemented and others that I am slowly working on.
- Automatically discovers numerically highest IP address to use as the accelerator ID. Excluding the loopback IP address 127.0.0.1. Duplicate accelerator ID’s would prevent the accelerator auto detection logic from functioning.
- Determines the number of cores in the system and creates N-1 worker threads for processing IP packets. If there is only one core a single worker thread is created.
- All packets for a particular session are assigned to the same worker thread. The packets for that session get processed in the order they are received to maintain packet delivery sequence.
- Only packets of TCP sessions with modified MSS will be processed. The modified MSS provides space for injection of custom TCP options used by the accelerators.
- Discovers other network accelerators by detecting custom TCP options the accelerators add to IP packets.
- Detects when remote network accelerator fails or is shutdown and stops accelerating packets.
- Optimizes TCP segment payload using LZ compression.
- Pads SEQ numbers of optimized TCP payloads so they will not be processed by the destination. They must be de-optimized by the destination network accelerator to fix SEQ number.
- Checks for dead sessions by sending keep-alive messages to inactive clients/servers and removes dead sessions the session table.
- Heartbeat between user space daemon and kernel module so kernel module can switch to bypass mode.
- Block based data reduction. Create signatures for blocks in TCP payloads and send those in place of the actual payload. A tunneless persistent dictionary compression system between multiple devices.
- WCCPv2 Client for load balancing and out-of-line deployment.
- CLI for configuration and statistics.
- Return packets to previous-hop router. Determine if packets originated from a router other than the default gateway and return packet to the original router to fix some asymmetric routing issues.
- Web Interface for configuration and statistics.
- Add in-line support to kernel driver for network cards in bridge mode. Also test with fail-to-wire network cards.
- Implement VRRP peering for out-of-line deployment. Include GARP poisoning of router arp table or other method to receive returning traffic.