Commit Graph

15047 Commits

Author SHA1 Message Date
Jiří Klimeš
d0d96c1a13 cli: check ip-tunnel mode right after it is read 2015-12-16 16:12:24 +01:00
Jiří Klimeš
89db31bf7b cli: enable TAB-completion for macvlan.mode in editor 2015-12-16 16:10:08 +01:00
Jiří Klimeš
f8ed5ed239 cli: enable TAB-completion for "MACVLAN mode: " in nmcli -a con add type macvlan 2015-12-16 16:10:08 +01:00
Jiří Klimeš
835bdaaf1f cli: enable TAB-completion for ip-tunnel.mode in editor 2015-12-16 15:52:43 +01:00
Jiří Klimeš
9fb2a02b3a cli: enable TAB-completion for "Tunnel mode: " in nmcli -a con add type ip-tun 2015-12-16 14:36:28 +01:00
Jiří Klimeš
ff38790b12 cli: there are 5 optional arguments for vxlan connections 2015-12-16 14:21:15 +01:00
Jiří Klimeš
3a6cd8204f cli: remove stray space from help description 2015-12-16 14:20:05 +01:00
Jiří Klimeš
39f0ecbd36 cli: (trivial) fix a copy-paste error in a comment
Fixes: c3e6e25239
2015-12-16 14:18:47 +01:00
Beniamino Galvani
36f055fad9 cli: document ip-tunnel connection type 2015-12-16 14:03:28 +01:00
Beniamino Galvani
f4dd37fdcb cli: allow specifying a 'dev' option when adding IP tunnels 2015-12-16 14:03:26 +01:00
Beniamino Galvani
e62c0c2547 cli: fix error handling in creation of IP tunnels
Fixes: 7da440b798
2015-12-16 11:42:19 +01:00
Lubomir Rintel
a8a4eb1418 manager: don't create the virtual devices on all connection changes
Only do so on user initiated changes. Fixes this:

  # ip link add br0 type bridge
  # ip addr add 2001:DB8::666/64 dev br0
  # ip link set br0 up            # A generated connection is assumed
  # ip link del br0               # The device and its address are removed.
                                  # The address removal triggers an update
                                  # of the connection's ipv6 settings,
                                  # which causes the NMDevice to reappear.
  # ip link add br0 type bridge   # The new plink is associated with
                                  # the NMDevice, managed by NM
2015-12-15 13:19:25 +01:00
Jiří Klimeš
56518bb8a1 cli: monitor whether NetworkManager is running
Print a message when NetworkManager is not running upon 'nmcli monitor' start.
2015-12-14 16:37:57 +01:00
Jiří Klimeš
800bd1aa18 cli: primary connection is not NMConnection, but NMActiveConnection
And use nm_client_get_primary_connection() accessor function instead of reading
NM_CLIENT_PRIMARY_CONNECTION property directly.

(process:31760): libnm-CRITICAL **: nm_connection_get_id: assertion 'NM_IS_CONNECTION (connection)' failed
(process:31760): libnm-CRITICAL **: nm_connection_get_uuid: assertion 'NM_IS_CONNECTION (connection)' failed

Fixes: d03f347b9d
2015-12-14 16:04:49 +01:00
Lubomir Rintel
436ec5b8e3 device: remove the unreferenced unreal devices
When there's no connection that would use an unrealized device there's no more
reason to keep the device in memory. It's in fact a resource leak.
2015-12-14 12:51:49 +01:00
Lubomir Rintel
a22a109ad6 device: reset autoconnect when the device unrealizes
Fixes autoconnect after the device is realized again:

  # nmcli c add type team
  # nmcli c up team
  # nmcli d dis nm-team     # autoconnect is blocked
  # nmcli c del team        # the is unrealized
  # nmcli c add type team   # the device is realized again, not
                            # activating with the new connection
2015-12-14 12:49:35 +01:00
Jiří Klimeš
174d66a3d0 libnm-core: add missing transfer annotation for nm_utils_enum_get_values()
Fixes: 13a981fc38
2015-12-12 22:24:35 +01:00
Thomas Haller
600a247f57 platform: refactor handling netlink message by manually inlining cache functions
There are only one caller of the two functions. It's shorter and simpler
just to implement the short functionality right there.
2015-12-12 22:18:28 +01:00
Jiří Klimeš
3511530c74 merge: enable VPN secrets for nmtui/nmcli secret agent (rh #975185)
It allows nmcli and nmtui to ask for VPN passwords and thus successfully
activate VPN connections.
There is a special handling for OpenConnect, because the user does not know
the secrets. They have to be obtained by authenticating to OpenConnect server.

https://bugzilla.redhat.com/show_bug.cgi?id=975185
2015-12-12 21:44:22 +01:00
Jiří Klimeš
a1536fe3d1 tui: prefill a secret in the entry if we have a value 2015-12-12 20:06:35 +01:00
Jiří Klimeš
2e345faa7e tui: allow connecting to OpenConnect
by running "openconnect --authenticate" and getting secrets from it
2015-12-12 20:06:35 +01:00
Jiří Klimeš
fb62fc76cb cli: do not present secrets from openconnect to the user for confirmation
It is pointless to present them and require user to press Return for each
password prompt.
2015-12-12 20:06:35 +01:00
Jiří Klimeš
45fc268890 cli: make asking VPN secrets for OpenConnect really work
by running nm_vpn_openconnect_authenticate_helper() and filling the obtained
secrets to the array sent to NM.
2015-12-12 20:06:17 +01:00
Jiří Klimeš
ea54b7f2c0 clients: add a helper function to get required openconnect VPN secrets
OpenConnect needs three secrets - COOKIE, HOST and FINGERPRINT. They can be
obtained by authenticating to the server. This can be performed by running
"openconnect --authenticate <host>" and the three values are printed to stdout.

Note that the function may (probably will) interactively ask user for
his credentials.

Alternatively, it would be possible to dlopen() libopenconnect and call its
functions. However, as that would be more complicated and would also require
implementing functionality that openconnect simply does for free for us, it is
not worth it, I think.
2015-12-12 17:37:30 +01:00
Jiří Klimeš
8dfafac17c clients: add vpn_type member to secret structure in secret agent
It is useful to know what VPN type the secret belongs to.
2015-12-12 17:37:30 +01:00
Jiří Klimeš
6dd1e2673e clients: move vpn_get_secret_names() to nm-vpn-helpers
It should eventually move into libnm and ideally the data be obtained from VPN
plugins.

(No functional change, only moving the function).
2015-12-12 17:37:30 +01:00
Jiří Klimeš
de86c23fbe clients: enable VPN secrets for nmtui/nmcli secret agent (rh #975185)
It allows nmcli and nmtui to ask for VPN passwords and thus successfully
activate VPN connections.

https://bugzilla.redhat.com/show_bug.cgi?id=975185
2015-12-12 17:37:30 +01:00
Thomas Haller
77cf564b45 platform/tests: add --no-persist option to monitor 2015-12-12 12:59:18 +01:00
Thomas Haller
e934bfb5d8 tests: don't assert for initialized tests in g_test_assert_expected_messages()
We call _nmtst_exit() atexit(), which in turn calls g_test_assert_expected_messages().
We must not assert there against initialized tests.

  $ ./src/platform/tests/monitor -h
  Usage:
    ./src/platform/tests/monitor [OPTION...]
  **
  NetworkManager:ERROR:monitor.c:11:_nmtst_exit: assertion failed: (nmtst_initialized ())
  Aborted (core dumped)
2015-12-12 12:57:18 +01:00
Thomas Haller
8a38b4dd13 platform: inline setup_socket() function
Constructing the sockets is already quite simple, yet distinct.
Later this distinction will become bigger, so unwrap setup_socket().
2015-12-12 12:34:29 +01:00
Thomas Haller
461cf0c571 platform: factor out completing and sending netlink message 2015-12-12 12:34:29 +01:00
Thomas Haller
7dce1f3b38 platform/tests: refactor nmtstp_link_*_add() functions
Let them return the platform object, and have the input argument
as const.
2015-12-11 17:55:09 +01:00
Thomas Haller
feab1ff655 platform/tests: add nmtstp_link_get_typed() 2015-12-11 17:55:09 +01:00
Lubomir Rintel
9ae0227591 device: don't tell the device to unconfigure if it's gone already
After the device is unrealized a lot of its properites are reset. Notably, it
doesn't have an ifindex anymore so there's nothing to unconfigure really. This
makes at least NMDeviceBond unhappy:

  (bond device with a slave is removed externally)

  NetworkManager[21022]: <info>  (bond0): device state change: activated -> unmanaged (reason 'unmanaged') [100 10 3]
  NetworkManager[21022]: nm_platform_link_release: assertion 'master > 0' failed

  Program received signal SIGTRAP, Trace/breakpoint trap.
  g_logv (log_domain=0x5555557592b1 "NetworkManager", log_level=G_LOG_LEVEL_CRITICAL, format=<optimized out>, args=args@entry=0x7fffffffd370) at gmessages.c:1046
  1046              g_private_set (&g_log_depth, GUINT_TO_POINTER (depth));
  (gdb) bt
  #0  0x00007ffff4ec88c3 in g_logv (log_domain=0x5555557592b1 "NetworkManager", log_level=G_LOG_LEVEL_CRITICAL, format=<optimized out>, args=args@entry=0x7fffffffd370) at gmessages.c:1046
  #1  0x00007ffff4ec8a3f in g_log (log_domain=log_domain@entry=0x5555557592b1 "NetworkManager", log_level=log_level@entry=G_LOG_LEVEL_CRITICAL, format=format@entry=0x7ffff4f3673d "%s: assertion '%s' failed")
      at gmessages.c:1079
  #2  0x00007ffff4ec8a79 in g_return_if_fail_warning (log_domain=log_domain@entry=0x5555557592b1 "NetworkManager", pretty_function=pretty_function@entry=0x55555575ea50 <__FUNCTION__.33801> "nm_platform_link_relea8
  #3  0x000055555560559a in nm_platform_link_release (self=0x555555a27bb0 [NMLinuxPlatform], master=master@entry=0, slave=slave@entry=3) at platform/nm-platform.c:1326
  #4  0x00005555555b506e in release_slave (device=<optimized out>, slave=0x555555b6d770 [NMDeviceEthernet], configure=<optimized out>) at devices/nm-device-bond.c:423
  #5  0x00005555555dab7b in nm_device_master_release_one_slave (self=self@entry=0x555555bf0cc0 [NMDeviceBond], slave=0x555555b6d770 [NMDeviceEthernet], configure=configure@entry=1, reason=reason@entry=
      NM_DEVICE_STATE_REASON_NOW_UNMANAGED) at devices/nm-device.c:1137
  #6  0x00005555555dadb6 in nm_device_master_release_slaves (self=self@entry=0x555555bf0cc0 [NMDeviceBond]) at devices/nm-device.c:2344
  #7  0x00005555555dd12f in nm_device_cleanup (self=self@entry=0x555555bf0cc0 [NMDeviceBond], reason=reason@entry=NM_DEVICE_STATE_REASON_NOW_UNMANAGED, cleanup_type=cleanup_type@entry=CLEANUP_TYPE_DECONFIGURE)
      at devices/nm-device.c:9133
  #8  0x00005555555de3ea in _set_state_full (self=self@entry=0x555555bf0cc0 [NMDeviceBond], state=state@entry=NM_DEVICE_STATE_UNMANAGED, reason=reason@entry=
      NM_DEVICE_STATE_REASON_NOW_UNMANAGED, quitting=quitting@entry=0) at devices/nm-device.c:9510
  #9  0x00005555555dedb7 in nm_device_state_changed (self=self@entry=0x555555bf0cc0 [NMDeviceBond], state=state@entry=NM_DEVICE_STATE_UNMANAGED, reason=reason@entry=NM_DEVICE_STATE_REASON_NOW_UNMANAGED)
      at devices/nm-device.c:9769
  #10 0x00005555555e11b4 in nm_device_unrealize (self=self@entry=0x555555bf0cc0 [NMDeviceBond], remove_resources=remove_resources@entry=0, error=error@entry=0x7fffffffd788) at devices/nm-device.c:2062
  #11 0x000055555565c9c5 in _platform_link_cb_idle (data=0x555555c6e2b0) at nm-manager.c:2055
  #12 0x00007ffff4ec179a in g_main_context_dispatch (context=0x555555a226c0) at gmain.c:3109
  #13 0x00007ffff4ec179a in g_main_context_dispatch (context=context@entry=0x555555a226c0) at gmain.c:3708
  #14 0x00007ffff4ec1ae8 in g_main_context_iterate (context=0x555555a226c0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at gmain.c:3779
  #15 0x00007ffff4ec1dba in g_main_loop_run (loop=0x555555a22780) at gmain.c:3973
  #16 0x00005555555b3e5f in main (argc=1, argv=0x7fffffffdb18) at main.c:488
2015-12-11 17:23:51 +01:00
Lubomir Rintel
96c01f55bc manager: clean up the system_create_virtual_device() error handling
Do the reporting in system_create_virtual_device() only. None of the callers
checked for errors and some of the callees did issue a warning despite also
passing back a GError.

Also, drop the return value. It didn't make much sense and was not used anyway.
2015-12-11 17:03:54 +01:00
Lubomir Rintel
71a684159f manager: if there's an unrealized device that matches new connection, realize it
Fixes this:

  nmcli c add type bridge    # Creates and realizes the device, autoconnects connection
  nmcli c del bridge         # Device unrealizes
  nmcli c add type bridge    # The new connection does not autoconnect, since the
                             # device stays unrealized
2015-12-11 17:03:54 +01:00
Thomas Haller
95d67c683d platform/tests: ignore failure of iproute2 command for adding vxlan interface
Older version of iproute2 fail to add the vxlan (e.g. on Ubuntu 12.04)

  Running command: ip link add nm-test-device type vxlan id 42 dev nm-test-parent local 23.1.2.164 group 239.1.2.134 ttl 0 tos 00 dstport 4789 srcport 0 0 ageing 1245
  Garbage instead of arguments "id ...". Try "ip link help".

Fallback using only platform.
2015-12-11 16:45:31 +01:00
Thomas Haller
c2602469c3 platform/tests: workaround broken vxlan platform tests on older kernel
Strangely on Ubuntu 12.04, when not setting the port range for a vxlan
device, kernel chooses

  5: nm-test-device: <BROADCAST,MULTICAST> mtu 1450 qdisc noop state DOWN mode DEFAULT group default
      link/ether 72:09:79:62:9c:45 brd ff:ff:ff:ff:ff:ff promiscuity 0
      vxlan id 42 group 239.1.2.134 local 23.1.2.164 dev nm-test-parent srcport 32768 61000 dstport 4789 ageing 1245
2015-12-11 16:43:41 +01:00
Thomas Haller
9ce3733d0c platform: add const to input arguments to link-add functions
Some line-breaks and adding "const".
2015-12-11 14:14:13 +01:00
Lubomir Rintel
785c263c18 device: do the LL check when the device is disconnected
An IPv6 address might have been added externally and the device is yet to
traverse to a connected state.

On the other hand, the externally added devices still traverse through
DISCONNECTED state and we don't want to attempt the LL addition there. Let's
check if the link still exists instead.
2015-12-11 13:24:07 +01:00
Lubomir Rintel
7873b1761d build: bump soup requirement to 2.40
The dns-manager uses some newer API.
2015-12-10 19:17:56 +01:00
Lubomir Rintel
15f1cd09d9 build: use soup 2.32
We already use 2.32 API and also use API that was replaced with new one after
2.42 and deprecated in 2.53.
2015-12-10 18:53:49 +01:00
Lubomir Rintel
2b0cacef2d vpn-connection: fix getting of MTU from the VPN config
This time we noticed before the angry mob.
Thank you, test suite! :)
2015-12-10 17:57:11 +01:00
Thomas Haller
d2fab2df54 platform: EAGAIN is equal to EWOULDBLOCK
The macro EWOULDBLOCK is another name for EAGAIN; they are always the
  same in the GNU C Library.

  https://www.gnu.org/savannah-checkouts/gnu/libc/manual/html_node/Error-Codes.html

Otherwise, we would need a workaround for EWOULDBLOCK too, because
libnl maps that to NLE_FAILURE. So we would have to detect EAGAIN
as (nle == -NLE_FAILURE && errno == EWOULDBLOCK).
2015-12-10 17:53:04 +01:00
Thomas Haller
7235283a9a platform: merge branch 'th/platform-fixes-and-tests' 2015-12-10 17:14:04 +01:00
Thomas Haller
4c5ca7ddcf platform/tests: add test adding many dummy devices 2015-12-10 17:13:49 +01:00
Thomas Haller
acbb6e195d platform/tests: use nmtstp_link_del() function 2015-12-10 17:13:49 +01:00
Thomas Haller
7183676de1 platform/tests: add nmtstp_link_del() helper 2015-12-10 17:13:49 +01:00
Thomas Haller
7a758ae7a3 platform/tests: add nmtstp_link_get() helper 2015-12-10 17:13:49 +01:00
Thomas Haller
06eaf29109 platform/tests: add nmtstp_link_dummy_add() helper 2015-12-10 17:13:49 +01:00