File NetworkManager-network-enable-disable.patch of Package NetworkManager
Index: NetworkManager-0.8/introspection/nm-manager-client.xml
===================================================================
--- NetworkManager-0.8.orig/introspection/nm-manager-client.xml
+++ NetworkManager-0.8/introspection/nm-manager-client.xml
@@ -39,6 +39,12 @@ object. dbus-glib generates the same bo
<arg name="sleep" type="b" direction="in"/>
</method>
+ <method name="Enable">
+ <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_manager_enable"/>
+ <arg name="enable" type="b" direction="in"/>
+ </method>
+
+ <property name="NetworkingEnabled" type="b" access="read"/>
<property name="WirelessEnabled" type="b" access="readwrite"/>
<property name="WirelessHardwareEnabled" type="b" access="read"/>
<property name="WwanEnabled" type="b" access="readwrite"/>
Index: NetworkManager-0.8/introspection/nm-manager.xml
===================================================================
--- NetworkManager-0.8.orig/introspection/nm-manager.xml
+++ NetworkManager-0.8/introspection/nm-manager.xml
@@ -87,7 +87,10 @@
<method name="Sleep">
<annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_manager_sleep"/>
<tp:docstring>
- Control the NetworkManager daemon's sleep state. When asleep, all interfaces that it manages are deactivated. When awake, devices are available to be activated.
+ Control the NetworkManager daemon's sleep state. When asleep, all
+ interfaces that it manages are deactivated. When awake, devices are
+ available to be activated. This command should not be called directly
+ by users or clients; it is intended for system suspend/resume tracking.
</tp:docstring>
<arg name="sleep" type="b" direction="in">
<tp:docstring>
@@ -96,6 +99,30 @@
</arg>
</method>
+ <method name="Enable">
+ <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_manager_enable"/>
+ <tp:docstring>
+ Control whether overall networking is enabled or disabled. When
+ disabled, all interfaces that NM manages are deactivated. When enabled,
+ all managed interfaces are re-enabled and available to be activated.
+ This command should be used by clients that provide to users the ability
+ to enable/disable all networking.
+ </tp:docstring>
+ <arg name="enable" type="b" direction="in">
+ <tp:docstring>
+ If FALSE, indicates that all networking should be disabled. If TRUE,
+ indicates that NetworkManager should begin managing network devices.
+ </tp:docstring>
+ </arg>
+ </method>
+
+ <property name="NetworkingEnabled" type="b" access="read">
+ <tp:docstring>
+ Indicates if overall networking is currently enabled or not. See the
+ Enable() method.
+ </tp:docstring>
+ </property>
+
<property name="WirelessEnabled" type="b" access="readwrite">
<tp:docstring>
Indicates if wireless is currently enabled or not.
Index: NetworkManager-0.8/libnm-glib/libnm-glib.ver
===================================================================
--- NetworkManager-0.8.orig/libnm-glib/libnm-glib.ver
+++ NetworkManager-0.8/libnm-glib/libnm-glib.ver
@@ -35,6 +35,8 @@ global:
nm_client_get_manager_running;
nm_client_get_state;
nm_client_get_type;
+ nm_client_networking_get_enabled;
+ nm_client_networking_set_enabled;
nm_client_new;
nm_client_sleep;
nm_client_wireless_get_enabled;
Index: NetworkManager-0.8/libnm-glib/nm-client.c
===================================================================
--- NetworkManager-0.8.orig/libnm-glib/nm-client.c
+++ NetworkManager-0.8/libnm-glib/nm-client.c
@@ -18,7 +18,7 @@
* Boston, MA 02110-1301 USA.
*
* Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2008 Red Hat, Inc.
+ * Copyright (C) 2007 - 2010 Red Hat, Inc.
*/
#include <dbus/dbus-glib.h>
@@ -58,6 +58,8 @@ typedef struct {
GPtrArray *devices;
GPtrArray *active_connections;
+ gboolean have_networking_enabled;
+ gboolean networking_enabled;
gboolean wireless_enabled;
gboolean wireless_hw_enabled;
@@ -69,6 +71,7 @@ enum {
PROP_0,
PROP_STATE,
PROP_MANAGER_RUNNING,
+ PROP_NETWORKING_ENABLED,
PROP_WIRELESS_ENABLED,
PROP_WIRELESS_HARDWARE_ENABLED,
PROP_WWAN_ENABLED,
@@ -97,11 +100,28 @@ static void client_device_added_proxy (D
static void client_device_removed_proxy (DBusGProxy *proxy, char *path, gpointer user_data);
static void
+handle_net_enabled_changed (GObject *object,
+ GParamSpec *pspec,
+ GValue *value,
+ gpointer user_data)
+{
+ NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (object);
+
+ /* Update the cache flag when it changes */
+ priv->have_networking_enabled = TRUE;
+}
+
+static void
nm_client_init (NMClient *client)
{
NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (client);
priv->state = NM_STATE_UNKNOWN;
+
+ g_signal_connect (client,
+ "notify::" NM_CLIENT_NETWORKING_ENABLED,
+ G_CALLBACK (handle_net_enabled_changed),
+ client);
}
static void
@@ -250,6 +270,7 @@ register_for_property_changed (NMClient
NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (client);
const NMPropertiesChangedInfo property_changed_info[] = {
{ NM_CLIENT_STATE, _nm_object_demarshal_generic, &priv->state },
+ { NM_CLIENT_NETWORKING_ENABLED, _nm_object_demarshal_generic, &priv->networking_enabled },
{ NM_CLIENT_WIRELESS_ENABLED, _nm_object_demarshal_generic, &priv->wireless_enabled },
{ NM_CLIENT_WIRELESS_HARDWARE_ENABLED, _nm_object_demarshal_generic, &priv->wireless_hw_enabled },
{ NM_CLIENT_WWAN_ENABLED, _nm_object_demarshal_generic, &priv->wwan_enabled },
@@ -427,6 +448,9 @@ get_property (GObject *object,
case PROP_MANAGER_RUNNING:
g_value_set_boolean (value, priv->manager_running);
break;
+ case PROP_NETWORKING_ENABLED:
+ g_value_set_boolean (value, priv->networking_enabled);
+ break;
case PROP_WIRELESS_ENABLED:
g_value_set_boolean (value, priv->wireless_enabled);
break;
@@ -490,6 +514,19 @@ nm_client_class_init (NMClientClass *cli
G_PARAM_READABLE));
/**
+ * NMClient::networking-enabled:
+ *
+ * Whether networking is enabled.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_NETWORKING_ENABLED,
+ g_param_spec_boolean (NM_CLIENT_NETWORKING_ENABLED,
+ "NetworkingEnabled",
+ "Is networking enabled",
+ TRUE,
+ G_PARAM_READABLE));
+
+ /**
* NMClient::wireless-enabled:
*
* Whether wireless is enabled.
@@ -1042,27 +1079,70 @@ nm_client_get_state (NMClient *client)
}
/**
- * nm_client_sleep:
+ * nm_client_networking_get_enabled:
* @client: a #NMClient
- * @sleep: %TRUE to put the daemon to sleep
*
- * Enables or disables networking. When the daemon is put to sleep, it'll deactivate and disable
- * all the active devices.
+ * Whether networking is enabled or disabled.
+ *
+ * Returns: %TRUE if networking is disabled, %FALSE if networking is enabled
+ **/
+gboolean
+nm_client_networking_get_enabled (NMClient *client)
+{
+ NMClientPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_CLIENT (client), FALSE);
+
+ priv = NM_CLIENT_GET_PRIVATE (client);
+ if (!priv->have_networking_enabled) {
+ priv = NM_CLIENT_GET_PRIVATE (client);
+ if (!priv->networking_enabled) {
+ priv->networking_enabled = _nm_object_get_boolean_property (NM_OBJECT (client),
+ NM_DBUS_INTERFACE,
+ "NetworkingEnabled");
+ priv->have_networking_enabled = TRUE;
+ }
+ }
+
+ return priv->networking_enabled;
+}
+
+/**
+ * nm_client_networking_set_enabled:
+ * @client: a #NMClient
+ * @enabled: %TRUE to set networking enabled, %FALSE to set networking disabled
+ *
+ * Enables or disables networking. When networking is disabled, all controlled
+ * interfaces are disconnected and deactivated. When networking is enabled,
+ * all controlled interfaces are available for activation.
**/
void
-nm_client_sleep (NMClient *client, gboolean sleep)
+nm_client_networking_set_enabled (NMClient *client, gboolean enable)
{
GError *err = NULL;
g_return_if_fail (NM_IS_CLIENT (client));
- if (!org_freedesktop_NetworkManager_sleep (NM_CLIENT_GET_PRIVATE (client)->client_proxy, sleep, &err)) {
- g_warning ("Error in sleep: %s", err->message);
+ if (!org_freedesktop_NetworkManager_enable (NM_CLIENT_GET_PRIVATE (client)->client_proxy, enable, &err)) {
+ g_warning ("Error enabling/disabling networking: %s", err->message);
g_error_free (err);
}
}
/**
+ * nm_client_sleep:
+ * @client: a #NMClient
+ * @sleep: %TRUE to put the daemon to sleep
+ *
+ * Deprecated; use nm_client_networking_set_enabled() instead.
+ **/
+void
+nm_client_sleep (NMClient *client, gboolean sleep)
+{
+ nm_client_networking_set_enabled (client, !sleep);
+}
+
+/**
* nm_client_get_manager_running:
* @client: a #NMClient
*
Index: NetworkManager-0.8/libnm-glib/nm-client.h
===================================================================
--- NetworkManager-0.8.orig/libnm-glib/nm-client.h
+++ NetworkManager-0.8/libnm-glib/nm-client.h
@@ -18,7 +18,7 @@
* Boston, MA 02110-1301 USA.
*
* Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2008 Red Hat, Inc.
+ * Copyright (C) 2007 - 2010 Red Hat, Inc.
*/
#ifndef NM_CLIENT_H
@@ -43,6 +43,7 @@ G_BEGIN_DECLS
#define NM_CLIENT_STATE "state"
#define NM_CLIENT_MANAGER_RUNNING "manager-running"
+#define NM_CLIENT_NETWORKING_ENABLED "networking-enabled"
#define NM_CLIENT_WIRELESS_ENABLED "wireless-enabled"
#define NM_CLIENT_WIRELESS_HARDWARE_ENABLED "wireless-hardware-enabled"
#define NM_CLIENT_WWAN_ENABLED "wwan-enabled"
@@ -88,6 +89,9 @@ void nm_client_activate_connection (NMCl
void nm_client_deactivate_connection (NMClient *client, NMActiveConnection *active);
+gboolean nm_client_networking_get_enabled (NMClient *client);
+void nm_client_networking_set_enabled (NMClient *client, gboolean enabled);
+
gboolean nm_client_wireless_get_enabled (NMClient *client);
void nm_client_wireless_set_enabled (NMClient *client, gboolean enabled);
gboolean nm_client_wireless_hardware_get_enabled (NMClient *client);
Index: NetworkManager-0.8/src/nm-manager.h
===================================================================
--- NetworkManager-0.8.orig/src/nm-manager.h
+++ NetworkManager-0.8/src/nm-manager.h
@@ -16,7 +16,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2008 Red Hat, Inc.
+ * Copyright (C) 2007 - 2010 Red Hat, Inc.
*/
#ifndef NM_MANAGER_H
@@ -35,6 +35,14 @@
#define NM_IS_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NM_TYPE_MANAGER))
#define NM_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_MANAGER, NMManagerClass))
+#define NM_MANAGER_STATE "state"
+#define NM_MANAGER_NETWORKING_ENABLED "networking-enabled"
+#define NM_MANAGER_WIRELESS_ENABLED "wireless-enabled"
+#define NM_MANAGER_WIRELESS_HARDWARE_ENABLED "wireless-hardware-enabled"
+#define NM_MANAGER_WWAN_ENABLED "wwan-enabled"
+#define NM_MANAGER_WWAN_HARDWARE_ENABLED "wwan-hardware-enabled"
+#define NM_MANAGER_ACTIVE_CONNECTIONS "active-connections"
+
/* Not exported */
#define NM_MANAGER_HOSTNAME "hostname"
#define NM_MANAGER_SLEEPING "sleeping"
Index: NetworkManager-0.8/src/nm-manager.c
===================================================================
--- NetworkManager-0.8.orig/src/nm-manager.c
+++ NetworkManager-0.8/src/nm-manager.c
@@ -16,7 +16,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Copyright (C) 2007 - 2009 Novell, Inc.
- * Copyright (C) 2007 - 2009 Red Hat, Inc.
+ * Copyright (C) 2007 - 2010 Red Hat, Inc.
*/
#include <netinet/ether.h>
@@ -57,13 +57,6 @@
#define NM_AUTOIP_DBUS_SERVICE "org.freedesktop.nm_avahi_autoipd"
#define NM_AUTOIP_DBUS_IFACE "org.freedesktop.nm_avahi_autoipd"
-#define NM_MANAGER_STATE "state"
-#define NM_MANAGER_WIRELESS_ENABLED "wireless-enabled"
-#define NM_MANAGER_WIRELESS_HARDWARE_ENABLED "wireless-hardware-enabled"
-#define NM_MANAGER_WWAN_ENABLED "wwan-enabled"
-#define NM_MANAGER_WWAN_HARDWARE_ENABLED "wwan-hardware-enabled"
-#define NM_MANAGER_ACTIVE_CONNECTIONS "active-connections"
-
static gboolean impl_manager_get_devices (NMManager *manager, GPtrArray **devices, GError **err);
static void impl_manager_activate_connection (NMManager *manager,
const char *service_name,
@@ -78,6 +71,13 @@ static gboolean impl_manager_deactivate_
static gboolean impl_manager_sleep (NMManager *manager, gboolean sleep, GError **err);
+static gboolean impl_manager_enable (NMManager *manager, gboolean enable, GError **err);
+
+static gboolean impl_manager_set_logging (NMManager *manager,
+ const char *level,
+ const char *domains,
+ GError **error);
+
/* Legacy 0.6 compatibility interface */
static gboolean impl_manager_legacy_sleep (NMManager *manager, GError **err);
@@ -188,6 +188,7 @@ typedef struct {
RadioState radio_states[RFKILL_TYPE_MAX];
gboolean sleeping;
+ gboolean net_enabled;
NMVPNManager *vpn_manager;
guint vpn_manager_id;
@@ -226,6 +227,7 @@ static guint signals[LAST_SIGNAL] = { 0
enum {
PROP_0,
PROP_STATE,
+ PROP_NETWORKING_ENABLED,
PROP_WIRELESS_ENABLED,
PROP_WIRELESS_HARDWARE_ENABLED,
PROP_WWAN_ENABLED,
@@ -249,6 +251,7 @@ typedef enum
NM_MANAGER_ERROR_PERMISSION_DENIED,
NM_MANAGER_ERROR_CONNECTION_NOT_ACTIVE,
NM_MANAGER_ERROR_ALREADY_ASLEEP_OR_AWAKE,
+ NM_MANAGER_ERROR_ALREADY_ENABLED_OR_DISABLED,
} NMManagerError;
#define NM_MANAGER_ERROR (nm_manager_error_quark ())
@@ -291,6 +294,8 @@ nm_manager_error_get_type (void)
ENUM_ENTRY (NM_MANAGER_ERROR_CONNECTION_NOT_ACTIVE, "ConnectionNotActive"),
/* The manager is already in the requested sleep state */
ENUM_ENTRY (NM_MANAGER_ERROR_ALREADY_ASLEEP_OR_AWAKE, "AlreadyAsleepOrAwake"),
+ /* The manager is already in the requested enabled/disabled state */
+ ENUM_ENTRY (NM_MANAGER_ERROR_ALREADY_ENABLED_OR_DISABLED, "AlreadyEnabledOrDisabled"),
{ 0, 0, 0 },
};
etype = g_enum_register_static ("NMManagerError", values);
@@ -298,6 +303,16 @@ nm_manager_error_get_type (void)
return etype;
}
+static gboolean
+manager_sleeping (NMManager *self)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+
+ if (priv->sleeping || !priv->net_enabled)
+ return TRUE;
+ return FALSE;
+}
+
static void
vpn_manager_connection_deactivated_cb (NMVPNManager *manager,
NMVPNConnection *vpn,
@@ -353,9 +368,9 @@ nm_manager_update_state (NMManager *mana
priv = NM_MANAGER_GET_PRIVATE (manager);
- if (priv->sleeping) {
+ if (manager_sleeping (manager))
new_state = NM_STATE_ASLEEP;
- } else {
+ else {
GSList *iter;
for (iter = priv->devices; iter; iter = iter->next) {
@@ -1208,7 +1223,7 @@ manager_set_radio_enabled (NMManager *ma
}
/* Don't touch devices if asleep/networking disabled */
- if (priv->sleeping)
+ if (manager_sleeping (manager))
return;
/* enable/disable wireless devices as required */
@@ -1517,7 +1532,7 @@ add_device (NMManager *self, NMDevice *d
/* Start the device if it's supposed to be managed */
unmanaged_specs = nm_sysconfig_settings_get_unmanaged_specs (priv->sys_settings);
- if ( !priv->sleeping
+ if ( !manager_sleeping (self)
&& !nm_device_interface_spec_match_list (NM_DEVICE_INTERFACE (device), unmanaged_specs)) {
nm_device_set_managed (device,
TRUE,
@@ -1773,7 +1788,6 @@ udev_device_added_cb (NMUdevManager *ude
gpointer user_data)
{
NMManager *self = NM_MANAGER (user_data);
- NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
GObject *device;
guint32 ifindex;
@@ -1781,7 +1795,7 @@ udev_device_added_cb (NMUdevManager *ude
if (find_device_by_ifindex (self, ifindex))
return;
- device = creator_fn (udev_mgr, udev_device, priv->sleeping);
+ device = creator_fn (udev_mgr, udev_device, manager_sleeping (self));
if (device)
add_device (self, NM_DEVICE (device));
}
@@ -2607,54 +2621,25 @@ impl_manager_deactivate_connection (NMMa
error);
}
-static gboolean
-impl_manager_sleep (NMManager *self, gboolean sleep, GError **error)
+static void
+do_sleep_wake (NMManager *self)
{
- NMManagerPrivate *priv;
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ const GSList *unmanaged_specs;
GSList *iter;
- g_return_val_if_fail (NM_IS_MANAGER (self), FALSE);
-
- priv = NM_MANAGER_GET_PRIVATE (self);
-
- if (priv->sleeping == sleep) {
- g_set_error (error,
- NM_MANAGER_ERROR, NM_MANAGER_ERROR_ALREADY_ASLEEP_OR_AWAKE,
- "Already %s", sleep ? "asleep" : "awake");
- return FALSE;
- }
-
- priv->sleeping = sleep;
-
- /* Update "NetworkingEnabled" key in state file */
- if (priv->state_file) {
- GError *err = NULL;
- gboolean networking_enabled = !sleep;
-
- if (!write_value_to_state_file (priv->state_file,
- "main", "NetworkingEnabled",
- G_TYPE_BOOLEAN, (gpointer) &networking_enabled,
- &err)) {
- g_warning ("Writing to state file %s failed: (%d) %s.",
- priv->state_file,
- err ? err->code : -1,
- (err && err->message) ? err->message : "unknown");
- }
-
- }
-
- if (sleep) {
- nm_info ("Sleeping...");
+ if (manager_sleeping (self)) {
+ nm_info ("sleeping or disabling...");
/* Just deactivate and down all devices from the device list,
- * we'll remove them in 'wake' for speed's sake.
+ * to keep things fast the device list will get resynced when
+ * the manager wakes up.
*/
for (iter = priv->devices; iter; iter = iter->next)
nm_device_set_managed (NM_DEVICE (iter->data), FALSE, NM_DEVICE_STATE_REASON_SLEEPING);
- } else {
- const GSList *unmanaged_specs;
- nm_info ("Waking up...");
+ } else {
+ nm_info ("waking up and re-enabling...");
unmanaged_specs = nm_sysconfig_settings_get_unmanaged_specs (priv->sys_settings);
@@ -2675,8 +2660,14 @@ impl_manager_sleep (NMManager *self, gbo
RadioState *rstate = &priv->radio_states[i];
gboolean enabled = (rstate->hw_enabled && rstate->enabled);
+ if (rstate->desc) {
+ nm_debug ("%s %s devices (hw_enabled %d, enabled %d)",
+ enabled ? "enabling" : "disabling",
+ rstate->desc, rstate->hw_enabled, rstate->enabled);
+ }
+
if ( rstate->object_filter_func
- && rstate->object_filter_func (G_OBJECT (device))) {
+ && rstate->object_filter_func (G_OBJECT (device))) {
nm_device_interface_set_enabled (NM_DEVICE_INTERFACE (device), enabled);
}
}
@@ -2693,11 +2684,82 @@ impl_manager_sleep (NMManager *self, gbo
}
nm_manager_update_state (self);
+}
+
+static gboolean
+impl_manager_sleep (NMManager *self, gboolean sleep, GError **error)
+{
+ NMManagerPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_MANAGER (self), FALSE);
+
+ priv = NM_MANAGER_GET_PRIVATE (self);
+
+ if (priv->sleeping == sleep) {
+ g_set_error (error,
+ NM_MANAGER_ERROR, NM_MANAGER_ERROR_ALREADY_ASLEEP_OR_AWAKE,
+ "Already %s", sleep ? "asleep" : "awake");
+ return FALSE;
+ }
+
+ nm_info ("%s requested (sleeping: %s enabled: %s)",
+ sleep ? "sleep" : "wake",
+ priv->sleeping ? "yes" : "no",
+ priv->net_enabled ? "yes" : "no");
+
+ priv->sleeping = sleep;
+
+ do_sleep_wake (self);
g_object_notify (G_OBJECT (self), NM_MANAGER_SLEEPING);
return TRUE;
}
+static gboolean
+impl_manager_enable (NMManager *self, gboolean enable, GError **error)
+{
+ NMManagerPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_MANAGER (self), FALSE);
+
+ priv = NM_MANAGER_GET_PRIVATE (self);
+
+ if (priv->net_enabled == enable) {
+ g_set_error (error,
+ NM_MANAGER_ERROR, NM_MANAGER_ERROR_ALREADY_ENABLED_OR_DISABLED,
+ "Already %s", enable ? "enabled" : "disabled");
+ return FALSE;
+ }
+
+ /* Update "NetworkingEnabled" key in state file */
+ if (priv->state_file) {
+ GError *err = NULL;
+
+ if (!write_value_to_state_file (priv->state_file,
+ "main", "NetworkingEnabled",
+ G_TYPE_BOOLEAN, (gpointer) &enable,
+ &err)) {
+ /* Not a hard error */
+ nm_warning ("writing to state file %s failed: (%d) %s.",
+ priv->state_file,
+ err ? err->code : -1,
+ (err && err->message) ? err->message : "unknown");
+ }
+ }
+
+ nm_info ("%s requested (sleeping: %s enabled: %s)",
+ enable ? "enable" : "disable",
+ priv->sleeping ? "yes" : "no",
+ priv->net_enabled ? "yes" : "no");
+
+ priv->net_enabled = enable;
+
+ do_sleep_wake (self);
+
+ g_object_notify (G_OBJECT (self), NM_MANAGER_NETWORKING_ENABLED);
+ return TRUE;
+}
+
/* Legacy 0.6 compatibility interface */
static gboolean
@@ -2850,6 +2912,10 @@ nm_manager_start (NMManager *self)
manager_set_radio_enabled (self, rstate, rstate->enabled && enabled);
}
+ /* Log overall networking status - enabled/disabled */
+ nm_info ("Networking is %s by state file",
+ priv->net_enabled ? "enabled" : "disabled");
+
system_unmanaged_devices_changed_cb (priv->sys_settings, NULL, self);
system_hostname_changed_cb (priv->sys_settings, NULL, self);
system_query_connections (self);
@@ -2900,7 +2966,7 @@ nm_manager_get (const char *config_file,
priv->state_file = g_strdup (state_file);
- priv->sleeping = !initial_net_enabled;
+ priv->net_enabled = initial_net_enabled;
priv->radio_states[RFKILL_TYPE_WLAN].enabled = initial_wifi_enabled;
priv->radio_states[RFKILL_TYPE_WWAN].enabled = initial_wwan_enabled;
@@ -3024,6 +3090,10 @@ set_property (GObject *object, guint pro
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
switch (prop_id) {
+ case PROP_NETWORKING_ENABLED:
+ /* Construct only for now */
+ priv->net_enabled = g_value_get_boolean (value);
+ break;
case PROP_WIRELESS_ENABLED:
manager_set_radio_enabled (NM_MANAGER (object),
&priv->radio_states[RFKILL_TYPE_WLAN],
@@ -3052,6 +3122,9 @@ get_property (GObject *object, guint pro
nm_manager_update_state (self);
g_value_set_uint (value, priv->state);
break;
+ case PROP_NETWORKING_ENABLED:
+ g_value_set_boolean (value, priv->net_enabled);
+ break;
case PROP_WIRELESS_ENABLED:
g_value_set_boolean (value, priv->radio_states[RFKILL_TYPE_WLAN].enabled);
break;
@@ -3184,6 +3257,14 @@ nm_manager_class_init (NMManagerClass *m
G_PARAM_READABLE));
g_object_class_install_property
+ (object_class, PROP_NETWORKING_ENABLED,
+ g_param_spec_boolean (NM_MANAGER_NETWORKING_ENABLED,
+ "NetworkingEnabled",
+ "Is networking enabled",
+ TRUE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
+ g_object_class_install_property
(object_class, PROP_WIRELESS_ENABLED,
g_param_spec_boolean (NM_MANAGER_WIRELESS_ENABLED,
"WirelessEnabled",
@@ -3232,6 +3313,7 @@ nm_manager_class_init (NMManagerClass *m
NULL,
G_PARAM_READABLE | NM_PROPERTY_PARAM_NO_EXPORT));
+ /* Sleeping is not exported over D-Bus */
g_object_class_install_property
(object_class, PROP_SLEEPING,
g_param_spec_boolean (NM_MANAGER_SLEEPING,
Index: NetworkManager-0.8/src/NetworkManagerPolicy.c
===================================================================
--- NetworkManager-0.8.orig/src/NetworkManagerPolicy.c
+++ NetworkManager-0.8/src/NetworkManagerPolicy.c
@@ -840,13 +840,14 @@ hostname_changed (NMManager *manager, GP
static void
sleeping_changed (NMManager *manager, GParamSpec *pspec, gpointer user_data)
{
- gboolean sleeping = FALSE;
+ gboolean sleeping = FALSE, enabled = FALSE;
GSList *connections, *iter;
g_object_get (G_OBJECT (manager), NM_MANAGER_SLEEPING, &sleeping, NULL);
+ g_object_get (G_OBJECT (manager), NM_MANAGER_NETWORKING_ENABLED, &enabled, NULL);
/* Clear the invalid flag on all connections so they'll get retried on wakeup */
- if (sleeping) {
+ if (sleeping || !enabled) {
connections = nm_manager_get_connections (manager, NM_CONNECTION_SCOPE_SYSTEM);
connections = g_slist_concat (connections, nm_manager_get_connections (manager, NM_CONNECTION_SCOPE_USER));
for (iter = connections; iter; iter = g_slist_next (iter))
@@ -1153,6 +1154,10 @@ nm_policy_new (NMManager *manager, NMVPN
G_CALLBACK (sleeping_changed), policy);
policy->signal_ids = g_slist_append (policy->signal_ids, (gpointer) id);
+ id = g_signal_connect (manager, "notify::" NM_MANAGER_NETWORKING_ENABLED,
+ G_CALLBACK (sleeping_changed), policy);
+ policy->signal_ids = g_slist_append (policy->signal_ids, (gpointer) id);
+
id = g_signal_connect (manager, "device-added",
G_CALLBACK (device_added), policy);
policy->signal_ids = g_slist_append (policy->signal_ids, (gpointer) id);