summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Härdeman2025-11-18 07:55:41 +0000
committerÁlvaro Fernández Rojas2025-11-27 07:24:02 +0000
commitfca3fee38ea48843f277e26624e9555d8b74edc5 (patch)
tree407da42e5e25769a76c7cc919f266d46aa3a15d6
parente8022eebc8a7d4c85d763e2121b98d98989e9263 (diff)
downloadodhcpd-fca3fee38ea48843f277e26624e9555d8b74edc5.tar.gz
netlink: add netmask for IPv4
Add a netmask member to struct odhcpd_ipaddr, this is mostly for convenience. Signed-off-by: David Härdeman <david@hardeman.nu> Link: https://github.com/openwrt/odhcpd/pull/320 Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
-rw-r--r--src/netlink.c3
-rw-r--r--src/odhcpd.h1
2 files changed, 4 insertions, 0 deletions
diff --git a/src/netlink.c b/src/netlink.c
index d09e3f8..c07a9e4 100644
--- a/src/netlink.c
+++ b/src/netlink.c
@@ -571,6 +571,9 @@ static int cb_addr_valid(struct nl_msg *msg, void *arg)
memset(&oaddrs[ctxt->ret], 0, sizeof(oaddrs[ctxt->ret]));
oaddrs[ctxt->ret].prefix_len = ifa->ifa_prefixlen;
+ if (ifa->ifa_family == AF_INET)
+ oaddrs[ctxt->ret].netmask = htonl(~((1U << (32 - ifa->ifa_prefixlen)) - 1));
+
nla_memcpy(&oaddrs[ctxt->ret].addr, nla_addr, sizeof(oaddrs[ctxt->ret].addr));
if (nla[IFA_BROADCAST])
diff --git a/src/odhcpd.h b/src/odhcpd.h
index e708f34..88135f1 100644
--- a/src/odhcpd.h
+++ b/src/odhcpd.h
@@ -176,6 +176,7 @@ struct odhcpd_ipaddr {
/* IPv4 only */
struct {
struct in_addr broadcast;
+ in_addr_t netmask;
};
};
};