Commit Graph

13873 Commits

Author SHA1 Message Date
Dan Williams
4db851f852 libnm/libnm-glib: add NMClient.get_all_devices() method and AllDevices property
Mirror new NetworkManager API to return both real devices and
device placeholders.
2015-12-04 12:16:41 +01:00
Thomas Haller
e84587183b test: some refactoring of test-networkmanager-service.py 2015-12-04 12:16:41 +01:00
Dan Williams
5da37a129c api/manager: add GetAllDevices() method and AllDevices property
Returns both realized and un-realized devices.
2015-12-04 12:16:41 +01:00
Dan Williams
20906ca7a3 core: ensure platform links are compatible with the NMDevice
Ensure the platform link with the same interface name as the
NMDevice is actually compatible with it before using the link
for initialization of device properties.  If not, remove the
NMDevice and create a new one since there are kernel resources
with a different type.
2015-12-04 12:16:41 +01:00
Dan Williams
4dbaac4ba2 core: create devices first and realize them later
Unrealized devices aren't backed by kernel resources and so won't know
all of their attributes.  That means three things:

1) they must update their attributes when they become realized
2) they must clear those attributes when unrealized
3) they must be looser in checking compatible connections until
they are realized

This requires that the setup() function be split into two parts, start & finish,
because finish must be run after add_device()

Also, we can simplify whether to pay attention to 'recheck-assume', which
is now dependent on priv->is_nm_owned, because the only case where NM should
*not* listen for the 'recheck-assume' signal is when the device is a
software device created by NM itself.  That logic was previously spread
across the callers of add_device() but is now consolidated into
nm-manager.c::device_realized() and nm-device.c::nm_device_create_and_realize().
2015-12-04 12:16:40 +01:00
Thomas Haller
b7eb622c24 ip-tunnel: don't update_properties() during update_connection()/check_connection_compatible()
The device properties are obtained via netlink, thus we get proper
platform notifications whenever they change. So the device properties
always reflect the platform state and there is no need to refresh
it during update_connection()/check_connection_compatible().
2015-12-04 12:15:12 +01:00
Thomas Haller
2b51ecc9e5 ip-tunnel: let update_properties_from_ifindex() clear properties on failure 2015-12-04 12:15:12 +01:00
Thomas Haller
8bbc6899b9 ip-tunnel: refactor update_properties in NMDeviceIPTunnel
let update_properties_from_ifindex() also support clearing
the properties to make it usable from unrealize().
2015-12-04 12:15:12 +01:00
Dan Williams
0be66bb1eb core: add class function for device unrealization
When a device is unrealized, its class-specific properties must also be cleared
since the device is no longer valid.
2015-12-04 12:15:12 +01:00
Dan Williams
deb6c5f714 libnm-glib/libnm: add support for "real" NMDevice property 2015-12-04 12:15:12 +01:00
Dan Williams
d6f9230beb core: add "real" NMDevice property
This property is TRUE for devices that exist either as a kernel device
or are backed by some other resource (eg, ModemManager object, Bluez
device, etc).  It will eventually be FALSE for software devices that
are not yet instantiated.
2015-12-04 12:15:12 +01:00
Thomas Haller
7c4b5a4412 device: let NM_DEVICE_MASTER be equal to nm_device_get_master()
There is only one user of the NM_DEVICE_MASTER property (NMActiveConnection).
device_master_changed() uses the property for change notifications,
but returns early if !nm_device_get_master().

We might emit the "notify::master" signal too often, even when nothing
changed (because currently we always emit it when priv->master changes).
If we would fix that to only emit the signal when nm_device_get_master()
actually changes, it would still be correct, because device_master_changed()
doesn't care about notifications when the master is unset.

Hence, the only user doesn't care about the difference. So change it because
it's unexpected that the property and function are not completely equal.
2015-12-04 12:15:12 +01:00
Thomas Haller
7d9f819aa1 utils: construct paths array directly in nm_utils_g_value_set_object_path_array()
nm_utils_g_value_set_object_path_array() is used at several places, so that
this optimazation makes some sense.
2015-12-04 12:15:12 +01:00
Dan Williams
15d305c07f utils: add @filter_func argument to nm_utils_g_value_set_object_path_array() 2015-12-04 12:15:12 +01:00
Thomas Haller
9e36ccbe28 device: split new_device_added() out of component_added()
Commit cd3df12c8f reused the
virtual function component_added() to notify the vlan device
about a possibly new parent.

This reuse of the virtual function for another purpose is confusing.
Clean that up by splitting the implementation and add a new
virtual function nm_device_notify_new_device_added() which gets
(only implemented by NMDeviceVlan).
2015-12-04 12:15:12 +01:00
Lubomir Rintel
d681cbfd3d libnm-glib: queue added/removed signals and suppress uninitialized notifications
This is a straightforward copy of the changes done in libnm. It is done to cope
with test failures due to redundant or misordered signals. See
commit 52ae28f6e5 for a detailed explanation.
2015-12-04 12:15:12 +01:00
Thomas Haller
2e1e7ff0e6 device: fix disconnecting slave-device when master gets deleted
When deleting a master-device either via `nmcli device delete`
or `ip link delete`, the slave-device would hang.

This seems to be broken for a very long time already.

This is due to the following:

  #0  0x00005555555f548c in nm_device_slave_notify_release (self=0x555555dc1300, reason=NM_DEVICE_STATE_REASON_NONE) at devices/nm-device.c:2175
  #1  0x00005555555d6de2 in nm_device_release_one_slave (self=0x555555de3dd0, slave=0x555555dc1300, configure=0, reason=NM_DEVICE_STATE_REASON_NONE) at devices/nm-device.c:1117
  #2  0x00005555555f02b7 in device_link_changed (self=0x555555dc1300) at devices/nm-device.c:1460

Previously, nm_device_slave_notify_release() being called with reason
"NONE" did not actually transition the device-state, thus keeping the
device wrongly in activated state.

There were two callers that passed configure=FALSE to nm_device_release_one_slave(),
(and thus reason=NONE to nm_device_slave_notify_release()):

  - (1) device_link_changed():
      nm_device_release_one_slave (priv->master, self, FALSE, /*wrong reason NONE*/);
  - (2) nm_device_removed():
      nm_device_release_one_slave (priv->master, self, FALSE, NM_DEVICE_STATE_REASON_REMOVED);

We should always change the device-state during nm_device_slave_notify_release()
regardless of the reason.

(2) was added by commit c83b40aca7, later
refined by commit 5dd48f7527. In a way
change the second fix to perform some of the configuration (but still
not unenslaving the device).
2015-12-04 12:10:26 +01:00
Jiří Klimeš
4c437863fa cli: remove duplicated checks for running Networkmanager
It is already performed in do_connections().
2015-12-03 16:12:26 +01:00
Jiří Klimeš
d944a0f134 dhcp: lifetimes are unsigned integers, use %u printf specifier (rh #1268911)
https://bugzilla.redhat.com/show_bug.cgi?id=1268911
2015-12-03 15:25:54 +01:00
Beniamino Galvani
bde713b8e2 platform/tests: adding missing checks for loaded modules
Check if 'ipip' and 'ip6_tunnel' modules are loaded when trying to
perform link tests that require them and skip the tests if the modules
are not available.

Fixes: 133724d958
Fixes: 1a3448b43b
2015-12-02 10:18:38 +01:00
Beniamino Galvani
193bf92918 merge: branch 'bg/device-creation-ip-tunnel-bgo758047'
Add support for creating IP tunnel interfaces.

https://bugzilla.gnome.org/show_bug.cgi?id=758047
2015-12-01 17:45:27 +01:00
Beniamino Galvani
818f7f5724 libnm-glib: add support for IP tunnel devices as generic ones 2015-12-01 17:39:41 +01:00
Beniamino Galvani
e2da055f90 libnm: add NMDeviceIPTunnel 2015-12-01 17:39:41 +01:00
Beniamino Galvani
8361fbf010 device/ip-tunnel: add support for IP6TNL tunnels 2015-12-01 17:39:41 +01:00
Beniamino Galvani
8d2aa13534 device/ip-tunnel: add support for IPIP tunnels 2015-12-01 17:39:41 +01:00
Beniamino Galvani
d1b389bfa8 device/ip-tunnel: add support for SIT tunnels 2015-12-01 17:39:41 +01:00
Beniamino Galvani
3dfeec75e5 device: remove NMDeviceGre
As per previous commit, GRE tunnels are now represented as generic IP
tunnel devices.
2015-12-01 17:39:41 +01:00
Beniamino Galvani
570fdce93f device: add NMDeviceIPTunnel
The new object type represents tunnels over IPv4 and IPv6.

We have a single setting type (NMSettingIPTunnel) for tunnels and it
can't be shared among different device factories. So we define also a
single device type for all tunnels.

This new object will also represent GRE tunnels, which before were
instantiated as NMDeviceGre and had a ".Device.Gre" D-Bus
interface. This commit introduces a change in behavior.
2015-12-01 17:39:41 +01:00
Beniamino Galvani
1a3448b43b platform/tests: test IP6TNL links 2015-12-01 17:39:41 +01:00
Beniamino Galvani
133724d958 platform/tests: test IPIP links 2015-12-01 17:39:41 +01:00
Beniamino Galvani
3063f40e9a platform/tests: test SIT links 2015-12-01 17:39:41 +01:00
Beniamino Galvani
0d606a187b platform/tests: test GRE links also using platform code 2015-12-01 17:39:41 +01:00
Beniamino Galvani
32f6e1ef2e platform: add IP6TNL links support 2015-12-01 17:39:41 +01:00
Beniamino Galvani
30e648f981 platform: add IPIP links support 2015-12-01 17:39:41 +01:00
Beniamino Galvani
0754280b9f platform: add SIT links support 2015-12-01 17:39:41 +01:00
Beniamino Galvani
91bf0efaa7 platform: add GRE links creation support 2015-12-01 17:39:41 +01:00
Beniamino Galvani
b614a5ec61 cli: add support for IP tunnel settings 2015-12-01 17:39:41 +01:00
Beniamino Galvani
ae8c7a8967 libnm-core: add NMSettingIPTunnel
Add a generic NMSettingTunnel which describes properties of tunnels
over IPv4 and IPv6 (GRE, SIT, IPIP, IPIP6, IP6GRE, etc.). Since those
tunnel types all have similar properties it makes sense to have a
single setting type for them.
2015-12-01 17:39:40 +01:00
Beniamino Galvani
13a981fc38 libnm-core: add nm_utils_enum_get_values()
Add function nm_utils_enum_get_values() which returns a string array
containing the enum values. It can be used, for example, to build a
list of allowed values for user.
2015-12-01 17:39:40 +01:00
Lubomir Rintel
604711488d libnm: avoid loosing signals
D-Bus has an upper limit on number of Match rules and it's rather easy
to hit as the proxy likes to add one for each object. Let's remove the Match
rule the proxy added and ensure a less granular rule is present instead.

Ideally, we should be able to tell glib not to hook its rules.
Related: https://bugzilla.gnome.org/show_bug.cgi?id=758749

https://bugzilla.gnome.org/show_bug.cgi?id=758751
2015-12-01 14:51:13 +01:00
Jiří Klimeš
7e93ceb640 wifi: only try adding supplicant interface 5 times on errors (bgo #753971)
When wpa_supplicant keeps returning an error, NetworkManager was trying over
and over again. Which resulted in endless messages:
<error> [1448462154.584916] [supplicant-manager/nm-supplicant-interface.c:879] interface_add_cb(): (AAA): error adding interface: wpa_supplicant couldn't grab this interface.
NetworkManager[17073]: <info>  (AAA): supplicant interface state: starting -> down

Testcase:
$ iw list | grep -A 3 "interface combinations"
	interface combinations are not supported
	HT Capability overrides:
		 * MCS: ff ff ff ff ff ff ff ff ff ff
		 * maximum A-MSDU length
$ sudo iw wlan0 interface add AAA type managed
...
$ sudo iw dev AAA del

Fixes: 3a2e6de0d3

https://bugzilla.gnome.org/show_bug.cgi?id=753971
2015-11-30 14:50:30 +01:00
Thomas Haller
27835ba73c Revert "systemd: fix potential memory leaks"
@random_data is declared as _cleanup_free_.

Freeing it is unnecessary and freeing without clearing the
pointer leads do a double free.

This reverts commit 3d1557eaad.
2015-11-28 22:53:31 +01:00
Jiří Klimeš
4eab8191eb man: add missing description of tun parameters in nmcli manual page
Fixes: 64c6b124d2
2015-11-28 19:48:02 +01:00
Jiří Klimeš
cb049d2500 cli: allow TAB-completion for tun.mode in nmcli editor
Fixes: 64c6b124d2
2015-11-28 19:48:02 +01:00
Jiří Klimeš
d374352b99 cli: allow TAB-completion of "Mode:" in 'nmcli -a con add type tun'
Fixes: 64c6b124d2
2015-11-28 19:48:02 +01:00
Jiří Klimeš
18b7a9a42f cli: ask user before requiring optional parameters for 'nmcli -a con add type tun'
Fixes: 64c6b124d2
2015-11-28 19:48:02 +01:00
Jiří Klimeš
6ffe4b61f7 cli: fix an error in setting s390-options in nmcli editor
nmcli> set eth.s390-options portno=
(process:4711): libnm-CRITICAL **: nm_setting_wired_add_s390_option: assertion 'value_len > 0 && value_len < 200' failed
2015-11-28 19:48:02 +01:00
Jiří Klimeš
5f9b8b887d cli: fix an error in nmcli editor when setting vpn.data/vpn.secrets
nmcli> set vpn.data haha=
(process:3951): libnm-CRITICAL **: nm_setting_vpn_add_data_item: assertion 'strlen (item) > 0' failed
nmcli> set vpn.secrets haha=
(process:3951): libnm-CRITICAL **: nm_setting_vpn_add_secret: assertion 'strlen (secret) > 0' failed
2015-11-28 19:48:02 +01:00
Jiří Klimeš
1b0be2bab0 cli: fix a crash in 'nmcli -a con clone'
when providing empty arguments.

Fixes: 0c65b28960
2015-11-28 19:48:02 +01:00
Jiří Klimeš
3d1557eaad systemd: fix potential memory leaks
Found by clang scan-build
2015-11-28 19:48:02 +01:00