summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* keyfile: relicense the code under LGPL-2.1+th/keyfile-relicense-as-lgplThomas Haller2020-10-204-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Historically, keyfile read/write code was part of core, and thus GPL-2.0+ licensed. Keyfile is the native file format for NetworkManager connection profiles, and code to handle that should be part of libnm. This would unlock many interesting features, like tools being able to import/export connection profiles in the native file format. However, libnm is LGPL-2.1+ licensed, so this is a problem. The alternative would be to add a separate, GPL licensed library (libnm-keyfile.so or libnm-gpl.so). That however also requires larger rework, because the current keyfile implementation uses internal API from libnm-core and it would need to use only public libnm API. Relicense the code instead. According to research and "keyfile-history.sh" script, the following individuals and companies may hold copyright on the code: <bgalvani(at)redhat.com> <blueowl(at)centrum.cz> <daniel(at)gnoutcheff.name> <danw(at)redhat.com> <dcantrell(at)redhat.com> <dcbw(at)redhat.com> <evan(at)ebroder.net> <fgiudici(at)redhat.com> <floe(at)butterbrot.org> <j(at)bootlab.org> <kmaraas(at)gnome.org> <lkundrak(at)v3.sk> <luzpaz(at)users.noreply.github.com> <martinpitt(at)gnome.org> <michael.i.doherty(at)intel.com> <pavlix(at)pavlix.net> <pmarti(at)warp.es> <rafaelff(at)gnome.org> <rstrode(at)redhat.com> <tambet(at)gmail.com> <tgraf(at)redhat.com> <thaller(at)redhat.com> <walters(at)verbum.org> <yurchor(at)ukr.net> Red Hat, Inc. Novell, Inc. Intel Corporation
* keyfile: add "keyfile-history.sh" script for finding copyright holders of ↵Thomas Haller2020-10-201-0/+97
| | | | "shared/nm-keyfile"
* license: merge branch 'th/fix-lgpl-license-violations' (part 3)Thomas Haller2020-10-202-2/+2
|\ | | | | | | https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/390
| * license: relicense "libnm-core/nm-vpn-dbus-interface.h" under LGPL-2.1+Thomas Haller2020-10-201-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | >>> H0=a3e75f329446a93a61ca4c458a7657bd919f4fe6 commit_has_file() { git ls-tree -r "$1" | grep -q "\\s$2"\$ } print_commit_authors() { git --no-pager log --full-history --follow --no-merges --pretty='format:<%ae>' $H0 -- "$1" | sort | uniq } print_blame_authors() { local LAST_H if commit_has_file $H0 "$1"; then LAST_H=$H0 else LAST_H="$(git log --full-history --no-merges -n1 --pretty='format:%H' $H0 -- "$1")"^1 fi git blame --no-progress -C -C -C20 -M -M10 -e "$LAST_H" -- "$1" | sed 's/.*\(<[^>]\+@[^>]\+>\).*/\1/' | sort | uniq } print_grep() { git --no-pager log -p --full-history --follow $H0 -- "$1" | grep -i '[a-z0-9]@\|author\|copyright' | sort | uniq } prefix() { sed "s/^/>>>$1 /" } collect_all() { for F; do print_commit_authors "$F" | prefix 1 echo print_blame_authors "$F" | prefix 2 echo print_grep "$F" | prefix 3 done | sort | uniq | sed 's/@/(at)/' } collect_all \ include/NetworkManagerVPN.h \ libnm-core/NetworkManagerVPN.h \ libnm-core/nm-vpn-dbus-interface.h \ libnm-util/NetworkManagerVPN.h \ ; <<< gives: >>>1 <atulhjp(at)gmail.com> >>>1 <bgalvani(at)redhat.com> >>>1 <danw(at)gnome.org> >>>1 <dcbw(at)redhat.com> >>>1 <evan(at)ebroder.net> >>>1 <jklimes(at)redhat.com> >>>1 <lkundrak(at)v3.sk> >>>1 <tambet(at)gmail.com> >>>1 <thaller(at)redhat.com> >>>1 <warp(at)aehallh.com> >>>2 <atulhjp(at)gmail.com> >>>2 <blueowl(at)centrum.cz> >>>2 <danw(at)redhat.com> >>>2 <dcbw(at)redhat.com> >>>2 <evan(at)ebroder.net> >>>2 <lkundrak(at)v3.sk> >>>2 <tambet(at)gmail.com> >>>2 <thaller(at)redhat.com> >>>2 <warp(at)aehallh.com> >>>3 [...] Red Hat, Inc. Everybody in this list agreed to relicensing according to RELICENSE.md.
| * license: relicense "libnm-core/nm-dbus-interface.h" under LGPL-2.1+Thomas Haller2020-10-201-1/+1
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | >>> H0=a3e75f329446a93a61ca4c458a7657bd919f4fe6 commit_has_file() { git ls-tree -r "$1" | grep -q "\\s$2"\$ } print_commit_authors() { git --no-pager log --full-history --follow --no-merges --pretty='format:<%ae>' $H0 -- "$1" | sort | uniq } print_blame_authors() { local LAST_H if commit_has_file $H0 "$1"; then LAST_H=$H0 else LAST_H="$(git log --full-history --no-merges -n1 --pretty='format:%H' $H0 -- "$1")"^1 fi git blame --no-progress -C -C -C20 -M -M10 -e "$LAST_H" -- "$1" | sed 's/.*\(<[^>]\+@[^>]\+>\).*/\1/' | sort | uniq } print_grep() { git --no-pager log -p --full-history --follow $H0 -- "$1" | grep -i '[a-z0-9]@\|author\|copyright' | sort | uniq } prefix() { sed "s/^/>>>$1 /" } collect_all() { for F; do print_commit_authors "$F" | prefix 1 echo print_blame_authors "$F" | prefix 2 echo print_grep "$F" | prefix 3 done | sort | uniq | sed 's/@/(at)/' } collect_all \ include/NetworkManager.h \ libnm-core/NetworkManager.h \ libnm-core/nm-dbus-interface.h \ libnm-util/NetworkManager.h \ NetworkManager.h \ ; <<< >>>1 <alfonso.sanchez-beato(at)canonical.com> >>>1 <bberg(at)redhat.com> >>>1 <bgalvani(at)redhat.com> >>>1 <caillon(at)redhat.com> >>>1 <daniel(at)gnoutcheff.name> >>>1 <danw(at)gnome.org> >>>1 <dcbw(at)redhat.com> >>>1 <dsd(at)laptop.org> >>>1 <gcampagna(at)src.gnome.org> >>>1 <jarteaga(at)jbeta.is> >>>1 <jiri(at)resnulli.us> >>>1 <jklimes(at)redhat.com> >>>1 <jlu(at)pengutronix.de> >>>1 <lkundrak(at)v3.sk> >>>1 <luzpaz(at)users.noreply.github.com> >>>1 <mvollmer(at)redhat.com> >>>1 <pktoss(at)gmail.com> >>>1 <radykal(at)radykal.com> >>>1 <rml(at)novell.com> >>>1 <rodrigo(at)gnome-db.org> >>>1 <tambet(at)gmail.com> >>>1 <tambet(at)ximian.com> >>>1 <tgraf(at)redhat.com> >>>1 <thaller(at)redhat.com> >>>1 <thomasbechtold(at)jpberlin.de> >>>1 <tredaelli(at)redhat.com> >>>2 <bberg(at)redhat.com> >>>2 <bgalvani(at)redhat.com> >>>2 <blueowl(at)centrum.cz> >>>2 <daniel(at)gnoutcheff.name> >>>2 <danw(at)redhat.com> >>>2 <dcbw(at)redhat.com> >>>2 <jarteaga(at)jbeta.is> >>>2 <jiri(at)resnulli.us> >>>2 <jlu(at)pengutronix.de> >>>2 <lkundrak(at)v3.sk> >>>2 <luzpaz(at)users.noreply.github.com> >>>2 <mvollmer(at)redhat.com> >>>2 <pktoss(at)gmail.com> >>>2 <radykal(at)radykal.com> >>>2 <rml(at)novell.com> >>>2 <tambet(at)gmail.com> >>>2 <tgraf(at)redhat.com> >>>2 <thaller(at)redhat.com> >>>2 <thomasbechtold(at)jpberlin.de> >>>2 <tredaelli(at)redhat.com> >>>3 [...] Red Hat, Inc. >>>3 Thiago Bauermann <thiago.bauermann(at)gmail.com> >>>3 <j(at)bootlab.org> Most contributors on this list agreed to relicensing according to RELICENSE.md. The following copyright holders did not answer the request for agreeing to relicensing: - <caillon(at)redhat.com>: the only contributions are removing code. Also, Christopher was working for Red Hat at that time. - <j(at)bootlab.org>: the patch was trivial, but the relevant code also got removed by commit f003ba8ef7512dc2f295ca975b7d82439eee5995. - <jiri(at)resnulli.us>: a trivial contribution to the header. Also, Jiri was working for Red Hat at that time. - <radykal(at)radykal.com>: fix spelling error in code comment. - <rodrigo(at)gnome-db.org>: trivial contribution of adding a #define for NM_DBUS_PATH_CONNECTION_SETTINGS. - <tgraf(at)redhat.com>: a trivial contribution to the header. Also, Thomas was working fro Red Hat at that time. - <thiago.bauermann(at)gmail.com>: add a define to the header. This was later removed by commit 7a8f33aa3d8a3085f5258c86e21fc1edec0ffec4. While not everybody agreed to this relicensing, I think the not covered contributions are trivial additions to our header file. Also, this file was always part of libnm. While it had the wrong license comment, it was never intended to be GPL licensed.
* license: merge branch 'th/fix-lgpl-license-violations' (part 2)Thomas Haller2020-10-206-6/+6
|\ | | | | | | https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/390
| * license: relicense "libnm-core/nm-core-types.h" under LGPL-2.1+Thomas Haller2020-10-201-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | >>> H0=a3e75f329446a93a61ca4c458a7657bd919f4fe6 commit_has_file() { git ls-tree -r "$1" | grep -q "\\s$2"\$ } print_commit_authors() { git --no-pager log --full-history --follow --no-merges --pretty='format:<%ae>' $H0 -- "$1" | sort | uniq } print_blame_authors() { local LAST_H if commit_has_file $H0 "$1"; then LAST_H=$H0 else LAST_H="$(git log --full-history --no-merges -n1 --pretty='format:%H' $H0 -- "$1")"^1 fi git blame --no-progress -C -C -C20 -M -M10 -e "$LAST_H" -- "$1" | sed 's/.*\(<[^>]\+@[^>]\+>\).*/\1/' | sort | uniq } print_grep() { git --no-pager log -p --full-history --follow $H0 -- "$1" | grep -i '[a-z0-9]@\|author\|copyright' | sort | uniq } prefix() { sed "s/^/>>>$1 /" } collect_all() { for F; do print_commit_authors "$F" | prefix 1 echo print_blame_authors "$F" | prefix 2 echo print_grep "$F" | prefix 3 done | sort | uniq | sed 's/@/(at)/' } collect_all \ libnm-core/nm-core-types.h \ ; <<< gives: >>>1 <atulhjp(at)gmail.com> >>>1 <bberg(at)redhat.com> >>>1 <bgalvani(at)redhat.com> >>>1 <danw(at)gnome.org> >>>1 <lkundrak(at)v3.sk> >>>1 <thaller(at)redhat.com> >>>2 <atulhjp(at)gmail.com> >>>2 <bgalvani(at)redhat.com> >>>2 <danw(at)redhat.com> >>>2 <dcbw(at)redhat.com> >>>2 <lkundrak(at)v3.sk> >>>2 <thaller(at)redhat.com> >>>3 [...] Red Hat, Inc. Everybody in this list agreed to relicensing according to RELICENSE.md.
| * license: relicense "libnm/nm-types.h" under LGPL-2.1+Thomas Haller2020-10-201-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | >>> H0=a3e75f329446a93a61ca4c458a7657bd919f4fe6 commit_has_file() { git ls-tree -r "$1" | grep -q "\\s$2"\$ } print_commit_authors() { git --no-pager log --full-history --follow --no-merges --pretty='format:<%ae>' $H0 -- "$1" | sort | uniq } print_blame_authors() { local LAST_H if commit_has_file $H0 "$1"; then LAST_H=$H0 else LAST_H="$(git log --full-history --no-merges -n1 --pretty='format:%H' $H0 -- "$1")"^1 fi git blame --no-progress -C -C -C20 -M -M10 -e "$LAST_H" -- "$1" | sed 's/.*\(<[^>]\+@[^>]\+>\).*/\1/' | sort | uniq } print_grep() { git --no-pager log -p --full-history --follow $H0 -- "$1" | grep -i '[a-z0-9]@\|author\|copyright' | sort | uniq } prefix() { sed "s/^/>>>$1 /" } collect_all() { for F; do print_commit_authors "$F" | prefix 1 echo print_blame_authors "$F" | prefix 2 echo print_grep "$F" | prefix 3 done | sort | uniq | sed 's/@/(at)/' } collect_all \ libnm/nm-types.h \ libnm-glib/nm-types.h \ ; <<< >>>1 <bberg(at)redhat.com> >>>1 <bgalvani(at)redhat.com> >>>1 <danw(at)gnome.org> >>>1 <danw(at)redhat.com> >>>1 <dcbw(at)redhat.com> >>>1 <jarteaga(at)jbeta.is> >>>1 <jklimes(at)redhat.com> >>>1 <lkundrak(at)v3.sk> >>>1 <thaller(at)redhat.com> >>>2 <bgalvani(at)redhat.com> >>>2 <clarkbw(at)cvs.gnome.org> >>>2 <danw(at)redhat.com> >>>2 <dcbw(at)redhat.com> >>>2 <jarteaga(at)jbeta.is> >>>2 <lkundrak(at)v3.sk> >>>2 <pgrzegorczyk(at)gmail.com> >>>2 <tambet(at)gmail.com> >>>2 <thaller(at)redhat.com> >>>3 [...] Red Hat, Inc. Everybody in this list agreed to relicensing according to RELICENSE.md.
| * license: relicense "shared/nm-udev-aux/nm-udev-utils.[hc]" under LGPL-2.1+Thomas Haller2020-10-202-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | >>> H0=a3e75f329446a93a61ca4c458a7657bd919f4fe6 commit_has_file() { git ls-tree -r "$1" | grep -q "\\s$2"\$ } print_commit_authors() { git --no-pager log --full-history --follow --no-merges --pretty='format:<%ae>' $H0 -- "$1" | sort | uniq } print_blame_authors() { local LAST_H if commit_has_file $H0 "$1"; then LAST_H=$H0 else LAST_H="$(git log --full-history --no-merges -n1 --pretty='format:%H' $H0 -- "$1")"^1 fi git blame --no-progress -C -C -C20 -M -M10 -e "$LAST_H" -- "$1" | sed 's/.*\(<[^>]\+@[^>]\+>\).*/\1/' | sort | uniq } print_grep() { git --no-pager log -p --full-history --follow $H0 -- "$1" | grep -i '[a-z0-9]@\|author\|copyright' | sort | uniq } prefix() { sed "s/^/>>>$1 /" } collect_all() { for F; do print_commit_authors "$F" | prefix 1 echo print_blame_authors "$F" | prefix 2 echo print_grep "$F" | prefix 3 done | sort | uniq | sed 's/@/(at)/' } collect_all \ shared/nm-udev-aux/nm-udev-utils.c \ shared/nm-udev-aux/nm-udev-utils.h \ shared/nm-utils/nm-udev-utils.c \ shared/nm-utils/nm-udev-utils.h \ ; <<< gives: >>>1 <bgalvani(at)redhat.com> >>>1 <lkundrak(at)v3.sk> >>>1 <thaller(at)redhat.com> >>>2 <bgalvani(at)redhat.com> >>>2 <dcbw(at)redhat.com> >>>2 <rstrode(at)redhat.com> >>>2 <thaller(at)redhat.com> >>>3 [...] Red Hat, Inc. Everybody in this list agreed to relicensing according to RELICENSE.md. The code was initially added by commit e32839838e5e ('udev: drop libgudev in favor of libudev'). It did expand on top of existing GPL code, which is problematic. But it was introduced as an original contribution.
| * license: relicense "libnm-core/nm-libnm-core-aux/nm-dispatcher-api.h" under ↵Thomas Haller2020-10-201-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | LGPL-2.1+ >>> H0=a3e75f329446a93a61ca4c458a7657bd919f4fe6 commit_has_file() { git ls-tree -r "$1" | grep -q "\\s$2"\$ } print_commit_authors() { git --no-pager log --full-history --follow --no-merges --pretty='format:<%ae>' $H0 -- "$1" | sort | uniq } print_blame_authors() { local LAST_H if commit_has_file $H0 "$1"; then LAST_H=$H0 else LAST_H="$(git log --full-history --no-merges -n1 --pretty='format:%H' $H0 -- "$1")"^1 fi git blame --no-progress -C -C -C20 -M -M10 -e "$LAST_H" -- "$1" | sed 's/.*\(<[^>]\+@[^>]\+>\).*/\1/' | sort | uniq } print_grep() { git --no-pager log -p --full-history --follow $H0 -- "$1" | grep -i '[a-z0-9]@\|author\|copyright' | sort | uniq } prefix() { sed "s/^/>>>$1 /" } collect_all() { for F; do print_commit_authors "$F" | prefix 1 echo print_blame_authors "$F" | prefix 2 echo print_grep "$F" | prefix 3 done | sort | uniq | sed 's/@/(at)/' } collect_all \ shared/nm-libnm-core-aux/nm-dispatcher-api.h \ callouts/nm-dispatcher-api.h \ callouts/nm-dispatcher-api.h \ callouts/nm-dispatcher-action.h \ ; <<< gives: >>>1 <bgalvani(at)redhat.com> >>>1 <daniel(at)gnoutcheff.name> >>>1 <danw(at)gnome.org> >>>1 <danw(at)redhat.com> >>>1 <dcbw(at)redhat.com> >>>1 <lkundrak(at)v3.sk> >>>1 <mario(at)endlessm.com> >>>1 <thaller(at)redhat.com> >>>2 <bgalvani(at)redhat.com> >>>2 <blueowl(at)centrum.cz> >>>2 <danw(at)redhat.com> >>>2 <dcbw(at)redhat.com> >>>2 <mario(at)endlessm.com> >>>2 <thaller(at)redhat.com> >>>3 [...] Red Hat, Inc. Everybody in this list agreed to relicensing according to RELICENSE.md.
| * license: relicense "shared/nm-test-utils-impl.c" under LGPL-2.1+Thomas Haller2020-10-201-1/+1
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | >>> H0=a3e75f329446a93a61ca4c458a7657bd919f4fe6 commit_has_file() { git ls-tree -r "$1" | grep -q "\\s$2"\$ } print_commit_authors() { git --no-pager log --full-history --follow --no-merges --pretty='format:<%ae>' $H0 -- "$1" | sort | uniq } print_blame_authors() { local LAST_H if commit_has_file $H0 "$1"; then LAST_H=$H0 else LAST_H="$(git log --full-history --no-merges -n1 --pretty='format:%H' $H0 -- "$1")"^1 fi git blame --no-progress -C -C -C20 -M -M10 -e "$LAST_H" -- "$1" | sed 's/.*\(<[^>]\+@[^>]\+>\).*/\1/' | sort | uniq } print_grep() { git --no-pager log -p --full-history --follow $H0 -- "$1" | grep -i '[a-z0-9]@\|author\|copyright' | sort | uniq } prefix() { sed "s/^/>>>$1 /" } collect_all() { for F; do print_commit_authors "$F" | prefix 1 echo print_blame_authors "$F" | prefix 2 echo print_grep "$F" | prefix 3 done | sort | uniq | sed 's/@/(at)/' } collect_all \ shared/nm-test-utils-impl.c \ include/nm-test-utils-impl.c \ libnm-glib/tests/common.c \ libnm-glib/tests/test-nm-client.c \ libnm-glib/tests/test-remote-settings-client.c \ ; <<< gives: >>>1 <bgalvani(at)redhat.com> >>>1 <biebl(at)debian.org> >>>1 <danw(at)gnome.org> >>>1 <danw(at)redhat.com> >>>1 <dcbw(at)redhat.com> >>>1 <jklimes(at)redhat.com> >>>1 <lkundrak(at)v3.sk> >>>1 <thaller(at)redhat.com> >>>2 <aleksander(at)aleksander.es> >>>2 <biebl(at)debian.org> >>>2 <blueowl(at)centrum.cz> >>>2 <danw(at)redhat.com> >>>2 <dcbw(at)redhat.com> >>>2 <lkundrak(at)v3.sk> >>>2 <qiaomuf(at)gentoo.org> >>>2 <rstrode(at)redhat.com> >>>2 <tambet(at)gmail.com> >>>2 <thaller(at)redhat.com> >>>3 [...] Red Hat, Inc. Everybody in this list agreed to relicensing according to RELICENSE.md. With exception of <qiaomuf(at)gentoo.org>. However with manual investigation I think there are no contributions by qiaomuf affected here. It's only the script that (wrongly) identified the name.
* shared: use C comments for SPDX header in "nm-version-macros.h.in"Thomas Haller2020-10-201-1/+1
|
* version: add 1.30 macrosThomas Haller2020-10-202-0/+15
|
* libnm: fix detecting address family for error message in NMSettingVxlan.verify()Thomas Haller2020-10-201-31/+28
| | | | | The address family of local/remote addresses must correspond. Fix the detection of the address family, so that error message is correct.
* libnm: canonicalize local/remote IP address in NMSettingVxlanThomas Haller2020-10-201-4/+15
|
* libnm,core: allow VXLAN connections without an explicit remote VTEPbarinet2020-10-202-24/+22
| | | | | | | [thaller@redhat.com: squashed commits, resolve merge conflict and coding style] https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/645
* NEWS: fix entry that is targeted for 1.30 instead of 1.28Thomas Haller2020-10-201-4/+4
| | | | Fixes: 8764d47af68b ('NEWS: update')
* libnm: merge branch 'th/bond-add-option-relax'Thomas Haller2020-10-2011-89/+151
|\ | | | | | | | | | | https://bugzilla.redhat.com/show_bug.cgi?id=1887523 https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/653
| * NEWS: updateth/bond-add-option-relaxThomas Haller2020-10-191-0/+4
| |
| * libnm/bond: remove validation from nm_setting_bond_add_option() and ↵Thomas Haller2020-10-197-53/+89
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | explicitly validate For historic reasons is NMSettingBond implemented differently from other settings. It uses a strdict, and adds some validation on top of that. The idea was probably to be able to treat bond options more generically. But in practice we cannot treat them as opaque values, but need to know, validate and understand all the options. Thus, this implementation with a strdict is not nice. The user can set the GObject property NM_SETTING_BOND_OPTIONS to any strdict, and the setter performs no validation or normalization. That is probably good, because g_object_set() cannot return an error to signalize invalid settings. As often, we have corresponding C API like nm_setting_bond_add_option() and nm_setting_bond_remove_option(). It should be possible to get the same result both with the C API and with the GObject property setting. Since there is already a way to set certain invalid values, it does not help if the C API tries to prevent that. That implies, that also add-option does not perform additional validation and sets whatever the user asks. Remove all validation from nm_setting_bond_add_option() and nm_setting_bond_remove_option(). This validation was anyway only very basic. It was calling nm_setting_bond_validate_option(), which can check whether the string is (for example) and integer, but it cannot do validation beyond one option. In most cases, the validation needs to take into account the bond mode or other options, so validating one option in isolation is not very useful. Proper validation should instead be done via nm_connection_verify(). However, due to another historic oddity, that verification is very forgiving too and doesn't reject many invalid settings when it should. That is hard to fix, because making validation more strict can break existing (and working) configurations. However, verify() already contains basic validation via nm_setting_bond_validate_option(). So in the previous behavior nm_setting_bond_add_option() would silently do nothing (only returning %FALSE) for invalid options, while now it would add the invalid options to the dictionary -- only to have it later fail validation during nm_connection_verify(). That is a slight change in behavior, however it seems preferable. It seems preferable and acceptable because most users that call nm_setting_bond_add_option() already understand the meaning and valid values. Keyfile and ifcfg-rh readers are the few exceptions, which really just parse a string dictionary, without need to understand them. But nmtui or nmstate already know the option they want to set. They don't expect a failure there, nor do they need the validation. Note that this change in behavior could be dangerous for example for the keyfile/ifcfg-rh readers, which silently ignored errors before. We don't want them to start failing if they read invalid options from a file, so instead let those callers explicitly pre-validate the value and log an warning. https://bugzilla.redhat.com/show_bug.cgi?id=1887523
| * libnm: unify implementations for bond-mode to/from string conversionsThomas Haller2020-10-193-35/+56
| |
| * libnm: small style update to use nm_streq() in _normalize_bond_mode()Thomas Haller2020-10-191-1/+2
|/
* shared: fix NM_CAST_STRV_CC() for "char **const" pointersThomas Haller2020-10-191-1/+7
| | | | | | | | | | | | | | | | | clang-3.4.2-9.el7.x86_64 otherwise fails: ../src/devices/wifi/nm-wifi-p2p-peer.c:410:44: error: controlling expression type 'const char **const' not compatible with any generic association type if (!nm_utils_strv_equal(priv->groups, peer_info->groups)) { ^~~~~~~~~~~~~~~~~ ../shared/nm-glib-aux/nm-shared-utils.h:1689:78: note: expanded from macro 'nm_utils_strv_equal' #define nm_utils_strv_equal(strv1, strv2) (nm_utils_strv_cmp_n((strv1), -1, (strv2), -1) == 0) ^ ../shared/nm-glib-aux/nm-shared-utils.h:1687:74: note: expanded from macro 'nm_utils_strv_cmp_n' _nm_utils_strv_cmp_n(NM_CAST_STRV_CC(strv1), (len1), NM_CAST_STRV_CC(strv2), (len2)) ^ ../shared/nm-glib-aux/nm-macros-internal.h:706:21: note: expanded from macro 'NM_CAST_STRV_CC' (_Generic ((value), \ ^
* contrib/release: fix parsing version in "release.sh" scriptThomas Haller2020-10-191-1/+1
|
* contrib/release: improve help text for "release.sh" scriptThomas Haller2020-10-191-13/+16
|
* contrib/release: use "find-backport" scripts from release.shThomas Haller2020-10-191-2/+2
|
* contrib: add "find-backports" scriptThomas Haller2020-10-191-0/+334
| | | | | This script was previously on the "automation" branch. Add it to "master".
* initrd: generate infiniband connectionsBeniamino Galvani2020-10-192-6/+78
| | | | | | | Generate infiniband connections based on the interface name or MAC address length. https://bugzilla.redhat.com/show_bug.cgi?id=1883173
* wifi/iwd: merge branch 'balrog-kun:iwd-hidden-networks-cleanup'Thomas Haller2020-10-193-173/+264
|\ | | | | | | https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/646
| * iwd: Avoid ConnectHiddenNetwork() if network is visibleAndrew Zaborowski2020-10-191-10/+9
| | | | | | | | | | | | | | | | | | | | | | If the target hidden network is already recorded by IWD with its SSID during a previous active scan, use the Network.Connect() API instead of Station.ConnectHiddenNetwork() which would fail in IWD version up to 1.9. This is a rare corner case scenario though. Also drop the !nm_wifi_ap_get_supplicant_path(ap) check, I'm not sure when if ever that condition can be true, more so now that we're checking nm_wifi_ap_get_fake(ap) before that.
| * iwd: Track InterfacesAdded/Removed signals for NetworksAndrew Zaborowski2020-10-193-77/+185
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Until now we didn't rely on InterfacesAdded and InterfacesRemoved signals for tracking when IWD finds new Wi-Fi networks or expires networks not seen in the latest scans. Instead we'd request the whole list of networks currently seen by IWD every time the Station.Scanning property would go from true to false. However the Station.GetOrderedNetworks() IWD method that we use has a deficiency up until 1.9 (I plan to fix it soon) where it won't show the hidden network discovered in the course of the last ConnectHiddenNetwork() call if that call was unsuccessful, in other words where the new network has not been saved as a Known Network. A new ConnectHiddenNetwork() will fail with the "NotHidden" error, so we have to use the Network.Connect() call for such a network but to find it out we need to track the InterfacesAdded signals. Doing this may also improve autoconnect speed in some cases so overall I think it's a good idea.
| * iwd: Don't start new secret request if we sent one alreadyAndrew Zaborowski2020-10-191-6/+8
| | | | | | | | | | | | | | | | | | | | | | | | When IWD asks us for a secret check that we're in NM_DEVICE_STATE_CONFIG and not for example already in NM_DEVICE_STATE_NEED_AUTH. I believe that should only happen if IWD is aborting the previous connection attempt and connecting to a different network due to a timeout or due to somebody outside NM calling Connect() on an IWD network object... Guessing what IWD is doing this way is a bit fragile in the long term but we have to do that as long as we want to override IWD's internal autoconnect, which I guess we may be able to stop doing at some point.
| * iwd: Don't auto-scan while waiting for secretsAndrew Zaborowski2020-10-191-9/+2
| | | | | | | | | | | | | | | | | | | | | | | | IWD's Station.State property remains at "connect" or "disconnected" while IWD is waiting for secrets for a new conncetion, so if we want to scan only when NM might be in auto-connect (which was the goal) we need to also look at NMDevice's state. We want to scan whenever wifi is disconnected and there's no active connection request, which is the same as saying whever priv->current_ap is unset so for simplicity look at priv->current_ap. Also in schedule_periodic_scan() don't check whether Station.State is "disconnected" because priv->can_scan is equivalent to Station.State being one of ("disconnected", "connected").
| * iwd: Hidden networks cleanupAndrew Zaborowski2020-10-191-7/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Hidden networks are supported in the iwd backend since 1.24.0 but some places in the code have not been updated to reflect this. In check_connection_available copy the hidden network check and corresponding comment from the wpa_supplicant backend. In act_stage1_prepare drop a straight "hidden networks are unsupported" comment and a check -- fortunately this check happened to be ineffective because @mode was more often NULL than NM_SETTING_WIRELESS_MODE_INFRA so nm_streq0 was not enough. Update comments elsewhere. There's still one of two corner cases where the user-experience will not be perfect for hidden networks due to iwd limitations, I'll try to work around them in another commit.
| * iwd: Don't use nm_utils_error_set_literal with a non-literalAndrew Zaborowski2020-10-191-3/+4
| | | | | | | | | | | | I first noticed a format string with missing parameters and then that the compiler wasn't complaining and that's because nm_utils_error_set_literal doesn't take a format string.
| * iwd: Better checks before setting NO_SECRETS reasonAndrew Zaborowski2020-10-191-2/+10
| | | | | | | | | | | | | | When a connection fails and IWD returns net.connman.iwd.Aborted, we know whether the abort is caused by us cancelling a secrets request so use tha knowledge to decide whether to use the NM_DEVICE_STATE_REASON_NO_SECRETS reason code for the state switch to NM_DEVICE_STATE_FAILED.
| * iwd: Drop IWD pre-1.0 and pre-0.8 compatiblity bitsAndrew Zaborowski2020-10-192-53/+16
| |
| * iwd: Use the INCOMPATIBLE reason code for connection unavailableAndrew Zaborowski2020-10-191-10/+10
|/ | | | | | Use the NM_UTILS_ERROR_CONNECTION_AVAILABLE_INCOMPATIBLE constant in place of NM_UTILS_ERROR_CONNECTION_AVAILABLE_TEMPORARY more often in check_connection_compatible as appropriate.
* shared: enforce trailing semicolon after ↵Thomas Haller2020-10-191-2/+5
| | | | NM_UTILS_FLAGS2STR_DEFINE(),NM_UTILS_ENUM2STR_DEFINE()
* libnm: add trailing comma after ↵Thomas Haller2020-10-191-1/+1
| | | | NM_UTILS_FLAGS2STR_DEFINE(nm_bluetooth_capability_to_string)
* po: update Danish (da) translationscootergrisen2020-10-191-350/+252
| | | | https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/654
* l3cfg: merge branch 'th/l3cfg-12'Thomas Haller2020-10-138-981/+1579
|\ | | | | | | https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/651
| * l3cfg/tests: add unit tests for NML3Cfgth/l3cfg-12Thomas Haller2020-10-131-18/+89
| |
| * l3cfg: rework ACD handling in NML3Cfg to support handling conflictsThomas Haller2020-10-133-940/+1369
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Heavily rework NML3Cfg's ACD handling. - the (user facing) API changed, so that we can ask the current ACD state of an address with nm_l3cfg_get_acd_addr_info(). So, the acd-event signal is only to notify when the state changes, it does not carry information that you couldn't fetch anytime. - add clearer ACD states (NML3AcdAddrState). The current (ACD) state of an address is important and becomes part of the information that we expose. - add new ACD state "USED", when ACD fails. This blocks the address from being used. Usually the caller would either remove the (used) address or force reconfigure it (by setting acd_timeout_msec to zero). - add new ACD state "CONFLICT". Previously conflicts were not handled. Now the API allows to specify the defend policy. A conflicted address also gets blocked from being used. - add new ACD state "EXTERNAL_REMOVED". This happens when we have an address we wanted to configure, but then the address is no longer on the interface. For example because the user removed it from the interface. This also leaves the device indefinitely blocked, and is important to stop announcing the address. - add a new ACD state "READY". This indicates that the address is ready to be configured, but not yet actually configured on the device. This is the step before "DEFENDING".
| * l3cfg: handle flag "ip4acd_not_ready" for IPv4 addressesThomas Haller2020-10-133-23/+56
| | | | | | | | | | | | | | | | | | | | | | | | | | ACD is handled by NML3Cfg and it intercepts the IP addresses when merging the NML3ConfigData. Originally, I thought that in such a case, the merged l3cd instance would simply not contain any addresses that ACD have still pending or which have a conflict. However, I think it's better (clearer and possibly useful), to still merge such addresses, but flag them that they are ignored when syncing the addresses to platform.
| * platform: add NMPlatformIP4Address.ip4acd_not_ready flagThomas Haller2020-10-132-15/+25
| | | | | | | | | | | | It is not yet used, but it will be used to mark instances that are not supposed to be configured in platform, because ACD is either still pending of failed.
| * platform: fix handlng of NMPlatformIP4Address.use_ip4_broadcast_address to ↵Thomas Haller2020-10-131-16/+22
| | | | | | | | | | | | | | be considered for hash/cmp functions This is an important field. The hash/cmp function cannot just honor nm_platform_ip4_broadcast_address_from_addr().
| * shared: add nm_g_ptr_array_ref() and similar helpersThomas Haller2020-10-131-0/+49
|/
* shared,platform: take pointer to NMEtherAddr in NM_ETHER_ADDR_FORMAT_VAL() macroThomas Haller2020-10-134-10/+12
| | | | It seems nicer to require a pointer than the plain struct.
* clang-format: mark ↵Thomas Haller2020-10-134-44/+45
| | | | "nm_platform_iter_obj_for_each()"/"nm_l3_config_data_iter_*()" as ForEachMacros