goto done;
}
- connman_inet_add_host_route(element->index, data->gateway, NULL);
-
if (connman_inet_set_gateway_address(element->index, data->gateway) < 0)
return;
element->ipv4.gateway = g_strdup(gateway);
}
- service = __connman_element_get_service(element);
- __connman_service_indicate_state(service,
- CONNMAN_SERVICE_STATE_READY);
-
connman_element_set_enabled(element, TRUE);
active_gateway = find_active_gateway();
new_gateway = add_gateway(element->index, gateway);
+ service = __connman_element_get_service(element);
+
+ if (new_gateway) {
+ connman_inet_add_host_route(element->index,
+ new_gateway->gateway, NULL);
+ __connman_service_nameserver_add_routes(service,
+ new_gateway->gateway);
+ }
+
+ __connman_service_indicate_state(service, CONNMAN_SERVICE_STATE_READY);
if (service == NULL) {
new_gateway->vpn = TRUE;
DBG("element %p name %s", element, element->name);
service = __connman_element_get_service(element);
+ __connman_service_nameserver_del_routes(service);
__connman_service_indicate_state(service,
CONNMAN_SERVICE_STATE_DISCONNECT);
const char *nameserver);
void __connman_service_remove_nameserver(struct connman_service *service,
const char *nameserver);
+void __connman_service_nameserver_add_routes(struct connman_service *service,
+ const char *gw);
+void __connman_service_nameserver_del_routes(struct connman_service *service);
unsigned long __connman_service_stats_get_rx_packets(struct connman_service *service);
unsigned long __connman_service_stats_get_tx_packets(struct connman_service *service);
update_nameservers(service);
}
+void __connman_service_nameserver_add_routes(struct connman_service *service,
+ const char *gw)
+{
+ int index;
+
+ index = connman_network_get_index(service->network);
+
+ if (service->nameservers != NULL) {
+ int i;
+
+ for (i = 0; service->nameservers[i]; i++)
+ connman_inet_add_host_route(index,
+ service->nameservers[i], gw);
+ } else if (service->nameserver != NULL) {
+ connman_inet_add_host_route(index, service->nameserver, gw);
+ }
+}
+
+void __connman_service_nameserver_del_routes(struct connman_service *service)
+{
+ int index;
+
+ index = connman_network_get_index(service->network);
+
+ if (service->nameservers != NULL) {
+ int i;
+
+ for (i = 0; service->nameservers[i]; i++)
+ connman_inet_del_host_route(index,
+ service->nameservers[i]);
+ } else if (service->nameserver != NULL) {
+ connman_inet_del_host_route(index, service->nameserver);
+ }
+}
+
static void __connman_service_stats_start(struct connman_service *service)
{
DBG("service %p", service);