Commit graph

135 commits

Author SHA1 Message Date
Stanislas FAYE
6e30e37ebe test: disable vlan_xgress unit test
Disable the vlan_xgress unit test which was failing.
This test is currently being work and is going to be fixed soon.
2024-02-22 12:29:12 +01:00
Gris Ge
f990f9b4e4 bridge: skip VLAN filtering resetting in reapply if no vlan change changed
When doing reapply on linux bridge interface, NetworkManager will reset
the VLAN filtering and default PVID which cause PVID been readded to all
bridge ports regardless they are managed by NetworkManager.

This is because Linux kernel will re-add PVID to bridge port upon the
changes of bridge default-pvid value.

To fix the issue, this patch introduce netlink parsing code for
`vlan_filtering` and `default_pvid` of NMPlatformLnkBridge, and use that
to compare desired VLAN filtering settings, skip the reset of VLAN
filter if `default_pvid` and `vlan_filtering` are unchanged.

Signed-off-by: Gris Ge <fge@redhat.com>
(cherry picked from commit 02c34d538c)
2024-02-09 10:03:39 +01:00
Fernando Fernandez Mancera
6576ddc532 config: drop slaves-order config option
This option was only introduced only to allow keeping the old behavior
in RHEL7, while the default order was changed from 'ifindex' to 'name'
in RHEL8. The usefulness of this option is questionable, as 'name'
together with predictable interface names should give predictable order.
When not using predictable interface names, the name is unpredictable
but so is the ifindex.

https://issues.redhat.com/browse/NMT-926

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1814
2023-12-12 15:28:52 +01:00
Javier Sánchez Parra
b38e8c053b platform: add netlink support for bridge port options
sysfs is deprecated and kernel will not add new bridge port options to
sysfs. Netlink is a stable API and therefore is the right method to
communicate with kernel in order to set the link options.
2023-10-09 12:25:45 +00:00
Thomas Haller
5ff1468717
all: ensure signendess for arguments of NM_{MIN,MAX,CLAMP}() macros matches 2023-08-07 09:24:36 +02:00
Fernando Fernandez Mancera
f1992994fc tests: rename controller port unit test and variables
Rename the variables and function name to use conscious language. In
addition, rename `type` and `link_type` variables to `port_type` and
`controller_type` to make it more intuitive.
2023-06-27 17:49:52 +02:00
Fernando Fernandez Mancera
b0b31548d9 tests: fix linux bridge port option test
When configuring the bridge port options the code was checking on port
link type instead of controller link type. In addition, the test is now
being skipped for nm-fake-platform.
2023-06-27 17:49:52 +02:00
Thomas Haller
f727c233c4
platform: rename NMP_SYSCTL_PATHID_NETDIR() to have "_A" suffix
The macro uses g_alloca(). Using alloca() is potentially dangerous. For
example, it must never be used in an unbounded loop. This should be
immediately obvious from the name, so we don't accidentally use them
in the wrong context.

All other alloca() macros should have such a prefix already. And they
always have to be macros, because you couldn't use alloca() to return
memory from a function.
2023-06-26 15:15:49 +02:00
Thomas Haller
8dfca3d552
platform/tests: skip test_netns_bind_to_path() test on failure
Our copr builds start to fail, since the copr builds updated to Fedora
38 ([1]).

  ERROR: src/core/platform/tests/test-link-linux - Bail out! nm:ERROR:src/core/platform/tests/test-link.c:3486:test_netns_bind_to_path: assertion failed (nmtstp_run_command("ip netns exec " P_NETNS_BINDNAME " true") == 0): (65280 == 0)

The cause is not understood, but it seems not worth investigating.
Just skip the test.

[1] https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/KOR3HE2VHHIPDBLDLXTYRMON6JQXCHMW/#J4K5VB5SA6I5P2ZLI65OHNQ6X7SINSHA
2023-06-12 12:13:08 +02:00
Thomas Haller
b8b74f4000
libnm-base: move nmp_utils_new_infiniband_name() to nm_net_devname_infiniband() 2023-05-30 08:52:17 +02:00
Thomas Haller
6b28c2867b
platform/tests: fix infiniband_partition_delete() in fake platform
Fixes: 9c323261ea ('platform: use nm_utils_new_infiniband_name()')
2023-05-30 08:51:01 +02:00
Thomas Haller
1a0fa85397
platform/tests: check errno on failure to umount() in test_netns_bind_to_path()
The umount() call failed in a test. Rework the assertion, so
we might see the errno of the problem.
2023-05-22 13:06:35 +02:00
Fernando Fernandez Mancera
e200b16291 platform: add support to prio property in bond ports 2023-05-03 10:43:58 +02:00
Fernando Fernandez Mancera
bb435674b5 platform: add netlink support for bond port options
sysfs is deprecated and kernel will not add new bond port options to
sysfs. Netlink is a stable API and therefore is the right method to
communicate with kernel in order to set the link options.
2023-05-03 09:55:45 +02:00
Thomas Haller
640c82710f
platform/tests: fix unit test creating ip6gre tunnel with old iproute2
Older versions of iproute2 don't support the "enclimit" argument. Work
around that from the unit tests.

Fixes: 1505ca3626 ('platform/tests: ip6gre & ip6gretap test cases (ip6 tunnel flags)')
2023-04-07 17:25:26 +02:00
Beniamino Galvani
1399aa925d wifi: skip no-ir channels when determining AP channel
If the automatically selected channel for an AP is set as NO-IR in the
current regulatory domain, the hotspot connection will fail to
start. NO-IR means that any mechanisms that initiate radiation are not
permitted on this channel, this includes sending probe requests or
modes of operation that require beaconing such as AP. Skip channels
with the NO-IR flag.
2023-03-28 09:46:11 +02:00
Joao Machado
1505ca3626 platform/tests: ip6gre & ip6gretap test cases (ip6 tunnel flags) 2023-03-13 08:41:45 +00:00
Thomas Haller
40dd8bf93a
platform/tests: avoid accessing in_addr_t via NMIPAddr union
The compiler may dislike this:

      CC       src/core/platform/tests/libNetworkManagerTest_la-test-common.lo
    In function '_ip_address_add',
        inlined from 'nmtstp_ip4_address_add' at ../src/core/platform/tests/test-common.c:1892:5:
    ../src/core/platform/tests/test-common.c:1807:63: error: array subscript 'NMIPAddr {aka const struct _NMIPAddr}[0]' is partly outside array bounds of 'in_addr_t[1]' {aka 'unsigned int[1]'} [-Werror=array-bounds]
     1807 |                                                   peer_address->addr4,
          |                                                   ~~~~~~~~~~~~^~~~~~~
    ../src/core/platform/tests/test-common.c: In function 'nmtstp_ip4_address_add':
    ../src/core/platform/tests/test-common.c:1886:36: note: object 'peer_address' of size 4
     1886 |                        in_addr_t   peer_address,
          |                        ~~~~~~~~~~~~^~~~~~~~~~~~
    ...

Fixes: 06aafabf14 ('platform/test: add test adding IPv4 addresses that only differ by their peer-address')
2023-03-03 19:31:18 +01:00
Beniamino Galvani
aa66472146 platform: fix test_link_set_properties()
The link object is no longer valid after the cache gets updated in
nm_platform_link_change().

Fixes: e02fd76d9f ('platform: support changing link properties')
2023-03-03 12:04:38 +01:00
Beniamino Galvani
e02fd76d9f platform: support changing link properties
Add support in platform for changing the newly introduced link
properties.
2023-03-02 16:51:16 +01:00
Beniamino Galvani
a7405b0892 platform: fix bridge test with fake platform
Fixes: 5afb323ed8 ('platform/tests: add test for nm_platform_link_set_bridge_info()')

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1552
2023-03-01 23:51:22 +01:00
Thomas Haller
5afb323ed8
platform/tests: add test for nm_platform_link_set_bridge_info() 2023-03-01 11:39:07 +01:00
Thomas Haller
d755b50808
platform: return extack message from add address/route operations 2023-02-28 12:08:07 +01:00
Thomas Haller
184c7b528e
platform/tests: re-enable and fix "/route/test_cache_consistency_routes" tests
The tests failed in certain cases on gitlab-ci and were temporarily
disabled.

These issues should be fixed now and the test pass. Reenable.

(cherry picked from commit 5c324adc7c)
2023-02-01 22:45:57 +01:00
Thomas Haller
34c707ee78
platform/tests: workaround failure of nmtstp_assert_platform()
(cherry picked from commit 82e21a4906)
2023-02-01 22:45:56 +01:00
Thomas Haller
ddb5e1d50e
platform/tests: disable check for sorted IPv4 routes by weak-id
Due to a kernel bug, this assert can fail and I don't think
it can be fixed in NetworkManager. Disable the check.

See-also: https://bugzilla.redhat.com/show_bug.cgi?id=2165720
(cherry picked from commit 0347dc7ddc)
2023-02-01 22:45:56 +01:00
Thomas Haller
eb73367d67
platform/tests: flush all tables in test_cache_consistency_routes() test
(cherry picked from commit 8089133f1c)
2023-02-01 22:45:56 +01:00
Thomas Haller
dedbc9ef05
platform/tests: suppress noisy output in test_cache_consistency_routes() test
(cherry picked from commit de1dccba18)
2023-02-01 22:45:56 +01:00
Thomas Haller
a8f2625259
platform/tests: ignore ip-tunnel interfaces in nmtstp_assert_platform()
Certain ip-tunnel modules automatically create network interfaces (for
example, "ip_gre" module creates "gre0" and others).

Btw, that's not the same as `modprobe bonding max_bonds=1`, where
loading the module merely automatically creates a "bond0" interface. In
case of ip tunnel modules, these generated interfaces seem essential to
how the tunnel works, for example they cannot be deleted. I don't
understand the purpose of those interfaces, but they seem not just
regular tunnel interfaces (unlike, "bond0" which is a regular bond
interface, albeit automatically created).

Btw, if at the time when loading the module, an interface with such name
already exists, it will bump the name (for example, adding a "gre1"
interfaces, and so on). That adds to the ugliness of the whole thing,
but for our unit tests, that is no problem. Our unit tests run in a
separate netns, and we don't create conflicting interfaces. That is, an
interface named "gre0" is always the special tunnel interface and we
can/do rely on that.

Note that when the kernel module gets loaded, it adds those interfaces
to all netns. Thus, even if "test-route-linux" does not do anything with
ip tunnels, such an interface can always appear in a netns, simply by
running "test-link-linux" (or any other tool that creates a tunnel) in
parallel or even in another container.

Theoretically, we could just ensure that we load all the conflicting
ip-tunnel modules (with nmtstp_ensure_module()). There there are two
problems. First, there might be other tunnel modules that interfere but
are not covered by nmtstp_ensure_module(). Second, when kernel creates
those interfaces, it does not send correct RTM_NEWLINK notifications (a
bug), so our platform cache will not be correct, and
nmtstp_assert_platform() will fail.

The only solution is to detect and ignore those interfaces.  Also,
ignore all interfaces of link-type "unknown". Those might be from other
modules that we don't know about and that exhibit the same problem.

(cherry picked from commit e99433866d)
2023-02-01 10:50:17 +01:00
Thomas Haller
7268da807f
platform/tests: avoid recent route protocols in "/route/test_cache_consistency_routes" tests
Ubuntu 18.04 comes with iproute2-4.15.0-2ubuntu1.3. The
"/etc/iproute2/rt_protos" file from that version does not yet support
the "bgp" entry. Also the "babel" entry is only from 2014. Just choose
other entries. The point is that NetworkManager would ignore those, and
that applies to "zebra" and "bird" alike.

(cherry picked from commit 26592ebfe5)
2023-02-01 10:50:17 +01:00
Thomas Haller
487ebbe3c8
platform/tests: use nmtstp_ensure_module() in test_software_detect()
This helper function already loads the module and performs
additional checks. Use it.

(cherry picked from commit acc0cee28e)
2023-02-01 10:50:16 +01:00
Thomas Haller
30a0ea310b
platform/tests: add nmtstp_ensure_module() helper
This will make sure that the IP tunnel module is loaded. It does so by
creating (and deleting) a tunnel interface.

That is important, because those modules will create additional interfaces
that show up in `ip link` (like "gre0"), and those interfaces can interfere
with the tests.

Also add nmtstp_link_is_iptunnel_special() to detect whether an
interface is one of those special interfaces.

(cherry picked from commit 451cedf2bf)
2023-02-01 10:50:16 +01:00
Thomas Haller
19a192dbdb
platform/tests: fix nmtstp_link_{gre,ip6gre,ip6tnl,ipip}_add() to support missing parent
(cherry picked from commit 4966f9d784)
2023-02-01 10:50:15 +01:00
Thomas Haller
108885721e
meson: increase "default_test_timeout" to 3 minutes
Obviously, it would be nice if our unit tests are fast. However, with
valgrind and a busy machine, some of the tests can take a relatively
long time. In particular those, that are marked as "slow" (if you want
to skip them during development, do so via "NMTST_DEBUG=quick"
environment, or "CFLAGS=-DNMTST_TEST_QUICK=TRUE", see
"nm-test-utils.h").

Anyway. Our tests almost never hit the timeout, and if they do, the most
likely reason is that something was just slower then expected, and the
timeout is a bogus error.

Timeouts only act as last fail safe. It more important to avoid a false
(premature) timeout failure, than to minimize the wait time when the
test really hangs. Because a real hang is a bug anyway, that we will
discover and need to fix.

Increase the default test timeout for meson tests to 3 minutes.

Also, "test-route-linux" is known to take a long time. Increase that
timeout even further.

(cherry picked from commit 9ee42c0979)
2023-02-01 10:50:11 +01:00
Thomas Haller
f2db9be627
platform/tests: temporarily disable failing check in "/route/test_cache_consistency_routes" (3)
This test is not (yet) stable. Disable for now.
2023-01-19 17:10:43 +01:00
Thomas Haller
20f71b392c
platform/tests: temporarily disable failing check in "/route/test_cache_consistency_routes" (2)
This test is not (yet) stable. Disable for now.
2023-01-19 16:27:28 +01:00
Thomas Haller
8ec69afd8b
platform/tests: temporarily disable failing check in "/route/test_cache_consistency_routes"
Hm, it seems to fail on some systems. Disable the test for now.
2023-01-19 13:25:52 +01:00
Thomas Haller
87522ad316
platform/tests: add test for cache consistency for IP routes
Routes can be added with `ip route add|change|replace|append|prepend`.
Add a test that randomly tries to add such routes, and checks that
the cache stays consistent.

https://bugzilla.redhat.com/show_bug.cgi?id=2060684
2023-01-19 11:53:08 +01:00
Thomas Haller
461279a9ce
platform/tests: add nmtstp_assert_platform() helper 2023-01-19 09:15:55 +01:00
Thomas Haller
d5e33bf660
platform/tests: extend nmtstp_env1_add_test_func() to create more interfaces
nmtstp_env1_add_test_func() prepares a certain environment (with dummy
interface) that is used by some tests. Extend it, to allow creating more
than one interface (currently up to two).
2023-01-19 08:56:22 +01:00
Thomas Haller
5579fca916
platform: allow setting multi_idx instance for NMPlatform
The major point of NMDedupMultiIndex is that it can de-duplicate
the objects. It thus makes sense the everybody is using the same
instance. Make the multi-idx instance of NMPlatform configurable.

This is not used outside of unit tests, because the daemon currently
always creates one platform instance and everybody then re-uses the
instance of the platform.

While this is (currently) only used by tests, and that the performance
optimization of de-duplicating is irrelevant for tests, this is still
useful. The test can then check whether two separate NMPlatform objects
shared the same instance and whether it was de-duplicated.
2023-01-19 08:56:21 +01:00
Thomas Haller
854f2cc1fc
platform: better handle ip route replace for ignored routes
We don't cache certain routes, for example based on the protocol. This is
a performance optimization to ignore routes that we usually don't care
about.

Still, if the user does `ip route replace` with such a route, then we
need to pass it to nmp_cache_update_netlink_route(), so that we can
properly remove the replaced route.

Knowing which route was replaces might be impossible, as our cache does
not contain all routes. Likely all that nmp_cache_update_netlink_route()
can to is to set "resync_required" for NLM_F_REPLACE. But for that it
should see the object first.

This also means, if we ever write a BPF filter to filter out messages
that contain NLM_F_REPLACE, because that would lead to cache inconsistencies.
2023-01-19 08:56:21 +01:00
Thomas Haller
a3cea7f6fb
platform: fix nmp_lookup_init_route_by_weak_id() to honor the route-table
The route table is part of the weak-id. You can see that with:

  ip route replace unicast 1.2.3.4/32 dev eth0 table 57
  ip route replace unicast 1.2.3.4/32 dev eth0 table 58

afterwards, `ip route show table all` will list both routes. The replace
operation is only per-table. Note that NMP_CACHE_ID_TYPE_ROUTES_BY_WEAK_ID
already got this right.

Fixes: 10ac675299 ('platform: add support for routing tables to platform cache')
2023-01-19 08:56:21 +01:00
Beniamino Galvani
d1f010b305 platform: remove fwmark from vti/vti6 tests
Older versions of iproute2 don't support the fwmark option. Remove it.

Fixes: 1cf8df2f35 ('platform: support VTI tunnels')
Fixes: b669a3ae46 ('platform: support VTI6 tunnels')
2022-12-22 09:57:32 +01:00
Beniamino Galvani
b669a3ae46 platform: support VTI6 tunnels 2022-12-21 14:04:44 +01:00
Beniamino Galvani
1cf8df2f35 platform: support VTI tunnels 2022-12-21 14:04:43 +01:00
Thomas Haller
0b1177cb18
all: use _NM_G_TYPE_CHECK_INSTANCE_CAST() for internal uses
G_TYPE_CHECK_INSTANCE_CAST() can trigger a "-Wcast-align":

    src/core/devices/nm-device-macvlan.c: In function 'parent_changed_notify':
    /usr/include/glib-2.0/gobject/gtype.h:2421:42: error: cast increases required alignment of target type [-Werror=cast-align]
     2421 | #  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
          |                                          ^
    /usr/include/glib-2.0/gobject/gtype.h:501:66: note: in expansion of macro '_G_TYPE_CIC'
      501 | #define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
          |                                                                  ^~~~~~~~~~~
    src/core/devices/nm-device-macvlan.h:13:6: note: in expansion of macro 'G_TYPE_CHECK_INSTANCE_CAST'
       13 |     (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_DEVICE_MACVLAN, NMDeviceMacvlan))
          |      ^~~~~~~~~~~~~~~~~~~~~~~~~~

Avoid that by using _NM_G_TYPE_CHECK_INSTANCE_CAST().

This can only be done for our internal usages. The public headers
of libnm are not changed.
2022-12-16 10:55:03 +01:00
Beniamino Galvani
bd24e0b274 platform: support VLAN protocol
Add support for the "protocol" attribute of VLAN links.
2022-12-14 11:33:03 +01:00
Thomas Haller
1bf73642dc
all: fix "-Wcast-align=strict" warnings for GArray casts
GArray.data is a char pointer. Most of the time we track other data in
a GArray. Casting that pointer can trigger "-Wcast-align=strict"
warnings.

Avoid them. Most of the time, instead use the nm_g_array*() helpers,
which also assert that the expected element size is correct.
2022-12-09 09:15:55 +01:00
Thomas Haller
6996fa64b6
platform: ensure all NMPlatform* structs have same alignment
We put all these structs inside the tagged union NMPObject.
Also, in a sense NMPlatformObject is the base "type" of all
these structs, meaning, it should be able to up and downcast.

Ensure the alignment matches.

This helps to avoid "-Wcast-align" warnings when trying to cast
a (NMPlatformObject*) to another (NMPlatformXXX *) type. Something
we commonly do.
2022-12-09 09:15:54 +01:00