• Coco Li's avatar
    selftests/net: GRO coalesce test · 7d157501
    Coco Li authored
    Implement a GRO testsuite that expects Linux kernel GRO behavior.
    All tests pass with the kernel software GRO stack. Run against a device
    with hardware GRO to verify that it matches the software stack.
    
    gro.c generates packets and sends them out through a packet socket. The
    receiver in gro.c (run separately) receives the packets on a packet
    socket, filters them by destination ports using BPF and checks the
    packet geometry to see whether GRO was applied.
    
    gro.sh provides a wrapper to run the gro.c in NIC loopback mode.
    It is not included in continuous testing because it modifies network
    configuration around a physical NIC: gro.sh sets the NIC in loopback
    mode, creates macvlan devices on the physical device in separate
    namespaces, and sends traffic generated by gro.c between the two
    namespaces to observe coalescing behavior.
    
    GRO coalescing is time sensitive.
    Some tests may prove flaky on some hardware.
    
    Note that this test suite tests for software GRO unless hardware GRO is
    enabled (ethtool -K $DEV rx-gro-hw on).
    
    To test, run ./gro.sh.
    The wrapper will output success or failed test names, and generate
    log.txt and stderr.
    
    Sample log.txt result:
    ...
    pure data packet of same size: Test succeeded
    
    large data packets followed by a smaller one: Test succeeded
    
    small data packets followed by a larger one: Test succeeded
    ...
    
    Sample stderr result:
    ...
    carrier ready
    running test ipv4 data
    Expected {200 }, Total 1 packets
    Received {200 }, Total 1 packets.
    ...
    Signed-off-by: default avatarCoco Li <lixiaoyan@google.com>
    Reviewed-by: default avatarWillem de Bruijn <willemb@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    7d157501
gro.c 32.2 KB