Commit graph

4471 commits

Author SHA1 Message Date
Stanislaw Gruszka
28dfb2e4a2 wifi: do not print dump inconsistency error for get scan command
Avoid printing "nl_recvmsgs() error: (-33) Dump inconsistency detected,
interrupted".  DUMP_INTR error is harmless for scan (see in code
comments).

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-02-10 11:18:40 +01:00
Stanislaw Gruszka
0cb256f5d7 core: normalize object paths on add_and_activate_connection
Without this patch I can not setup new hotspot connection.

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-02-10 11:02:10 +01:00
Dan Williams
3eeeb9fe0d wifi: indicate to the kernel when critical protocols start/stop (bgo #723241)
Add support for the kernel's Wi-Fi critical protocol indication to make
DHCP and IPv6 SLAAC more reliable.

https://bugzilla.gnome.org/show_bug.cgi?id=723241
2014-01-31 14:34:55 -06:00
Dan Williams
d18f524984 wifi: add nl80211 Critical Protocol indication support
At critical times during the connection process, especially during
DHCP and EAPOL, the driver can increase the reliability of communication
in an attempt to increase the possibility of success.  This could be
done by suppressing bluetooth for a short period, or locking in a low
(and thus more reliable) bitrate, or enforcing some other interference
protection.  The 3.10 kernel added nl80211 support for this, so lets
use it if we can.
2014-01-31 14:11:28 -06:00
Dan Winship
07edeabbc3 trivial: fix a coverity warning
"reserved" is unsigned, so CLAMP(reserved, 0, 8) does an unnecessary
check.
2014-01-31 19:49:52 +01:00
Thomas Haller
6c2f96421b core/platform: fix wrong warning log in nm-linux-platform
According to documentation, nl_rtgen_request() returns 0 on success.
Due to a bug (fixed upstream) in older libnl versions, nl_rtgen_request()
returns the number of bytes sent, which caused logging although
succeeding.

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-01-31 14:54:33 +01:00
Thomas Haller
2e1db48e71 core: ensure proper handling of sysctl paths in NMDevice (set NULL on dispose)
Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-01-31 14:52:14 +01:00
Thomas Haller
84ea5b6302 core: minor change of logging output about monotonic_timestamp
Make it more clear, what the current monotonic_timestamp is and
what's it's offset to CLOCK_BOOTTIME.

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-01-31 13:28:42 +01:00
Thomas Haller
5d6a5f8572 core/platform: add debug logging when adding/deleting addresses
Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-01-30 20:31:29 +01:00
Thomas Haller
3c6438c984 core: use nm_utils_get_monotonic_timestamp_s for nm-device-ethernet.c (last_pppoe_time)
https://bugzilla.gnome.org/show_bug.cgi?id=720833

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-01-30 19:54:10 +01:00
Thomas Haller
16605be6b8 core: use nm_utils_get_monotonic_timestamp_s for autoconnect_retry_time
https://bugzilla.gnome.org/show_bug.cgi?id=720833

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-01-30 19:54:10 +01:00
Thomas Haller
5aba4eaf6b core: use nm_utils_get_monotonic_timestamp_ms for nm-netlink-monitor
https://bugzilla.gnome.org/show_bug.cgi?id=720833

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-01-30 19:54:10 +01:00
Thomas Haller
81aed04da4 core: use nm_utils_get_monotonic_timestamp_s for nm_ap_set_last_seen
https://bugzilla.gnome.org/show_bug.cgi?id=720833

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-01-30 19:51:45 +01:00
Thomas Haller
fc870cf110 core: use nm_utils_get_monotonic_timestamp_s in nm-device-wifi (scheduled_scan_time)
https://bugzilla.gnome.org/show_bug.cgi?id=720833

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-01-30 19:51:45 +01:00
Thomas Haller
f50ca4aed1 core: use nm_utils_get_monotonic_timestamp_s in nm-supplicant-interface
https://bugzilla.gnome.org/show_bug.cgi?id=720833

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-01-30 19:51:45 +01:00
Thomas Haller
0535aa44db core: use nm_utils_get_monotonic_timestamp_s for timestamp of NMPlatformIP[46]Address
https://bugzilla.gnome.org/show_bug.cgi?id=720833

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-01-30 19:51:45 +01:00
Thomas Haller
fca51f3717 core: add nm_utils_get_monotonic_timestamp_* functions
https://bugzilla.gnome.org/show_bug.cgi?id=720833

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-01-30 19:51:45 +01:00
Thomas Haller
8eb9cfe0aa core/dhcp: fix dispose() of NMDHCPClient to handle multiple invocations
Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-01-30 19:39:38 +01:00
Dan Winship
7b85fb6f78 ifcfg-rh: write SLAVE=yes on bond slave connections
For compatibility with the old network scripts.
2014-01-30 11:16:44 -05:00
Thomas Haller
1dea271469 core/rdisc: add support for IPv6 privacy
Add support for ipv6-private addresses. This feature
needs support from the kernel and libnl.

If there is no system support, temporary addresses are
not supported. Log a warning in this case.

Depending on whether ipv6-privacy (use_tempaddr) is enabled,
we add the address flag IFA_F_MANAGETEMPADDR and the kernel
will add temporary addresses for us.

https://bugzilla.gnome.org/show_bug.cgi?id=705170
https://bugzilla.redhat.com/show_bug.cgi?id=1003859
https://bugzilla.redhat.com/show_bug.cgi?id=1047139

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-01-30 17:04:36 +01:00
Thomas Haller
39cbe772a6 core/rdisc: add autoconf addresses as /64 (instead of /128)
This feature needs support from the kernel and libnl.

If there is no system support, NM acts as before, adding the
autoconf address as /128. It does so, to prevent the kernel
from adding a route for this prefix. With system support, we
add the address as /64 and set the flag IFA_F_NOPREFIXROUTE.

https://bugzilla.redhat.com/show_bug.cgi?id=1044590
https://bugzilla.redhat.com/show_bug.cgi?id=1045118

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-01-30 17:04:36 +01:00
Thomas Haller
7841f9ea0a core/platform: add check_support_kernel_extended_ifa_flags function
The kernel adds a new capability to allow user space to manage
temporary IPv6 addresses. We need to detect this capability
to act differently, depending on whether NM has an older kernel
at hand.

This capability got introduced together when extending the
ifa_flags to 32 bit. So, we can check the netlink message,
whether we have such an nl attribute at hand.

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-01-30 17:04:36 +01:00
Thomas Haller
2bc61d1ad3 core/platform: workaround new address flag in address_to_string
The kernel and libnl adds two new flags IFA_F_MANAGETEMPADDR
and IFA_F_NOPREFIXROUTE. Older versions of libnl do not recognize
this flag, so add a workaround to nm_platform_ip6_address_to_string()
to show "mngtmpaddr" and "noprefixroute", respectively.

Also, add function nm_platform_check_support_libnl_extended_ifa_flags()
that checks whether libnl supports extended ifa_flags that were
added recently.

Extended flags and the two ifa-flags above were added to libnl in close
succession.

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-01-30 17:04:36 +01:00
Thomas Haller
84dc64c8af core/rdisc: limit the number of autoconf addresses to 'max_addresses'
NetworkManager uses the sysctl value 'max_addresses' as the kernel does.
There is however a difference in what addresses are taken into account.
The kernel counts all addresses on the interface (including temporary,
private addresses and user configured ones).
NM instead only limits the number of public autoconf addresses to
'max_addresses'. This is because it is difficult for NM to count all
addresses (which can come from different sources) and it is not
necessarily a more logical behavior. Only be aware, that NM uses
the same config value as the kernel, but counts differently.

Especially, the kernel might reach the limit earlier then NM in the
presence of temporary addresses or addresses not from SLAAC.

Note, that the kernel uses 'max_addresses' only to limit public, autoconf
addresses. So this limit does not affect NM adding as many addresses as
it wants.

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-01-30 17:04:36 +01:00
Thomas Haller
616fdb35ea core/platform: fix passing wrong type to variadic function nl_socket_add_memberships
nl_socket_add_memberships expects a variadic list of int,
NULL is possibly defined as ((void *) 0) or 0L.

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-01-30 17:03:43 +01:00
Thomas Haller
2fd8d40a5a core/platform: silence error about reading sysctl file phys_port_id
It is common that the file exists, but cannot be read
(Operation not supported). So, silence any error when
reading the phys_port_id file.

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-01-30 16:34:06 +01:00
Thomas Haller
f9022b8fb3 core: fix recently introduced crash in nm-manager
find_master() does not (always) set the output parameters. Initialize
paramter to NULL before calling find_master().

Just introduced recently with commit 8123cd2410.

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-01-30 16:25:05 +01:00
Thomas Haller
bd7e647914 core: minor fix in calculating timeouts for connection retry
The previous version is not severely wrong, it is just be better
to treat connections whose retry block expires *now* as ready to
reconnect.

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-01-30 16:01:28 +01:00
Dan Winship
8123cd2410 core: fix a crash with autoconnect masters with autoconnect slaves
If a master and at least one of its slaves were both autoconnect,
NMManager would end up creating two NMActiveConnections for the master
(one when the master itself is activated, and a second when the slave
is activated and calls ensure_master_active_connection(). (This
probably got broken when we changed it so ACs were created before
their devices.)

Fix this by checking for an existing master AC before creating one.
2014-01-30 09:12:04 -05:00
Dan Winship
a99ecb5405 core: Tighten up find_master() and ensure_master_active_connection() semantics
Return activation errors in a few edge cases rather than doing the wrong thing.
2014-01-30 09:12:04 -05:00
Dan Winship
8e391dc361 core: make find_master() return a GError on failure 2014-01-30 09:12:04 -05:00
Dan Winship
22c3a813dd core: Fix the find_master() and ensure_master_active_connection() docs
These two functions have confusing semantics, so document them in
better detail (which also highlights some bugs).
2014-01-30 09:12:04 -05:00
Thomas Haller
da40e0bc06 build: fix error when building with different build directory
Fixes build failure introduced by 4b2533fc00

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-01-30 12:50:40 +01:00
Thomas Haller
ffc3d9ced6 core: make NMDeviceTun 'mode' immutable and set at construct time
The 'mode' must be known from the beginning and changing it later on
would not be supported/meaningful. So, enforce this by setting the
property at construct time only.

https://bugzilla.redhat.com/show_bug.cgi?id=1034737

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-01-30 11:53:32 +01:00
Thomas Haller
4b2533fc00 core/tun: make reading of tun properties more robust
There seems to be the possibility of a race while reading tun
properties from sysctl. In this case, when being unable to
read the properties at construction of NMDeviceTun, we retry
shortly after.

- let tun_get_properties() not log any errors and it
  does not stop on the first error but tries to read all
  the values. Also, it initializes all fields of the output
  structure with a default value (NULL).

- hard code kernel flag #ifndef in header files. Even if the
  flag IFF_MULTI_QUEUE is not defined at compile time of NM,
  it could still be supported by the kernel (eg. when booting
  a newer kernel then the installed kernel headers). Simply
  hard code the value, this value is not ever going to change
  anyway.

https://bugzilla.redhat.com/show_bug.cgi?id=1034737

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-01-30 11:53:32 +01:00
Thomas Haller
634e4c99c3 platform: add parameter to nm_platform_sysctl_get() to suppress logging error
In some cases, an error when reading the sysctl value can be expected.
In this case, we want to suppress the error message

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-01-30 11:53:32 +01:00
Thomas Haller
fa81901ed8 core/platform: replace strcpy by g_strlcpy
Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-01-28 20:19:29 +01:00
Thomas Haller
c9e241e2f9 ifcfg-rh: change algorithm for svUnescape
The previous algorithm had runtime complexity O(n^2). Change
it to O(2*n).

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-01-28 19:19:49 +01:00
Dan Winship
ff350c04c0 core: fix crash when connecting to new Wi-Fi network (bgo #723163)
If the user is AddAndActivating a new network, the connection may not
have an NMSettingConnection yet, but we know that once it does, the
user will be authorized.
2014-01-28 12:09:22 -05:00
Dan Williams
078d177874 ifcfg-rh: add tests for Team master and port 2014-01-27 12:49:55 -06:00
Dan Williams
76c3bd9898 ifcfg-rh: unescape Team configuration (rh #1051517)
4f3a9cca6f stopped unescaping Team
configuration when reading ifcfg files due to inefficient algorithms
in svUnescape().  Unfortunately, since Team configuration is escaped
when written out, reading it in creates invalid configuration that
teamd rejects.

The pathological case was a 9MB invalid Team configuration. Since a
Team configuration will never, ever be that large, fix the issue by
warning the user or rejecting the configuration if it is over 20000
bytes in size (an arbitrary number).  Thus svUnescape() will never
be called with huge strings, but the configuration is still unescaped.

https://bugzilla.redhat.com/show_bug.cgi?id=1051517
2014-01-27 12:49:55 -06:00
Dan Williams
199ef9320e trivial: reorgranize some NMManager functions
No code changes at all, just moving GObject-related functions to
the bottom of the file per NM conventions.
2014-01-24 13:43:50 -06:00
Dan Williams
891dcfad7d core: more usage of g_signal_handlers_disconnect_by_func() 2014-01-24 13:43:46 -06:00
Dan Williams
505248b0ce core: use g_signal_handlers_disconnect_by_func() to simplify some code 2014-01-24 13:43:19 -06:00
Dan Williams
016dbcc99e core: provide useful error messages to main() on Manager creation failure 2014-01-24 13:14:05 -06:00
Dan Williams
e62b212be3 core: exit cleanly if D-Bus cannot be initialized (rh #1057738)
Instead of crashing, let's exit cleanly.
2014-01-24 13:14:04 -06:00
Thomas Haller
8959b6dbcb core/platform: sort routes before adding them in nm_platform_ipX_route_sync()
A gateway route can only be added, if there exists a device route
for that gateway. Therefore, nm_platform_ip4_route_sync() and
nm_platform_ip6_route_sync() has to add the device routes first,
before adding gateway routes.

Note: usually for all configured addresses, there is also a device
route for the subnet added by the kernel. This means, NM must first
configure the addresses before route_sync, so that these implicit device
routes already exist -- this is however already done correctly.

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-01-24 09:42:52 -06:00
Thomas Haller
c8d7a06d64 core/platform: revise failure to activate connection on error of setting route
This revises the commit fbde824584 which
causes the activation of a connection to fail generally when a route
cannot be added. Instead, we only want to fail for user configured
routes.

Related: https://bugzilla.gnome.org/show_bug.cgi?id=722843
Related: https://bugzilla.redhat.com/show_bug.cgi?id=999544
Related: https://bugzilla.redhat.com/show_bug.cgi?id=1005416
Related: https://bugzilla.gnome.org/show_bug.cgi?id=721771

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-01-24 09:42:52 -06:00
Thomas Haller
29501c9955 core/platform: compare IPv4 addresses in nm_platform_ip4_*_cmp() as integers, without memcmp()
Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-01-24 09:42:52 -06:00
Dan Williams
8d9bfcdd5a platform: don't replace routes that already exist
If a route already exists that matches the network, prefix, gateway,
and metric of a route NM would like to add, don't try to overwrite
the route.

Unlike IP addresses, the kernel doesn't update the details, it
appears to completely replace that route, which might screw up
external tools that added the route originally.

One example of this is IPSec via openswan/libreswan.  They add the
routes to the kernel upon connection, and if NM replaces those routes,
IPSec no longer works.  While this may be due to kernel bugs or
bad handling of route replacement, there's no reason for NM to touch
routes that it wouldn't materially change anyway.

(yes, we could perhaps use NLM_F_REPLACE in add_kernel_object() only
when we really wanted to replace something, but why ask the kernel
to do the work when it's not required anyway?)
2014-01-24 09:42:52 -06:00