struct ifreq ifr;
struct rtentry rt;
struct sockaddr_in addr;
- int sk, err;
+ int sk, err = 0;
DBG("index %d host %s gateway %s netmask %s", index,
host, gateway, netmask);
sk = socket(PF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0);
- if (sk < 0)
- return -1;
+ if (sk < 0) {
+ err = -errno;
+ goto out;
+ }
memset(&ifr, 0, sizeof(ifr));
ifr.ifr_ifindex = index;
if (ioctl(sk, SIOCGIFNAME, &ifr) < 0) {
+ err = -errno;
close(sk);
- return -1;
+ goto out;
}
DBG("ifname %s", ifr.ifr_name);
rt.rt_dev = ifr.ifr_name;
- err = ioctl(sk, SIOCADDRT, &rt);
- if (err < 0)
- connman_error("Adding host route failed (%s)",
- strerror(errno));
+ if (ioctl(sk, SIOCADDRT, &rt) < 0 && errno != EEXIST)
+ err = -errno;
close(sk);
+out:
+ if (err < 0)
+ connman_error("Adding host route failed (%s)",
+ strerror(-err));
+
return err;
}
struct ifreq ifr;
struct rtentry rt;
struct sockaddr_in addr;
- int sk, err;
+ int sk, err = 0;
DBG("index %d host %s", index, host);
sk = socket(PF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0);
- if (sk < 0)
- return -1;
+ if (sk < 0) {
+ err = -errno;
+ goto out;
+ }
memset(&ifr, 0, sizeof(ifr));
ifr.ifr_ifindex = index;
if (ioctl(sk, SIOCGIFNAME, &ifr) < 0) {
+ err = -errno;
close(sk);
- return -1;
+ goto out;
}
DBG("ifname %s", ifr.ifr_name);
rt.rt_dev = ifr.ifr_name;
- err = ioctl(sk, SIOCDELRT, &rt);
- if (err < 0)
- connman_error("Deleting host route failed (%s)",
- strerror(errno));
+ if (ioctl(sk, SIOCDELRT, &rt) < 0 && errno != ESRCH)
+ err = -errno;
close(sk);
+out:
+ if (err < 0)
+ connman_error("Deleting host route failed (%s)",
+ strerror(-err));
+
return err;
}
unsigned char prefix_len)
{
struct in6_rtmsg rt;
- int sk, err;
+ int sk, err = 0;
DBG("index %d host %s", index, host);
rt.rtmsg_dst_len = prefix_len;
- err = inet_pton(AF_INET6, host, &rt.rtmsg_dst);
- if (err < 0)
+ if (inet_pton(AF_INET6, host, &rt.rtmsg_dst) < 0) {
+ err = -errno;
goto out;
+ }
rt.rtmsg_flags = RTF_UP | RTF_HOST;
sk = socket(AF_INET6, SOCK_DGRAM | SOCK_CLOEXEC, 0);
if (sk < 0) {
- err = -1;
+ err = -errno;
goto out;
}
- err = ioctl(sk, SIOCDELRT, &rt);
+ if (ioctl(sk, SIOCDELRT, &rt) < 0 && errno != ESRCH)
+ err = -errno;
+
close(sk);
+
out:
if (err < 0)
connman_error("Del IPv6 host route error (%s)",
- strerror(errno));
+ strerror(-err));
return err;
}
unsigned char prefix_len)
{
struct in6_rtmsg rt;
- int sk, err;
+ int sk, err = 0;
DBG("index %d host %s gateway %s", index, host, gateway);
rt.rtmsg_dst_len = prefix_len;
- err = inet_pton(AF_INET6, host, &rt.rtmsg_dst);
- if (err < 0)
+ if (inet_pton(AF_INET6, host, &rt.rtmsg_dst) < 0) {
+ err = -errno;
goto out;
+ }
rt.rtmsg_flags = RTF_UP | RTF_HOST;
sk = socket(AF_INET6, SOCK_DGRAM | SOCK_CLOEXEC, 0);
if (sk < 0) {
- err = -1;
+ err = -errno;
goto out;
}
- err = ioctl(sk, SIOCADDRT, &rt);
+ if (ioctl(sk, SIOCADDRT, &rt) < 0 && errno != EEXIST)
+ err = -errno;
+
close(sk);
+
out:
if (err < 0)
connman_error("Set IPv6 host route error (%s)",
- strerror(errno));
+ strerror(-err));
return err;
}
int connman_inet_set_ipv6_gateway_address(int index, const char *gateway)
{
struct in6_rtmsg rt;
- int sk, err;
+ int sk, err = 0;
DBG("index %d gateway %s", index, gateway);
memset(&rt, 0, sizeof(rt));
- err = inet_pton(AF_INET6, gateway, &rt.rtmsg_gateway);
- if (err < 0)
+ if (inet_pton(AF_INET6, gateway, &rt.rtmsg_gateway) < 0) {
+ err = -errno;
goto out;
+ }
rt.rtmsg_flags = RTF_UP | RTF_GATEWAY;
rt.rtmsg_metric = 1;
sk = socket(AF_INET6, SOCK_DGRAM | SOCK_CLOEXEC, 0);
if (sk < 0) {
- err = -1;
+ err = -errno;
goto out;
}
- err = ioctl(sk, SIOCADDRT, &rt);
+ if (ioctl(sk, SIOCADDRT, &rt) < 0 && errno != EEXIST)
+ err = -errno;
+
close(sk);
+
out:
if (err < 0)
connman_error("Set default IPv6 gateway error (%s)",
- strerror(errno));
+ strerror(-err));
return err;
}
int connman_inet_clear_ipv6_gateway_address(int index, const char *gateway)
{
struct in6_rtmsg rt;
- int sk, err;
+ int sk, err = 0;
DBG("index %d gateway %s", index, gateway);
memset(&rt, 0, sizeof(rt));
- err = inet_pton(AF_INET6, gateway, &rt.rtmsg_gateway);
- if (err < 0)
+ if (inet_pton(AF_INET6, gateway, &rt.rtmsg_gateway) < 0) {
+ err = -errno;
goto out;
+ }
rt.rtmsg_flags = RTF_UP | RTF_GATEWAY;
rt.rtmsg_metric = 1;
sk = socket(AF_INET6, SOCK_DGRAM | SOCK_CLOEXEC, 0);
if (sk < 0) {
- err = -1;
+ err = -errno;
goto out;
}
- err = ioctl(sk, SIOCDELRT, &rt);
+ if (ioctl(sk, SIOCDELRT, &rt) < 0 && errno != ESRCH)
+ err = -errno;
+
close(sk);
+
out:
if (err < 0)
connman_error("Clear default IPv6 gateway error (%s)",
- strerror(errno));
+ strerror(-err));
return err;
}
struct ifreq ifr;
struct rtentry rt;
struct sockaddr_in addr;
- int sk, err;
+ int sk, err = 0;
DBG("index %d gateway %s", index, gateway);
sk = socket(PF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0);
- if (sk < 0)
- return -1;
+ if (sk < 0) {
+ err = -errno;
+ goto out;
+ }
memset(&ifr, 0, sizeof(ifr));
ifr.ifr_ifindex = index;
if (ioctl(sk, SIOCGIFNAME, &ifr) < 0) {
+ err = -errno;
close(sk);
- return -1;
+ goto out;
}
DBG("ifname %s", ifr.ifr_name);
addr.sin_addr.s_addr = INADDR_ANY;
memcpy(&rt.rt_genmask, &addr, sizeof(rt.rt_genmask));
- err = ioctl(sk, SIOCADDRT, &rt);
- if (err < 0)
- connman_error("Setting default gateway route failed (%s)",
- strerror(errno));
+ if (ioctl(sk, SIOCADDRT, &rt) < 0 && errno != EEXIST)
+ err = -errno;
close(sk);
+out:
+ if (err < 0)
+ connman_error("Setting default gateway route failed (%s)",
+ strerror(-err));
+
return err;
}
struct ifreq ifr;
struct rtentry rt;
struct sockaddr_in addr;
- int sk, err;
+ int sk, err = 0;
DBG("index %d", index);
sk = socket(PF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0);
- if (sk < 0)
- return -1;
+ if (sk < 0) {
+ err = -errno;
+ goto out;
+ }
memset(&ifr, 0, sizeof(ifr));
ifr.ifr_ifindex = index;
if (ioctl(sk, SIOCGIFNAME, &ifr) < 0) {
+ err = -errno;
close(sk);
- return -1;
+ goto out;
}
DBG("ifname %s", ifr.ifr_name);
rt.rt_dev = ifr.ifr_name;
- err = ioctl(sk, SIOCADDRT, &rt);
+ if (ioctl(sk, SIOCADDRT, &rt) < 0 && errno != EEXIST)
+ err = -errno;
+
+ close(sk);
+
+out:
if (err < 0)
connman_error("Setting default interface route failed (%s)",
- strerror(errno));
- close(sk);
+ strerror(-err));
return err;
}
struct rtentry rt;
struct sockaddr_in6 addr;
const struct in6_addr any = IN6ADDR_ANY_INIT;
- int sk, err;
+ int sk, err = 0;
DBG("index %d", index);
sk = socket(PF_INET6, SOCK_DGRAM | SOCK_CLOEXEC, 0);
- if (sk < 0)
- return -1;
+ if (sk < 0) {
+ err = -errno;
+ goto out;
+ }
memset(&ifr, 0, sizeof(ifr));
ifr.ifr_ifindex = index;
if (ioctl(sk, SIOCGIFNAME, &ifr) < 0) {
+ err = -errno;
close(sk);
- return -1;
+ goto out;
}
DBG("ifname %s", ifr.ifr_name);
rt.rt_dev = ifr.ifr_name;
- err = ioctl(sk, SIOCADDRT, &rt);
+ if (ioctl(sk, SIOCADDRT, &rt) < 0 && errno != EEXIST)
+ err = -errno;
+
+ close(sk);
+
+out:
if (err < 0)
connman_error("Setting default interface route failed (%s)",
- strerror(errno));
- close(sk);
+ strerror(-err));
return err;
}
struct ifreq ifr;
struct rtentry rt;
struct sockaddr_in addr;
- int sk, err;
+ int sk, err = 0;
DBG("index %d gateway %s", index, gateway);
sk = socket(PF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0);
- if (sk < 0)
- return -1;
+ if (sk < 0) {
+ err = -errno;
+ goto out;
+ }
memset(&ifr, 0, sizeof(ifr));
ifr.ifr_ifindex = index;
if (ioctl(sk, SIOCGIFNAME, &ifr) < 0) {
+ err = -errno;
close(sk);
- return -1;
+ goto out;
}
DBG("ifname %s", ifr.ifr_name);
addr.sin_addr.s_addr = INADDR_ANY;
memcpy(&rt.rt_genmask, &addr, sizeof(rt.rt_genmask));
- err = ioctl(sk, SIOCDELRT, &rt);
- if (err < 0)
- connman_error("Removing default gateway route failed (%s)",
- strerror(errno));
+ if (ioctl(sk, SIOCDELRT, &rt) < 0 && errno != ESRCH)
+ err = -errno;
close(sk);
+out:
+ if (err < 0)
+ connman_error("Removing default gateway route failed (%s)",
+ strerror(-err));
+
return err;
}
struct ifreq ifr;
struct rtentry rt;
struct sockaddr_in addr;
- int sk, err;
+ int sk, err = 0;
DBG("index %d", index);
sk = socket(PF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0);
- if (sk < 0)
- return -1;
+ if (sk < 0) {
+ err = -errno;
+ goto out;
+ }
memset(&ifr, 0, sizeof(ifr));
ifr.ifr_ifindex = index;
if (ioctl(sk, SIOCGIFNAME, &ifr) < 0) {
+ err = -errno;
close(sk);
- return -1;
+ goto out;
}
DBG("ifname %s", ifr.ifr_name);
rt.rt_dev = ifr.ifr_name;
- err = ioctl(sk, SIOCDELRT, &rt);
+ if (ioctl(sk, SIOCDELRT, &rt) < 0 && errno != ESRCH)
+ err = -errno;
+
+ close(sk);
+
+out:
if (err < 0)
connman_error("Removing default interface route failed (%s)",
- strerror(errno));
- close(sk);
+ strerror(-err));
return err;
}
struct rtentry rt;
struct sockaddr_in6 addr;
const struct in6_addr any = IN6ADDR_ANY_INIT;
- int sk, err;
+ int sk, err = 0;
DBG("index %d", index);
sk = socket(PF_INET6, SOCK_DGRAM | SOCK_CLOEXEC, 0);
- if (sk < 0)
- return -1;
+ if (sk < 0) {
+ err = -errno;
+ goto out;
+ }
memset(&ifr, 0, sizeof(ifr));
ifr.ifr_ifindex = index;
if (ioctl(sk, SIOCGIFNAME, &ifr) < 0) {
+ err = -errno;
close(sk);
- return -1;
+ goto out;
}
DBG("ifname %s", ifr.ifr_name);
rt.rt_dev = ifr.ifr_name;
- err = ioctl(sk, SIOCDELRT, &rt);
+ if (ioctl(sk, SIOCDELRT, &rt) < 0 && errno != ESRCH)
+ err = -errno;
+
+ close(sk);
+
+out:
if (err < 0)
connman_error("Removing default interface route failed (%s)",
- strerror(errno));
- close(sk);
+ strerror(-err));
return err;
}