connman brings down managed interfaces at startup. Sometimes it's unnecessary
or even harmful. DontBringDownAtStartup list in main.conf allows to make
exceptions for some interfaces.
---
src/device.c | 21 +++++++++++++++++++++
src/main.c | 17 +++++++++++++++++
2 files changed, 38 insertions(+)
diff --git a/src/device.c b/src/device.c
index c0683ab..03eac39 100644
--- a/src/device.c
+++ b/src/device.c
@@ -1367,6 +1367,24 @@ list:
return false;
}
+static bool can_bring_down(const char *devname)
+{
+ char **pattern =
+ connman_setting_get_string_list("DontBringDownAtStartup");
+
+ if (pattern) {
+ while (*pattern) {
+ if (g_str_has_prefix(devname, *pattern++)) {
+ DBG("%s no", devname);
+ return false;
+ }
+ }
+ }
+
+ DBG("%s yes", devname);
+ return true;
+}
+
static void cleanup_devices(void)
{
/*
@@ -1399,6 +1417,9 @@ static void cleanup_devices(void)
if (filtered)
continue;
+ if (!can_bring_down(interfaces[i]))
+ continue;
+
index = connman_inet_ifindex(interfaces[i]);
if (index < 0)
continue;
diff --git a/src/main.c b/src/main.c
index 1c17991..52209f4 100644
--- a/src/main.c
+++ b/src/main.c
@@ -73,6 +73,7 @@ static struct {
bool single_tech;
char **tethering_technologies;
bool persistent_tethering_mode;
+ char **dont_bring_down_at_startup;
} connman_settings = {
.bg_scan = true,
.pref_timeservers = NULL,
@@ -86,6 +87,7 @@ static struct {
.single_tech = false,
.tethering_technologies = NULL,
.persistent_tethering_mode = false,
+ .dont_bring_down_at_startup = NULL,
};
#define CONF_BG_SCAN "BackgroundScanning"
@@ -100,6 +102,7 @@ static struct {
#define CONF_SINGLE_TECH "SingleConnectedTechnology"
#define CONF_TETHERING_TECHNOLOGIES "TetheringTechnologies"
#define CONF_PERSISTENT_TETHERING_MODE "PersistentTetheringMode"
+#define CONF_DONT_BRING_DOWN_AT_STARTUP "DontBringDownAtStartup"
static const char *supported_options[] = {
CONF_BG_SCAN,
@@ -114,6 +117,7 @@ static const char *supported_options[] = {
CONF_SINGLE_TECH,
CONF_TETHERING_TECHNOLOGIES,
CONF_PERSISTENT_TETHERING_MODE,
+ CONF_DONT_BRING_DOWN_AT_STARTUP,
NULL
};
@@ -236,6 +240,7 @@ static void parse_config(GKeyFile *config)
char **interfaces;
char **str_list;
char **tethering;
+ char **dontbringdown;
gsize len;
int timeout;
@@ -347,6 +352,14 @@ static void parse_config(GKeyFile *config)
g_clear_error(&error);
+ dontbringdown = __connman_config_get_string_list(config, "General",
+ CONF_DONT_BRING_DOWN_AT_STARTUP, &len, &error);
+
+ if (!error)
+ connman_settings.dont_bring_down_at_startup = dontbringdown;
+
+ g_clear_error(&error);
+
boolean = __connman_config_get_bool(config, "General",
CONF_PERSISTENT_TETHERING_MODE,
&error);
@@ -545,6 +558,9 @@ char **connman_setting_get_string_list(const char *key)
if (g_str_equal(key, CONF_TETHERING_TECHNOLOGIES))
return connman_settings.tethering_technologies;
+ if (g_str_equal(key, CONF_DONT_BRING_DOWN_AT_STARTUP))
+ return connman_settings.dont_bring_down_at_startup;
+
return NULL;
}
@@ -747,6 +763,7 @@ int main(int argc, char *argv[])
g_strfreev(connman_settings.fallback_nameservers);
g_strfreev(connman_settings.blacklisted_interfaces);
g_strfreev(connman_settings.tethering_technologies);
+ g_strfreev(connman_settings.dont_bring_down_at_startup);
g_free(option_debug);
g_free(option_wifi);
--
1.8.3.2
_______________________________________________
connman mailing list
[email protected]
https://lists.connman.net/mailman/listinfo/connman