Find a file
Thomas Haller a1b25a47b0 cli: rework printing of nmcli connection for multiple active connections
The output of `nmcli connection show` contains also information about
whether the profile is currently active, for example the device and
the current (activation) state.

Even when a profile can be activated only once (without supporting
mutiple activations at the same time), there are moments when a
connection is activating and still deactivating on another device.
NetworkManager ensures in the case with single activations that
a profile cannot be in state "activated" multiple times. But that
doesn't mean, that one profile cannot have multiple active connection
which reference it. That was already handled wrongly before, because
`nmcli connection show` would only search the first matching
active-connection. That is, it would arbitrarily pick an active
connection in case there were multiple and only show activation
state about one.
Furthermore, we will soon also add the possibility, that a profile can be
active multiple times (at the same time). Especially then, we need to
extend the output format to show all the devices on which the profile is
currently active.

Rework printing the connection list to use nmc_print(), and fix various
issues.

- as discussed, a profile may have multiple active connections at each time.
  There are only two possibilities: if a profile is active multiple
  times, show a line for each activation, or otherwise, show the
  information about multiple activations combined in one line, e.g. by
  printing "DEVICE eth0,eth1". This patch, does the former.
  We will now print a line for each active connection, to show
  all the devices and activation states in multiple lines.
  Yes, this may result in the same profile being printed multiple times.
  That is a change in behavior, and inconvenient if you do something
  like

     for UUID in $(nmcli connection show | awk '{print$2}'); do ...

  However, above is anyway wrong because it assumes that there are no
  spaces in the connection name. The proper way to do this is like

     for UUID in $(nmcli -g UUID connection show); do ...

  In the latter case, whenever a user selects a subset of fields
  (--fields, --get) which don't print information about active connections,
  these multiple lines are combined. So, above still works as expected,
  never returning duplicate UUIDs.

- if a user has no permissions to see a connection, we previously
  would print "<invisible> $NAME". No longer do this but just print
  the ID was it is reported by the active-connection. If the goal
  of this was to prevent users from accidentally access the non-existing
  connection by $NAME, then this was a bad solution, because a script
  would instead try to access "<invisible> $NAME". This is now solved
  better by hiding the active connection if the user selects "-g NAME".

- the --order option now sorts according to how the fields are shown.
  For example, with --terse mode, it will evaluate type "802-11-wireless"
  but with pretty mode it will consider "wifi". This may change the
  ordering in which connections are shown. Also, for sorting the name,
  we use g_utf8_collate() because it's unicode.
2018-06-01 16:03:23 +02:00
clients cli: rework printing of nmcli connection for multiple active connections 2018-06-01 16:03:23 +02:00
contrib rpm/build.sh: suggest dnf builddep after BUILDTYPE=SRPM 2018-05-28 11:44:02 +02:00
data all: add support for thunderbolt networking 2018-04-19 14:20:04 +02:00
dispatcher build: use default NM_BUILD_* defines for tests 2018-05-31 15:59:38 +02:00
docs docs: fix VPN chapter ID 2018-03-16 12:56:22 -05:00
examples all: use the elvis operator wherever possible 2018-05-10 14:36:58 +02:00
introspection all: replace "it's" with "its" where needed 2018-04-18 14:14:07 +02:00
libnm build/meson: fix meson build for shared files 2018-05-31 15:59:38 +02:00
libnm-core build/meson: fix meson build for shared files 2018-05-31 15:59:38 +02:00
libnm-glib build/meson: fix meson build for shared files 2018-05-31 15:59:38 +02:00
libnm-util build/meson: fix meson build for shared files 2018-05-31 15:59:38 +02:00
m4 m4: parametrize flags variable 2018-02-16 16:06:59 +01:00
man man: clarify main.rc-manager=file behavior for resolv.conf as dangling symlink 2018-06-01 09:05:38 +02:00
po cli: add helper methods for implementing NmcMetaGenericInfo's get_fcn() 2018-05-14 17:53:03 +02:00
shared shared/trivial: add code comment to explain NMUtilsEnumValueInfo consistency rules 2018-06-01 12:26:07 +02:00
src settings: fix plugins loading 2018-06-01 10:26:01 +02:00
tools clients/tests: add test for showing invisible connection in nmcli 2018-06-01 16:03:23 +02:00
vapi meson: Use string variables extensively 2018-01-10 12:22:55 +01:00
.dir-locals.el misc: add toplevel .dir-locals file that tells Emacs to show trailing whitespace 2013-03-08 15:15:28 +01:00
.gitignore core: rename 'arping' to 'acd' 2018-04-18 15:22:34 +02:00
.travis.yml clients/tests: add python test script for nmcli tests 2018-05-11 16:51:20 +02:00
AUTHORS misc: update maintainers and authors 2016-04-21 13:39:03 -05:00
autogen.sh build: fix gtk-doc/introspection handling for build 2016-11-28 12:43:51 +01:00
ChangeLog Changelog: remove and replace the changelog by a stub 2017-02-14 17:39:46 +01:00
config.h.meson auth-manager: always compile D-Bus calls to polkit 2018-04-13 09:09:46 +02:00
configure.ac release: bump version to 1.11.4 (development) 2018-05-31 16:58:10 +02:00
CONTRIBUTING Make licensing of contributions more explicit 2017-07-25 07:16:35 +02:00
COPYING docs: create new master NM documentation module 2011-02-16 16:24:16 -06:00
linker-script-binary.ver iface-helper/build: add linker version script 2016-10-13 21:33:33 +02:00
linker-script-devices.ver devices/build: use one linker-script-devices.ver for all device plugins 2016-10-13 21:36:06 +02:00
linker-script-settings.ver settings/build: add linker version script for settings plugins 2016-10-13 21:33:33 +02:00
MAINTAINERS misc: update maintainers and authors 2016-04-21 13:39:03 -05:00
Makefile.am all: replace systemd's siphash24 with c-siphash 2018-05-31 15:59:38 +02:00
Makefile.examples examples: add python utils for examples 2018-04-04 14:02:13 +02:00
Makefile.glib build: include "config.h" in nm*enum-types.c sources 2015-10-05 15:01:38 +02:00
Makefile.vapigen build: fix make always re-making vapigen target 2016-10-21 18:46:03 +02:00
meson.build release: bump version to 1.11.4 (development) 2018-05-31 16:58:10 +02:00
meson_options.txt build: Rename settings-docs.c file 2018-01-12 09:39:06 +01:00
meson_post_install.py build: add initial support for meson build system 2017-12-13 15:48:50 +01:00
NetworkManager.pc.in build: update NetworkManager.pc 2013-01-29 16:17:30 -05:00
NEWS release: update NEWS for a development snapshot 2018-05-31 16:57:49 +02:00
README all: replace "it's" with "its" where needed 2018-04-18 14:14:07 +02:00
TODO all: replace "it's" with "its" where needed 2018-04-18 14:14:07 +02:00
valgrind.suppressions valgrind: update glib2 suppression for Fedora 27 2017-11-15 17:05:01 +01:00
zanata.xml po: add Zanata configuration 2016-04-05 14:35:53 +02:00

******************
2008-12-11: NetworkManager core daemon has moved to git.freedesktop.org!

git clone git://git.freedesktop.org/git/NetworkManager/NetworkManager.git
******************


Networking that Just Works
--------------------------

NetworkManager attempts to keep an active network connection available at all
times.  The point of NetworkManager is to make networking configuration and
setup as painless and automatic as possible.  NetworkManager is intended to
replace default route, replace other routes, set IP addresses, and in general
configure networking as NM sees fit (with the possibility of manual override as
necessary).  In effect, the goal of NetworkManager is to make networking Just
Work with a minimum of user hassle, but still allow customization and a high
level of manual network control.  If you have special needs, we'd like to hear
about them, but understand that NetworkManager is not intended for every
use-case.

NetworkManager will attempt to keep every network device in the system up and
active, as long as the device is available for use (has a cable plugged in,
the killswitch isn't turned on, etc).  Network connections can be set to
'autoconnect', meaning that NetworkManager will make that connection active
whenever it and the hardware is available.

"Settings services" store lists of user- or administrator-defined "connections",
which contain all the settings and parameters required to connect to a specific
network.  NetworkManager will _never_ activate a connection that is not in this
list, or that the user has not directed NetworkManager to connect to.


How it works:

The NetworkManager daemon runs as a privileged service (since it must access
and control hardware), but provides a D-Bus interface on the system bus to
allow for fine-grained control of networking.  NetworkManager does not store
connections or settings, it is only the mechanism by which those connections
are selected and activated.

To store pre-defined network connections, two separate services, the "system
settings service" and the "user settings service" store connection information
and provide these to NetworkManager, also via D-Bus.  Each settings service
can determine how and where it persistently stores the connection information;
for example, the GNOME applet stores its configuration in GConf, and the system
settings service stores its config in distro-specific formats, or in a distro-
agnostic format, depending on user/administrator preference.

A variety of other system services are used by NetworkManager to provide
network functionality: wpa_supplicant for wireless connections and 802.1x
wired connections, pppd for PPP and mobile broadband connections, DHCP clients
for dynamic IP addressing, dnsmasq for proxy nameserver and DHCP server
functionality for internet connection sharing, and avahi-autoipd for IPv4
link-local addresses.  Most communication with these daemons occurs, again,
via D-Bus.


Why doesn't my network Just Work?

Driver problems are the #1 cause of why NetworkManager sometimes fails to
connect to wireless networks.  Often, the driver simply doesn't behave in a
consistent manner, or is just plain buggy.  NetworkManager supports _only_
those drivers that are shipped with the upstream Linux kernel, because only
those drivers can be easily fixed and debugged.  ndiswrapper, vendor binary
drivers, or other out-of-tree drivers may or may not work well with
NetworkManager, precisely because they have not been vetted and improved by the
open-source community, and because problems in these drivers usually cannot
be fixed.

Sometimes, command-line tools like 'iwconfig' will work, but NetworkManager will
fail.  This is again often due to buggy drivers, because these drivers simply
aren't expecting the dynamic requests that NetworkManager and wpa_supplicant
make.  Driver bugs should be filed in the bug tracker of the distribution being
run, since often distributions customize their kernel and drivers.

Sometimes, it really is NetworkManager's fault.  If you think that's the case,
please file a bug at http://bugzilla.gnome.org and choose the NetworkManager
component.  Attaching the output of /var/log/messages or /var/log/daemon.log
(wherever your distribution directs syslog's 'daemon' facility output) is often
very helpful, and (if you can get) a working wpa_supplicant config file helps
enormously.