Commit graph

102 commits

Author SHA1 Message Date
Pavel Šimerda
e88aa72e6a ip6: rename defgw to gateway
This was suggested by Dan Winship but it didn't get to commit
8a059b1 by mistake.
2012-06-26 23:50:19 -05:00
Dan Williams
2a5fb5b868 vpn: fix resetting parent device routing on disconnect
1fd11bd8d1 consolidated VPN connection
state handling, but that had the effect of making vpn_cleanup() be
called after all other handlers had processed the VPN connection
state change.  This meant that the code in vpn_cleanup() that
reapplies the parent device's IP configs ran last, and that code
flushes routes on the device before reapplying them.  Since the
policy is a listener on the VPN state change signals, it was
running the default routing updates before vpn_cleanup() got run,
resulting in vpn_cleanup()'s calls to nm_system_apply_ip4_config()
and nm_system_apply_ip6_config() blowing the default route away
which the policy had just set.

Fix that by moving the VPN routing cleanups into the policy, where
most of the routing decisions currently live, causing them to be
run before the default route is fixed up.
2012-06-15 10:14:11 -05:00
Dan Williams
bb75026004 core: ensure VPN DNS information is used
The patches that reduced the frequency of changes to /etc/resolv.conf
failed to prefer the VPN DNS information.  Even though a VPN may not
be allowed to receive the default route, its DNS information still
needs to be higher priority than interface DNS info, otherwise no
sites on the VPN will be accessible due to glibc's in-order querying
of entries in /etc/resolv.conf.
2012-06-14 17:41:52 -05:00
Dan Williams
5003153297 core: move DNS change handling to the policy and optimize DNS updates (bgo #676778)
Consolidate all the DNS handling in the policy instead of sprinkling
it around in the device and vpn code.  This allows us to batch the
updates and thus reduce the number of times resolv.conf needs to
be written.  It's also easier to follow when and why the changes
occur.
2012-06-12 10:00:03 -05:00
Dan Williams
330247399c vpn: emit both new and old states in state-changed signal
Various listeners (well, really only the policy) will want the old
state too.
2012-06-12 10:00:03 -05:00
Dan Williams
2384dea3b7 policy: split routing and DNS updates
They won't always be updated together; if the hostname changes we
don't need to update routing, and if new routes show up we don't
need to update DNS.  This also makes it a lot clearer what's
going on in the routing and DNS update functions.
2012-06-12 10:00:03 -05:00
Dan Williams
cfae0b79ba core: use nm_device_get_connection() in a few more places 2012-06-06 10:24:48 -05:00
Pavel Šimerda
8a059b1496 ip6: add default gateway to NMIP6Config (bgo #676317)
Bug #676317 describes the following error:

  NetworkManager[30151]: <error> [1337348764.559121] [nm-system.c:1121]
  nm_system_replace_default_ip6_route(): (eth1): failed to set IPv6 default
  route: -7

The above error is caused by NetworkManager assuming default gateways
belong to addresses but failing to setup default gateways for addresses
learned through DHCPv6.

This commit doesn't fix the fundamental issue but can be viewed as an ugly
workaround that gets IPv6 connection up and running. It doesn't fix
the fundamental flaw of binding gateways to IP addresses. They are
configured separately in IPv6 and NM should use lifetimes and allow
default gateway reconfiguration.
2012-05-31 15:37:49 -05:00
Dan Winship
960c1ae8ff vpn: support IPv6 over VPNs
Add new API to allow passing both IPv4 and IPv6 configuration
information from VPN plugins to the backend.

Now instead of a single Ip4Config, a plugin has Config, Ip4Config, and
Ip6Config. "Config" contains information which is neither IPv4 nor
IPv6 specific, and also indicates which of Ip4Config and Ip6Config are
present. Ip4Config now only contains the IPv4-specific bits of
configuration.

There is backward compatibility in both directions: if the daemon is
new and the VPN plugin is old, then NM will notice that the plugin
emitted the Ip4Config signal without having emitted the Config signal
first, and so will assume that it is IPv4-only, and that the generic
bits of configuration have been included with the Ip4Config. If the
daemon is old and the plugin is new, then NMVPNPlugin will copy the
values from the generic config into the IPv4 config as well. (In fact,
NMVPNPlugin *always* does this, because it's harmless, and it's easier
than actually checking the daemon version.)

Currently the VPN is still configured all-at-once, after both IPv4 and
IPv6 information has been received, but the APIs allow for the
possibility of configuring them one at a time in the future.
2012-05-30 14:24:46 -04:00
Jiří Klimeš
6d9338f2c6 core: add "Autoconnect" property to NMDevice
It is bound to autoconnect_inhibit private variable (has opposite meaning).
While 'Autoconnect' is TRUE (default value) the device can automatically
activate a connection. If it is changed to FALSE, the device will not
auto-activate until 'Autoconnect' is TRUE again.
Disconnect() method sets 'Autoconnect' to FALSE. NMPolicy monitors the property
and schedules auto activation when FALSE->TRUE transition is made.
2012-05-22 17:11:44 +02:00
Dan Williams
2290a70385 firewall: set interface zone before IP configuration (rh #805405)
We need to set the interface's firewall zone before we kick off
any sort of IP configuration, so that rules for stuff like
DHCP are already handled by the time that these services are started.
2012-03-21 15:10:11 -05:00
Jiri Popelka
128695c447 firewall-manager: changing the zone an interface belongs to
When we want to change the zone an interface belongs to
we can't use firewalld's addInterface() because this one
doesn't allow to add interface to zone when it already
has been part of some other/same zone.
We need to use changeZone() method instead - hopefuly
this is the final name of this method.
2012-03-01 18:02:00 -06:00
Jiri Popelka
b2d4f66dd3 firewall-manager: add interfaces to zones after firewall (re)start
Because firewalld has no idea what interface is part of which zone
we need to inform it after it (re)starts what interface belongs to which
zone.
2012-03-01 18:01:56 -06:00
Dan Williams
33d0cff3e4 core: use active connection dependency master instead of manually setting it
We already have the master device kept in the active connection, so
we can just use that instead of having the Policy determine and set
it manually.  This also should allow slaves to auto-activate their
master connections if the master is able to activate.
2012-03-01 17:40:18 -06:00
Dan Williams
b378c3089c core: make NMActiveConnection a base class for NMActRequest and NMVPNConnection
That was always the goal, but never got there.  This time we need it
for real to abstract handling of dependent connections so bite the
bullet and make it happen.
2012-02-09 17:54:26 -06:00
Thomas Graf
29c9abffa3 bonding: auto activate slaves when a master enters prepare state
Reset the auto retries of all slave connections when their master
connection enter prepare state and schedule all of the slaves
for activation if not pending yet.

Slaves are initially scheduled for activation together with their
master but depending on how long it takes for the master
connection to appear the slave activation requests may already
have run out of attempts. Resetting the retries counter ensures
that all slaves are properly activated when a master is brought up.

Signed-off-by: Thomas Graf <tgraf@redhat.com>
2011-12-09 00:00:36 -06:00
Dan Williams
ce9d8a68d7 policy: recheck activation after connection retries are cleared
After any connection has had its retries cleared, schedule an
activation check so that we can possibly use that connection
again.
2011-12-06 16:33:00 -06:00
Thomas Graf
5b7503e95e core: use nm_connection_get_setting_<type>() whenever possible
Leads to shorter, easier to read code and improves type casting safety.

Signed-off-by: Thomas Graf <tgraf@redhat.com>
2011-12-06 16:06:43 -06:00
Dan Williams
c71b032d7a core: clean up more usage of NM_IS_DEVICE_xxx()
One more step on the way to modular WiMAX and other device types.
2011-12-02 13:30:08 -06:00
Dan Williams
da8e21a7d7 core: kill NMDeviceInterface 2011-12-02 13:30:07 -06:00
Dan Williams
6d567e71e6 core: move NMDeviceInterface properties and methods to nm-device.c 2011-12-02 13:30:07 -06:00
Dan Williams
51c25508c2 core: move nm_device_interface_get_enabled() to nm-device.c 2011-12-02 13:30:07 -06:00
Dan Williams
4f330838bd core: move nm_device_interface_check_connection_compatible() to nm-device.c 2011-12-02 13:30:06 -06:00
Dan Williams
777d9cb182 core: kill IS_ACTIVATING_STATE() 2011-12-02 13:30:06 -06:00
Dan Williams
f8852bf4a4 core: kill nm_device_interface_get_state() 2011-12-02 13:30:06 -06:00
Thomas Graf
6346bd60be bonding: wait for master connection to be available
Currently slaves only wait for the master device to be present. This is
insufficient, we want to wait for the master connection to be activated.

Signed-off-by: Thomas Graf <tgraf@redhat.com>
2011-11-21 23:41:36 -06:00
Dan Williams
e8c6fa8755 trivial: fix wrong return type 2011-11-17 19:04:15 -06:00
Thomas Graf
a65028a025 bonding: postpone auto-activation of a slave until master is present
For a slave to be activatetable the master connection must be present.
Activation of the slave is postponed until this condition is met.

Once the slave is being activated, a reference to the master connection
is acquired and held for the lifetime of the bond.

Changes v2:
 - Made check_master_dependency() return TRUE/FALSE

Signed-off-by: Thomas Graf <tgraf@redhat.com>
2011-11-09 23:24:04 -06:00
Dan Williams
cf7ec0e63e firewall: cleanups and code consolidation
Consolidate the NMDevice firewall add code so that firewall
handling is done in one place.
2011-11-09 23:11:34 -06:00
Dan Williams
04ecdb8187 zones: fix up formatting and simplify some functions 2011-11-09 22:06:36 -06:00
Jiri Popelka
62cd6ece48 policy: let firewall know about the zone when connection gets updated 2011-11-09 22:02:02 -06:00
Mathieu Trudel-Lapierre
fc0739a5d4 dns: don't update routing and DNS if no devices were ever managed (lp:862134)
Avoids blowing away existing routes and resolv.conf if NM never
managed any devices.
2011-11-02 15:28:43 -05:00
Dan Williams
bc8d07a733 Revert "dns: don't update routing and DNS if no devices were ever managed"
This reverts commit 0051b44a09.

While fixing up the patch I (dcbw) forgot to include the lp# in
the commit message.
2011-11-02 15:27:24 -05:00
Dan Williams
e04cbae154 policy: don't update DNS if the hostname hasn't actually changed
This was causing spurious rewrites of resolv.conf.
2011-11-02 15:21:52 -05:00
Dan Williams
a2ec91ca7e dns: remove unused parameter 2011-11-02 15:06:35 -05:00
Mathieu Trudel-Lapierre
0051b44a09 dns: don't update routing and DNS if no devices were ever managed
Avoids blowing away existing routes and resolv.conf if NM never
managed any devices.
2011-11-02 15:05:43 -05:00
Jiří Klimeš
74615ce23c policy: fix setting hostname from DHCP options (rh #719100)
This commit fixes a regression introduced by commit
6272052f9d.

dhclient prefixes options with "new_", however we remove that prefix
before putting options into NMDHCP4Config.
2011-10-20 16:51:02 +02:00
Dan Williams
7addf3009a Merge remote-tracking branch 'origin/master' into libnl3 2011-08-16 16:45:41 -05:00
Daniel Gnoutcheff
ac27e33f0c policy: don't autoconnect disabled modems
Normally, a device disabled via nm_device_interface_set_enabled() will
shift into the UNAVAILABLE state.  Modems, however, don't do that.
Rather, they pretend that they are in the DISCONNECTED state, presumably
to make it easier to re-enable them.  To avoid accidentally re-enabling
and autoconnecting a disabled modem, we need to explicitly make
nm_device_interface_get_enabled() == true a prerequisite for
autoconnecting.
2011-08-16 16:34:21 -05:00
Dan Williams
2fabdbff15 core: finish conversion of nm-system functions to ifindex not iface name 2011-07-22 14:24:18 -05:00
Jiří Klimeš
6272052f9d policy: fix setting hostname from DHCP options (rh #719100) 2011-07-12 14:47:33 +02:00
Dan Williams
5459d9db8c policy: don't auto-activate shared wifi if user is not authorized (CVE-2011-2176) (rh #715492)
If a shared wifi connection is restricted to a certain set of users
and none of those users have authorization to start shared wifi
connections, don't auto-start the connection.
2011-07-01 15:41:00 -05:00
Jiří Klimeš
69b767bbf0 core: connections failed due to missing secrets are re-tried when an secret agent registers (rh #706204)
Use case:
A user has an auto-activatable connection with secrets in a keyring. While
booting NM starts and tries to activate the connection, but it fails because of
missing secrets. Then the user logs in, but the connection is marked as invalid
and is not tried again.

This commit solves the issue by removing invalid flag and activating the
connection when a secret agent registers.

Signed-off-by: Jiří Klimeš <jklimes@redhat.com>
2011-07-01 09:14:05 +02:00
Jiří Klimeš
fdfbe00aac policy: remove "invalid mark" for failed connections after 5 mins
If there is a temporary connection failure (e.g. due to unavailable DHCP), the
connection is marked as invalid after several retries. Reset the flag after
5 mins to allow next auto-reconnection.
2011-06-23 11:45:16 +02:00
Jiří Klimeš
9eaf31f49a policy: don't cache "(none)" hostname on startup (rh #706094) 2011-06-14 13:21:14 +02:00
Dan Williams
650c546748 core: add some logging for activation and disconnection
'vperic' had an interesting problem on IRC where every 10 minutes
the ethernet would change state from ACTIVATED -> DISCONNECTED with
a reason code of 0; the only thing I can find is that something was
telling NM to activate a connection periodically, becasue that appears
to be the only place that changes state to DISCONNECTED with a
reason code of 0.  No logging; no apparent carrier changes.

So log this condition just in case we run into it later.
2011-06-02 09:06:48 -05:00
Jiří Klimeš
9aa7efcf28 core: reset auto retries counter when cable is replugged
When re-plugging we may be in a different network. So we should try the
compatible connections again.

Based on a patch from Mikhail Efremov.
2011-05-30 13:07:49 +02:00
Jiří Klimeš
29a4239f43 policy: make auto-activation retries really work for RETRIES_DEFAULT attempts
Retries counter was not initialized when connections were loaded. That forced
the counter to start from -1 and continue decreasing on connection failures.
And connection attempts never stopped.
2011-05-20 13:01:04 +02:00
Dan Williams
f898dbf1a9 dispatcher: enhance dispatcher script environment (bgo #648382)
For VPN connections, the interface name would be that of the VPN's
IP interface, but the script environment would be the that of the
VPN's parent device.  Enhance the environment by adding any VPN
specific details as additional environment variables prefixed by
"VPN_".  Leave the existing environment setup intact for backwards
compatiblity.

Additionally, the dispatcher never got updated for IPv6 support,
so push IPv6 configuration and DHCPv6 configuration into the
environment too.

Even better, push everything the dispatcher needs to it instead
of making the dispatcher make D-Bus requests back to NM, which
sometimes fails if NM has already torn down the device or the
connection which the device was using.

And add some testcases to ensure that we don't break backwards compat,
the testcases here were grabbed from a 0.8.4 machine with a hacked up
dispatcher to dump everything it was given from NM.
2011-05-02 22:54:28 -05:00
Dan Williams
8b445c0872 policy: don't recheck auto-activation when device is UNMANAGED or UNAVAILABLE
Pointless, since we're not going to activate it anyway when it's
in one of those states.
2011-04-19 00:31:53 -05:00