History log of /freebsd-current/tests/sys/net/routing/test_rtsock_l3.c
Revision Date Author Comments
# b3e76948 16-Aug-2023 Warner Losh <imp@FreeBSD.org>

Remove $FreeBSD$: two-line .h pattern

Remove /^\s*\*\n \*\s+\$FreeBSD\$$\n/


# 4d846d26 10-May-2023 Warner Losh <imp@FreeBSD.org>

spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD

The SPDX folks have obsoleted the BSD-2-Clause-FreeBSD identifier. Catch
up to that fact and revert to their recommended match of BSD-2-Clause.

Discussed with: pfg
MFC After: 3 days
Sponsored by: Netflix


# 67f2f67f 21-Apr-2021 Alex Richardson <arichardson@FreeBSD.org>

Update rtsock_l3 test after 2fe5a79425c79f7b828acd91da66d97230925fc8

Two of these tests now pass. Looking at Jenkins to find the first commit
where this behaviour changed indicates that
2fe5a79425c79f7b828acd91da66d97230925fc8 is the most likely cause.

Reviewed By: melifaro
Differential Revision: https://reviews.freebsd.org/D28886


# 83532eb6 07-Apr-2021 Alex Richardson <arichardson@FreeBSD.org>

tests/sys/net/routing: XFAIL the two failing tests

They have been failing for 1.5 months and the patch to fix them is stuck
in review so mark them as XFAIL for now to get Jenkins back to green.

To be reverted when https://reviews.freebsd.org/D28886 (or similar) is
commited.

Reviewed By: kp
MFC after: 3 days
Differential Revision: https://reviews.freebsd.org/D29528


# 81728a53 08-Jan-2021 Alexander V. Chernikov <melifaro@FreeBSD.org>

Split rtinit() into multiple functions.

rtinit[1]() is a function used to add or remove interface address prefix routes,
similar to ifa_maintain_loopback_route().
It was intended to be family-agnostic. There is a problem with this approach
in reality.

1) IPv6 code does not use it for the ifa routes. There is a separate layer,
nd6_prelist_(), providing interface for maintaining interface routes. Its part,
responsible for the actual route table interaction, mimics rtenty() code.

2) rtinit tries to combine multiple actions in the same function: constructing
proper route attributes and handling iterations over multiple fibs, for the
non-zero net.add_addr_allfibs use case. It notably increases the code complexity.

3) dstaddr handling. flags parameter re-uses RTF_ flags. As there is no special flag
for p2p connections, host routes and p2p routes are handled in the same way.
Additionally, mapping IFA flags to RTF flags makes the interface pretty messy.
It make rtinit() to clash with ifa_mainain_loopback_route() for IPV4 interface
aliases.

4) rtinit() is the last customer passing non-masked prefixes to rib_action(),
complicating rib_action() implementation.

5) rtinit() coupled ifa announce/withdrawal notifications, producing "false positive"
ifa messages in certain corner cases.

To address all these points, the following has been done:

* rtinit() has been split into multiple functions:
- Route attribute construction were moved to the per-address-family functions,
dealing with (2), (3) and (4).
- funnction providing net.add_addr_allfibs handling and route rtsock notificaions
is the new routing table inteface.
- rtsock ifa notificaion has been moved out as well. resulting set of funcion are only
responsible for the actual route notifications.

Side effects:
* /32 alias does not result in interface routes (/32 route and "host" route)
* RTF_PINNED is now set for IPv6 prefixes corresponding to the interface addresses

Differential revision: https://reviews.freebsd.org/D28186


# 1b95005e 04-Oct-2020 Alexander V. Chernikov <melifaro@FreeBSD.org>

Fix route flags update during RTM_CHANGE.
Nexthop lookup was not consireding rt_flags when doing
structure comparison, which lead to an original nexthop
selection when changing flags. Fix the case by adding
rt_flags field into comparison and rearranging nhop_priv
fields to allow for efficient matching.
Fix `route change X/Y flags` case - recent changes
disallowed specifying RTF_GATEWAY flag without actual gateway.
It turns out, route(8) fills in RTF_GATEWAY by default, unless
-interface flag is specified. Fix regression by clearing
RTF_GATEWAY flag instead of failing.
Fix route flag reporting in RTM_CHANGE messages by explicitly
updating rtm_flags after operation competion.
Add IPv4/IPv6 tests for flag-only route changes.


# 5676d488 22-Aug-2020 Alexander V. Chernikov <melifaro@FreeBSD.org>

Add test for checking RTF_HOST and RTAX_NETMASK inconsistency.

RTF_HOST indicates whether route is a host route
(netmask is empty or /{32,128}).
Check that if netmask is empty and host route is not specified, kernel
returns an error.

Differential Revision: https://reviews.freebsd.org/D26155


# 272bd698 02-Apr-2020 Alexander V. Chernikov <melifaro@FreeBSD.org>

Add routing tests verifying basic RTM_CHANGE functionality.

MFC after: 2 weeks
Differential Revision: https://reviews.freebsd.org/D24239


# ddc75076 29-Mar-2020 Alexander V. Chernikov <melifaro@FreeBSD.org>

Switch rtsock tests to per-test jails and epair interfaces.

Many rtsock tests verify the ordering of the kernel messages for the
particular event. In order to avoid flaky tests due to the other tests
running, switch all tests to use personal vnet-enabled jails.
This removes all clashes on the IP addresses and brings back the ability
to run these tests simultaneously.

Reported by: olivier
Reviewed by: olivier
Differential Revision: https://reviews.freebsd.org/D24182


# 5b697c5b 16-Feb-2020 Li-Wen Hsu <lwhsu@FreeBSD.org>

Remove trailing whitespace

Sponsored by: The FreeBSD Foundation


# 34a5582c 22-Jan-2020 Alexander V. Chernikov <melifaro@FreeBSD.org>

Bring back redirect route expiration.

Redirect (and temporal) route expiration was broken a while ago.
This change brings route expiration back, with unified IPv4/IPv6 handling code.

It introduces net.inet.icmp.redirtimeout sysctl, allowing to set
an expiration time for redirected routes. It defaults to 10 minutes,
analogues with net.inet6.icmp6.redirtimeout.

Implementation uses separate file, route_temporal.c, as route.c is already
bloated with tons of different functions.
Internally, expiration is implemented as an per-rnh callout scheduled when
route with non-zero rt_expire time is added or rt_expire is changed.
It does not add any overhead when no temporal routes are present.

Callout traverses entire routing tree under wlock, scheduling expired routes
for deletion and calculating the next time it needs to be run. The rationale
for such implemention is the following: typically workloads requiring large
amount of routes have redirects turned off already, while the systems with
small amount of routes will not inhibit large overhead during tree traversal.

This changes also fixes netstat -rn display of route expiration time, which
has been broken since the conversion from kread() to sysctl.

Reviewed by: bz
MFC after: 3 weeks
Differential Revision: https://reviews.freebsd.org/D23075


# ac0bea76 10-Jan-2020 Alexander V. Chernikov <melifaro@FreeBSD.org>

Include human-readable list of rtm flags along with bitmask in error messages
for rtsock tests.

MFC after: 2 weeks


# e02d3fe7 07-Jan-2020 Alexander V. Chernikov <melifaro@FreeBSD.org>

Fix rtsock route message generation for interface addresses.

Reviewed by: olivier
MFC after: 1 month
Differential Revision: https://reviews.freebsd.org/D22974


# 775dc861 27-Dec-2019 Alexander V. Chernikov <melifaro@FreeBSD.org>

Add userland tests for route table/lltable rtsock operations.

MFC after: 2 weeks
Differential Revision: https://reviews.freebsd.org/D22860