Differences between revisions 2 and 3
Revision 2 as of 2016-05-02T17:52:09+0000
Size: 5508
Editor: ShivanshRai
Comment:
Revision 3 as of 2016-05-04T06:08:49+0000
Size: 5509
Editor: ShivanshRai
Comment:
Deletions are marked like this. Additions are marked like this.
Line 5: Line 5:

== Project Updates ==
The updates regarding the state of the project can be found [[/updates|here]].
Line 75: Line 78:
== Project Updates ==
The updates regarding the state of the project can be found [[/updates|here]]

TCP/IP Regression Test Suite

  • Student : Shivansh Rai(<shivanshrai84@gmail.com>)

  • Mentor : Hiren Panchasara(<hiren@freebsd.org>)

Project Updates

The updates regarding the state of the project can be found here.

Overview

Regression testing is one of the most critical elements of the test artifacts and proves to be one of the most preventive measures for testing a software. Currently, within FreeBSD, there is no such tool to perform regression testing of the TCP/IP network stack. The purpose of this project is to develop tests using a regression testing tool which can then be integrated with FreeBSD. Once integrated, the tool will also facilitate further development of such tests. The regression testing tool of choice here is packetdrill.

Project description

packetdrill currently supports testing multiple scenarios for TCP/IP protocol suite within Linux. This project aims to design and implement a wire level regression test suite for FreeBSD using packetdrill. The test suite will exercise various states in the TCP/IP protocol suite, with both IPv4 and IPv6 support. Besides Linux, the packetdrill tool works on {Free, Net, Open} BSD. The existing Linux test suite implemented within packetdrill will provide a basis for understanding, and implementation of the FreeBSD test suite. For the current scope of the project, only a subset of the existing test scenarios will be implemented.

Why Packetdrill?

While valuable for measuring overall performance, TCP regression testing with netperf, application load tests, or production workloads can fail to reveal significant functional bugs in congestion control, loss recovery, flow control, security, DoS hardening and protocol state machines. Such approaches suffer from noise due to variations in site/network conditions or content, and a lack of precision and isolation, thus bugs in these areas can go unnoticed. Since netperf is supposed to be more for benchmarking purposes and what we are trying to do is measure correctness, packetdrill, which was built with the same mindset, seemed an apt choice for this project.

Deliverables

  • Development of TCP/IP based test suite for FreeBSD using packetdrill.

  • Attempt at covering all the scenarios implemented in packetdrill for Linux.

  • If all the existing scenarios from Linux have been covered, attempt at working on new scenarios.
  • Attempt to create tests based on UDP and those related to sockets.

  • packetdrill currently supports testing only a single connection at a time. An attempt will be made to patch it to support multiple concurrent connections.

  • The current remote mode available in packetdrill allows testing a remote host provided there is already an instance of packetdrill running on it. There is not yet support for testing a remote host that does not have packetdrill running. One such approach for enabling support for this can be that instead of getting command line arguments and the script over a TCP connection, the current instance can get it directly. Hence, the logic for handshake with the client will be removed, the packets will be injected and the client will wait for inbound packets.

Scenarios to be covered

The following scenarios will be covered initially -

  • Three-way handshake (done)

  • Reset from closed state
  • Reset from non-synchronized state
  • Reset from synchronized state
  • TCP options establishment (5 tests contributed)

  • Sliding window protocol
  • Urgent pointer
  • Selective acknowledgements
  • TCP timestamps
  • Time-wait configuration
  • Connection close
  • Simultaneous close
  • Receive ACKs, RSTs, and URGs while window is zero
  • Receive window size advertisement
  • Transmit window size advertisement
  • Support partner shrinking window
  • Silly window syndrome avoidance
  • Zero window handling
  • Zero window probing

Milestones

Start

End

Task

23 May

Start of coding

23 May

24 May

Checking for compatibility of previously developed tests for Linux with FreeBSD

24 May

19 June

Manual development of tests based on TCP, considering all the scenarios covered in Linux tests

20 June

27 June

Mid-term Evaluations

28 June

14 July

Attempt at developing new tests based on UDP and socket based tests for FreeBSD

15 July

31 July

Attempt at patching packetdrill by adding a new mode of testing in which the remote host will not need an instance of packetdrill running

1 Aug

11 Aug

Attempt at patching packetdrill to support multiple concurrent connections

12 Aug

14 Aug

Code review

15 Aug

End of coding (soft)

23 Aug

End of coding (hard)

Test Plan

packetdrill supports two modes of testing - local and remote. A TUN virtual network device is used in the local testing and a physical NIC is used for remote testing. Local testing is relatively easier to use because there is less timing variation and the users need not coordinate access to multiple machines.

The following tests will be done in order to ensure proper functioning of the tests as desired -

  • Local mode testing
  • Remote mode testing
  • IPv4 and IPv6 protocol testing

The Code

Github

SummerOfCode2016/TCP-IP-RegressionTestSuite (last edited 2020-10-28T00:34:51+0000 by SashaVigole)