Commit graph

1634 commits

Author SHA1 Message Date
Thomas Haller
0bb84d1b85 device/ethernet: refactor loading s390 subchannels during realize
Instead of overwriting constructed(), update the s390 subchannels via
realize_start_notify(). This makes more sense and is also more similar
to what other device implementations do.
2017-01-04 14:18:01 +01:00
Thomas Haller
7e4120860f device/vlan: update vlan properties when link changes
For example, when the parent link is moved to a different netns,
we must update (clear) the vlan's parent.
2017-01-04 14:18:01 +01:00
Thomas Haller
a2dce28fc8 device: do nothing in NMDevice's link_changed() function
All implementations of link_changed() chain up to NMDevice's
base implementation. Thus, everybody wants to set the carrier.

Refactor the code to set the carrier outside of link_changed().
2017-01-04 14:18:01 +01:00
Thomas Haller
c2bc2fbac3 device: make @pllink argument in link_changed() function const 2017-01-04 14:18:01 +01:00
Thomas Haller
d9efe73fed wifi: fix nm_wifi_ap_get_id() to parse the ID as guint64 from the exported path 2017-01-04 14:05:27 +01:00
Thomas Haller
49ec12bab3 wifi: implement NM_DEVICE_WIFI_ACCESS_POINTS property getter via ap_list_get_sorted_paths()
That way, we get the list sorted. Also, it saves several allocations of
temporary variables.
2017-01-04 14:05:27 +01:00
Thomas Haller
7c601ab8ca wifi: refactor getting sorted AP list
Instead of creating a GSList use an array. That way, we save
the allocation and free of an GSList instance. Also, avoid
cloning the export path. It is stable.
2017-01-04 14:05:27 +01:00
Thomas Haller
32dd257d31 exported-object: use NM_EXPORT_PATH_NUMBERED() macro 2017-01-03 15:40:17 +01:00
Dan Williams
0c5aa6e48b wifi: don't request new PSK for locally-generated WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY errors
This usually indicates that the driver missed beacons from the AP, due to driver bugs
or faulty power-save management.  It doesn't mean that the PSK is wrong.
2016-12-20 10:06:42 -06:00
Thomas Haller
4c853e80f0 ethernet: cancel get-secrets request in ethernet device
Same as for NMDeviceWifi.
2016-12-20 15:53:41 +01:00
Thomas Haller
e6bf047ccc wifi: cancel get-secrets request in wifi device
I got an assertion failure:
    wifi_secrets_cb: assertion 'nm_device_get_state (device) == NM_DEVICE_STATE_NEED_AUTH' failed
with backtrace [1].

I think, we have to keep track of the pending secrets request
and cancel it when the device state changes.

[1]:
    #0  0x00007fad615a7a21 _g_log_abort (libglib-2.0.so.0)
    #1  0x00007fad615a8e2d g_logv (libglib-2.0.so.0)
    #2  0x00007fad615a8f8f g_log (libglib-2.0.so.0)
    #3  0x000055e45e3fc718 get_secrets_cb (NetworkManager)
    #4  0x000055e45e3dfada _get_secrets_info_callback (NetworkManager)
    #5  0x000055e45e460d8d req_complete_release (NetworkManager)
    #6  0x000055e45e462a7f _con_get_try_complete_early (NetworkManager)
    #7  0x000055e45e462cb6 request_start (NetworkManager)
    #8  0x00007fad6159e8e7 g_idle_dispatch (libglib-2.0.so.0)
    #9  0x00007fad615a1e42 g_main_dispatch (libglib-2.0.so.0)
    #10 0x00007fad615a21c0 g_main_context_iterate (libglib-2.0.so.0)
    #11 0x00007fad615a24e2 g_main_loop_run (libglib-2.0.so.0)
    #12 0x000055e45e2bf561 main (NetworkManager)
    #13 0x00007fad60d97401 __libc_start_main (libc.so.6)
    #14 0x000055e45e2bfc6a _start (NetworkManager)
2016-12-20 15:53:41 +01:00
Thomas Haller
bd89c8a924 act-request: allow omitting the @self argument in nm_act_request_cancel_secrets()
Previously, we would require a @self argument and the @call_id in
nm_act_request_cancel_secrets(), although the @call_id already has
a pointer to @self.
In principle that is not necessary, but it makes the API a bit
more robust as you need to care about the lifetime of the @req
as well.

However it is a bit inconvenient, because it requires that caller to
track both the activation request and the call-id.

Now, allow nm_act_request_get_secrets() to instruct the call-id to
take an additional reference to @self. Later on, we would allow to omit
the argument during cancelling. We only allow this, if the call-id
takes a reference to @self.
2016-12-20 15:53:41 +01:00
Beniamino Galvani
fa15543179 device: don't try to get carrier detection support when unrealizing
get_generic_capabilities() is called with a 0 ifindex when unrealizing:
don't call nm_platform_link_supports_carrier_detect() is such case.
2016-12-19 12:12:14 +01:00
Thomas Haller
3641178508 platform: lookup ifname for ethtool/mii ioctl immediately before use
The ioctl APIs ethtool/mii require an interface ifname. That is inherrently
racy as interfaces can be renamed. This cannot be fixed, we can only
minimize the time between verifying the ifname and calling ioctl.

We already had problems with that when ethtool would access an interface
by name that didn't exists. See commit ab41c13b06 .
Checking for an existing interface only helps avoiding races when an interface
gets deleted. It does not help against renaming.

Go one step further, and instead of checking whether such an ifname
exists, try to get the ifname based on the ifindex immediately before
we need it.

This brings an additional overhead for each ethtool access.
2016-12-13 11:26:59 +01:00
Thomas Haller
4bdee37771 all: use O_CLOEXEC for file descriptors 2016-12-13 11:26:59 +01:00
Thomas Haller
d3af925b91 core: use nmp_utils_sysctl_open_netdir() to read tun/tap sysctl 2016-12-13 11:26:59 +01:00
Thomas Haller
89a2169b98 core: use nmp_utils_sysctl_open_netdir() to set infiniband sysctl 2016-12-13 11:26:58 +01:00
Thomas Haller
d8cefd57fb platform: add optional dirfd argument to sysctl functions
Still unused.
2016-12-13 11:26:58 +01:00
Thomas Haller
ed299cc860 device/wwan: use nm_auto_close instead of gs_fd_close 2016-12-13 11:26:58 +01:00
Thomas Haller
994f1ca96e device: fix activation_source_schedule() for rescheduling the same function
Fixes: 78ca961c0f
2016-12-08 13:26:04 +01:00
Beniamino Galvani
025235e00f ppp: split ppp manager into a plugin
Moving the PPP manager to a separate plugin that is loaded when needed
has the advantage of slightly reducing memory footprint and makes it
possible to install the PPP support only where needed.

https://bugzilla.gnome.org/show_bug.cgi?id=773482
2016-12-06 11:08:11 +01:00
Beniamino Galvani
7ae6e980e4 core: move plugin path reading function to nm-core-utils.c
Even if it's called only from one place, it can be considered an
utility function.
2016-12-06 11:08:11 +01:00
Beniamino Galvani
0a0bca9c7f ip6-config: sort addresses only when reading the property value
Don't change the address order from configuration, but instead sort
addresses just before returning them to clients.
2016-12-05 10:56:51 +01:00
Beniamino Galvani
803a79f778 ip6-config: add nm_ip6_config_set_privacy() 2016-12-05 10:56:51 +01:00
Beniamino Galvani
9609d4da1d ip4-config: sort addresses only when reading the property value
Don't change the address order from configuration, but instead sort
addresses just before returning them to clients.
2016-12-05 10:56:51 +01:00
Thomas Haller
d29839c430 device: allow device reapply of a connection with differing connection.autoconnect
Autoconnect property doesn't really matter for the applied
connection. Whitelist it from the properties and allow changing
it during reapply.
2016-12-01 23:09:00 +01:00
Lubomir Rintel
972e0d2803 all: rename the introspection data to use the interface paths in names
This makes it easier to install the files with proper names.
Also, it makes the makefile rules slightly simpler.

Lastly, the documentation is now generated into docs/api, which makes it
possible to get rid of the awkward relative file names in docbook.
2016-11-23 15:43:42 +01:00
Thomas Haller
d5a743a619 core: merge NM_PLATFORM_LINK_DUPLEX_UNSET and UNKNOWN
They have basically the same use, except that certain places handled
one but not the other.
2016-11-22 15:24:47 +01:00
Francesco Giudici
173819b73d device/ethernet: check and apply link negotiation properties
This will allow to enforce link mode (autonegotiation, speed and duplex)
as specified in 802-3-ethernet properties.
2016-11-22 15:24:47 +01:00
Francesco Giudici
61faa5080e nm-device-ethernet: refactor act_stage1_prepare code
Refactored the code a bit without changing functionality: let the function
immediately return on error.
2016-11-22 15:24:47 +01:00
Francesco Giudici
ab0954b0e5 platform: add APIs to allow link negotiation management
Added platform functions to retrieve device link mode status and to
switch from auto to manual link negotiation:
nm_platform_ethtool_get_link_settings
nm_platform_ethtool_set_link_settings
2016-11-22 15:24:47 +01:00
Thomas Haller
44ecb41593 build: don't add subdirectories to include search path but require qualified include
Keep the include paths clean and separate. We use directories to group source
files together. That makes sense (I guess), but then we should use this
grouping also when including files. Thus require to #include files with their
path relative to "src/".

Also, we build various artifacts from the "src/" tree. Instead of having
individual CFLAGS for each artifact in Makefile.am, the CFLAGS should be
unified. Previously, the CFLAGS for each artifact differ and are inconsistent
in which paths they add to the search path. Fix the inconsistency by just
don't add the paths at all.
2016-11-21 14:26:37 +01:00
Thomas Haller
a65762ca33 build: rename "src/ppp-manager" to "src/ppp"
The ppp directory does not only contain the manager
instance, but various files related to ppp.

Rename.
2016-11-21 14:07:47 +01:00
Thomas Haller
3cd56809ed core: drop unused "nm-bt-enum-types.h"
In core, we should not use any generated enum-types. Especially
nm-bt-enum-types.h was unused already.
2016-11-18 16:40:25 +01:00
Thomas Haller
d66d7fb707 core: drop unused "nm-modem-enum-types.h"
In core, we should not use any generated enum-types.
They are just bloat.
2016-11-18 16:40:25 +01:00
Thomas Haller
2afc1d7c43 wwan: don't use generated enum-type NM_TYPE_MODEM_STATE 2016-11-18 16:40:25 +01:00
Beniamino Galvani
a6d34f9ae3 team: ignore SIGPIPE when spawning teamd
With systemd < 219, restarting the journald service closes the stdout
and stderr streams associated with services.

The NM process has SIGPIPE ignored, but g_spawn_sync()/g_spawn_async()
re-enable it and so any child executed with those functions will
terminate by default if it tries to log anything to stdout/stderr.

The teamd instance launched by NM is affected by this problem since it
writes debug messages before actually ignoring SIGPIPE.

To fix this, use the @child_setup callback of g_spawn() to ignore
again SIGPIPE in the child process.

https://bugzilla.redhat.com/show_bug.cgi?id=1393853
2016-11-18 14:45:33 +01:00
Lubomir Rintel
d0c01cc79d wifi: notify the AccessPoint change after an AP is removed
Otherwise its path remains visible on D-Bus despite the object is gone,
making libnm sad and grumpy:

  libnm-WARNING **: no object known for /org/freedesktop/NetworkManager/AccessPoint/666
2016-11-16 16:30:12 +01:00
Thomas Haller
13a95c363c device: drop factory-no-default global arrays
On some architectures, it seems we don't properly expose
the symbol of these static variables from NetworkManager
binary.

Just avoid that and don't instead use a static array
inside the device plugin itself.

While at it, make the arrays all const, which possibly allows
the linker to put those symbols in the read-only section.
2016-11-13 15:06:57 +01:00
Beniamino Galvani
00ce005e51 device: properly handle MTU for devices with @iface != @ip_iface
When the device has an IP interface different from the main one, we
previously took the MTU saved in priv->mtu (which is the MTU initially
set on the underlying interface) and applied it to the IP interface.

This is wrong as it forces the two MTUs to be equal and breaks
connectivity for devices with encapsulation (as PPP). Instead, track
the two MTUs in different variables.

https://bugzilla.redhat.com/show_bug.cgi?id=1385198
2016-11-11 15:52:25 +01:00
Thomas Haller
81d058b5e8 team: log PID of died teamd instance 2016-11-10 10:56:35 +01:00
Thomas Haller
60be9cbc9e device: fix memleak for ndisc_search->domain in ndisc_set_router_config()
It is a bit fragile not to clone the string because we depend on
nm_ip6_config_get_search(priv->ip6_config) to be stable.

In practice, it's no problem. Saves an additional strdup and the
effort to cleanup the memory afterwards.
2016-11-10 10:19:57 +01:00
Thomas Haller
aeeee116c7 device: fix array indexing in ndisc_set_router_config()
Fixes: de52c25cfd
2016-11-10 10:04:03 +01:00
Thomas Haller
de52c25cfd device: refactor ndisc_set_router_config()
- only record @now timestamp if we actually need it.
- use gint32 for @now. It seems wrong that NMNDiscDNSServer
  uses guint32 for the timestamp. We keep
  nm_utils_get_monotonic_timestamp_s() as gint32 for a reason.
- ensure the arrays are initialized to zero. E.g.
  ndisc_addr->dad_counter was uninitalized.
- set the size for arrays outside the loop
- use g_array_unref(). I think that is usually better. It makes
  only a difference when somebody else holds a reference to the
  array. And in that case, it usually seems better not to clear
  the array, just release your refrence.
2016-11-10 09:30:05 +01:00
Lubomir Rintel
2b304d82d7 device: properly size the arrays 2016-11-10 08:10:28 +01:00
Thomas Haller
6c59784a59 policy: make dispose() reentrant and indention 2016-11-09 18:16:48 +01:00
Thomas Haller
602247e8e3 ip-tunnel: avoid crash on missing NMPlatformLnkIp6Tnl lnk part
You cannot assume that we are always able to lookup a corresponding
lnk object. In fact, there is no guarantee that link->ifindex still
exists in the platform cache at all.
2016-11-09 17:45:39 +01:00
Thomas Haller
a6416cbd13 ip-tunnel: tigthen up checks for valid IP tunnel modes
The compiler warns us when we don't specify all enum values
in a switch(), provided that default: is missing.

Make use of that to get a warning when we add a new tunnel mode.
2016-11-09 17:45:39 +01:00
Beniamino Galvani
2805555bd2 ip-tunnel: fail the activation for unknown tunnel modes
When an IP-tunnel connection with mode different from the implemented
ones was activated, an assertion failed in tunnel_mode_to_link_type().

Instead we should return NM_LINK_TYPE_UNKNOWN there and fail the
activation.
2016-11-09 17:45:34 +01:00
Lubomir Rintel
479ad5065e device: add IPv6 configuration delegation machinery
There's two parts of the configuration involved: the subnet addresses
and the DNS information.

For the addressing, the shared (downlink) device signals the policy needs for a
/64 subnet. When it gets one, it merges it into the autoconf configuration and
forwards to the NDisc. When more prefixes are needed, the (uplink) device asks
the DHCP manager and eventually signals delegation (reception) of a prefix.
The NMDevice only provides the mechanism, the actual subnetting needs to
be done by the NMPolicy.

For the DNS configuration, the shared device just copies it from
whichever device the policy deems suitable.
2016-11-09 17:23:32 +01:00