DBG("ifname %s", ifr.ifr_name);
memset(&rt, 0, sizeof(rt));
+ rt.rt_flags = RTF_UP | RTF_HOST;
+
+ addr = (struct sockaddr_in *) &rt.rt_dst;
+ addr->sin_family = AF_INET;
+ addr->sin_addr.s_addr = inet_addr(gateway);
+
+ addr = (struct sockaddr_in *) &rt.rt_gateway;
+ addr->sin_family = AF_INET;
+ addr->sin_addr.s_addr = INADDR_ANY;
+
+ addr = (struct sockaddr_in *) &rt.rt_genmask;
+ addr->sin_family = AF_INET;
+ addr->sin_addr.s_addr = INADDR_ANY;
+
+ rt.rt_dev = ifr.ifr_name;
+
+ err = ioctl(sk, SIOCADDRT, &rt);
+ if (err < 0)
+ connman_error("Setting host gateway route failed (%s)",
+ strerror(errno));
+
+ memset(&rt, 0, sizeof(rt));
rt.rt_flags = RTF_UP | RTF_GATEWAY;
addr = (struct sockaddr_in *) &rt.rt_dst;
err = ioctl(sk, SIOCADDRT, &rt);
if (err < 0)
- DBG("default route setting failed (%s)", strerror(errno));
+ connman_error("Setting default route failed (%s)",
+ strerror(errno));
close(sk);
err = ioctl(sk, SIOCDELRT, &rt);
if (err < 0)
- DBG("default route removal failed (%s)", strerror(errno));
+ connman_error("Removing default route failed (%s)",
+ strerror(errno));
close(sk);
static void new_default(struct connman_element *element, gpointer user_data)
{
+ struct connman_service *service;
const char *gateway;
DBG("element %p name %s", element, element->name);
if (gateway == NULL)
return;
- set_route(element, gateway);
+ if (set_route(element, gateway) < 0)
+ return;
+
+ service = __connman_element_get_service(element);
+ __connman_service_indicate_default(service);
connman_element_set_enabled(element, TRUE);
emit_default_signal(element);
return -ENODEV;
service = __connman_element_get_service(element);
- __connman_service_ready(service);
+ __connman_service_indicate_state(service,
+ CONNMAN_SERVICE_STATE_READY);
if (gateway == NULL)
return 0;
return 0;
}
- set_route(element, gateway);
+ if (set_route(element, gateway) < 0)
+ return 0;
done:
+ service = __connman_element_get_service(element);
+ __connman_service_indicate_default(service);
+
connman_element_set_enabled(element, TRUE);
emit_default_signal(element);
DBG("element %p name %s", element, element->name);
service = __connman_element_get_service(element);
- __connman_service_disconnect(service);
+ __connman_service_indicate_state(service,
+ CONNMAN_SERVICE_STATE_DISCONNECT);
unregister_interface(element);