Commit graph

1864 commits

Author SHA1 Message Date
Lubomir Rintel
a3040bf92f wifi/ap: add flags accessor
The wifi device will inspect this to decide whether to initiate a WPS enrollment
unless the user overrides the default.
2017-05-15 12:59:55 +02:00
Thomas Haller
d875df5ab4 device: simplify check for ready slaves 2017-05-14 09:52:18 +02:00
Thomas Haller
f4de6734a9 device: remove function nm_device_is_enslaved()
There were only two callers. Let them access the field
directly.
2017-05-14 09:47:01 +02:00
Thomas Haller
019d3adbca device: remove unused function nm_device_master_get_slave_by_ifindex() 2017-05-13 22:08:48 +02:00
Thomas Haller
9740fef906 device: use CList to track SlaveInfo 2017-05-13 22:05:10 +02:00
Thomas Haller
f3dfe0f745 ofono: clenaup NMModemOfono's disconnect()
- anticipate missing callback/ctx->result

- always invoke the result callback when given

- fix leaking GVariant in disconnect_done()

- fix crash due to non-initialized ctx->result

- pass cancellable to g_dbus_proxy_call()
2017-05-12 17:29:33 +02:00
Thomas Haller
663dfd7d51 ofono: make asynchrounous operations for context_proxy cancellable
Also,

  - disconnect signal handlers in dispose()

  - fix memleak in stage1_prepare_down()()
2017-05-12 17:29:33 +02:00
Thomas Haller
1e5be78eb9 ofono: make asynchrounous operations for modem_proxy cancellable
Also,

  - chain up the constructed() function

  - fix memleak in modem_get_properties_done()
2017-05-12 17:29:33 +02:00
Thomas Haller
58712c9546 ofono: take D-Bus proxy for ConnectionManager asynchronously
Also,

  - disconnect signals from connman_proxy in dispose()

  - don't take reference to self for GetProperties call
2017-05-12 17:29:33 +02:00
Thomas Haller
b7329fccce ofono: take D-Bus proxy for SimManager asynchronously
Also,

  - fix memleaks in sim_get_properties_done()

  - don't take reference to self for GetProperties call
2017-05-12 17:29:33 +02:00
Thomas Haller
615aa3f077 modem: prettify logging output about available ModemManager/oFono
These lines are logged with <info> level. They should look pleasant.
2017-05-12 17:29:33 +02:00
Thomas Haller
f61b1dadae bt: use logging macros in nm-bluez4-manager.c 2017-05-12 17:29:33 +02:00
Thomas Haller
7d11fe5581 bt: use logging macros in nm-bluez4-adapter.c 2017-05-12 17:29:33 +02:00
Thomas Haller
e68a33d114 bt: create D-Bus proxy for NMBluez4Manager asynchronously
And some fixes:

  - proxy creation may fail. Don't handle it by retrying,
    but at least don't access the invalid proxy instance.

  - quering "DefaultAdapter" did not take a reference to @self
    nor was the operation cancellable. This leads to crash
    if the instance gets destroyed early.
2017-05-12 17:29:33 +02:00
Thomas Haller
44f5e372ce bt: create D-Bus proxy for NMBluez4Adapter asynchronously
And some fixes:

  - proxy creation may fail. Don't handle it by retrying,
    but at least don't access the invalid proxy instance.

  - get_properties_cb() did not take a reference to @self
    nor was the operation cancellable. This leads to crash
    if the instance gets destroyed early.
2017-05-12 17:29:33 +02:00
Thomas Haller
e84a52ea42 bt: track name-owner changes via NMModemManager and create D-Bus proxy asynchronously
Fix two issues of the previous code:

  - the D-Bus proxy for the modem manager should not get created
    synchronously.
  - NMModemManager is a singleton, let it track the name-owner
    change and the D-Bus proxy, instead of having one per NMDeviceBt.
2017-05-12 17:29:33 +02:00
Thomas Haller
7840dde47b bt: minor refactoring of mm_name_owner_changed() function 2017-05-12 17:29:33 +02:00
Thomas Haller
d1ef7f7aac bt: move initialization of NMDeviceBt to constructed()
Don't do non-trivial initialization in nm_device_bt_init(). At
this point, the object is not yet fully created. As we already have
a constructed() implemented, move the initialization there.
2017-05-12 17:29:33 +02:00
Thomas Haller
a087278e8e modem: make NMModemManager a singleton
Singletons are not entirely bad, if used carefully. We will need
the singleton from bluetooth plugin.
2017-05-12 17:29:33 +02:00
Thomas Haller
ce1ae5f458 modem: add define for ModemManager D-Bus path
Also, bluetooth plugin uses NMModem from the wwan plugin. Don't
include such a foreign header in a "nm-device-bt.h". Instead, forward
declare what we need.
2017-05-12 17:29:33 +02:00
Thomas Haller
c257e22cb5 modem: cleanup construction of NMModem
It is invalid that a constructor() returns NULL. These anyway were
only assertions, checking conditions that should never fail.
2017-05-12 17:29:33 +02:00
Thomas Haller
2dbb4d8d2b modem/trivial: move code around 2017-05-12 17:29:33 +02:00
Thomas Haller
4c070639d3 modem/trivial: rename functions in nm-modem-manager.c
Most of the functions are strictly related to ModemManager. Their
name should hint to that, so that they are clearly separated from
the ofono functions and general purpose functions.

Same for data fields.
2017-05-12 17:29:33 +02:00
Thomas Haller
3128a8a4c1 manager: make asynchrounous operations cancellable
It is often wrong to take a reference to keep the instance alive during
the asynchronous request, because it means the instance cannot be
destroyed as long as the (non cancellable) request is bending.

Fix that for NMModemManager and pass a cancallable along.
2017-05-12 17:29:33 +02:00
Thomas Haller
0adc517407 modem: use logging macros in nm-modem-manager.c 2017-05-12 17:29:33 +02:00
Thomas Haller
6334121d6b modem: make use of cleanup attribute to free data in callbacks 2017-05-12 17:29:33 +02:00
Thomas Haller
44f68600e1 modem: use our standard pattern for accessing private data of NMModeManager
Although our type structures have their _priv data embedded,
we don't use it directly. Adjust NMModemManager to follow
that pattern.
2017-05-12 17:29:33 +02:00
Lubomir Rintel
bd9988f984 device: don't await for IPv6 DAD to finish if we are ignoring that there's no carrier
It's not the correct thing to do, but is the same behavior we've done
previously.

DAD is not even going to start until there's carrier and the client would
just wait indefinitely. Ideally, the client would choose not to waiat, but
it currently there's no way the client would discover what is going on.

https://bugzilla.redhat.com/show_bug.cgi?id=1446367
2017-05-10 13:17:23 +02:00
Beniamino Galvani
ddfeed4530 dhcp: set @was_active flag for external activations
Set the @was_active flag for external activations with DHCP, so that
DHCP is retried multiple times in case of failure, as we do for
managed connections when the lease expires and for assumed
connections.

Fixes test: renewal_gw_after_dhcp_outage_for_assumed_var1
Fixes: e3113fdc4b
2017-05-08 15:43:30 +02:00
Beniamino Galvani
8b73812062 device: fix check in addrconf6_start()
We check the return value of _get_stable_id(); when it is NULL
priv->ndisc would stay NULL too and we would crash when dereferencing
@error.

Actually, _get_stable_id() can never return NULL, so replace the check
with an assertion.
2017-05-08 15:01:39 +02:00
Beniamino Galvani
aaaefd827e ip-tunnel: fix coverity warnings
src/devices/nm-device-ip-tunnel.c:257:8: warning: Branch condition evaluates to a garbage value
                        if (local4)
                            ^~~~~~

src/devices/nm-device-ip-tunnel.c:264:8: warning: Branch condition evaluates to a garbage value
                        if (remote4)
                            ^~~~~~~
2017-05-08 15:01:39 +02:00
Beniamino Galvani
0461da2690 device: synchronize IPv6 configuration in stage3 (take 2)
Most of the IPv6 methods require a non-tentative link local address
configured on the interface; we look at priv->ip6_config to determine
if such address exist. If the configuration is out-of-sync, we may
proceed with configuration when the link-local address does not exist
or is still tentative, especially because we toggle the "disable_ipv6"
sysctl parameter just before, which clears all IPv6 addresses on the
interface.

Ensure that priv->ext_ip6_config_captured is up-to-date before
continuing with the IPv6 configuration, and use it to determine
whether suitable addresses are present.

Fixes test: @ipv6_set_ra_announced_mtu
Fixes: 8f4caab601
2017-05-06 15:05:13 +02:00
Beniamino Galvani
d626298b48 Revert "device: synchronize IPv6 configuration in stage3"
update_ip6_config() also removes addresses and routes no longer
present externally from the configuration, so it can't be called
before the changes are committed.

This reverts commit 8f4caab601.
2017-05-06 15:02:17 +02:00
Beniamino Galvani
a4cbfe6f0a all: fix typo 'entires' -> 'entries' 2017-05-05 19:14:19 +02:00
Beniamino Galvani
78b43f7ea1 device: synchronize IPv6 configuration in stage3
Most of the IPv6 methods require a non-tentative link local address
configured on the interface; we look at priv->ip6_config to determine
if such address exist. If the configuration is out-of-sync, we may
proceed with configuration when the link-local address does not exist
or is still tentative, especially because we toggle the "disable_ipv6"
sysctl parameter just before, which clears all IPv6 addresses on the
interface.

Ensure that priv->ip6_config is up-to-date before continuing with the
IPv6 configuration.

Fixes test: @ipv6_set_ra_announced_mtu
2017-05-05 18:54:13 +02:00
Thomas Haller
20ccbb97d5 device: track firewall state and reset zone during activation
nm_device_update_firewall_zone() would only reconfigure the firewall
zone when the device is fully activated. That means, while the device
is activating, changing the firewall zone is not working. Activation
might take a long time with DHCP, or with master devices waiting
for their slaves.

For example:

  nmcli connection add type team con-name t-team ifname i-team autoconnect no
  nmcli connection up t-team

Note how t-team/i-team is waiting for a slave device. During stage3,
we already set firewall.zone to default.

  nmcli connection modify t-team connection.zone external

Note how changing the firewall zone does not immidiately take
effect. Only later, during IP_CHECK state the firewall zone
is reset -- but only for devices with differing ip_ifindex.

https://bugzilla.redhat.com/show_bug.cgi?id=1445242
2017-05-05 12:14:14 +02:00
Thomas Haller
baa8b4029c device: fix changing firewall zone during _set_state_full()
For regular devices that don't have a separate ip_iface/ip_ifindex,
the ip_ifindex is left at zero. Hence, the condition is always
true and does not work as intended, resulting in setting the
firewall zone twice.

Fixes: 7cf5c326bc
2017-05-05 12:14:14 +02:00
Beniamino Galvani
d286aa9dfa dhcp: simplify how hostname and FQDN are passed down to backends
Since they are mutually exclusive, pass a string and a boolean to
indicate whether we want to use the hostname or the FQDN option.
2017-05-04 16:19:45 +02:00
Beniamino Galvani
e3113fdc4b device: fix behavior for assumed DHCP connections
When a DHCP connection is active and the DHCP server is temporarily
unreachable, we restart DHCP for some times before failing the
connection. From the user point of view, restarting NM (and thus
assuming the existing connection) should not change this behavior.

However, if NM is restarted while the server is temporarily down, at
the moment we immediately fail because we consider the DHCP
transaction our first try. Fix this by restoring the multiple tries
when we detect that DHCP was active before because the connection is
assumed.
2017-05-04 11:18:55 +02:00
Francesco Giudici
2524a6f852 device: add default route penalty only if concheck is enabled
If we don't have connection checking functionality just avoid adding
a penalty to the defaut route of newly activated connections.
2017-05-04 11:07:40 +02:00
Beniamino Galvani
41f6540afd device: let slaves wait in IP_CONFIG until master is ready
We call nm_device_activate_stage3_ipX_start() in various places,
e.g. after a carrier change or when a master enslaves a new device to
configure IP for the device. If the device is a slave in state
IP_CONFIG, this makes it transition to IP_CHECK, while it should stay
in IP_CONFIG until the master becomes ready. When the master is ready,
it will move slaves directly to SECONDARIES, skipping IP configuration
entirely.
2017-05-04 10:28:27 +02:00
Thomas Haller
bd805b7e49 device: avoid integer overflow with route-metric penalty 2017-05-02 18:37:48 +02:00
Beniamino Galvani
acb70d84f9 supplicant: configure PMF for each connection
Now that we have a PMF connection property, get rid of the previous
code to globally enable/disable PMF and use the 'ieee80211w'
configuration option for each configured network when the supplicant
supports it.
2017-04-28 09:46:06 +02:00
Thomas Haller
951e5f5bf8 core: make dad_counter argument guint32 type
The dad_counter is hashed into the resulting address. Since we
want the hashing to be independent of the architecture, we always
hash 32 bit of dad_counter. Make the dad_counter argument of
type guint32 for consistency.

In practice this has no effect because:
  - for all our (current!) architectues, guint is the same as
    guint32.
  - all callers of nm_utils_ipv6_addr_set_stable_privacy() keep
    their dad-counter argument as guint8, so they never even pass
    numbers larger then 255.
  - nm_utils_ipv6_addr_set_stable_privacy() limits dad_counter
    further against RFC7217_IDGEN_RETRIES.
2017-04-27 16:34:58 +02:00
Lubomir Rintel
3e076cf8b1 device: disable delegating prefixes to the device when the IPv6 config is removed
Fixes a crash where the default DNS domain to be announced together with the
prefixes to be delegated is updated at the same time the device is being
unrealized.

https://bugzilla.redhat.com/show_bug.cgi?id=1425818
2017-04-27 15:41:19 +02:00
Thomas Haller
b04a9c90eb proxy: introduce call-id for clearing pacmanager configuration
nm_pacrunner_manager_remove() required a "tag" argument. It was a
bug for callers trying to remove a configuration for a non-existing
tag.

That effectively means, the caller must keep track of whether a certain
"tag" is pending. The caller also must remember the tag -- a tag that he
must choose uniquely in the first place.

Turn that around and have nm_pacrunner_manager_send() return a (non
NULL) call-id. This call-id may later be used to remove the
configuration.

Apparently, previously the tracking of the "tag" was not always correct
and we hit the assertion in nm_pacrunner_manager_remove().

https://bugzilla.redhat.com/show_bug.cgi?id=1444374
2017-04-23 18:12:09 +02:00
Thomas Haller
1940be410c config: remove unused NMConfig self argument from nm_config_device_state_*() API
nm_config_device_state_*() always access the file system directly,
they don't cache data in NMConfig. Hence, they don't use the
@self argument.

Maybe those functions don't belong to nm-config.h, anyway. For lack
of a better place they are there.
2017-04-20 14:19:56 +02:00
Thomas Haller
d105a610d6 device: use define for "sriov-num-vfs" config entry 2017-04-19 10:29:04 +02:00
Beniamino Galvani
264624f91d device: re-apply sriov_numvfs after SIGHUP 2017-04-18 23:10:36 +02:00
Beniamino Galvani
32975b6aa5 core: allow setting SR-IOV num_vfs 2017-04-18 23:10:36 +02:00