summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ipconfig.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/ipconfig.c b/src/ipconfig.c
index 0a7eb8bc..2b60e2df 100644
--- a/src/ipconfig.c
+++ b/src/ipconfig.c
@@ -707,6 +707,7 @@ void __connman_ipconfig_newroute(int index, int family, unsigned char scope,
if (scope == 0 && g_strcmp0(dst, "0.0.0.0") == 0) {
GSList *list;
+ GList *config_list;
if (family == AF_INET6) {
g_free(ipdevice->ipv6_gateway);
@@ -728,6 +729,20 @@ void __connman_ipconfig_newroute(int index, int family, unsigned char scope,
g_free(ipaddress->gateway);
ipaddress->gateway = g_strdup(gateway);
}
+
+ for (config_list = g_list_first(ipconfig_list); config_list;
+ config_list = g_list_next(config_list)) {
+ struct connman_ipconfig *ipconfig = config_list->data;
+
+ if (index != ipconfig->index)
+ continue;
+
+ if (ipconfig->ops == NULL)
+ continue;
+
+ if (ipconfig->ops->ip_bound)
+ ipconfig->ops->ip_bound(ipconfig);
+ }
}
connman_info("%s {add} route %s gw %s scope %u <%s>",
@@ -748,6 +763,7 @@ void __connman_ipconfig_delroute(int index, int family, unsigned char scope,
if (scope == 0 && g_strcmp0(dst, "0.0.0.0") == 0) {
GSList *list;
+ GList *config_list;
if (family == AF_INET6) {
g_free(ipdevice->ipv6_gateway);
@@ -769,6 +785,20 @@ void __connman_ipconfig_delroute(int index, int family, unsigned char scope,
g_free(ipaddress->gateway);
ipaddress->gateway = NULL;
}
+
+ for (config_list = g_list_first(ipconfig_list); config_list;
+ config_list = g_list_next(config_list)) {
+ struct connman_ipconfig *ipconfig = config_list->data;
+
+ if (index != ipconfig->index)
+ continue;
+
+ if (ipconfig->ops == NULL)
+ continue;
+
+ if (ipconfig->ops->ip_release)
+ ipconfig->ops->ip_release(ipconfig);
+ }
}
connman_info("%s {del} route %s gw %s scope %u <%s>",