Browse Source

Add the README w/ the status of the project...

main
John-Mark Gurney 3 years ago
parent
commit
2602bf72fe
1 changed files with 67 additions and 0 deletions
  1. +67
    -0
      README.md

+ 67
- 0
README.md View File

@@ -0,0 +1,67 @@
Testing FreeBSD ethernet Interfaces
===================================

This project is on pause for now, but contains work that I've done in
late 2020 and early 2021 to try to create a test suite to make sure that
FreeBSD ethernet drivers are programmed correctly, and have the correct
behaviors.

It is easy to assume that if an interface passes traffic that things are
working properly, but there is much more to it than that. As far as I
can tell, there is no comprehensive test suite to validate that a driver
works as expected, and that the features it claims to implement are
properly implemented.

A non-exhaustive list of features that could be listed as supported, but
not working are jumbo frames (large MTU), hardware VLAN tagging, and
checksum offload. In the case of the last two, a driver can claim to
support these, but if the underlying bits in ifnet structure are not set,
nothing will happen. Another example is that a driver could just always
set that the checksum is valid, even when it is not. In most cases, this
won't be noticed, and with many protocols doing their own verification
(ssh and TLS), it will just result in a dropped connection, but in other
cases it will cause data corruption.

As part of this project, two sets of patches were developed, one is the
[kvm_ctf branch](https://www.funkthat.com/gitea/jmg/freebsd/src/branch/kvm_ctf)
which implements the begining of an ABI agnostic method for transfering
data from kernel to userland (and possibly back w/ some adaptations).
It uses [Compact C Type Format](https://www.freebsd.org/cgi/man.cgi?query=ctf&apropos=0&sektion=0&manpath=FreeBSD+12.2-RELEASE+and+Ports&arch=default&format=html)
to understand the layout of kernel data structures and the member sizes.
The good thing about this is that it can, and will work against core
dumps. It would allow for minimal changes existing programs that use
libkvm to get forwards compatibility.

The other part is a custom DLT for fetching the mbuf csum flags on
packets. This covers both TX and RX, so can be used to verify that
transmitted checksums are correctly updated AND verify that the
correct flags are set on received packets. The code for this is
available on the [dlt_mbuf branch](https://www.funkthat.com/gitea/jmg/freebsd/src/branch/dlt_mbuf).
The `bpf.py` file contains interface code for opening the BPF device
and returning the necessary information.


testinterfaces.sh
=================

This is the initial shell script version. It uses a pair of FreeBSD
jails w/ vnets, one with the interface under test, and another interface
that is used to generate and receive the necessary test packets. This
has the advantage that it tests the full network stack, but due to
various bugs, both in the FreeBSD IP stack (IPv6 addresses don't always
get assigned properly), and possibly the driver (needing packets in the
opposite direction to happen before they flow), it makes this a bit
difficult to fully test.

testeth.py
==========

This was started to allow direct inspection of the checksum flags.
One advantage is that as packets can be generated and sent w/
scapy/BPF, jails+vnets are not required, nor is the IP stack involved.
The disadvantage is that it does not (currently) test the full network
stack.

Some progress has been made in replicating the features of the shell
script, but this program is not as nearly complete, nor tested as the
shell version.

Loading…
Cancel
Save