---
src/connman.h | 2 ++
src/inet.c | 37 +++++++++++++++++++++++++++++++++++++
2 files changed, 39 insertions(+)
diff --git a/src/connman.h b/src/connman.h
index cb7a115..adeaf8c 100644
--- a/src/connman.h
+++ b/src/connman.h
@@ -223,6 +223,8 @@ int __connman_inet_add_fwmark_rule(uint32_t table_id, int
family, uint32_t fwmar
int __connman_inet_del_fwmark_rule(uint32_t table_id, int family, uint32_t
fwmark);
int __connman_inet_add_default_to_table(uint32_t table_id, int ifindex, const
char *gateway);
int __connman_inet_del_default_from_table(uint32_t table_id, int ifindex,
const char *gateway);
+int __connman_inet_get_address_netmask(int ifindex,
+ struct sockaddr_in *address, struct sockaddr_in *netmask);
#include <connman/resolver.h>
diff --git a/src/inet.c b/src/inet.c
index 458d916..90ec5f7 100644
--- a/src/inet.c
+++ b/src/inet.c
@@ -2977,3 +2977,40 @@ out:
freeifaddrs(ifaddr);
return err;
}
+
+int __connman_inet_get_address_netmask(int ifindex,
+ struct sockaddr_in *address,
+ struct sockaddr_in *netmask)
+{
+ int sk, ret = -EINVAL;
+ struct ifreq ifr;
+
+ DBG("index %d", ifindex);
+
+ sk = socket(PF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0);
+ if (sk < 0)
+ return -EINVAL;
+
+ memset(&ifr, 0, sizeof(ifr));
+ ifr.ifr_ifindex = ifindex;
+
+ if (ioctl(sk, SIOCGIFNAME, &ifr) < 0)
+ goto out;
+
+ if (ioctl(sk, SIOCGIFNETMASK, &ifr) < 0)
+ goto out;
+
+ memcpy(netmask, (struct sockaddr_in *)&ifr.ifr_netmask,
+ sizeof(struct sockaddr_in));
+
+ if (ioctl(sk, SIOCGIFADDR, &ifr) < 0)
+ goto out;
+
+ memcpy(address, (struct sockaddr_in *)&ifr.ifr_addr,
+ sizeof(struct sockaddr_in));
+ ret = 0;
+
+out:
+ close(sk);
+ return ret;
+}
--
1.7.11.7
_______________________________________________
connman mailing list
[email protected]
https://lists.connman.net/mailman/listinfo/connman