Commit graph

1741 commits

Author SHA1 Message Date
Thomas Haller
02ad6416fd
platform: add flags to NMPlatformIP[46]Route to allow overriding the route table and metric
When we (for example) receive a DHCP lease, we track the routes that
should be configured via NMPlatformIP[46]Route instances. Thus, this
structure does not only track the routes that are configured (and
cached in NMPlatform), but it is also used to track the routes that
we want to configure.

This is also the case with the "rt_source" field, which represents the
NMIPConfigSource enum for routes that we want to configure, but
for routes in the cache it corresponds to rtm_protocol.

Note that NMDhcpClient creates NMIP4Config instances, which tracks the
routes as NMPlatformIP4Route instances. Previously, NMDhcpClient didn't
have any way to leave the table/metric undecided, but this information
isn't part of the DHCP lease tself. Instead, NMDevice knows the table/metric
to use. This has various problems:

  - NMDhcpClient needs to know the table/metric, for no other purpose
    than to set the value when creating the NMIP4Config instance for the
    lease. We first pass the information down, only so that it can be
    returned with the lease information.

  - during reapply or when connectivity check changes, the effectively
    used table/metric can change. Previously, we would have to
    re-generate the NMIP4Config instances.

Improve that by allowing to leave the table/metric undecided. Higher
layers can decide the effective metric to use.
2020-09-30 09:49:21 +02:00
Thomas Haller
1558e9a323
platform: have union in NMPLinkAddress for NMEtherAddr 2020-09-30 09:49:21 +02:00
Thomas Haller
88071abb43
all: unify comment style for SPDX-License-Identifier tag
Our coding style recommends C style comments (/* */) instead of C++
(//). Also, systemd (which we partly fork) uses C style comments for
the SPDX-License-Identifier.

Unify the style.

  $ sed -i '1 s#// SPDX-License-Identifier: \([^ ]\+\)$#/* SPDX-License-Identifier: \1 */#' -- $(git ls-files -- '*.[hc]' '*.[hc]pp')
2020-09-29 16:50:53 +02:00
Thomas Haller
8841d529e1
format: manually replace remaining tabs with spaces and reformat 2020-09-29 09:12:27 +02:00
Thomas Haller
740b092fda
format: replace tabs for indentation in code comments
sed -i \
     -e 's/^'$'\t'' \*/     */g' \
     -e 's/^'$'\t\t'' \*/         */g' \
     -e 's/^'$'\t\t\t'' \*/             */g' \
     -e 's/^'$'\t\t\t\t'' \*/                 */g' \
     -e 's/^'$'\t\t\t\t\t'' \*/                     */g' \
     -e 's/^'$'\t\t\t\t\t\t'' \*/                         */g' \
     -e 's/^'$'\t\t\t\t\t\t\t'' \*/                             */g' \
     $(git ls-files -- '*.[hc]')
2020-09-28 16:07:52 +02:00
Antonio Cardace
328fb90f3e
all: reformat all with new clang-format style
Run:

    ./contrib/scripts/nm-code-format.sh -i
    ./contrib/scripts/nm-code-format.sh -i

Yes, it needs to run twice because the first run doesn't yet produce the
final result.

Signed-off-by: Antonio Cardace <acardace@redhat.com>
2020-09-28 16:07:51 +02:00
Thomas Haller
d627ec7075
platform/tests: add nmtstp_platform_ip_addresses_assert() test helper 2020-09-24 09:44:00 +02:00
Thomas Haller
9f91e0b26d
platform/tests: add nmtstp_platform_ip_address_find() test util 2020-09-24 09:43:59 +02:00
Thomas Haller
e232ce93d0
platform: add NM_PLATFORM_IP[46]_ADDRESS_INIT() helper macros 2020-09-24 09:43:58 +02:00
Thomas Haller
62f2c5a879
platform: refactor nm_platform_ip6_address_get() function to accept pointer instead of "struct in6_addr"
While C is fine with accepting structs as function arguments,
we usually don't do that for IPv6 addresses. Accept a pointer
instead.
2020-09-24 09:43:54 +02:00
Thomas Haller
dea59122e7
shared: move nm_utils_hwaddr_ntoa_buf() to shared/ as _nm_utils_hwaddr_ntoa()
The name is better as it mirrors nm_utils_hwaddr_aton(). Also, move
it to shared/ so it can be reused (and inlined).
2020-09-23 13:57:37 +02:00
Thomas Haller
f295e1313a
core: use _nm_utils_inet4_ntop() instead of nm_utils_inet4_ntop()
nm_utils_inet4_ntop() is public API of libnm. Also, it accepts a
%NULL buffer to use a static buffer. That is error prone and we
should not use such convenience behavior for our own code.
2020-09-15 15:08:02 +02:00
Sayed Shah
518187e8db platform: add support for mcast_hash_max netlink attribute for bridges
Adding the mcast_hash_max property. The value must be the power of 2.

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/624
2020-09-15 13:41:29 +02:00
Thomas Haller
3d6fef2d9a
platform: add nm_platform_iter_obj_for_each() macro 2020-09-11 16:18:42 +02:00
Thomas Haller
94fbc7bdba
platform: add nm_platform_ip6_address_match() 2020-09-11 16:18:40 +02:00
Thomas Haller
38b2239146
l3cfg: add more l3cfg API that will be used next 2020-09-07 16:11:50 +02:00
Thomas Haller
e89a095673
l3cfg: add nm_l3_config_data_get_blacklisted_ip4_routes() util
We will need to prune routes that kernel adds (and we don't want).
2020-09-07 16:11:49 +02:00
Thomas Haller
137d02a7e6
platform: add nm_platform_ip_address_get_peer_address() helper 2020-09-07 16:11:49 +02:00
Thomas Haller
f81360bbbf
platform: add nm_platform_ip4_address_addr_to_hash() helper
This will only have one particular use, from NNL3Cfg. However, it seems
general enough to place it in "nm-platform.h".
2020-09-03 11:39:39 +02:00
Thomas Haller
80c0de7217
platform: workaround for old kernels that don't support IFLA_BR_VLAN_STATS_ENABLED
The kernel of Ubuntu 16.04 doesn't support IFLA_BR_VLAN_STATS_ENABLED.
If we want to run on such old kernels (which we probably do), we need to
detect that, and act accordingly.
2020-08-21 13:59:50 +02:00
Thomas Haller
1407d29b5e
platform/tests: add nmtstp_kernel_support_get() 2020-08-21 13:59:49 +02:00
Thomas Haller
195b406ac0
platform: extend nm_platform_kernel_support_get() and use atomic operations to access result
Add nm_platform_kernel_support_get_full() to allow fetching the support
state without setting it to the compile time default.

Also, use g_atomic_int_get() to access _nm_platform_kernel_support_state
values. We should not access static variables without synchronization.
Better get it correct in any case than fast.
2020-08-21 13:59:48 +02:00
Thomas Haller
e59259b3d5
platform/tests: remove unused argument "out_not_supported" from nmtstp_link_bridge_add() 2020-08-21 13:59:48 +02:00
Thomas Haller
9a5e8f1ea6
platform: use defines from libnm-core for setting defaults values for nm_platform_lnk_bridge_default 2020-08-21 13:59:47 +02:00
Thomas Haller
fdef0e8c62
platform: fix default for bridge setting "mcast_snooping"
The value defaults to TRUE. Also, use the #define for it.

Fixes: 58847f85a4 ('platform: use netlink for configuring bridge settings'):
2020-08-21 13:59:40 +02:00
Sayed Shah
58847f85a4 platform: use netlink for configuring bridge settings
NMDeviceBridge is currently using sysfs. The plan is to use netlink in
in the future
2020-08-20 14:03:10 -04:00
Thomas Haller
d2c58bc64d
platform: set default values for NMPlatformLnkBridge if unspecified on netlink
Older kernels may not support or send all bridge options in the netlink
message. In case the parameter is missing, set the default value.

Note that there may be future cases where we need to encode whether
the option is present or not. Currently we don't express that.
2020-08-17 11:07:43 +02:00
Thomas Haller
e9278d8659
platform/tests: ignore failure for adding bridge with iproute2
Older versions of iproute2 (Ubuntu 16.04) don't support all the requested
bridge options. We need to gracefully ignore a failure and try with our
own implementation.

While doing that, only set the command line arguments if they are
necessary (that is, if they requested value is not the default already).

Luckily, Ubuntu 16.04's kernel supports these properties just fine, so
we can avoid complicated compatibility code to cope with missing kernel
support. It's really just an iproute2 limitation and affects only the
tests.
2020-08-17 11:07:43 +02:00
Thomas Haller
0b81ea50fe
platform: add NMP_OBJECT_CAST_LNK_BRIDGE() helper macro 2020-08-17 11:07:40 +02:00
Sayed Shah
80c93b0e5e
platform: add support for configuring bridge settings via netlink (2)
NMDeviceBridge is currently using sysfs. The plan is to use netlink in
in the future.

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/601
2020-08-14 21:26:10 +02:00
Sayed Shah
adf0420258
platform: add support for configuring bridge settings via netlink
NMDeviceBridge is currently using sysfs. The plan is to use netlink in
in the future
2020-08-07 13:20:54 +02:00
Sayed Shah
ec582d788c
nmp-object: add space before parentheses 2020-08-07 13:20:31 +02:00
Thomas Haller
6bf5f014c8
shared: change NM_SWAP() macro to take pointer arguments
This makes the macro more function like. Also, taking a pointer
makes it a bit clearer that this possibly changes the value.

Of course, it's not a big difference to before, but this
form seems slightly preferable to me.
2020-08-06 18:12:01 +02:00
Li-Hao Liao (Leon Liao)
3ba31aad58 platform: add the NM_SETTING_WIRELESS_WAKE_ON_WLAN_IGNORE status check
In some cases, the wow is not configured and the
NM_SETTING_WIRELESS_WAKE_ON_WLAN_IGNORE is set.
So, add the NM_SETTING_WIRELESS_WAKE_ON_WLAN_IGNORE status check.

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/597
2020-08-06 11:02:54 +02:00
Thomas Haller
695ce608ba
l3cfg: add nm_l3_config_data_add_dependent_routes() 2020-07-31 08:53:06 +02:00
Thomas Haller
5ccfa38565
platform: move full-sync parameter away from nm_platform_ip_address_sync()
This parameter really affects whether a candidate in @addresses_prune will be
considered or not. Since we already construct the prune list separately, this
parameter is at the wrong place.

This requires us to re-implement nm_platform_lookup_clone(). While the
function has a predicate callback that we could use for this purpose,
I will later add a separate predicate argument to
nm_platform_ip_address_get_prune_list(). When that happens, it would
be cumbersome to chain the two function pointers. Instead, reimplement
nm_platform_lookup_clone().
2020-07-31 08:53:06 +02:00
Thomas Haller
dadfc3abd5
platform: allow injecting the list of addresses to prune
Follow the pattern of nm_platform_ip_route_sync(), which also accepts
the list of addresses that are potential candidates for removal.

This allows the caller to carefully construct the list of addresses
which are possibly removed, so that sync (possibly) only adds new
addresses.
2020-07-31 08:53:05 +02:00
Thomas Haller
0acb577320
platform: minor cleanup in nm_platform_ip_address_sync()
The known address must not have a zero lifetime,
because we filter those addresses out first.
2020-07-31 08:53:05 +02:00
Thomas Haller
dca62c06fd
platform: merge nm_platform_ip_address_sync() implementations
It is beneficial to have both address families side by side.

A lot of operations are exactly the same, so it's preferable to see
that. Especially in the cases where they differ, it's preferable to see
how they differ (and why).
2020-07-31 08:53:05 +02:00
Thomas Haller
30a8b1c713
platform: add NMP_OBJECT_TYPE_TO_ADDR_FAMILY() helper 2020-07-31 08:53:05 +02:00
Thomas Haller
1a4cc800f6
platform: add nmp_object_indirect_id_*() helpers 2020-07-31 08:53:04 +02:00
Thomas Haller
14fa487a60
platform: add static assertion to check NMPlatformIP{Address,Route} struct layout 2020-07-31 08:53:04 +02:00
Thomas Haller
7eb94b7dcc
platform: add nm_platform_ip_route_get_gateway() helper 2020-07-31 08:53:04 +02:00
Thomas Haller
a2a69a2dab
l3cfg: add more API to NML3ConfigData 2020-07-24 16:12:23 +02:00
Thomas Haller
b44f7dce40
core: add nm_platform_dedup_multi_iter_next_*() helpers to "nmp-object.h"
This code is not specific to "nm-ip4-config.h"/"nm-ip6-config.h".
It applies to everybody who wants to iterate over a dedup-multi-index of
certain NMPObjects. Move it.
2020-07-24 16:10:05 +02:00
Thomas Haller
67bfcb49c9
core: use nm_platform_ip[46]_address_pretty_sort_cmp() in "nm-ip[46]-config.c" 2020-07-24 16:10:04 +02:00
Thomas Haller
83bc1e8d60
platform: use NM_CMP_*() macros in nm_platform_ip[46]_address_pretty_sort_cmp()
They ensure to consistently return -1, 0, 1. Also, I think they are
easier to understand.

What is in general hard to understand, whether a comparison sorts
ascending or descending. The macros maybe make that easier too, but it's
still confusing. That's why we have a test.
2020-07-24 16:10:04 +02:00
Thomas Haller
d7608f32a6
platform: add nm_platform_ip[46]_address_pretty_sort_cmp()
This is the code from _addresses_sort_cmp() in "nm-ip[46]-config.h"
and will replace it soon.
2020-07-24 16:10:04 +02:00
Thomas Haller
84d93315d8
platform: add nmp_object_ip_route_is_best_defaut_route() helper 2020-07-23 15:29:24 +02:00
Thomas Haller
d4b7a3c27e
platform: add nmp_object_ref_set() helper 2020-07-23 15:29:24 +02:00