Commit Graph

7207 Commits

Author SHA1 Message Date
Pavel Šimerda
c90730fa43 core: implement update_connection() for bonds 2013-11-08 16:38:49 -06:00
Pavel Šimerda
a3af5cfe9d core: implement update_connection() for bridging 2013-11-08 16:38:48 -06:00
Dan Williams
12fb2519af core: add nm_connection_provider_get_connection_by_uuid() 2013-11-08 16:38:48 -06:00
Dan Williams
c23e1bbb44 ifcfg-rh: don't crash when in-memory-only connections don't have paths
If the connection has never been saved to disk, it won't have a path yet,
but that doesn't mean we should crash.  Next, when reloading connections,
only try to do connection matching on connections that have paths, otherwise
all in-memory-only connections would be removed at the end of
read_connections().
2013-11-08 16:38:48 -06:00
Dan Williams
6b6265ebeb team: fix possible crash by ensuring teamd context is cleared
teamd_cleanup() might get called multiple times, and since the rest
of the function is safe against multi-calls, make priv->tdc safe
against being called again too.
2013-11-08 15:35:48 -06:00
Thomas Haller
788eed99de core: workaround crash when connecting to wifi (rh #1025371)
rh #1025371 reports a crash in handle_ip_config_timeout() because
nm_device_wifi_get_activation_ap() did not return any access point.

The handling of the AP in nm-device-wifi.c should be reworked and soon
will be fixed. For now, play it safe, and try to cope with any cases
where nm_device_wifi_get_activation_ap() might return NULL.

Later, this patch should be reverted and handling of the AP properly
cleaned up.

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

Signed-off-by: Thomas Haller <thaller@redhat.com>
2013-11-08 18:11:50 +01:00
Dan Winship
3de7ede146 trivial: fix a comment cut-and-paste-o 2013-11-08 08:27:30 -05:00
Thomas Haller
ec1cabde28 core: fix error in print_vpn_config to print the route correctly
ip_address_to_string returns a static buffer, need to make a copy
in this case.

Signed-off-by: Thomas Haller <thaller@redhat.com>
2013-11-08 13:30:24 +01:00
Dan Williams
7206306456 core: fix hanlding of IPv6LL address if interface already has one
act_stage3_ip6_config_start() expects a non-NULL NMIP6Config if the
sub-method returns NM_ACT_STAGE_RETURN_SUCCESS.
2013-11-07 21:38:08 -06:00
Thomas Haller
c4a087c36d core: wait for IPv6 link local address with method 'auto' and 'link-local' (bgo#707155)
With the methods 'auto' and 'link-local' we check now, that the device
has a usable IPv6 LL address configured (after DAD, no longer tentative).

We wait for up to 5 seconds, for a suitable LL address to appear.
Currently, if the address does not get ready, we don't create one and
IPv6 configuration fails.

This is relevant for the methods 'link-local' and 'auto'. In the latter
case, because we cannot send router solitations without link local
address.

https://bugzilla.gnome.org/show_bug.cgi?id=707155

Signed-off-by: Thomas Haller <thaller@redhat.com>
2013-11-08 00:46:33 +01:00
Thomas Haller
ac94d83f04 core: add ifa_flags to NMPlatformIP6Address structure
Add a field 'flags' to NMPlatformIP6Address that holds the
IFA_F_* flags as reported over netlink.

Signed-off-by: Thomas Haller <thaller@redhat.com>
2013-11-08 00:46:33 +01:00
Thomas Haller
69d154012d core: omit "dev -" for *_to_string of NMPlatformIP* addresses and routes
The NMPlatformIP[46]Address and NMPlatformIP[46]Route structs have a
field 'dev'. Before this field was always printed in the *_to_string
functions and a missing device was signaled as ' dev -'.
This had the advantage, that the output contained the same fields
regardless whether there was a device set or not.

Change it, not to print the device if it is not set. This has the
advantage, that it looks better in the logfiles.

Signed-off-by: Thomas Haller <thaller@redhat.com>
2013-11-08 00:45:44 +01:00
Thomas Haller
f059298896 trivial: whitespace fix
Signed-off-by: Thomas Haller <thaller@redhat.com>
2013-11-07 21:32:08 +01:00
Thomas Haller
10bd060076 core: IPv6 mode link-local must not behave like auto (bgo#706618, bgo#707155)
In act_stage3_ip6_config_start, for IPv6 mode link-local, we check
if there is already an IPv6 address configured. If yes, we are
already done.

For now, as current workaround, if the LL does not exist, we
NM_ACT_STAGE_RETURN_STOP.

Later, we will POSTPONE and wait a timeout until we see a LL address
that is no longer TENTATIVE. The same should be done for method auto,
so that the device is usable to send router solitations (bgo#707155).

https://bugzilla.gnome.org/show_bug.cgi?id=707155
https://bugzilla.gnome.org/show_bug.cgi?id=706618

Signed-off-by: Thomas Haller <thaller@redhat.com>
2013-11-07 21:19:57 +01:00
Dan Williams
a31dfea052 core: fix assumed active connection exporting after ff7e47a4 (core: kill PendingActivation and move authorization to NMActiveConnection)
Assumed active connections never got a D-Bus path and were never exported
to D-Bus.
2013-11-07 11:53:23 -06:00
Dan Williams
1bf16b6f06 core: fix bridge port sysfs directory determination after f5507633 (platform: bridging and bonding options)
The device is not a slave if it *doesn't* have a master.  Code
previously returned an error if the slave did have a master, which
is wrong.
2013-11-07 11:52:28 -06:00
Dan Williams
d22f279f53 core: fix 'hairpin_mode' after 9e19c3db (core: use nm_platform_*_*_option() for bridges) 2013-11-07 11:52:19 -06:00
Dan Williams
60cf32f271 trivial: quiet log message about failing to determine virtual interface name
In the case of autoconnect VLANs or IB partitions, if the parent interface
hasn't been detected yet at startup, then the get_virtual_interface_name()
won't be able to find the parent yet.  That's normal, and when the parent
is found, system_create_virtual_device() will be run again and the parent
will be found, and the autoconnect VLAN/IB partition will be created.

But we shouldn't warn that the parent can't be found when that might be
a normal occurance.
2013-11-07 11:33:16 -06:00
Thomas Haller
47a0cf2a6c core: add nm_ip6_config_dump function
Also improve nm_ip4_config_dump to print all properties and make
use of nm_platform_*_to_string.

Also, ensure that never_default is set to gboolean 1 or 0.

Signed-off-by: Thomas Haller <thaller@redhat.com>
2013-11-07 18:22:34 +01:00
Dan Williams
6a60dc2fe9 settings: validate hostnames from D-Bus (bgo #711179)
Do some minimal verification of hostnames that come in via D-Bus, for
length and content.  Otherwise we'd get as far as asking glibc to set
the system hostname, which would reject us.
2013-11-07 09:56:14 -06:00
Dan Williams
779b699457 core: compatible connections are always available on master devices
Master devices depend on their slaves/ports for carrier status, so the
carrier can't factor into whether a connection is available on that
device or not.  If it did, then no connections could be activated
because the device doesn't have a carrier until slaves are attached.
2013-11-06 17:55:06 -06:00
Pavel Šimerda
2b2383e9c5 core: add device-generated connection to settings
Only NMSettingsConnections can be activated on device, and
get_connection() wasn't doing that.  So the generated connection
must be added to NMSettings.  That also triggers the
ConnectionProvider's 'connection-added' signal with the happy
result of adding the new connection to the device's
AvailableConnections list.

Acked-by: Dan Williams <dcbw@redhat.com>
2013-11-06 17:55:06 -06:00
Dan Williams
9d00229447 core: rework ignore-carrier device behavior
Previously, ignore-carrier devices were always in the unavailable state
until they were activated.  This required some complicated code to keep
track of whether the device was available or not based on what connections
existed, whether those connections were static-IP, and whether the device
was ignore-carrier.  Various bits of the code used nm_device_can_activate()
for two different purposes: (1) to determine if the device was available
on an L2 basis, which nm_device_can_activate() wasn't well-suited to, and
(2) whether a specific connection could be activated at a given time
based on ignore-carrier and whether the connection was static IP or not.

Remove that complexity and confusion by making ignore-carrier devices
always move to DISCONNECTED state, and simply refuse to activate
connections that require connectivity, but allow connections that don't
require connectivity.  Also, when the device has no carrier, don't
add connections that require connectivity to the AvailableConnections
device property.
2013-11-06 17:55:05 -06:00
Dan Williams
c4b121cb88 core: use carrier for determining when generic devices are available 2013-11-06 14:59:19 -06:00
Dan Winship
b7300bbe5a core: improve handling of NPAR/SR-IOV devices (rh #804527)
Use the new kernel physical_port_id interface property to recognize
when two devices are just virtual devices sharing the same physical
port, and refuse to bond/team multiple slaves on the same port.
2013-11-06 10:26:16 -05:00
Dan Winship
a4dcd66698 core: fix the reporting of failed slaves
If nm_device_enslave_slave() failed, the slave would log that it was
waiting for the master to activate (even if the master was already
active). Fix it to log an error and fail its activation instead.
2013-11-06 10:26:16 -05:00
Dan Winship
a1f16cd4d9 core: don't allow activating the same connection twice (rh #997998)
Change the rules for connection activation so that a given
NMConnection can only be used by a single NMActiveConnection at any
given time.
2013-11-06 10:21:27 -05:00
Dan Williams
154264d99c ifcfg-rh: clear DCB values when DCB is disabled 2013-11-05 14:11:04 -06:00
Thomas Haller
2542888283 ifcfg-rh: fix crash when reading connection (assert in connection_new_or_changed)
rh #1025007 reports a crash on g_assert_no_error() in
connection_new_or_changed() of src/settings/plugins/ifcfg-rh/plugin.c.
From the back trace I am not 100% sure, what the problem was, but I
think that nm_settings_connection_replace_settings failed because of
nm_connection_update_secrets. Apparently such a situation can
happen and it should simply be accepted as valid.

What might have happened, is that the connection used to have
secrets (maybe it had 802.1x configured?) and then it got changed,
so update_secrets() fails because the connection no longer has a
setting to which the secrets would apply.

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

Signed-off-by: Thomas Haller <thaller@redhat.com>
2013-11-01 18:40:56 +01:00
Dan Winship
e213707623 settings: add unrecognized-specs, implement in ifcfg-rh
In Fedora, OVS ports are now identified in ifcfg files as
"TYPE=OVSPort", which NM doesn't recognize, and so it would ignore
those ifcfg files. Unfortunately, this meant that if auto-default
wasn't disabled, and there was no other configuration defined for the
device, then NM would create an NMDefaultWiredConnection for it and
screw things up.

So, add an "unrecognized-specs" settings plugin property, which allows
a plugin to indicate to NetworkManager that it knows of some
non-NetworkManager-supported connection defined for a device. This
will suppress default-wired connection creation for that device,
similar to the "no-auto-default" config file option, but determined by
the plugin instead of by manual configuration. Devices listed in
unrecognized-specs may still be managed by NetworkManager, unless they
are also listed in unmanaged-specs.

https://bugzilla.redhat.com/show_bug.cgi?id=1022256
2013-11-01 13:04:12 -04:00
Dan Winship
0d3674a50a ifcfg-rh: centralize unmanaged-spec handling in the reader
Rather than having each connection-parsing function do its own
unmanaged-spec handling, just do it all directly from
connection_from_file(), and don't bother trying to fully parse the
file if it is unmanaged, since it won't ever be seen outside of the
plugin in that case anyway.

This also makes it possible to have an ifcfg file of an unrecognized
type be unmanaged.
2013-11-01 13:04:11 -04:00
Dan Williams
e3b3b3dcfd ifcfg-rh: add a missing monitor-connection-files check
NMIfcfgConnection was still watching for hard link changes even if
monitor-connection-files was off.
2013-11-01 13:04:11 -04:00
Dan Winship
0065bd6643 ifcfg-rh: fix handling of runtime NM_CONTROLLED=yes -> no changes
We were accidentally removing the connection from priv->connections
(and thus from unmanaged-specs) when NM_CONTROLLED changed to no when
rereading a changed connection file.
2013-11-01 12:13:23 -04:00
Dan Winship
84672c73e3 ifcfg-rh: handle change from one unmanaged-spec to another
If an ifcfg file changed from one non-NULL unmanaged-spec to another
(eg, if it previously had an interface-name: unmanaged-spec, and then
you add a HWADDR line, switching it to a mac: unmanaged-spec), we were
not updating the connection's unmanaged property, or emitting
unmanaged-specs-changed.

Also, remove the notify::unmanaged handler, since only plugin.c ever
changes an existing NMIfcfgConnection's unmanaged property, and it
always emits the signal itself afterward (and it needs to manually
emit the signal in other cases anyway, like when a connection is
removed).
2013-11-01 12:02:22 -04:00
Jiří Klimeš
8ec031fb0e core: again allow calling AddAndActivateConnection() without a connection
When settings are NULL or empty in impl_manager_add_and_activate_connection(),
the connection is created and completed by nm_utils_complete_generic() or
nm_device_complete_connection().

Also, do not assert in nm_connection_is_type(). Returning FALSE there is
sufficient.

Related commit a878cd8145
2013-11-01 14:07:04 +01:00
Jiří Klimeš
fc9eae55b3 keyfile: replace g_str_equal() with g_strcmp0()
It fixes crash when nm_keyfile_connection_get_path() returns NULL.
2013-11-01 12:38:25 +01:00
Thomas Haller
886ca75ac3 core: fix crash when reading routes from VPN Ip6Config (bgo #706332)
https://bugzilla.gnome.org/show_bug.cgi?id=706332

Reported-by: Nicolas Iooss <nicolas.iooss.2010_nm@m4x.org>
Signed-off-by: Thomas Haller <thaller@redhat.com>
2013-11-01 11:08:59 +01:00
Jiří Klimeš
6457e2c367 core: fix crash on an activation error
Reported by Oleksii Shevchuk (alxchk) on IRC
2013-11-01 10:23:09 +01:00
Dan Williams
35124dbb14 core: extend ActivateConnection to allow NULL connection paths
When called with a connection path, activates that connection.

When called without a connection path, picks the best available
connection to activate for that device.

Doesn't work with VPN connections because they don't have devices.
2013-10-31 15:33:58 -05:00
Dan Williams
f4befaab00 core: also check specific object when determining available connections 2013-10-31 15:33:57 -05:00
Dan Williams
b3c0756f79 trivial: add logging for ActiveConnection master-ready tracking 2013-10-31 14:55:32 -05:00
Dan Williams
ff7e47a418 core: kill PendingActivation and move authorization to NMActiveConnection
Besides killing PendingActivation, this patch decouples ActiveConnection
creation from actually activating that connection.  This allows the
ActiveConnection to complete authorization asynchronously.  This will
also be used in the future for handling the DEACTIVATING state of devices
(for "pre-down" functionality).
2013-10-31 14:55:32 -05:00
Dan Williams
625008e486 policy: track secondary activations by ActiveConnection not path
ActiveConnections will (soon) not have a D-Bus path on creation, but
only when they are exported after authorization is complete.  That
means we can't rely on their dbus path in the secondaries code.
Instead, track them directly since the path may be NULL.
2013-10-31 14:15:09 -05:00
Dan Williams
8242b79f29 policy: only clean up VPN DNS/routing configuration if the VPN got connected
It's pointless and wrong to try to clean up DNS and routing configuration
if the VPN never got to the point of retrieving that from the server.
2013-10-31 14:15:09 -05:00
Dan Williams
1b37cd0340 core: allow ActiveConnections to be created without a device
The device may not be created yet (in the case of software devices)
when the ActiveConnection is created; in that case we still want to
proceed with authorization for the connection, but we'll create the
device when authorization is complete.
2013-10-31 14:15:09 -05:00
Dan Williams
a7bab4015e core: have ActiveConnection track device state instead of subclasses
Both NMActRequest and NMVPNConnection need to track their device's state,
so instead of both subclasses having to do so, consolidate that code into
the superclass.
2013-10-31 14:15:08 -05:00
Dan Williams
1768b3abd5 core: add slave to master in stage1_prepare, not nm_device_activate()
When ActiveConnections take over authentication, it may mean that the
master active connection is still handling authentication when the
slave starts to activate.  Thus the master device may still be in
DISCONNECTED state and not ready to enslave the slave.
2013-10-31 14:15:08 -05:00
Dan Williams
f95bca2dcf core: ensure all devices chain up to parent act_stage1_prepare
We'll be moving some code into the NMDevice implementation soon, which
currently does nothing other than return success.
2013-10-31 14:15:08 -05:00
Dan Williams
087e1dfbb9 core: indicate via a property when master connections are ready for slaves
Add a 'master-ready' property to NMActiveConnection that NMDevice can
watch for to indicate that the master connection/device is ready to accept
slaves.  Since the slave device's ActiveConnection is already tracking
its master connection, and since ActiveConnections don't enter the
ACTIVATING state until their device is ready for slaves, it's pretty
trivial to implement this property.
2013-10-31 14:15:08 -05:00
Dan Williams
ae116d847e core: allow ActiveConnection connection to be changed
For the case of AddAndActivate, which needs to set the final connection
after authentication is done and NMSettings has returned the final
connection.
2013-10-31 14:15:08 -05:00