On Thu, 2012-07-26 at 04:03 -0400, Pavel Simerda wrote: > Hi, > > this was a case with many applications in the past. And it is probably > going to return at any time. > > It would be fine to have some connectivity status override in > NetworkManager.conf > to be able to fake the connectivity status. It would also be nice to have an > option > *not* to automatically connect to any networks (perhaps we have this already, > but > I don't see it). > > These two could make any advanced user happy. For ordinary users, > NetworkManager should > be usable (and apps should be fixed for those who don't use NM).
I think there are cleaner solutions to this though, rather than an override. We're talking about those and hopefully will have plans for that soon, but I don't think we'll explicitly work around broken applications or require explicit user intervention like this case. This is open source; somebody needs to fix the apps, or things never get fixed. Dan > Pavel > > > ----- Original Message ----- > > From: "Dan Williams" <[email protected]> > > To: "Ross Vandegrift" <[email protected]> > > Cc: [email protected] > > Sent: Wednesday, July 25, 2012 1:00:24 AM > > Subject: Re: PATCH: Add stub mode > > > > On Thu, 2012-07-19 at 11:48 -0400, Ross Vandegrift wrote: > > > Hello all, > > > > > > My workstation's network setup is beyond the use-case that NM > > > covers, > > > and so NM doesn't have any interfaces to manage. I'd disable it, > > > but > > > an increasing number of apps refuse to do anything if NM doesn't > > > report > > > that we're online. I couldn't find a central way to disable this, > > > so I > > > implemented one. > > > > Those apps are buggy if they refuse to do anything, but > > NetworkManager > > isn't actually running. What apps are these? > > > > Dan > > > > > Stub mode forces reporting that we have global connectivity. It > > > must > > > be explicitly enabled by the user, and it doesn't interfere with > > > any > > > device management. > > > > > > Patch below is against 0.9.5.95 (772d03fa). It works well enough > > > to > > > get evolution, pidgin, iceweasel, etc to go ahead and do their > > > jobs. > > > > > > Ross > > > > > > > > > man/NetworkManager.conf.5.in | 5 +++++ > > > src/main.c | 5 ++++- > > > src/nm-config.c | 21 ++++++++++++++++++--- > > > src/nm-config.h | 2 ++ > > > src/nm-manager.c | 18 ++++++++++++++++++ > > > src/nm-manager.h | 1 + > > > 6 files changed, 48 insertions(+), 4 deletions(-) > > > > > > diff --git a/man/NetworkManager.conf.5.in > > > b/man/NetworkManager.conf.5.in > > > index 84b4d75..c53dc7d 100644 > > > --- a/man/NetworkManager.conf.5.in > > > +++ b/man/NetworkManager.conf.5.in > > > @@ -231,6 +231,11 @@ seconds. > > > .B response=\fI<response>\fP > > > If set controls what body content NetworkManager checks for when > > > requesting the > > > URI for connectivity checking. If missing, defaults to > > > "NetworkManager is online" > > > +.TP > > > +.B stub=\fI<true>\fP > > > +If set to true, NetworkManager will artificially force the network > > > state to > > > +appear globally connected. Only useful on systems where > > > connectivity is managed > > > +by some other means, but which also require using apps that rely > > > on NetworkManager. > > > .SH "SEE ALSO" > > > .BR http://live.gnome.org/NetworkManager/SystemSettings > > > .sp > > > diff --git a/src/main.c b/src/main.c > > > index e8ff2e4..aa83fee 100644 > > > --- a/src/main.c > > > +++ b/src/main.c > > > @@ -357,6 +357,7 @@ main (int argc, char *argv[]) > > > char *connectivity_uri = NULL; > > > gint connectivity_interval = -1; > > > char *connectivity_response = NULL; > > > + gboolean connectivity_stub = FALSE; > > > gboolean wifi_enabled = TRUE, net_enabled = TRUE, wwan_enabled = > > > TRUE, wimax_enabled = TRUE; > > > gboolean success, show_version = FALSE; > > > NMPolicy *policy = NULL; > > > @@ -393,6 +394,7 @@ main (int argc, char *argv[]) > > > { "connectivity-uri", 0, 0, G_OPTION_ARG_STRING, > > > &connectivity_uri, "A http(s) address to check internet > > > connectivity" }, > > > { "connectivity-interval", 0, 0, G_OPTION_ARG_INT, > > > &connectivity_interval, "the interval in seconds how often a > > > connectivity check will be done" }, > > > { "connectivity-response", 0, 0, G_OPTION_ARG_STRING, > > > &connectivity_response, "the expected start of the response" }, > > > + { "connectivity-stub", 0, 0, G_OPTION_ARG_NONE, > > > &connectivity_stub, _("Enable stub mode"), NULL }, > > > {NULL} > > > }; > > > > > > @@ -455,7 +457,7 @@ main (int argc, char *argv[]) > > > > > > /* Read the config file and CLI overrides */ > > > config = nm_config_new (config_path, plugins, log_level, > > > log_domains, > > > - connectivity_uri, connectivity_interval, > > > connectivity_response, &error); > > > + connectivity_uri, connectivity_interval, > > > connectivity_response, connectivity_stub, &error); > > > if (config == NULL) { > > > fprintf (stderr, _("Failed to read configuration: (%d) %s\n"), > > > error ? error->code : -1, > > > @@ -593,6 +595,7 @@ main (int argc, char *argv[]) > > > nm_config_get_connectivity_uri > > > (config), > > > nm_config_get_connectivity_interval > > > (config), > > > nm_config_get_connectivity_response > > > (config), > > > + nm_config_get_connectivity_stub > > > (config), > > > &error); > > > if (manager == NULL) { > > > nm_log_err (LOGD_CORE, "failed to initialize the network > > > manager: %s", > > > diff --git a/src/nm-config.c b/src/nm-config.c > > > index f64b8bd..7476fca 100644 > > > --- a/src/nm-config.c > > > +++ b/src/nm-config.c > > > @@ -37,6 +37,7 @@ struct NMConfig { > > > char *connectivity_uri; > > > guint connectivity_interval; > > > char *connectivity_response; > > > + gboolean connectivity_stub; > > > }; > > > > > > > > > /************************************************************************/ > > > @@ -124,6 +125,13 @@ nm_config_get_connectivity_response (NMConfig > > > *config) > > > return config->connectivity_response; > > > } > > > > > > +const gboolean > > > +nm_config_get_connectivity_stub (NMConfig *config) > > > +{ > > > + g_return_val_if_fail (config != NULL, -1); > > > + > > > + return config->connectivity_stub; > > > +} > > > > > > > > > /************************************************************************/ > > > > > > @@ -136,6 +144,7 @@ fill_from_file (NMConfig *config, > > > const char *cli_connectivity_uri, > > > const gint cli_connectivity_interval, > > > const char *cli_connectivity_response, > > > + const gboolean cli_connectivity_stub, > > > GError **error) > > > { > > > GKeyFile *kf; > > > @@ -191,6 +200,11 @@ fill_from_file (NMConfig *config, > > > else > > > config->connectivity_response = g_key_file_get_value > > > (kf, > > > "connectivity", "response", NULL); > > > > > > + if (cli_connectivity_stub) > > > + config->connectivity_stub = cli_connectivity_stub; > > > + else > > > + config->connectivity_stub = g_key_file_get_boolean (kf, > > > "connectivity", "stub", NULL); > > > + > > > success = TRUE; > > > } > > > > > > @@ -206,6 +220,7 @@ nm_config_new (const char *cli_config_path, > > > const char *cli_connectivity_uri, > > > const gint cli_connectivity_interval, > > > const char *cli_connectivity_response, > > > + const gboolean cli_connectivity_stub, > > > GError **error) > > > { > > > NMConfig *config; > > > @@ -216,7 +231,7 @@ nm_config_new (const char *cli_config_path, > > > if (cli_config_path) { > > > /* Bad user-specific config file path is a hard error */ > > > if (!fill_from_file (config, cli_config_path, cli_plugins, > > > cli_log_level, cli_log_domains, > > > - cli_connectivity_uri, > > > cli_connectivity_interval, cli_connectivity_response, > > > + cli_connectivity_uri, > > > cli_connectivity_interval, cli_connectivity_response, > > > cli_connectivity_stub, > > > error)) { > > > nm_config_free (config); > > > return NULL; > > > @@ -233,7 +248,7 @@ nm_config_new (const char *cli_config_path, > > > > > > /* Try deprecated nm-system-settings.conf first */ > > > if (fill_from_file (config, NM_OLD_SYSTEM_CONF_FILE, cli_plugins, > > > cli_log_level, cli_log_domains, > > > - cli_connectivity_uri, > > > cli_connectivity_interval, cli_connectivity_response, > > > + cli_connectivity_uri, > > > cli_connectivity_interval, cli_connectivity_response, > > > cli_connectivity_stub, > > > &local)) > > > return config; > > > > > > @@ -247,7 +262,7 @@ nm_config_new (const char *cli_config_path, > > > > > > /* Try the standard config file location next */ > > > if (fill_from_file (config, NM_DEFAULT_SYSTEM_CONF_FILE, > > > cli_plugins, cli_log_level, cli_log_domains, > > > - cli_connectivity_uri, > > > cli_connectivity_interval, cli_connectivity_response, > > > + cli_connectivity_uri, > > > cli_connectivity_interval, cli_connectivity_response, > > > cli_connectivity_stub, > > > &local)) > > > return config; > > > > > > diff --git a/src/nm-config.h b/src/nm-config.h > > > index 6c4206c..068af52 100644 > > > --- a/src/nm-config.h > > > +++ b/src/nm-config.h > > > @@ -41,6 +41,7 @@ NMConfig *nm_config_new (const char > > > *cli_config_path, > > > const char *cli_connectivity_check_uri, > > > const gint connectivity_check_interval, > > > const char > > > *cli_connectivity_check_response, > > > + const gboolean > > > cli_connectivity_stub, > > > GError **error); > > > > > > const char *nm_config_get_path (NMConfig *config); > > > @@ -52,6 +53,7 @@ const char *nm_config_get_log_domains (NMConfig > > > *config); > > > const char *nm_config_get_connectivity_uri (NMConfig *config); > > > const guint nm_config_get_connectivity_interval (NMConfig > > > *config); > > > const char *nm_config_get_connectivity_response (NMConfig > > > *config); > > > +const gboolean nm_config_get_connectivity_stub (NMConfig *config); > > > > > > void nm_config_free (NMConfig *config); > > > > > > diff --git a/src/nm-manager.c b/src/nm-manager.c > > > index f2816cd..af097e5 100644 > > > --- a/src/nm-manager.c > > > +++ b/src/nm-manager.c > > > @@ -215,6 +215,7 @@ typedef struct { > > > char *hostname; > > > > > > RadioState radio_states[RFKILL_TYPE_MAX]; > > > + gboolean stub; > > > gboolean sleeping; > > > gboolean net_enabled; > > > > > > @@ -343,6 +344,16 @@ nm_manager_get_device_by_master (NMManager > > > *manager, const char *master, const c > > > } > > > > > > static gboolean > > > +manager_stub (NMManager *self) > > > +{ > > > + NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self); > > > + > > > + if (priv->stub) > > > + return TRUE; > > > + return FALSE; > > > +} > > > + > > > +static gboolean > > > manager_sleeping (NMManager *self) > > > { > > > NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self); > > > @@ -433,6 +444,10 @@ nm_manager_update_state (NMManager *manager) > > > > > > if (manager_sleeping (manager)) > > > new_state = NM_STATE_ASLEEP; > > > + else if (manager_stub (manager)) { > > > + nm_log_info (LOGD_CORE, "stub mode enabled, forcing state to > > > connected."); > > > + new_state = NM_STATE_CONNECTED_GLOBAL; > > > + } > > > else { > > > for (iter = priv->devices; iter; iter = iter->next) { > > > NMDevice *dev = NM_DEVICE (iter->data); > > > @@ -3862,6 +3877,7 @@ nm_manager_new (NMSettings *settings, > > > const gchar *connectivity_uri, > > > gint connectivity_interval, > > > const gchar *connectivity_response, > > > + gboolean connectivity_stub, > > > GError **error) > > > { > > > NMManagerPrivate *priv; > > > @@ -3884,6 +3900,8 @@ nm_manager_new (NMSettings *settings, > > > G_CALLBACK (connectivity_changed), singleton); > > > #endif > > > > > > + priv->stub = connectivity_stub; > > > + > > > bus = nm_dbus_manager_get_connection (priv->dbus_mgr); > > > g_assert (bus); > > > dbus_connection = dbus_g_connection_get_connection (bus); > > > diff --git a/src/nm-manager.h b/src/nm-manager.h > > > index 58ba460..6bcbc85 100644 > > > --- a/src/nm-manager.h > > > +++ b/src/nm-manager.h > > > @@ -89,6 +89,7 @@ NMManager *nm_manager_new (NMSettings *settings, > > > const gchar *connectivity_uri, > > > gint connectivity_interval, > > > const gchar *connectivity_response, > > > + gboolean connectivity_stub, > > > GError **error); > > > > > > NMManager *nm_manager_get (void); > > > > > > _______________________________________________ > > > networkmanager-list mailing list > > > [email protected] > > > https://mail.gnome.org/mailman/listinfo/networkmanager-list > > > > > > _______________________________________________ > > networkmanager-list mailing list > > [email protected] > > https://mail.gnome.org/mailman/listinfo/networkmanager-list > > _______________________________________________ networkmanager-list mailing list [email protected] https://mail.gnome.org/mailman/listinfo/networkmanager-list
