summaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2022-01-31ovsdb: unrealize removed ovs-interfaces on UNAVAILABLE stateff/ovs_interface_rebootFernando Fernandez Mancera1-2/+3
When NetworkManager shuts down, it is not done properly. We cannot ensure that all pending async operations are cancelled and therefore there are possible device leaks. This means that not all the devices will be disposed and finalized because a different component is handling a reference to it. Since the l3cfg refactor, this is affecting to ovs ports. When shutting down sometimes there are ovs-interface or ovs-port devices that are not being cleared correctly. When starting NetworkManager back, these devices are not going to be created again because they already exist and the existing compatible connections will be instruct to use the device. But currently, ovsdb is only unrealizing a device after removal if the state is UNMANAGED. This is wrong, because it will left an inconsistent state in NetworkManager and the ovs-port/ovs-interface connection won't be activated. The interfaces removed by ovsdb must be unrealized if they are on UNAVAILABLE state. https://bugzilla.redhat.com/show_bug.cgi?id=2029937
2022-01-29device/wwan: add compat define for MM_MODEM_CAPABILITY_5GNRThomas Haller1-0/+4
MM_MODEM_CAPABILITY_5GNR was added in ModemManager 1.14. Add a define for compatibility with older versions.
2022-01-29wwan: merge branch 'th/wwan-5gnr-capability'Thomas Haller4-32/+30
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1076
2022-01-29device/wwan: drop deprecated MM_MODEM_CAPABILITY_LTE_ADVANCEDThomas Haller1-16/+4
This is long deprecated, and was apparently never even used/exposed by ModemManager. Drop it.
2022-01-29device/wwan: use cleanup macro in get_capabilities()Thomas Haller1-8/+5
2022-01-29device/wwan: static assert that ModemManager and NM capabilities correspondThomas Haller2-0/+9
2022-01-29device/wwan: ensure capabilities are suitable 32 bit flagsThomas Haller1-2/+2
The properties NM_DEVICE_MODEM_CAPABILITIES and NM_DEVICE_MODEM_CURRENT_CAPABILITIES are uint, with a range from zero to G_MAXUINT32. nm_modem_get_capabilities() passes the "untrusted" flags from ModemManager. Ensure that they fit into 32 bit, and don't cause an assertion failure due to the range check. Yes, in practice, on all platforms where we build (known to me), guint is always the same as guint32. So this has little effect. Also, cast to guint. Previously, this was just a C enum NMDeviceModemCapabilities, which theoretically has implementation defined sizes. Yes, in practice, they too are of size guint, and this was not an actual bug. But be specific about converting between different integer types.
2022-01-29libnm: use MODEM_CAPS_3GPP()/MODEM_CAPS_3GPP2() macros in get_setting_type()Thomas Haller1-4/+2
2022-01-29libnm,core: use NM_FLAGS_ANY() for MODEM_CAPS_3GPP()/MODEM_CAPS_3GPP2()Thomas Haller2-6/+6
Macros should (where possible and sensible) behave function-like. That means for example, that they evaluate arguments only once, and use parentheses around code that expands, so that unexpected uses work correctly. The parentheses was missing. Instead, just use the NM_FLAGS_ANY() macro which gets this right.
2022-01-29libnm: add "Since" gtkdoc comment to @NM_DEVICE_MODEM_CAPABILITY_5GNRThomas Haller1-1/+1
2022-01-29libnm,core: add 5GNR device modem capabilityDaniele Palmas3-4/+10
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1076
2022-01-28release: bump version to 1.35.7 (development)1.35.7-devThomas Haller2-2/+2
2022-01-28libnm: merge branch 'th/libnm-dangling-property-2'Thomas Haller2-2/+16
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1075
2022-01-28libnm: add code comments to NMClientThomas Haller1-0/+13
2022-01-28libnm/tests: enable check for dangling pointer in test_activate_virtual()Thomas Haller1-2/+2
2022-01-28libnm: fix dangling pointer in "o" properties when unregistering NMObjectThomas Haller1-0/+1
When NMClient gets destroyed, it unrefs all NMObject. We need to unbreak cycles then, and the property getters must return NULL. In particular, for "o" type properties (NMLDBusPropertyO), this was not done correctly. For example, calling nm_device_get_active_connection() while/after destroying the NMClient can give a dangling pointer and assertion failure. This will also be covered by test_activate_virtual(). Probably a similar issue can happen, when a D-Bus object gets removed (without destroying NMClient altogether). The fix is that nml_dbus_property_o_clear() needs to clear "nmobj". That is correct, because the pointer is no longer valid and should not be there. And the unit test shows that in fact a pointer is left there, and clearing it fixes it. That was different from an earlier attempt to fix this (in commit 62b2aa85e875 ('Revert "libnm: fix dangling pointer in public API while destructing NMClient"')), where clearing the pointer at a different place broke things. That attempt was wrong, because nml_dbus_property_o_notify_changed() needs to be the one that sets/clears nmobj field during a regular update. But the case here is not a regular update, nml_dbus_property_o_clear() happens during unregister/cleanup, and then we need to clear the pointer. Fixes: ce0e898fb476 ('libnm: refactor caching of D-Bus objects in NMClient') https://bugzilla.redhat.com/show_bug.cgi?id=2039331 https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/896 See-also: https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1064 https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1075
2022-01-27dhcp: fix crash accepting leases without addressesBeniamino Galvani2-17/+28
For IPv6 the lease doesn't necessarily have an address. If the address is missing or the DHCP client doesn't implement accept(), we don't need to wait for the address in platform. From https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1066#note_1233210 : 0 0x00007ffff760f88c in __pthread_kill_implementation () at /lib64/libc.so.6 1 0x00007ffff75c26a6 in raise () at /lib64/libc.so.6 2 0x00007ffff75ac7d3 in abort () at /lib64/libc.so.6 3 0x00007ffff77c5d4c in g_assertion_message (domain=<optimized out>, file=<optimized out>, line=<optimized out>, func=<optimized out>, message=<optimized out>) at ../glib/gtestutils.c:3223 4 0x00007ffff782645f in g_assertion_message_expr (domain=domain@entry=0x5555559e7c96 "nm", file=file@entry=0x5555559deac0 "src/core/dhcp/nm-dhcp-client.c", line=line@entry=609, func=func@entry=0x5555559e0090 <__func__.31> "l3_cfg_notify_cb", expr=expr@entry=0x5555559df5cf "lease_address") at ../glib/gtestutils.c:3249 5 0x00005555558b2866 in l3_cfg_notify_cb (l3cfg=0x555555c29790, notify_data=<optimized out>, self=0x555555e9a1b0) at src/core/dhcp/nm-dhcp-client.c:609 9 0x00007ffff791abe3 in <emit signal ??? on instance ???> (instance=instance@entry=0x555555c29790, signal_id=<optimized out>, detail=detail@entry=0) at ../gobject/gsignal.c:3553 6 0x00007ffff78fcc7f in g_closure_invoke (closure=0x555555ca3900, return_value=0x0, n_param_values=2, param_values=0x7fffffffd420, invocation_hint=0x7fffffffd3a0) at ../gobject/gclosure.c:830 7 0x00007ffff7919106 in signal_emit_unlocked_R (node=node@entry=0x555555bbadc0, detail=detail@entry=0, instance=instance@entry=0x555555c29790, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7fffffffd420) at ../gobject/gsignal.c:3742 8 0x00007ffff791a9ca in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7fffffffd5f0) at ../gobject/gsignal.c:3497 10 0x000055555564c8a6 in _nm_l3cfg_emit_signal_notify (self=self@entry=0x555555c29790, notify_data=notify_data@entry=0x7fffffffdf30) at src/core/nm-l3cfg.c:576 11 0x000055555564ce77 in _nm_l3cfg_emit_signal_notify_simple (self=self@entry=0x555555c29790, notify_type=notify_type@entry=NM_L3_CONFIG_NOTIFY_TYPE_POST_COMMIT) at src/core/nm-l3cfg.c:585 12 0x0000555555656082 in _l3_commit (self=self@entry=0x555555c29790, commit_type=NM_L3_CFG_COMMIT_TYPE_UPDATE, commit_type@entry=NM_L3_CFG_COMMIT_TYPE_AUTO, is_idle=is_idle@entry=1) at src/core/nm-l3cfg.c:4201 13 0x0000555555656189 in _l3_commit_on_idle_cb (user_data=user_data@entry=0x555555c29790) at src/core/nm-l3cfg.c:2961 14 0x00007ffff77f847b in g_idle_dispatch (source=0x555555d65680, callback=0x55555565612c <_l3_commit_on_idle_cb>, user_data=0x555555c29790) at ../glib/gmain.c:5897 15 0x00007ffff77fc130 in g_main_dispatch (context=0x555555aa5020) at ../glib/gmain.c:3381 16 g_main_context_dispatch (context=0x555555aa5020) at ../glib/gmain.c:4099 17 0x00007ffff7851208 in g_main_context_iterate.constprop.0 (context=0x555555aa5020, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/gmain.c:4175 18 0x00007ffff77fb853 in g_main_loop_run (loop=0x555555aa5970) at ../glib/gmain.c:4373 19 0x0000555555593c56 in main (argc=<optimized out>, argv=<optimized out>) at src/core/main.c:509 Fixes: e1648d0665a0 ('core: commit l3cd asynchronously on DHCP bound event') https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1074
2022-01-27supplicant: use nm_ref_string_reset_str() in _properties_changed_main()Thomas Haller1-4/+1
2022-01-27glib-aux/tests: add tests for nm_ref_string_equal_str()Thomas Haller1-0/+8
2022-01-27glib-aux/trival: add code comment to nm_ref_string_equal_str()Thomas Haller1-0/+3
2022-01-27glib-aux: fix nm_ref_string_equal_str()Beniamino Galvani1-1/+1
Fix comparison with a NULL string. The only current caller is nm-supplicant-interface.c, and this bug causes a missing cleanup of the CurrentBSS property on disconnect. Fixes: ac8c3a711148 ('glib-aux: improve nm_ref_string_equals_str() to work for non-C-strings') https://bugzilla.redhat.com/show_bug.cgi?id=1983735 https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1073
2022-01-26man: mention "rd.znet_ifnames" option in `man nm-initrd-generator`Thomas Haller1-0/+1
2022-01-26dhcp: for systemd DHCPv6 client always explicitly set prefix-delegationThomas Haller1-7/+11
Beginning with [1], prefix delegation will be always enabled by default. Thus, always explicitly set it. [1] https://github.com/systemd/systemd/commit/01b4e90f32c72900f26f8f770cfb0e6d66c14706
2022-01-26release: bump version to 1.35.6 (development)1.35.6-devThomas Haller2-2/+2
2022-01-26merge: branch 'bg/500vlans'Beniamino Galvani7-157/+408
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1066 https://bugzilla.redhat.com/show_bug.cgi?id=2028849
2022-01-26dns: better track l3cd changesBeniamino Galvani1-6/+19
Update DNS only when something relevant changes: - an old l3cd gets removed, without adding a new one - a new one is added without removing an old one - an old is removed and it differs (in routes and DNS) from the new added one
2022-01-26core: update hostname once at startupBeniamino Galvani1-0/+1
NMPolicy stores the last hostname set in priv->cur_hostname and checks if it changed before notifying the DNS manager. _set_hostname() should be called one time early during startup so that the priv->cur_hostname gets initialized without triggering a DNS update.
2022-01-26core: support compare flags in nm_l3_config_data_cmp_full()Beniamino Galvani2-80/+217
2022-01-26core: defer DNS updates until the device enters the SECONDARIES stateBeniamino Galvani1-1/+21
I see a significant performance increase with many parallel activations if DNS updates are deferred to the SECONDARIES state. Since there is no guarantee that device_l3cd_changed() is called again when the device becomes ACTIVATED, we need also to change device_state_changed().
2022-01-26core: commit l3cd asynchronously on DHCP bound eventBeniamino Galvani3-70/+150
When a lease is obtained, currently NMDevice performs a synchronous commit of IP configuration and then accepts the lease. Instead, let NMDevice only schedule a async commit; when the DHCP client notices that the new address was committed it will automatically accept it and emit a new signal so that the device can succeed the activation. Sync commits should be avoided because a commit does of things which are outside the control of the caller (see the comment in nm_device_l3cfg_commit()). Furthermore, when there are many pending activations, async commits seem to help in reducing the CPU usage. While making the commit async, also move the responsibility of the accept() to NMDhcpClient.
2022-01-25Revert "libnm: fix dangling pointer in public API while destructing NMClient"Thomas Haller2-3/+2
This breaks test @nmcli_monitor. With this patch, `nmcli monitor` no longer prints "There's no primary connection". Need to investigate why. For now, revert the patch. This reverts commit 2afecaf908401296a2642fdd1d73a76b9c3fa11a.
2022-01-25Merge branch 'ac/gsm' into 'main'Ana Cabral2-2/+9
core/wwan: Ensure correct conditions before signal emission See merge request NetworkManager/NetworkManager!1071
2022-01-25core/wwan: ensure correct conditions before signal emissionAna Cabral2-1/+8
Currently, ip4 new config signal is being emitted twice, due to the lack of a barrier to a possible situation. This commit includes this. This fixes a crash on NMCI tests due to an assertion failure, now it will not go ahead in the function anymore if it is under the undesired conditions. The backtrace of the crashes can be found at https://bugzilla.redhat.com/show_bug.cgi?id=2028385
2022-01-25core/wwan: fix log domainAna Cabral1-1/+1
2022-01-25contrib/rpm: fix spec file for CentOS7/RHEL7 for "Suggests:"Thomas Haller1-1/+1
Seems "Suggests:" is not supported.
2022-01-25initrd: add support for rd.znet_ifnamesLubomir Rintel2-3/+106
This uses interface names specified rd.znet_ifnames on kernel command line instead of automatically generated names if possible. Accompanied by a test. https://bugzilla.redhat.com/show_bug.cgi?id=1980387 https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1070
2022-01-24contrib/rpm: split ifup/ifdown compat scripts to new package ↵Thomas Haller1-9/+37
NetworkManager-initscripts-updown Previously (on RHEL<=8 and Fedora<=35), NetworkManager package contains the compat scripts nm-ifup/nm-ifdown. If initscripts package (not network-scripts!) is installed, then a RPM trigger links them as alternatives for the ifup/ifdown commands. One problem is that `dnf provides /usr/sbin/ifup` lists the NetworkManager package. Which is technically true, but on RHEL9 where initscripts is not installed by default, `dnf install NetworkManager` does not actually create those scripts. Solve that by moving those scripts to a new subpackage NetworkManager-initscripts-updown. The %post script now always creates the alternatives links, regardless whether initscripts package is installed. Note that on RHEL8, NetworkManager package not only Obsoletes: but also Suggests: the new package. The name "initscripts-updown" is chosen because in the future we might have additonal initscripts/ifcfg related subpackages to contain the ifcfg-rh plugin (NetworkManager-initscripts-ifcfg) or ifcfg-rh migration tools (NetworkManager-initscripts-tools). https://bugzilla.redhat.com/show_bug.cgi?id=2022418 https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1061
2022-01-21libnm/tests: fix race in test test_activate_virtual()Thomas Haller1-1/+2
ERROR: src/libnm-client-impl/tests/test-nm-client - Bail out! nm:ERROR:src/libnm-client-impl/tests/test-nm-client.c:807:_dev_eth0_1_state_changed_cb: assertion failed (old_state == NM_DEVICE_STATE_PREPARE): (100 == 40) Fixes: bc9aa72c8853 ('libnm/tests: add unit test for checking dangling pointer in libnm')
2022-01-21libnm: merge branch 'th/libnm-dangling-property'Thomas Haller5-0/+103
https://bugzilla.redhat.com/show_bug.cgi?id=2039331 https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/896 https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1064
2022-01-21libnm: fix dangling pointer in public API while destructing NMClientThomas Haller2-2/+3
While (and after) NMClient gets destroyed, nm_device_get_active_connection() gives a dangling pointer. That can lead to a crash. This probably affects all NMLDBusPropertyO type properties. It's not clear how to fix that best. Usually, NMClient does updates in two phases, first it processes the D-Bus events and tracks internal data, then it emits all GObject signals and notifications. When an object gets removed from the NMClient cache, then the second phase is not fully processed, because the object is already removed from the cache. Thus, the property was not properly cleared leaving a dangling pointer. A simple fix is to always clear the pointer during the first phase. Note that effectively we do the same also for NMLDBusPropertyAO (by clearing the "pr_ao->arr"), so at least this is consistent. Somehow it seems that we should make sure that the "second" phase gets full processed in this case too. But it's complicated, and it's not clear how to do that. So this solution seems fine. https://bugzilla.redhat.com/show_bug.cgi?id=2039331 https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/896
2022-01-21libnm/tests: add unit test for checking dangling pointer in libnmThomas Haller1-0/+80
When destroying NMClient, nm_device_get_active_connection() still return dangling pointers. Add a unit test for that bug. Obviously, the bug currently exists, so the relevant code is commented out.
2022-01-21tools/tests: set available-connections for vlan device in NM test stubThomas Haller1-0/+6
2022-01-21glib-aux/tests: add nmtst_test_skip_slow() helperThomas Haller1-0/+11
2022-01-21tools: support --no-make-first option in "run-nm-test.sh"Thomas Haller1-0/+5
Why? Because I often use a command line like $ ./tools/run-nm-test.sh -m src/libnm-client-impl/tests/test-nm-client -p /libnm/device-connection-compatibility or even alias it to a one character command `x`. Usually I want to do the rebuild, and as `make` is so slow, it adds noticeable time running the command. Thus, sometimes I want to modify the command, for which I have to edit the command from the history, or toggle two separate commands. Add a `-M` flag that can reverse the effect of an earlier `-m`. An "enable" flag in general should just also have a "disable" flag.
2022-01-21glib-aux: workaround maybe-uninitialized warning with LTO in ↵Thomas Haller1-2/+8
nm_uuid_generate_from_string_str() In function 'nm_uuid_unparse', inlined from 'nm_uuid_generate_from_string_str' at src/libnm-glib-aux/nm-uuid.c:393:12, inlined from 'nm_uuid_generate_from_strings.constprop' at src/libnm-glib-aux/nm-uuid.c:430:16: src/libnm-glib-aux/nm-uuid.h:37:12: error: 'uuid' may be used uninitialized [-Werror=maybe-uninitialized] 37 | return nm_uuid_unparse_case(uuid, out_str, FALSE); | ^ src/libnm-glib-aux/nm-uuid.c: In function 'nm_uuid_generate_from_strings.constprop': src/libnm-glib-aux/nm-uuid.c:20:1: note: by argument 1 of type 'const struct NMUuid *' to 'nm_uuid_unparse_case.constprop' declared here 20 | nm_uuid_unparse_case(const NMUuid *uuid, char out_str[static 37], gboolean upper_case) | ^ src/libnm-glib-aux/nm-uuid.c:390:12: note: 'uuid' declared here 390 | NMUuid uuid; | ^ lto1: all warnings being treated as errors The problem are code paths with failed g_return*() assertions. Being in a bad state already, they don't bother to ensure proper return values, and with LTO the compiler might think there are valid code paths wrongly handled. Work around.
2022-01-21device: initialize nm_auto variable in _ethtool_features_reset()Thomas Haller1-1/+1
The compiler is often adament to warn about maybe-uninitialized.
2022-01-21wifi/iwd: merge branch 'balrog-kun:iwd-p2p'Thomas Haller12-33/+1894
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1017
2022-01-21iwd: Ensure WFD IE is present during activationAndrew Zaborowski4-14/+24
If the connection has wfd_ies set, we want to ensure that a WFD connection is being established so we want to check that the target peer also supports WFD. For now this in the IWD backend only. However, WFD peers will send us their WFD IEs in their Probe Responses only if our own Probe Request contained a WFD IE, or at least that's when the spec mandates that they include the WFD IE. This implies that the discovery phase (NM.Device.WifiP2P.StartFind(options) / .StopFind()) needs to know the value of the local WFD IE and include it in the Probe Requests, which existing clients (gnome-network-displays) doesn't do and in fact can't do because there's no API for the client to pass the WFD IE -- that is easy to add in the options parameter though (a dictionary). The current situation is that with the wpa_supplicant backend we'll sometimes see the WFD IE (when the peer is discovered from a Probe Request that it has sent, rather than from a Probe Response) and sometimes not, while with the IWD backend we'll never see the WFD information because IWD assumes that the client (NM) is not interested in seeing it if it hasn't registered the local WFD information before starting discovery. So, for compatibility with this existing situation and with the wpa_supplicant backend, ignore whether the peer is a WFD peer except in the PREPARE stage. In PREPARE, if we have a peer compatible with the connection being activated -- except for the WFD information -- force a new discovery, this time passing the WFD information from the NMSettingConnection's wfd_ies, and only progress to CONFIG if the target peer is re-discovered as a WFD peer within 10 seconds. We don't actually check the contents of the WFD IEs to match, e.g. we don't check the sink/source/dual role compatibility between our and the peer's properties, but IWD will do some of these checks later during activation.
2022-01-21iwd: Basic WFD support for NMDeviceIwdP2PAndrew Zaborowski3-1/+224
Enable WFD clients to work with the IWD backend.
2022-01-21iwd: Add basic P2P device class for IWDAndrew Zaborowski7-15/+1356
Similarly as with wpa_supplicant, create NMDeviceIwdP2P objects for P2P devices based on data from IWD -- not in NMWifiFactory::create_device because that is only triggered for system netdevs and a P2P-Device virtual interface has no netdev. Unlike NMDeviceWifiP2P, NMDeviceIwdP2P's iface property is a unique string that likely doesn't match any system interface name -- in theory there doesn't need to be any related netdev on the system (such as an Infrastructure-mode interface) before a P2P-Device is added. [thaller@redhat.com: modified original patch]