summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* contrib/rpm: BR pexpectlr/rpm-pexpectLubomir Rintel2022-07-011-0/+2
| | | | Unit tests need this to run.
* release: bump version to 1.39.8 (development)1.39.8-devLubomir Rintel2022-06-302-2/+2
|
* platform: merge branch 'th/platform-nmp-object-lookup'Thomas Haller2022-06-3015-49/+55
|\ | | | | | | https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1281
| * platform: rename nmp_lookup_init_object() to nmp_lookup_init_object_by_ifindex()Thomas Haller2022-06-3015-42/+52
| | | | | | | | | | | | | | | | | | | | | | In the past, nmp_lookup_init_object() could both lookup all object for a certain ifindex, and lookup all objects of a type. That fallback path already leads to an assertion failure fora while now, so nobody should be using this function to lookup all objects of a certain type (for what, we have nmp_lookup_init_obj_type()). Now, remove the fallback path, and rename the function to what it really does.
| * platform: use memset() in _nmp_object_stackinit_from_class()Thomas Haller2022-06-301-7/+3
|/ | | | | | NMPObject is a union. It's not clear to me that C guarnatees that designated initializers will meaningfully set all fields to zero. Use memset() instead.
* merge: branch 'lr/client-ask-mode'Lubomir Rintel2022-06-305-29/+76
|\ | | | | | | https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1282
| * tests/client: add interactive add testlr/client-ask-modeLubomir Rintel2022-06-301-0/+22
| |
| * tests/client: do not consult expected result files if no checks require themLubomir Rintel2022-06-301-0/+3
| | | | | | | | | | Perhaps the test is not using call_nmcli*(), but still wants to use @nm_test decorator to set up the mock service.
| * tests/client: add a pexpect-based test runnerLubomir Rintel2022-06-301-24/+43
| | | | | | | | Useful for testing interactive commands against a mock service.
| * contrib/packages: install pexpectLubomir Rintel2022-06-304-5/+8
| | | | | | | | We'd like to use this for client unit testing.
* | man: extend `man NetworkManager-wait-online.service` with examplesThomas Haller2022-06-301-1/+24
| |
* | all: make "ipv6.addr-gen-mode" configurable by global defaultThomas Haller2022-06-2949-764/+852
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It can be useful to choose a different "ipv6.addr-gen-mode". And it can be useful to override the default for a set of profiles. For example, in cloud or in a data center, stable-privacy might not be the best choice. Add a mechanism to override the default via global defaults in NetworkManager.conf: # /etc/NetworkManager/conf.d/90-ipv6-addr-gen-mode-override.conf [connection-90-ipv6-addr-gen-mode-override] match-device=type:ethernet ipv6.addr-gen-mode=0 "ipv6.addr-gen-mode" is a special property, because its default depends on the component that configures the profile. - when read from disk (keyfile and ifcfg-rh), a missing addr-gen-mode key means to default to "eui64". - when configured via D-Bus, a missing addr-gen-mode property means to default to "stable-privacy". - libnm's ip6-config::addr-gen-mode property defaults to "stable-privacy". - when some tool creates a profile, they either can explicitly set the mode, or they get the default of the underlying mechanisms above. - nm-initrd-generator explicitly sets "eui64" for profiles it creates. - nmcli doesn' explicitly set it, but inherits the default form libnm's ip6-config::addr-gen-mode. - when NM creates a auto-default-connection for ethernet ("Wired connection 1"), it inherits the default from libnm's ip6-config::addr-gen-mode. Global connection defaults only take effect when the per-profile value is set to a special default/unset value. To account for the different cases above, we add two such special values: "default" and "default-or-eui64". That's something we didn't do before, but it seams useful and easy to understand. Also, this neatly expresses the current behaviors we already have. E.g. if you don't specify the "addr-gen-mode" in a keyfile, "default-or-eui64" is a pretty clear thing. Note that usually we cannot change default values, in particular not for libnm's properties. That is because we don't serialize the default values to D-Bus/keyfile, so if we change the default, we change behavior. Here we change from "stable-privacy" to "default" and from "eui64" to "default-or-eui64". That means, the user only experiences a change in behavior, if they have a ".conf" file that overrides the default. https://bugzilla.redhat.com/show_bug.cgi?id=1743161 https://bugzilla.redhat.com/show_bug.cgi?id=2082682 See-also: https://github.com/coreos/fedora-coreos-tracker/issues/907 https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1213
* team: specify cli-type for teamdctl_connect() to select usock/dbusThomas Haller2022-06-271-36/+64
| | | | | | | | | | | | | teamdctl_connect() has a parameter cli_type. If unspecified, the library will try usock, dbus (if enabled) and zmq (if enabled). Trying to use the unix socket if we expect to use D-Bus can be bad. For example, it might cause SELinux denials. As we anyway require libteam to use D-Bus, if D-Bus is available, explicitly select the cli type. https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1255
* merge: branch 'lr/gettext-2'Lubomir Rintel2022-06-2718-153/+141
|\ | | | | | | | | | | | | This is essentially work started by Martin Blanchard and improved by Javier Jardón with some fixups. https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1094
| * ci: trivial changes to commentsLubomir Rintel2022-06-272-2/+4
| | | | | | | | Hopefully for better not worse.
| * ci: drop Ubuntu 16.04Lubomir Rintel2022-06-275-89/+7
| | | | | | | | | | It's sad, old and unsupported. Also its gettext is old and smells of elderberries.
| * po: make dist depend on update-poLubomir Rintel2022-06-272-1/+4
| | | | | | | | | | | | This works around a race condition with gettext Makefile. https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1094#note_1435313
| * build: stop relying on intltool for i18nMartin Blanchard2022-06-2711-62/+127
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Recent gettext version can extract and merge back strings from and to various file formats, no need for intltool anymore. https://wiki.gnome.org/Initiatives/GnomeGoals/GettextMigration https://gitlab.freedesktop.org/NetworkManager/NetworkManager/issues/133 https://github.com/NetworkManager/NetworkManager/pull/303 https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/96 Clarification about the use of AM_GNU_GETTEXT_REQUIRE_VERSION: In configure.ac, specify the minimum gettext version we require, rather than the exact one. This fixes a situation where the autoconf macros used for gettext will be the latest available on the system (for example, 0.20); but the copied-in Makefile.in.in will be for the exact version specified in configure.ac (in this case, 0.19). In that situation, the gettext build rules will error out at `make` time with the message: *** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version 0.19 but the autoconf macros are from gettext version 0.20 Avoid that by specifying a minimum version dependency rather than an exact one. This should not cause problems as we haven’t committed any generated or external gettext files into git, so each developer will end up regenerating the build system for their system’s version of gettext, as expected. See the subsection of https://www.gnu.org/software/gettext/manual/html_node/Version-Control-Issues.html for more information. Note that autoreconf currently doesn’t recognise AM_GNU_GETTEXT_REQUIRE_VERSION, so we must continue also using AM_GNU_GETTEXT_VERSION. autopoint will ignore the latter if the former is present. See https://lists.gnu.org/archive/html/autoconf-patches/2015-10/msg00000.html. [lkundrak@v3.sk: Fixed the meson build, adjusted autogen.sh: droped "|| exit 1", dropped call to aclocal, dropped --copy from gtkdocize.]
* platform: fix routing rule test failureBeniamino Galvani2022-06-271-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since kernel 5.18 there is a stricter validation [1][2] on the tos field of routing rules, that must not include ECN bits. [1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f55fbb6afb8d701e3185e31e73f5ea9503a66744 [2] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=a410a0cf98854a698a519bfbeb604145da384c0e Fixes the following failure: >>> src/core/platform/tests/test-route-linux >>> ... # NetworkManager-MESSAGE: <warn> [1656321515.6604] platform-linux: do-add-rule: failure 22 (Invalid argument - Invalid dsfield (tos): ECN bits must be 0) >>> failing... errno=-22, rule=[routing-rule,0x13d6e80,1,+alive,+visible; [6] 0: from all tos 0xff fwmark 0x4/0 suppress_prefixlen -459579276 action-214 protocol 255] >>> existing rule: * [routing-rule,0x13d71e0,2,+alive,+visible; [6] 0: from all sport 65534 lookup 10009 suppress_prefixlen 0 none] >>> existing rule: [routing-rule,0x13d7280,2,+alive,+visible; [4] 0: from all fwmark 0/0x9a7e9992 ipproto 255 suppress_prefixlen 0 realms 0x00000008 none protocol 71] >>> existing rule: [routing-rule,0x13d7320,2,+alive,+visible; [6] 598928157: from all suppress_prefixlen 0 none] >>> existing rule: [routing-rule,0x13d73c0,2,+alive,+visible; [4] 0: from 192.192.5.200/8 lookup 254 suppress_prefixlen 0 none protocol 9] >>> existing rule: [routing-rule,0x13d7460,2,+alive,+visible; [4] 0: from all ipproto 3 suppress_prefixlen 0 realms 0xffffffff none protocol 5] >>> existing rule: [routing-rule,0x13d7500,2,+alive,+visible; [4] 0: from all fwmark 0x1/0 lookup 254 suppress_prefixlen 0 action-124 protocol 4] >>> existing rule: [routing-rule,0x13d75a0,2,+alive,+visible; [4] 0: from all suppress_prefixlen 0 action-109] 0: from all fwmark 0/0x9a7e9992 ipproto ipproto-255 realms 8 none proto 71 0: from 192.192.5.200/8 lookup main suppress_prefixlength 0 none proto ra 0: from all ipproto ggp realms 65535/65535 none proto 5 0: from all fwmark 0x1/0 lookup main suppress_prefixlength 0 124 proto static 0: from all 109 0: from all sport 65534 lookup 10009 suppress_prefixlength 0 none 598928157: from all none Bail out! nm:ERROR:../src/core/platform/tests/test-route.c:1787:test_rule: assertion failed (r == 0): (-22 == 0) Fixes: 5ae2431b0f9e ('platform/tests: add tests for handling policy routing rules')
* merge: branch 'bg/route-attrs'Beniamino Galvani2022-06-2714-45/+227
|\ | | | | | | https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1274
| * libnm,core: add support for {rto_min,quickack,advmss} route attributesBeniamino Galvani2022-06-2711-3/+93
| |
| * platform: add support for {rto_min,quickack,lock-advmss} route attributesBeniamino Galvani2022-06-273-42/+110
| |
| * ifcfg-rh: support reading boolean route attributesBeniamino Galvani2022-06-271-0/+24
|/
* dhcp: merge branch 'th/dhcp-subnet-mask'Thomas Haller2022-06-2715-69/+86
|\ | | | | | | | | | | https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/1037 https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1269
| * dhcp/systemd: pass client instance to lease_to_ip6_config()Thomas Haller2022-06-271-22/+6
| | | | | | | | | | | | | | | | | | | | This makes it more consistent with nettools' lease_to_ip4_config(). The benefit of having a self pointer, is that it provides the necessary context for logging. Without it, these functions cannot correctly log. At this point, it's clearer to get the necessary data directly from the DHCP client instance, instead of having the caller passing them on (redundantly).
| * dhcp/nettools: log message about guessing subnet mask for IPv4Thomas Haller2022-06-271-18/+17
| |
| * dhcp: add nm_dhcp_client_create_l3cd() helperThomas Haller2022-06-272-0/+12
| |
| * dhcp/nettools: normalize subnet netmask in nettools clientThomas Haller2022-06-271-1/+2
| | | | | | | | | | | | | | | | For an IPv4 subnet mask we expect that all the leading bits are set (no "holes"). But _nm_utils_ip4_netmask_to_prefix() does not enforce that, and tries to make the best of it. In face of a netmask with holes, normalize the mask.
| * dhcp/nettools: accept missing "subnet mask" (option 1) in DHCP leaseThomas Haller2022-06-271-12/+18
| | | | | | | | | | | | Do the same as dhclient plugin in nm_dhcp_utils_ip4_config_from_options(). https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/1037
| * all: use internal _nm_utils_ip4_netmask_to_prefix()Thomas Haller2022-06-2710-11/+11
| | | | | | | | | | | | We have two variants of the function: nm_utils_ip4_netmask_to_prefix() and _nm_utils_ip4_netmask_to_prefix(). The former only exists because it is public API in libnm. Internally, only use the latter.
| * glib-aux: add _nm_utils_ip4_netmask_to_prefix() helperThomas Haller2022-06-272-6/+12
| | | | | | | | | | | | | | | | | | | | | | nm_utils_ip4_netmask_to_prefix() and nm_utils_ip4_prefix_to_netmask() are public API in libnm. We thus already have an internal implementation _nm_utils_ip4_prefix_to_netmask(), for non-libnm users. Internally, we should never use the libnm variant. For consistency and so that we have the helper available in libnm-glib-aux, add _nm_utils_ip4_netmask_to_prefix().
| * libnm: assert nm_utils_ip4_prefix_to_netmask() for valid IPv4 prefix lengthThomas Haller2022-06-271-2/+11
|/ | | | | | | There was already an nm_assert() assertion. Upgrade this to a g_return_val_if_fail(). This function is public API, so this is potentially an API break. But it should highlight a bug in the caller.
* merge: branch 'lr/fix-debian'Lubomir Rintel2022-06-274-19/+59
|\ | | | | | | https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1279
| * gitlab-ci: regenerate imageslr/fix-debianLubomir Rintel2022-06-272-6/+6
| |
| * gitlab: fix Ubuntu 18.04 image creationLubomir Rintel2022-06-271-2/+17
| | | | | | | | Or, well, work around a bug.
| * contrib/debian: rework package installLubomir Rintel2022-06-271-11/+36
|/ | | | | | | | | Apt is run for each package separately and errors are ignored. This is not great -- it's slow and ignores errors. Therefore we sometimes end up without packages we need. Let's tolerate errors only for packages that we are know can fail to install safely.
* platform: fix build with kernels < 5.7Lubomir Rintel2022-06-271-1/+3
| | | | | | Fixes: 919a61bc533a ('platform/netlink: extend nl_nlmsghdr_to_str() for genl messages') https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1280
* merge branch 'th/misc'Thomas Haller2022-06-273-28/+26
|\ | | | | | | https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1278
| * ifcfg-rh: fix serializing lock route attributesThomas Haller2022-06-271-4/+5
| | | | | | | | | | The lock attribute is a boolean, it can also be FALSE. We need to handle that case, and don't add serialize "$NAME lock 0" for them.
| * ifcfg-rh: in get_route_attributes_string() check prefix for "lock" namesThomas Haller2022-06-271-1/+1
| | | | | | | | | | | | | | | | | | In practice, the profile probably validates, so all the attribute names are well-known. There is thus no attribute name that has "lock-" in the middle of the string. Still, fix it. We want to match only at the begin of the name.
| * core: log boot-id when NetworkManager startsThomas Haller2022-06-271-3/+4
| | | | | | | | | | | | | | | | | | | | | | In a logfile, the "is starting" message is an interesting point that indicates when NetworkManager is starting. Include also the boot-id in the log, so that we can know whether this was a restart from the same boot. Also drop the "for the first time" part. <info> [1656057181.8920] NetworkManager (version 1.39.7) is starting... (after a restart, asserts:10000, boot:486b1052-4bf8-48af-8f15-f3e85c3321f6)
| * glib-aux: make code in nm_uuid_is_valid_nm() clearerThomas Haller2022-06-241-15/+12
| | | | | | | | | | | | | | | | Setting `NM_SET_OUT(out_normalized, !is_normalized)` is correct, but looks odd and required a long code comment. Try to write the same code differently, I think it is easier to read and requires less comment to explain.
| * glib-aux: pass string length to nm_uuid_generate_from_string() in ↵Thomas Haller2022-06-241-5/+4
|/ | | | | | | nm_uuid_is_valid_nm() No need to recompute the length. We have it already. Also no need to NUL terminate the string.
* po: update Ukrainian (uk) translationYuri Chornoivan2022-06-241-551/+538
| | | | https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1277
* merge: branch 'lr/ask-mode'Lubomir Rintel2022-06-243-104/+172
|\ | | | | | | https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1215
| * nmcli/connections: fix setting ifname with "--ask c add"lr/ask-modeLubomir Rintel2022-06-241-9/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We almost always do the wrong thing in interactive add: The software devices generally require an interactive name, but we don't insist of asking for them; treating them as optional: $ nmcli -a c add type dummy There is 1 optional setting for General settings. Do you want to provide it? (yes/no) [yes] For some interface types (bridges, bonds, ...) we make up a name, presumably for historical reasons. But we don't give the user an option to modify them: $ nmcli -a c add type bridge <not asking for interface name at all> There are 9 optional settings for Bridge device. Do you want to provide them? (yes/no) [yes] This fixes the above use cases -- still set the default, but be sure to ask: $ nmcli -a c add type dummy Interface name: $ nmcli -a c add type bridge Interface name [nm-bridge1]: Beautiful.
| * nmcli/connections: make sure the connection has a base settingLubomir Rintel2022-06-241-0/+6
| | | | | | | | | | | | | | | | | | | | | | | | Do the same bookkeeping as would happen upon setting the "type" option when the connection has a connection.type set upon its addition. Otherwise the --ask mode is sad: $ nmcli --ask c add connection.type team ** nm:ERROR:src/nmcli/connections.c:5648:connection_get_base_meta_setting_type: assertion failed: (base_setting) Bail out! nm:ERROR:src/nmcli/connections.c:5648:connection_get_base_meta_setting_type: assertion failed: (base_setting) Aborted (core dumped)
| * nmcli/connections: factor out code run after new connection's type is setLubomir Rintel2022-06-241-21/+33
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | After the connection's type is set, some bookkeeping is necessary for the interactive (--ask) mode: appropriate setting need to be added and options enabled. Currently it happens in an option setter; which runs when the "type" options is present on the command line, or the value is set in a response to interactive mode: $ nmcli --ask c add type team $ nmcli --ask c add Connection type: team But not when the property is set directly: $ nmcli --ask c add connection.type team ** nm:ERROR:src/nmcli/connections.c:5648:connection_get_base_meta_setting_type: assertion failed: (base_setting) Bail out! nm:ERROR:src/nmcli/connections.c:5648:connection_get_base_meta_setting_type: assertion failed: (base_setting) Aborted (core dumped) This doesn't fix the issue -- a followup commit (hopefully) will.
| * nmcli/connections: use the current value in default in ask_option()Lubomir Rintel2022-06-243-37/+57
| | | | | | | | | | | | | | | | | | | | | | For new connections, this ensures the value in square brackets on interactive add are always correct. Apart from that, this allows us to initialize some non-default values before asking (such as making up an interface name for some software devices), and inform the user about what we picked: Interface name [nm-bridge]:
| * nmcli/connections: don't ask to ask with --askLubomir Rintel2022-06-241-9/+7
| | | | | | | | | | | | | | | | | | | | | | | | This is slightly annoying: $ nmcli -a c add type ethernet There is 1 optional setting for General settings. No point in asking if there's just one option. Just ask right away: $ nmcli -a c add type ethernet Interface name: