summaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2022-02-03dhcp-options: change "dhcp6_ntp_server" to plural formlr/dhcp6-ntp-serversLubomir Rintel1-1/+1
The option can be present multiple times.
2022-02-02l3cfg: merge branch 'th/l3cfg-acd-crash'Thomas Haller1-74/+76
https://bugzilla.redhat.com/show_bug.cgi?id=2047788 https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1077
2022-02-02l3cfg: fix handling "instance-reset" ACD eventThomas Haller1-49/+38
The ACD state handling is unfortunately very complicated. That is, because we obviously need to track state about how ACD is going (the acd_data, and in particular NML3AcdAddrState). Then there are various things that can happen, which are the AcdStateChangeMode enums. All these state-changes come together in one function: _l3_acd_data_state_change(), which is therefore complicated (I don't think that it would become simpler by spreading this code out to different functions, on the contrary). Anyway. So, what happens when we need to reset the n-acd instance? For example, because the MAC address of the link changed or some error. I guess, we need to restart probing. Previously, I think this was not handled properly. We already tried to fix this several times, the last was commit b3316063862b ('l3cfg: on n-acd instance-reset clear also ready ACD state'). There is still an issue ([1]). The bug [1] is, that we are in state NM_L3_ACD_ADDR_STATE_READY, during ACD_STATE_CHANGE_MODE_TIMEOUT event. That leads to an assertion failure. #5 0x00007f23be74698f in g_assertion_message_expr (domain=0x5629aca70359 "nm", file=0x5629aca62aab "src/core/nm-l3cfg.c", line=2395, func=0x5629acb26b30 <__func__.72.lto_priv.4> "_l3_acd_data_state_change", expr=<optimized out>) at ../glib/gtestutils.c:3091 #6 0x00005629ac937e46 in _l3_acd_data_state_change (self=0x5629add69790, acd_data=0x5629add8d520, state_change_mode=ACD_STATE_CHANGE_MODE_TIMEOUT, sender_addr=0x0, p_now_msec=0x7ffded506460) at src/core/nm-l3cfg.c:2395 #7 0x00005629ac939f4d in _l3_acd_data_timeout_cb (user_data=user_data@entry=0x5629add8d520) at src/core/nm-l3cfg.c:1933 #8 0x00007f23be71c5a1 in g_timeout_dispatch (source=0x5629addd7a80, callback=0x5629ac939ee0 <_l3_acd_data_timeout_cb>, user_data=0x5629add8d520) at ../glib/gmain.c:4889 #9 0x00007f23be71bd4f in g_main_dispatch (context=0x5629adc6da00) at ../glib/gmain.c:3337 #10 g_main_context_dispatch (context=0x5629adc6da00) at ../glib/gmain.c:4055 That can only happen, (I think) when we scheduled the timeout during an earlier ACD_STATE_CHANGE_MODE_INSTANCE_RESET event. Meaning, we need to handle instance-reset better. Instead, during instance-reset, switch always back to state PROBING, and let the timeout figure it out. [1] https://bugzilla.redhat.com/show_bug.cgi?id=2047788
2022-02-02l3cfg: add comment to _acd_data_collect_tracks_data() about linear searchThomas Haller1-0/+9
2022-02-02l3cfg: add assertion for scheduling timeout in _l3_acd_data_timeout_schedule()Thomas Haller1-0/+13
The first point is that ACD timeout is strongly tied to the current state. That is (somewhat) obvious, because _l3_acd_data_state_set_full() will clear any pending timeout. So you can only schedule a timeout *after* setting the state, and setting the next state, will clear the timeout. Likewise, note that l3_acd_data_state_change() for the event ACD_STATE_CHANGE_MODE_TIMEOUT asserts that it is only called in the few states where that is expected. See rhbz#2047788 where that assertion gets hit. The first point means that we must only schedule a timer when we are also in a state that supports that. Add an assertion for that at the point when scheduling the timeout. The assert at this point is useful, because it catches the moment when we do the wrong thing (instead of getting the assertion later during the timeout, when we no longer know where the error happened). See-also: https://bugzilla.redhat.com/show_bug.cgi?id=2047788
2022-02-02l3cfg: use nm_g_timeout_add_source() helpers in "nm-l3cfg.c"Thomas Haller1-16/+5
It's shorter, and brevity lets us focus on the important things in the code.
2022-02-02l3cfg: only constructing log message when needed in ↵Thomas Haller1-9/+11
_l3_acd_data_state_set_full()
2022-02-02l3cfg: merge branch 'th/device-manual-l3cd-prio'Thomas Haller4-10/+41
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1065
2022-02-01core: increase l3cfg merge priority for VPN configThomas Haller3-4/+3
Now that higher priorities numbers really mean more important, it seems that the VPN configuration should be rather important. Bump the number, also in relation to NMDevice's L3ConfigDataType. It might not matter too much, because usually the VPN tunnel device does not have NDevice to add other l3cds and those from VPN might be alone. Except, maybe with routing VPN (libreswan) that is different. Dunno.
2022-02-01device: adjust NM_L3CFG_CONFIG_PRIORITY_IPV6LL and L3_CONFIG_DATA_TYPE_LL_6Thomas Haller2-1/+2
NM_L3CFG_CONFIG_PRIORITY_IPV6LL and L3_CONFIG_DATA_TYPE_LL_6 are somewhat related. They probably should be numerically identical. Now, L3_CONFIG_DATA_TYPE_LL_6 cannot be zero (because L3_CONFIG_DATA_TYPE_LL_4 is zero and L3ConfigDataType values must be distinct). Therefore, also bump NM_L3CFG_CONFIG_PRIORITY_IPV6LL to 1. Of course, NM_L3CFG_CONFIG_PRIORITY_IPV6LL is not obviously more important than NM_L3CFG_CONFIG_PRIORITY_IPV4LL. But to be consistent with L3_CONFIG_DATA_TYPE_LL_6 is probably more important here.
2022-02-01l3cfg: fix order of NML3ConfigData priorities in NML3CfgThomas Haller2-3/+34
There was a disagreement whether higher priority numbers mean more/less important. NMDevice and callers of nm_l3cfg_add_config() assumed that higher numbers are more important, while _l3_config_datas_get_sorted_cmp() did the inverse. There is no obvious right or wrong. We only need to agree. It seems slightly more sensible to keep the caller's interpretation.
2022-02-01Revert "nm-device: prefer manually configured addresses to automatic"Thomas Haller2-4/+4
This commit does not seem correct. The enum was moved with the declared intent to make manual IP configuration preferred. But the code comment in L3ConfigDataType states that higher numbers are more important. Also, all the other values are intentionally ordered so that more important method have higher numbers. For example, LL_4 < DHCP_4 < SHARED_4 < DEV_4 (in increasing priority). While it's often not clear whether to prefer one method over the other, or what the actual effect of (LL_4 < DHCP_4) is, the numbers were chosen intentionally. Only moving MANUALIP first, counters the relative order of the other values. If there is the problem, that the code comment is wrong (and lower numbers mean more important), then we would have to reverse all enum values. The real problem is that NML3Cfg's _l3_config_datas_get_sorted_cmp() has the wrong order/understanding. So the real fix is there and will be done next. That is, unless we would agree that _l3_config_datas_get_sorted_cmp() is in the right, and prefer lower numbers -- in which case all values had to be reversed. This reverts commit af1903fe3f41acb79acfba6463615dff87abde01.
2022-02-01dhcp: include "dhcp6_ntp_server" in Dhcp6ConfigLubomir Rintel3-1/+30
Works for the internal DHCP client only as sd-dhcp does the option parsing for us. The option 56 is not understood by dhclient so we would need to parse it ourselves. Let's not do it for now, as the RFC seems to written in a somewhat poor taste. https://bugzilla.redhat.com/show_bug.cgi?id=2047415#c2
2022-02-01core/trivial: whitespaceThomas Haller1-1/+0
2022-02-01dhcp: improve error message in assertion of NMDhcpOption dataThomas Haller1-3/+13
We have global data NMDhcpOption that describes the DHCP meta data. There is a consistency check with NM_MORE_ASSERTS. Improve the error message when the meta data is inconsistent to help finding the bug.
2022-01-31ovsdb: unrealize removed ovs-interfaces on UNAVAILABLE stateFernando 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.