selftest: net: Test IPv4 PMTU exceptions with DSCP and ECN
authorGuillaume Nault <gnault@redhat.com>
Thu, 17 Mar 2022 12:45:11 +0000 (13:45 +0100)
committerJakub Kicinski <kuba@kernel.org>
Fri, 18 Mar 2022 21:06:45 +0000 (14:06 -0700)
commitec730c3e1f0e3a80612a9be2beb00e2b4f93fe70
treeed392f6ddd3fceed9b25794b834a743d34d547b0
parent544b4dd568e3b09c1ab38a759d3187e7abda11a0
selftest: net: Test IPv4 PMTU exceptions with DSCP and ECN

Add two tests to pmtu.sh, for verifying that PMTU exceptions get
properly created for routes that don't belong to the main table.

A fib-rule based on the packet's DSCP field is used to jump to the
correct table. ECN shouldn't interfere with this process, so each test
has two components: one that only sets DSCP and one that sets both DSCP
and ECN.

One of the test triggers PMTU exceptions using ICMP Echo Requests, the
other using UDP packets (to test different handlers in the kernel).

A few adjustments are necessary in the rest of the script to allow
policy routing scenarios:

  * Add global variable rt_table that allows setup_routing_*() to
    add routes to a specific routing table. By default rt_table is set
    to "main", so existing tests don't need to be modified.

  * Another global variable, policy_mark, is used to define which
    dsfield value is used for policy routing. This variable has no
    effect on tests that don't use policy routing.

  * The UDP version of the test uses socat. So cleanup() now also need
    to kill socat PIDs.

  * route_get_dst_pmtu_from_exception() and route_get_dst_exception()
    now take an optional third argument specifying the dsfield. If
    not specified, 0 is used, so existing users don't need to be
    modified.

Signed-off-by: Guillaume Nault <gnault@redhat.com>
Reviewed-by: David Ahern <dsahern@kernel.org>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
tools/testing/selftests/net/pmtu.sh