[GSOC 2017] TCP optimization Report 4

Blog post by a-star on Fri, 2017-07-14 03:58

Hello everyone.

Since my last report, apart from working on the remaining changes, I have been more focused towards testing the tcp module against the already made changes. In the first week of the previous month I did try to port a testing tool to Haiku but did not succeed. So I have been writing a tool of my own to artifically inject packets into the stack and read the replies.

I did a little research on the ways to unit test the tcp stack and found this article to be particularly interesting. Down in the comments one can find the mention of the tool packetdrill. It uses TUN/TAP virtual kernel devices to perform local testing. But then Haiku doesn't have a tun device as of now. So I went forward with injecting packets from the host system which is running the virtual machine; inside which is running Haiku.

Meet "pi"

pi is a packet injector tool I have been working on. It is a user level packet injector that uses libpcap to inject and read packets. At present it can only deal with ipv4 tcp packets with a link layer header of type en10mb but that's good enough for running the tests I am interested in.

Click here to visit the github page. The README for the repository contains decent information about how to go about using the tool. Also checkout the demo video I created [link] featuring a test for the TCP's fast retransmit algorithm. I would really appreciate it you all can take a look at the video and provide review for the tool.

Having the ability to artifically inject packets with specific characteristics have been really useful in testing the edge cases. I have set up my virtual machine so that the serial port COM1 output is redirected to a file. I can read all the debug information generated by the TCP module from there. So what I am doing is I use pi to inject certain types of packets and then I review the debugging information generated. The tool will surely help me speed up my pace.