summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* wifi: don't limit active scans for SSIDs to 5th/wifi-scanThomas Haller2020-04-292-27/+55
| | | | | | | | | | As far as NMSupplicantInterface is concerned, don't clamp the max-scan-ssids to 5. We should track the real value that wpa_supplicant announces, and it's up to the caller to provide fewer SSIDs. In particular, we want to limit the number of hidden SSIDs that we accept from connection profiles, but we don't want to limit the number of active scans via `nmcli device wifi rescan ssid $SSID [...]`.
* wifi: rework scanning of Wi-Fi deviceThomas Haller2020-04-291-322/+542
| | | | | | | | | | | | | | | | | | | | | | | Handling the scanning is complicated. - we want to have periodic scans. But only at certain times, and with an increasing back off timeout. - the user can initiate explicit scans via D-Bus. Thereby a list of SSIDs scan be provided. - if there are any hidden Wi-Fi profiles configured, we want to explicitly scan for their SSIDs. - explicit scans are not possible at any time. But we should not reject the scan request, but instead remember to scan later, when possible. This is a heavy rework. It also aims to fix issues of scanning since the recent rework of supplicant handling in commit b83f07916a54 ('supplicant: large rework of wpa_supplicant handling') that can render Wi-Fi scanning broken. Fixes: b83f07916a54 ('supplicant: large rework of wpa_supplicant handling'):
* wifi: merge branch 'th/wifi-scan' (part 1)Thomas Haller2020-04-2816-184/+427
|\ | | | | | | https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/479
| * wifi: express SCAN_RAND_MAC_ADDRESS_EXPIRE time in secondsThomas Haller2020-04-281-2/+2
| | | | | | | | | | We commonly use already seconds and milliseconds scales for computing timeouts. Reduce the number of difference scales and don't also use minutes.
| * supplicant: log changes to max-scan-ssids of NMSupplicantInterfaceThomas Haller2020-04-281-3/+8
| |
| * device: implement "auth-request" as async operation ↵Thomas Haller2020-04-288-105/+183
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | nm_manager_device_auth_request() GObject signals only complicate the code and are less efficient. Also, NM_DEVICE_AUTH_REQUEST signal really invoked an asynchronous request. Of course, fundamentally emitting a signal *is* the same as calling a method. However, implementing this as signal is really not nice nor best practice. For one, there is a (negligible) overhead emitting a GObject signal. But what is worse, GObject signals are not as strongly typed and make it harder to understand what happens. The signal had the appearance of providing some special decoupling of NMDevice and NMManager. Of course, in practice, they were not more decoupled (both forms are the same in nature), but it was harder to understand how they work together. Add and call a method nm_manager_device_auth_request() instead. This has the notion of invoking an asynchronous method. Also, never invoke the callback synchronously and provide a cancellable. Like every asynchronous operation, it *must* be cancellable, and callers should make sure to provide a mechanism to abort.
| * auth: track NMAuthChain data in array instead of CListThomas Haller2020-04-281-45/+43
| | | | | | | | | | | | It's about as complicated to track a CList as it is to track an allocated array. The latter requires fewer allocations and has better locality. That makes it preferable.
| * auth: natively support GCancellable in NMAuthChainThomas Haller2020-04-282-28/+138
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We want that our asynchronous operations are cancellable. In fact, NMAuthChain is already (manually) cancellable by the user calling nm_auth_chain_destroy(). However, sometimes we have a GCancellable at hand, so the callers would have to register to the cancellable themselves. Instead, support setting a cancellable to the NMAuthChain, that aborts the request and invokes the callback. It does so always on an idle handler. Also, the user may only set the cancellable once, and only before starting the first call.
| * device: add nm_device_get_manager()Thomas Haller2020-04-282-1/+11
| | | | | | | | | | | | | | | | | | | | NMDevice already has access to the NMSettings singleton. It is permissible that NMDevice *knows* about NMManager. The current alternative is emitting GObject signals like NM_DEVICE_AUTH_REQUEST, pretending that NMDevice and NMManager would be completely independent, or that there could be anybody else handling the request aside NMManager. No, NMManager and NMDevice may know each other and refer to each other. Just like NMDevice also knows and refers to NMSettings.
| * shared/glib: prevent users to use g_cancellable_reset()Thomas Haller2020-04-281-0/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | When handling a GCancellable, you make decisions based on when the cancelled property of a GCancellable changes. Correctly handling a cancellable becoming uncancelled again is really complicated, nor is it clear what it even means: should the flipping be treated as cancellation or not? Probably if the cancelled property gets reset, you already start aborting and there is no way back. So, you would want that a cancellation is always handled. But it's hard to implement that correctly, and it's odd to claim something was cancelled, if g_cancellable_is_cancelled() doesn't agree (anymore). Avoid such problems by preventing users to call g_cancellable_reset().
| * shared: add nm_gbytes_get_empty() singleton getterThomas Haller2020-04-282-0/+20
| |
| * shared: add nm_gbytes_hash() and nm_gbytes_equal()Thomas Haller2020-04-282-0/+14
|/
* libnm/doc: fix spelling in nm_client_add_and_activate_connection2() ↵Thomas Haller2020-04-281-3/+3
| | | | documentation
* all: merge branch 'th/mud-url-global-default'Thomas Haller2020-04-2812-679/+627
|\ | | | | | | https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/477
| * cli: hide default setting of "connection.mud-url" from nmcli outputth/mud-url-global-defaultThomas Haller2020-04-284-654/+517
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | "connection.mud-url" is a commonly not used parameter, that most users won't care. To minimize the output of $ nmcli connection show "$PROFILE" hide the MUD URL if it is unset. This mechanism of nmcli is not yet great, because there is currently no way to print a default value, and $ nmcli -f connection.mud-url connection show "$PROFILE" does not work as one would expect(??). But that is a shortcoming of the general mechanism in nmcli, and not specific to the MUD URL property.
| * dhcp: make connection.mud-url configurable as global connection defaultThomas Haller2020-04-287-17/+67
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conceptionally, the MUD URL really depends on the device, and not so much the connection profile. That is, when you have a specific IoT device, then this device probably should use the same MUD URL for all profiles (at least by default). We already have a mechanism for that: global connection defaults. Use that. This allows a vendor drop pre-install a file "/usr/lib/NetworkManager/conf.d/10-mud-url.conf" with [connection-10-mud-url] connection.mud-url=https://example.com Note that we introduce the special "connection.mud-url" value "none", to indicate not to use a MUD URL (but also not to consult the global connection default).
| * cli: handle string properties that can both be empty and %NULLThomas Haller2020-04-282-8/+43
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The default value of a string property (almost?) always should be %NULL, which means the value is absent and not specified. That is necessary because adding new properties must be backward compatible. That means, after upgrade those properties will have their value unset. In these cases, %NULL really translates to some property dependant behavior (like not using the value, or using a special default value). For example leaving "ethernet.cloned-mac-address" unset really means "preserve", with the twist that %NULL can be overridden by a global connection default. For most string properties, a value can only be unset (%NULL) or set to a non-empty string. nm_connection_verify() enforces that. However, for some properties, it makes sense to allow both unset and the empty word "" as value. This is the case if a property can have it's value overridden by a global connection default, or if we need the differentiation between having a value unset and having it set to the empty word. We would usually avoid allowing the empty word beside %NULL, because that makes it hard to express the difference on the command line of nmcli or in a UI text entry field. In the "ethernet.cloned-mac-address" example, "" is not necessary nor sensible. However, for some properties really all string values may be possible (including "") and also unset/%NULL. Then, we need some form of escaping/mangling, to allow to express all possible values. The chosen style here is that on nmcli input field "" means %NULL, while a word with all white space stands for the word with one less white space characters. This is still unused, but I think it makes sense for some properties. I initially added this for "connection.mud-url", but a valid MUD-URL always must start with "https://", so not all strings are possible to begin with. So to explicitly express that no MUD-URL should be set, we will instead introduce a special word "none", and not use the empty word, due to the oddities discussed here. However, I think this may well make sense for some properties where all strings are valid.
* device: flush IP configuration of slaves during activationBeniamino Galvani2020-04-281-12/+31
| | | | | | | | | | | | | | If a device only has an IPv6 link-local address, we don't generate an assumed connection. Therefore, when a new slave connection (without IP configuration) is activated on the device, we don't deactivate any existing connection and the link-local address remains configured. The IP configuration of an activated slave should be predictable and not depend on the previous state; let's flush addresses and routes on activation. https://bugzilla.redhat.com/show_bug.cgi?id=1816517 https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/480
* vpn: merge branch 'th/vpn-ipv6-addr-fix-assert'Thomas Haller2020-04-281-14/+26
|\ | | | | | | https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/482
| * vpn: cleanup loop in nm_vpn_connection_ip6_config_get()Thomas Haller2020-04-281-14/+24
| | | | | | | | | | | | I find it simpler to follow the pattern of checking conditions and "erroring out", by going to the next entry. The entire loop already behaves like that.
| * vpn: clear host part of IPv6 routes received from VPN pluginThomas Haller2020-04-281-0/+2
|/ | | | | | | | | | | | | Kernel would reject adding a route with a destination host part not all zero. NetworkManager generally coerces such routes and there are assertions in place to ensure that. We forgot to ensure that for certain IPv6 routes from VPN plugins. This can cause an assertion failure and wrong behavior. https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/425 https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/482
* examples: add Wi-Fi P2P exampleBeniamino Galvani2020-04-271-0/+109
| | | | | Add a python example using GObject introspection that shows how to scan for Wi-Fi P2P peers and connect to one of them.
* libnm,dhcp: use nm_clear_g_free() instead of nm_clear_pointer(, g_free)Thomas Haller2020-04-272-2/+2
|
* libnm/doc: clarify use of "ipv[46].gateway in nm-settings manualThomas Haller2020-04-262-4/+8
|
* libnm/meson.build: stop using env -i (just env)Michael Stapelberg2020-04-261-1/+1
| | | | | | | | | | env -i starts with an empty environment, which is undesired when the build environment needs certain environment variables to function. One such example is a custom PYTHONPATH, which gets dropped by env -i and results in the nm-settings-docs.xml generator not finding the gi Python module. https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/478
* dhcp: enforce MUD URL to use "https://" schemeThomas Haller2020-04-243-14/+19
| | | | | | | | | | | | nm_sd_http_url_is_valid_https() is rather clunky, but it is this way, because we must not disagree with systemd code about what makes a valid URL. RFC 8520 says "MUD URLs MUST use the "https" scheme". See-also: https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/463#note_476190 Fixes: cedcea5ee812 ('libnm: fix verification of connection:mud-url property')
* wifi: merge branch 'th/cli-trigger-scan-retry'Thomas Haller2020-04-2412-76/+253
|\ | | | | | | https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/476
| * wifi: add callback to nm_supplicant_interface_request_scan()th/cli-trigger-scan-retryThomas Haller2020-04-243-17/+90
| | | | | | | | | | | | | | | | | | While we request a scan, we are not yet actually scanning. That means, the supplicant's "scanning" property will only change to TRUE a while after we initiate the scan. It may even never happen. We thus need to handle that the request is currently pending and react when the request completes.
| * wifi: add more trace logging to supplicant interfaceThomas Haller2020-04-241-4/+13
| |
| * cli: repeatedly trigger Wi-Fi scans while waiting for scan resultThomas Haller2020-04-241-7/+50
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | NetworkManager will reject scan requests, if it is currently scanning. That is very wrong. Even if NetworkManager wants to ratelimit scan requests or not scan at critical moments, it should never reject a request, but remember and start scanning as soon as it can. That should be fixed. But regardless, also nmcli can do better. If you issue $ nmcli device wifi list --rescan yes once, it works as expected. If you issue it again right after, the scan request of nmcli will be rejected. But nmcli cannot just merely complete and print the result. Instead, it will wait in the hope that a scan result will be present soon. But if the request was simply rejected, then the result will never come, and nmcli hangs for the 15 seconds timeout. Instead, repeatedly re-trigger scan requests, in the hope that as soon as possible we will be ready.
| * shared: add nm_utils_invoke_on_timeout()Thomas Haller2020-04-249-48/+100
|/ | | | | | | | | | | | | | | | | | Add nm_utils_invoke_on_timeout() beside nm_utils_invoke_on_idle(). They are fundamentally similar, except one schedules an idle handler and the other a timeout. Also, use the current g_main_context_get_thread_default() as context instead of the singleton instance. That is a change in behavior, but the only caller of nm_utils_invoke_on_idle() is the daemon, which doesn't use different main contexts. Anyway, to avoid anybody being tripped up by this also change the order of arguments. It anyway seems nicer to first pass the cancellable, and the callback and user data as last arguments. It's more in line with glib's asynchronous methods. Also, in the unlikely case that the cancellable is already cancelled from the start, always schedule an idle action to complete fast.
* platform: simplify static assert in _nl_static_assert_tb()Thomas Haller2020-04-241-9/+5
|
* dhcp: merge branch 'elear:mud'Thomas Haller2020-04-2433-555/+1014
|\ | | | | | | https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/463
| * NEWS: updateThomas Haller2020-04-241-0/+2
| |
| * libnm: fix verification of connection:mud-url propertyThomas Haller2020-04-241-9/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | For one, the setters sd_dhcp_client_set_mud_url() and sd_dhcp6_client_set_request_mud_url() assert that the value honors these settings. So, we must never pass such values to the function. Also, before calling n_dhcp4_client_probe_config_append_option() the code doesn't check whether the URL is short enough. That would be a bug (unless we ensure that the property is valid from the beginning). In general, it is necessary to strictly validate the parameter. Also, returning NM_SETTING_VERIFY_NORMALIZABLE_ERROR for a property that does not get normalized is a bug.
| * libnm: fix API version annotation for nm_setting_connection_get_mud_url()Thomas Haller2020-04-242-2/+4
| |
| * libnm: fix symbol versioning for nm_setting_connection_get_mud_url()Thomas Haller2020-04-241-1/+5
| |
| * dhcp: set MUD URL in DHCPv6 request for systemd DHCP clientThomas Haller2020-04-241-0/+10
| |
| * ifcfg-rh/trivial: drop comment for nms_ifcfg_well_known_keysThomas Haller2020-04-241-1/+0
| | | | | | | | | | | | | | | | | | | | | | The comment isn't right. The fixed array size is in the header file, because other parts of the code need to know how many elements are in the array. The alternative would be a define for the size, but that is only redundant information. Also, even with a define the user who adds an entry needs to adjust the code in the header. Explicitly stating the array size in the header makes it almost impossible to accidentally choosing the wrong size, because the compiler (and unit tests) ensure the consistency.
| * dhcp: fix leaking mud_url in NMSettingConnectionThomas Haller2020-04-241-0/+1
| |
| * dhcp: fix leaking mud_url in NMDhcpClientThomas Haller2020-04-241-0/+1
| |
| * dhcp: don't make mud-url property of NMDhcpClient readableThomas Haller2020-04-241-4/+1
| | | | | | | | | | | | | | We have this as a GObject property, so that it can be set at construct time (to be never modified afterwards). We don't need a readable GObject property, because there is a getter function that should be used instead.
| * device: rename local variable s_connection and adjust assertionsThomas Haller2020-04-241-10/+11
| | | | | | | | | | | | | | | | - avoid g_assert(). Either we want to gracefully assert (g_return_*()) or we want to use assertions that are disabled in production builds (nm_assert()); - rename variable s_connection to s_con. This is how variables for this purpose are commonly called.
| * dhcp/nettools: cleanup setting error message from n-dhcp4 error codeThomas Haller2020-04-241-17/+31
| | | | | | | | | | n-dhcp4 error codes can also be some positive numbers. Those shall not be converted to errno. Instead, print the error code directly.
| * dhcp: abort on error setting DHCP MUD URL option for nettoolsThomas Haller2020-04-241-0/+1
| |
| * dhcp: rename mudurl to mud_urlThomas Haller2020-04-2414-63/+63
| |
| * systemd: add nm_sd_http_url_is_valid() to access internal http_url_is_valid()Thomas Haller2020-04-243-15/+61
| |
| * systemd: make string argument of sd_dhcp6_client_set_request_mud_url() constThomas Haller2020-04-242-2/+2
| | | | | | | | See-also: https://github.com/systemd/systemd/pull/15586
| * dhcp: add support for MUD URL (RFC 8520)Eliot Lear2020-04-2427-524/+890
|/ | | | | | | | | | | [thaller@redhat.com: rewritten commit message] https://tools.ietf.org/html/rfc8520 https://blog.apnic.net/2019/05/14/protecting-the-internet-of-things-with-mud/ https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/402 https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/463
* man: mention the meaning of may-fail in the nm-online man pageBeniamino Galvani2020-04-231-0/+8
| | | | | | | | | | | Commit b2a0738765d3 ('man: improve manual page for nm-online') removed the explanation of how may-fail can be used to wait for a specific address family during boot. I found that part useful. Add it again, adapting it to the new behavior introduced by 1e5206414af8 ('device: don't delay startup complete for pending-actions "autoconf", "dhcp4" and "dhcp6"'). https://bugzilla.redhat.com/show_bug.cgi?id=1825666