Commit graph

1417 commits

Author SHA1 Message Date
Thomas Haller
da3f608802 device: don't clear the current MAC address
When we were able to read a MAC address previously, we would not expect
a failure the next time.

Say a failure happens. Still, we should not clear the MAC address,
because we also determine hw_addr_len based on that address. And
hw_addr_perm and hw_addr_initial have the same length. When we allow
hw_addr to be reset (and possibly reset to a different address length),
we somehow have to re-fresh also the permanent and initial MAC address.

Just don't allow for that complexity, when it's not even clear what such
a scenario would mean and what do to in that case.
2016-06-30 08:29:55 +02:00
Thomas Haller
6db3c80aba device: implememnt "perm-hw-address" property in NMDevice
Both NMDeviceEthernet and NMDeviceWifi have a property "perm-hw-address".
As the hw_addr_perm property is tracked in the parent NMDevice class,
let it also implement the GObject property.

Then it knows better when to emit a notification about property
changes.
2016-06-30 08:29:55 +02:00
Thomas Haller
2a94587232 device: only set permanent hardware address once
While a device is realized, we only want to read the permanent
MAC address once. If that fails, we fallback to the current MAC
address. Thus, we want the permanent address be stable until
the device unrealizes.

While we want to fallback to the current MAC address, in some cases
the caller wants to know whether this was a "real" permanent MAC
address as read via ethtool.
For example, when matching an ethernet device against ethernet.mac-address
property, the fake (current) address should not be used in such case.
2016-06-30 08:29:55 +02:00
Thomas Haller
9fb5558f96 device/trivial: rename hw-addr related fields in NMDevicePrivate
Next I will add two more fields. Being able to efficiently grep the code
is important.

I want to be able to grep for "->hw_addr" or "\<hw_addr" to find
related stuff.

Unfortunately, prefixes often result in backward English names, e.g.
hw_addr_set/hw_addr_get. I still prefer that over get_hw_addr/set_hw_addr
though.
2016-06-30 08:29:55 +02:00
Thomas Haller
2f05353d9e device: re-read initial hw-address before activating connection
Previously, we would only once read the initial hardware address during
device realization.

When a device activates, NetworkManager always sets the MAC address as configured
in the cloned-mac-address setting -- or, if unspecified -- it falls back
to use the permanent hardware-address instead.

Later, when deactivating the device, the MAC address is reset to the
"inital MAC address".

This patch changes, that the "initial MAC address" is re-read every time
before activating the device, contrary to reading it once in the
beginning.

This allows for a user to first start NetworkManager and later change the
MAC address of the device. When activating the device, NM will reset the
MAC address for the time the device is active. But when disconnecting,
it resets to the user-changed value, not the value when NM was started.

https://bugzilla.gnome.org/show_bug.cgi?id=708820
2016-06-30 08:29:55 +02:00
Thomas Haller
3704197d87 device: re-read the current MAC address when the link changes
The current MAC address is part of NMPlatformLink in the platform cache.
When it changes, we must update the device's current value.

Also, the MAC address of NMDeviceEthernet is exposed on D-Bus. That
property should show the currently configured MAC address, not a state
that was read some time in the past.

Also, nm_device_hw_addr_set() compares the current MAC address before
resetting it. If that field is out-of-date, nm_device_hw_addr_set() will
behave wrongly.

NMDeviceEthernet had some special handling in link_changed() that would
re-read the MAC addresses and possibly bring up the interface. Move that
code to the parent device.
2016-06-30 08:29:55 +02:00
Thomas Haller
4bb1e2a536 device: cleanup logging for setting MAC address
Give all related messages a "set-hw-addr"/"hw-addr" prefix.
2016-06-30 08:29:55 +02:00
Thomas Haller
89d6dfdb96 device: split nm_device_update_permanent_hw_address() out of nm_device_update_initial_hw_address()
Either, the function is called different to reflect that it does
not only update the initial_hw_addres, or it is split.

Split it.
2016-06-30 08:29:55 +02:00
Thomas Haller
6947aedb6e device: initialize NMDevice's hw_addr at end of object construction
hw-addr is a constuct-only property. We should not do complex stuff in the property
setter before the object is sufficiently initialized. For example, the logging
macros access nm_device_get_iface(), which might be unset at that early
point.

Instead, initialize hw_addr and hw_addr_len later, at the end of the constructor()
function.

Also, ensure that @hw_addr_len is zero iff @hw_addr is unset.

Also, ensure that we always log a message when changing/setting the
hardware address -- except when clearing it during unrealize. It's
implicit that unrealize clears the hardware address.

Also, give all related logging messages a "hw-addr:" prefix.
2016-06-30 08:29:55 +02:00
Thomas Haller
e92b743ce9 device: don't use g_warning for differing hw-addr-len after reading permanent address
Accessing the platform cache might anytime yield unexpected results.
E.g. the link could be gone, or the ifindex could even be replaced
by a different interface (yes, that can happen when moving links
between network namespaces).

It's not clear how to handle such a case at runtime. It seems wrong to
me to just error out. Still, such case might happen under normal
conditions, so it's wrong to just warn and proceed.
2016-06-30 08:29:55 +02:00
Thomas Haller
fa5230e255 device: refactor setting HW address via nm_device_set_hw_addr()
This brings no real change in behavior, except getting rid of the
logging domain argument.
2016-06-30 08:29:55 +02:00
Thomas Haller
224937f5dd device: always set "cloned-mac-address" even with missing NMSettingWired
When the entire NMSettingWired setting is missing, it should be treated
exactly the same as each property having the default/unset value.

Otherwise, adding a NMSettingWired setting only to set (say) MTU,
would result in different behavior. Although effectively the
"cloned-mac-address" shall be in both cases the same.
2016-06-30 08:29:54 +02:00
Thomas Haller
e5637dc089 device: clear initial_hw_addr in nm_device_update_initial_hw_address()
There was no leak here, because we would only call
nm_device_update_initial_hw_address() when @initial_hw_addr is unset.
However, still clear it to make it more robust against later changes.
2016-06-30 08:29:54 +02:00
Thomas Haller
89970b5ca6 device: refactor nm_device_get_applied_setting() 2016-06-30 08:29:54 +02:00
Thomas Haller
c9ab22f41d wifi: move static lookup-array for is_manf_default_ssid() 2016-06-30 08:29:54 +02:00
Thomas Haller
0a5af391e0 core: prefer connection.stable-id to generate IPv6 stable privacy addresses
The Network_ID for generating RFC 7217 stable privacy IPv6 addresses
is by default the UUID of the connection.

Alternatively, prefer "connection.stable-id" as Network_ID to generate
the stable addresses. This allows to configure a set of connections that
all use the same Network_ID for generating stable addresses.

Note that the stable-id and the UUID do no overlap, that is two
connections
    [connection]
    uuid=uuid1
    stable-id=
and
    [connection]
    uuid=uuid2
    stable-id=uuid1
generate distinct addresses.
2016-06-30 08:29:54 +02:00
Beniamino Galvani
2b958dce91 wwan/ofono: fix indentation 2016-06-28 17:34:42 +02:00
Dan Williams
7d89b862f4 wwan/ofono: remove unused code 2016-06-28 17:34:42 +02:00
Dan Williams
0c9527d9b8 wwan/ofono: fix comment about IP4Config refcounting 2016-06-28 17:34:42 +02:00
Dan Williams
602c3f6ed3 wwan/ofono: clean up and standardize logging 2016-06-28 17:34:42 +02:00
Dan Williams
938b27a8d2 wwan/ofono: simplify capabilities function and add FIXME about LTE 2016-06-28 17:34:42 +02:00
Dan Williams
b898b0882b wwan/ofono: whitespace fixup 2016-06-28 17:34:42 +02:00
Dan Williams
3c054e21ba wwan/ofono: remove some unused types 2016-06-28 17:34:42 +02:00
Dan Williams
87aa671e6b wwan: no need for NM_MODEM_BROADBAND_MODEM to be public 2016-06-28 17:34:42 +02:00
Dan Williams
219904920f wwan/ofono: clean up g_clear_object() usage 2016-06-28 17:34:42 +02:00
Dan Williams
58ab8c9316 wwan/ofono: use g_dbus_proxy_new_for_bus() 2016-06-28 17:34:42 +02:00
Dan Williams
f0af7a0d05 wwan: rework ModemManager/ofono initialization
Avoids the following error when ofono isn't running:

NetworkManager[25133]: <info>  [1466186144.1392] ofono is now available
NetworkManager[25133]: <warn>  [1466186144.1637] failed to enumerate oFono devices: Cannot invoke method; proxy is for a well-known name without an owner and proxy was constructed with the G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START flag

because the code assumes that if the GDBusProxy is created, that
oFono is available.  That's not the case with DO_NOT_AUTO_START
because it creates the proxy anyway, and lets the caller listen
for name-owner-changed signals instead.  The GDBusProxy also
doesn't need to be cleared, since it will follow name-owner
changes and emit g-name-owner changes when oFono starts/stops.

This also fixes the oFono name-owner-changed watch.  It was presumably
using the signal name copied from the ModemManager 'notify::name-owner'
code, but that's a GDBusObjectManagerClient.  The oFono code is using
a GDBusProxy for which the signal is 'notify::g-name-owner'.

Finally, the oFono code shouldn't really be piggy-backing on the
ModemManager autolaunch code, it's just cleaner to keep the two
code paths separate and initialize oFono in parallel.
2016-06-28 17:34:42 +02:00
Dan Williams
019b34af62 wwan/ofono: whitespace fixup 2016-06-28 17:34:42 +02:00
Dan Williams
8a827b1b4f wwan/ofono: fix a few more memory leaks 2016-06-28 17:34:42 +02:00
Dan Williams
425ae4fbd2 wwan: remove some dbus-glib left-overs 2016-06-28 17:34:42 +02:00
Dan Williams
d99171d700 wwan: use modem basename as NM device name
NM_MODEM_UID is used as the modem device name, and the device name
cannot contain path-like characters.

Ofono has a bluez plugin that detects paired DUN/PAN capable
Bluetooth devices, and these devices are created with a multi-component
object path like "/hfp/org/bluez/hci0/dev_00_26_E2_AB_68_66".
The NM ofono plugin cannot use these paths as NM device names.

Instead, strip off any path components and use the last part
of the object path as the NM device name.
2016-06-28 17:34:42 +02:00
Thomas Haller
e06e1d4691 wwan: cleanup clearing ofono proxy instance 2016-06-28 17:34:42 +02:00
Thomas Haller
5a740d323e wwan: fix memleaks
And use gs_free in ofono_check_name_owner()
2016-06-28 17:34:42 +02:00
Thomas Haller
5cdb2b1520 wwan: cleanup includes 2016-06-28 17:34:42 +02:00
Thomas Haller
3ef0641674 wwan: some minor refactorings 2016-06-28 17:34:42 +02:00
Thomas Haller
4e00e7a15f wwan: remove unused code 2016-06-28 17:34:42 +02:00
Thomas Haller
735bb933f6 wwan: fix building for !WITH_OFONO 2016-06-28 17:34:42 +02:00
Thomas Haller
acac97f818 wwan: fix compilation error about wrong field name 2016-06-28 17:34:42 +02:00
Thomas Haller
9e63ada7e2 wwna: fix compiler error about wrong prototype 2016-06-28 17:34:42 +02:00
Thomas Haller
8621b0aba9 wwan: fix using wrong enum type for flags for g_dbus_proxy_new() 2016-06-28 17:34:42 +02:00
Thomas Haller
1b570723b4 trivial: style issues and indention 2016-06-28 17:34:42 +02:00
Mathieu Trudel-Lapierre
a6e81af87f wwan: add support for using oFono as a modem manager
This patch adds core wwan support for ofono, as used by Ubuntu Touch.

Signed-off-by: Mathieu Trudel-Lapierre <mathieu.trudel-lapierre@canonical.com>

https://mail.gnome.org/archives/networkmanager-list/2016-June/msg00089.html
2016-06-28 17:34:42 +02:00
Thomas Haller
13b2253df6 wwan: cleanup clearing modem-manager instance 2016-06-28 17:34:42 +02:00
Francesco Giudici
fd4a8a202e bond/trivial: fix typo 2016-06-28 11:47:50 +02:00
Beniamino Galvani
f2d5c8d7f8 tun,vxlan: add the CAP_IS_SOFTWARE capability
Software devices must report the NM_DEVICE_CAP_IS_SOFTWARE capability
in order to be properly activated. Add the flag to NMDeviceTun and
NMDeviceVxlan.

https://bugzilla.gnome.org/show_bug.cgi?id=767846
2016-06-27 13:08:57 +02:00
Tony Espy
899d7e5cb1 wifi: clear WiFi requested_scan if suppl exits
It's possible for wpa_supplicant to exit with an
outstanding requested_scan pending.  This can lead
to a stall condition where scanning no longer occurs.

https://mail.gnome.org/archives/networkmanager-list/2016-June/msg00117.html
2016-06-25 10:32:24 +02:00
Tony Espy
eed8fd2e43 wifi: clear WiFi requested_scan if suppl goes INACTIVE
It's possible for wpa_supplicant to transition to INACTIVE
state with an outstanding requested_scan pending.  This can
lead to a stall condition where scanning no longer occurs.

[thaller@redhat.com: added break statement to avoid fall-through]

https://mail.gnome.org/archives/networkmanager-list/2016-June/msg00116.html
2016-06-25 10:31:38 +02:00
Thomas Haller
171554d073 device: clearify behavior of NM_UNMANAGED_USER_SETTINGS in comment 2016-06-22 14:07:24 +02:00
Beniamino Galvani
072358dad0 team: check return value of g_dbus_connection_call_sync()
The call can fail; in such case assume that an existing teamd died and
our instance will be able to continue.

https://bugzilla.redhat.com/show_bug.cgi?id=1347015
2016-06-21 14:58:55 +02:00
Thomas Haller
bc1014a93d all: replace _nm_utils_string_in_list() with g_strv_contains() 2016-06-17 12:25:33 +02:00