summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Härdeman2025-11-17 22:37:50 +0000
committerÁlvaro Fernández Rojas2025-11-27 07:23:45 +0000
commit66e7739f7c86a45cb9da06affb26ef951b0649e5 (patch)
tree3329c359f3cadb288580e2564a223077ee2d77e1
parent407789e5f307d1e84b5e5a89b6da1e27fb6662c2 (diff)
odhcpd: rename prefix -> prefix_len
Change a bunch of places where a prefix length is stored as "prefix" to instead call the length "prefix_len", to make it clearer that it is not a prefix that is stored. 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/dhcpv4.c8
-rw-r--r--src/dhcpv6-ia.c28
-rw-r--r--src/dhcpv6-ia.h4
-rw-r--r--src/dhcpv6.h2
-rw-r--r--src/netlink.c19
-rw-r--r--src/odhcpd.c2
-rw-r--r--src/odhcpd.h6
-rw-r--r--src/router.c63
8 files changed, 68 insertions, 64 deletions
diff --git a/src/dhcpv4.c b/src/dhcpv4.c
index 4178b58..78d7c65 100644
--- a/src/dhcpv4.c
+++ b/src/dhcpv4.c
@@ -1373,7 +1373,7 @@ static int dhcpv4_setup_addresses(struct interface *iface)
if (addr_is_fr_ip(iface, addr))
continue;
- odhcpd_bitlen2netmask(false, iface->addr4[i].prefix, &mask);
+ odhcpd_bitlen2netmask(false, iface->addr4[i].prefix_len, &mask);
if ((start & ntohl(~mask.s_addr)) == start &&
(end & ntohl(~mask.s_addr)) == end &&
end < ntohl(~mask.s_addr)) { /* Exclude broadcast address */
@@ -1389,7 +1389,7 @@ static int dhcpv4_setup_addresses(struct interface *iface)
}
/* Don't allocate IP range for subnets smaller than /28 */
- if (iface->addr4[0].prefix > MAX_PREFIX_LEN) {
+ if (iface->addr4[0].prefix_len > MAX_PREFIX_LEN) {
warn("Auto allocation of DHCP range fails on %s (prefix length must be < %d).",
iface->name, MAX_PREFIX_LEN + 1);
return -1;
@@ -1397,7 +1397,7 @@ static int dhcpv4_setup_addresses(struct interface *iface)
iface->dhcpv4_local = iface->addr4[0].addr.in;
iface->dhcpv4_bcast = iface->addr4[0].broadcast;
- odhcpd_bitlen2netmask(false, iface->addr4[0].prefix, &iface->dhcpv4_mask);
+ odhcpd_bitlen2netmask(false, iface->addr4[0].prefix_len, &iface->dhcpv4_mask);
end = start = iface->dhcpv4_local.s_addr & iface->dhcpv4_mask.s_addr;
/* Auto allocate ranges */
@@ -1555,7 +1555,7 @@ static void dhcpv4_addrlist_change(struct interface *iface)
memset(&ip, 0, sizeof(ip));
ip.addr.in = iface->dhcpv4_local;
- ip.prefix = odhcpd_netmask2bitlen(false, &iface->dhcpv4_mask);
+ ip.prefix_len = odhcpd_netmask2bitlen(false, &iface->dhcpv4_mask);
ip.broadcast = iface->dhcpv4_bcast;
dhcpv4_setup_addresses(iface);
diff --git a/src/dhcpv6-ia.c b/src/dhcpv6-ia.c
index dd46a14..b884f9a 100644
--- a/src/dhcpv6-ia.c
+++ b/src/dhcpv6-ia.c
@@ -271,7 +271,7 @@ static void in6_copy_iid(struct in6_addr *dest, uint64_t iid, unsigned n)
struct in6_addr in6_from_prefix_and_iid(const struct odhcpd_ipaddr *prefix, uint64_t iid)
{
struct in6_addr addr;
- uint8_t iid_len = min(128 - prefix->prefix, 64);
+ uint8_t iid_len = min(128 - prefix->prefix_len, 64);
addr = prefix->addr.in6;
in6_copy_iid(&addr, iid, iid_len);
@@ -321,9 +321,9 @@ static void set_border_assignment_size(struct interface *iface, struct dhcpv6_le
continue;
if (addr->preferred_lt > (uint32_t)now &&
- addr->prefix < 64 &&
- addr->prefix > minprefix)
- minprefix = addr->prefix;
+ addr->prefix_len < 64 &&
+ addr->prefix_len > minprefix)
+ minprefix = addr->prefix_len;
}
if (minprefix > 32 && minprefix <= 64)
@@ -664,14 +664,14 @@ static size_t build_ia(uint8_t *buf, size_t buflen, uint16_t status,
.len = htons(sizeof(o_ia_p) - 4),
.preferred_lt = htonl(prefix_preferred_lt),
.valid_lt = htonl(prefix_valid_lt),
- .prefix = a->length,
+ .prefix_len = a->length,
.addr = addrs[i].addr.in6,
};
o_ia_p.addr.s6_addr32[1] |= htonl(a->assigned_subnet_id);
o_ia_p.addr.s6_addr32[2] = o_ia_p.addr.s6_addr32[3] = 0;
- if (!valid_prefix_length(a, addrs[i].prefix))
+ if (!valid_prefix_length(a, addrs[i].prefix_len))
continue;
if (buflen < ia_len + sizeof(o_ia_p))
@@ -751,7 +751,7 @@ static size_t build_ia(uint8_t *buf, size_t buflen, uint16_t status,
if (!valid_addr(&addrs[i], now))
continue;
- if (!valid_prefix_length(a, addrs[i].prefix))
+ if (!valid_prefix_length(a, addrs[i].prefix_len))
continue;
if (ADDR_MATCH_PIO_FILTER(&addrs[i], iface))
@@ -763,7 +763,7 @@ static size_t build_ia(uint8_t *buf, size_t buflen, uint16_t status,
addr.s6_addr32[2] = addr.s6_addr32[3] = 0;
if (!memcmp(&ia_p->addr, &addr, sizeof(addr)) &&
- ia_p->prefix == a->length)
+ ia_p->prefix_len == a->length)
found = true;
} else {
addr = in6_from_prefix_and_iid(&addrs[i], a->assigned_host_id);
@@ -781,7 +781,7 @@ static size_t build_ia(uint8_t *buf, size_t buflen, uint16_t status,
.len = htons(sizeof(o_ia_p) - 4),
.preferred_lt = 0,
.valid_lt = 0,
- .prefix = ia_p->prefix,
+ .prefix_len = ia_p->prefix_len,
.addr = ia_p->addr,
};
@@ -920,11 +920,11 @@ static bool dhcpv6_ia_on_link(const struct dhcpv6_ia_hdr *ia, struct dhcpv6_leas
continue;
if (ia->type == htons(DHCPV6_OPT_IA_PD)) {
- if (p->prefix < addrs[i].prefix ||
- odhcpd_bmemcmp(&p->addr, &addrs[i].addr.in6, addrs[i].prefix))
+ if (p->prefix_len < addrs[i].prefix_len ||
+ odhcpd_bmemcmp(&p->addr, &addrs[i].addr.in6, addrs[i].prefix_len))
continue;
- } else if (odhcpd_bmemcmp(&n->addr, &addrs[i].addr.in6, addrs[i].prefix))
+ } else if (odhcpd_bmemcmp(&n->addr, &addrs[i].addr.in6, addrs[i].prefix_len))
continue;
onlink = true;
@@ -1007,8 +1007,8 @@ ssize_t dhcpv6_ia_handle_IAs(uint8_t *buf, size_t buflen, struct interface *ifac
continue;
struct dhcpv6_ia_prefix *p = (struct dhcpv6_ia_prefix*)&sdata[-4];
- if (p->prefix) {
- reqlen = p->prefix;
+ if (p->prefix_len) {
+ reqlen = p->prefix_len;
reqhint = ntohl(p->addr.s6_addr32[1]);
if (reqlen > 32 && reqlen <= 64)
reqhint &= (1U << (64 - reqlen)) - 1;
diff --git a/src/dhcpv6-ia.h b/src/dhcpv6-ia.h
index c75195b..28bc9c0 100644
--- a/src/dhcpv6-ia.h
+++ b/src/dhcpv6-ia.h
@@ -19,7 +19,7 @@
#define ADDR_ENTRY_VALID_IA_ADDR(iface, i, m, addrs) \
((iface)->dhcpv6_assignall || \
(i) == (m) || \
- (addrs)[(i)].prefix > 64)
+ (addrs)[(i)].prefix_len > 64)
size_t get_preferred_addr(const struct odhcpd_ipaddr *addrs, const size_t addrlen);
@@ -32,7 +32,7 @@ static inline bool valid_prefix_length(const struct dhcpv6_lease *a, const uint8
static inline bool valid_addr(const struct odhcpd_ipaddr *addr, time_t now)
{
- return (addr->prefix <= 96 && addr->valid_lt > (uint32_t)now && addr->preferred_lt > (uint32_t)now);
+ return (addr->prefix_len <= 96 && addr->valid_lt > (uint32_t)now && addr->preferred_lt > (uint32_t)now);
}
#endif /* _DHCPV6_IA_H_ */
diff --git a/src/dhcpv6.h b/src/dhcpv6.h
index a2b08c6..0a7628c 100644
--- a/src/dhcpv6.h
+++ b/src/dhcpv6.h
@@ -146,7 +146,7 @@ struct dhcpv6_ia_prefix {
uint16_t len;
uint32_t preferred_lt;
uint32_t valid_lt;
- uint8_t prefix;
+ uint8_t prefix_len;
struct in6_addr addr;
} _o_packed;
diff --git a/src/netlink.c b/src/netlink.c
index 48e27d0..5396971 100644
--- a/src/netlink.c
+++ b/src/netlink.c
@@ -204,7 +204,7 @@ static void refresh_iface_addr6(int ifindex)
change = len != (ssize_t)iface->addr6_len;
for (ssize_t i = 0; !change && i < len; ++i) {
if (!IN6_ARE_ADDR_EQUAL(&addr[i].addr.in6, &iface->addr6[i].addr.in6) ||
- addr[i].prefix != iface->addr6[i].prefix ||
+ addr[i].prefix_len != iface->addr6[i].prefix_len ||
(addr[i].preferred_lt > (uint32_t)now) != (iface->addr6[i].preferred_lt > (uint32_t)now) ||
addr[i].valid_lt < iface->addr6[i].valid_lt || addr[i].preferred_lt < iface->addr6[i].preferred_lt)
change = true;
@@ -569,7 +569,7 @@ static int cb_addr_valid(struct nl_msg *msg, void *arg)
return NL_SKIP;
memset(&addrs[ctxt->ret], 0, sizeof(addrs[ctxt->ret]));
- addrs[ctxt->ret].prefix = ifa->ifa_prefixlen;
+ addrs[ctxt->ret].prefix_len = ifa->ifa_prefixlen;
nla_memcpy(&addrs[ctxt->ret].addr, nla_addr,
sizeof(addrs[ctxt->ret].addr));
@@ -624,15 +624,14 @@ static int cb_addr_error(_o_unused struct sockaddr_nl *nla, struct nlmsgerr *err
static int prefix_cmp(const void *va, const void *vb)
{
const struct odhcpd_ipaddr *a = va, *b = vb;
- int ret = 0;
- if (a->prefix == b->prefix) {
- ret = (ntohl(a->addr.in.s_addr) < ntohl(b->addr.in.s_addr)) ? 1 :
- (ntohl(a->addr.in.s_addr) > ntohl(b->addr.in.s_addr)) ? -1 : 0;
- } else
- ret = a->prefix < b->prefix ? 1 : -1;
+ if (a->prefix_len != b->prefix_len)
+ return a->prefix_len < b->prefix_len ? 1 : -1;
- return ret;
+ if (ntohl(a->addr.in.s_addr) == ntohl(b->addr.in.s_addr))
+ return 0;
+
+ return ntohl(a->addr.in.s_addr) < ntohl(b->addr.in.s_addr) ? 1 : -1;
}
@@ -1037,7 +1036,7 @@ int netlink_setup_addr(struct odhcpd_ipaddr *addr,
struct nl_msg *msg;
struct ifaddrmsg ifa = {
.ifa_family = v6 ? AF_INET6 : AF_INET,
- .ifa_prefixlen = addr->prefix,
+ .ifa_prefixlen = addr->prefix_len,
.ifa_flags = 0,
.ifa_scope = 0,
.ifa_index = ifindex, };
diff --git a/src/odhcpd.c b/src/odhcpd.c
index f67e419..c6bfbc9 100644
--- a/src/odhcpd.c
+++ b/src/odhcpd.c
@@ -695,7 +695,7 @@ void odhcpd_enum_addr6(struct interface *iface, struct dhcpv6_lease *lease,
addr = in6_from_prefix_and_iid(&addrs[i], lease->assigned_host_id);
} else {
- if (!valid_prefix_length(lease, addrs[i].prefix))
+ if (!valid_prefix_length(lease, addrs[i].prefix_len))
continue;
addr = addrs[i].addr.in6;
diff --git a/src/odhcpd.h b/src/odhcpd.h
index b706831..c1a31b6 100644
--- a/src/odhcpd.h
+++ b/src/odhcpd.h
@@ -85,7 +85,7 @@
#define ADDR_MATCH_PIO_FILTER(_addr, iface) (odhcpd_bmemcmp(&(_addr)->addr, \
&(iface)->pio_filter_addr, \
(iface)->pio_filter_length) != 0 || \
- (_addr)->prefix < (iface)->pio_filter_length)
+ (_addr)->prefix_len < (iface)->pio_filter_length)
struct interface;
struct nl_sock;
@@ -162,14 +162,14 @@ struct netevent_handler {
struct odhcpd_ipaddr {
union in46_addr addr;
- uint8_t prefix;
+ uint8_t prefix_len;
uint32_t preferred_lt;
uint32_t valid_lt;
union {
/* ipv6 only */
struct {
- uint8_t dprefix;
+ uint8_t dprefix_len;
bool tentative;
};
diff --git a/src/router.c b/src/router.c
index f8fa759..d5e30e9 100644
--- a/src/router.c
+++ b/src/router.c
@@ -300,8 +300,13 @@ static bool router_icmpv6_valid(struct sockaddr_in6 *source, uint8_t *data, size
/* Detect whether a default route exists, also find the source prefixes */
static bool parse_routes(struct odhcpd_ipaddr *n, ssize_t len)
{
- struct odhcpd_ipaddr p = { .addr.in6 = IN6ADDR_ANY_INIT, .prefix = 0,
- .dprefix = 0, .preferred_lt = 0, .valid_lt = 0};
+ struct odhcpd_ipaddr p = {
+ .addr.in6 = IN6ADDR_ANY_INIT,
+ .prefix_len = 0,
+ .dprefix_len = 0,
+ .preferred_lt = 0,
+ .valid_lt = 0
+ };
bool found_default = false;
char line[512], ifname[16];
@@ -315,16 +320,16 @@ static bool parse_routes(struct odhcpd_ipaddr *n, ssize_t len)
found_default = true;
} else if (sscanf(line, "%8" SCNx32 "%8" SCNx32 "%*8" SCNx32 "%*8" SCNx32 " %hhx %*s "
"%*s 00000000000000000000000000000000 %*s %*s %*s %" SCNx32 " lo",
- &p.addr.in6.s6_addr32[0], &p.addr.in6.s6_addr32[1], &p.prefix, &rflags) &&
- p.prefix > 0 && (rflags & RTF_NONEXTHOP) && (rflags & RTF_REJECT)) {
+ &p.addr.in6.s6_addr32[0], &p.addr.in6.s6_addr32[1], &p.prefix_len, &rflags) &&
+ p.prefix_len > 0 && (rflags & RTF_NONEXTHOP) && (rflags & RTF_REJECT)) {
// Find source prefixes by scanning through unreachable-routes
p.addr.in6.s6_addr32[0] = htonl(p.addr.in6.s6_addr32[0]);
p.addr.in6.s6_addr32[1] = htonl(p.addr.in6.s6_addr32[1]);
for (ssize_t i = 0; i < len; ++i) {
- if (n[i].prefix <= 64 && n[i].prefix >= p.prefix &&
- !odhcpd_bmemcmp(&p.addr.in6, &n[i].addr.in6, p.prefix)) {
- n[i].dprefix = p.prefix;
+ if (n[i].prefix_len <= 64 && n[i].prefix_len >= p.prefix_len &&
+ !odhcpd_bmemcmp(&p.addr.in6, &n[i].addr.in6, p.prefix_len)) {
+ n[i].dprefix_len = p.prefix_len;
break;
}
}
@@ -416,7 +421,7 @@ struct nd_opt_search_list {
struct nd_opt_route_info {
uint8_t type;
uint8_t len;
- uint8_t prefix;
+ uint8_t prefix_len;
uint8_t flags;
uint32_t lifetime;
uint32_t addr[4];
@@ -451,8 +456,8 @@ static struct ra_pio *router_find_ra_pio(struct interface *iface,
for (size_t i = 0; i < iface->pio_cnt; i++) {
struct ra_pio *cur_pio = &iface->pios[i];
- if (addr->prefix == cur_pio->length &&
- !odhcpd_bmemcmp(&addr->addr.in6, &cur_pio->prefix, cur_pio->length))
+ if (addr->prefix_len == cur_pio->length &&
+ !odhcpd_bmemcmp(&addr->addr.in6, &cur_pio->prefix, cur_pio->length))
return cur_pio;
}
@@ -489,7 +494,7 @@ static void router_add_ra_pio(struct interface *iface,
iface->pio_cnt++;
memcpy(&pio->prefix, &addr->addr.in6, sizeof(pio->prefix));
- pio->length = addr->prefix;
+ pio->length = addr->prefix_len;
pio->lifetime = 0;
iface->pio_update = true;
@@ -655,8 +660,8 @@ static int send_router_advert(struct interface *iface, const struct in6_addr *fr
for (size_t j = 0; j < valid_addr_cnt; j++) {
struct odhcpd_ipaddr *cur_addr = &addrs[j];
- if (cur_pio->length == cur_addr->prefix &&
- !odhcpd_bmemcmp(&cur_pio->prefix, &cur_addr->addr.in6, cur_pio->length)) {
+ if (cur_pio->length == cur_addr->prefix_len &&
+ !odhcpd_bmemcmp(&cur_pio->prefix, &cur_addr->addr.in6, cur_pio->length)) {
pio_found = true;
break;
}
@@ -666,7 +671,7 @@ static int send_router_advert(struct interface *iface, const struct in6_addr *fr
struct odhcpd_ipaddr *addr = &addrs[total_addr_cnt];
memcpy(&addr->addr.in6, &cur_pio->prefix, sizeof(addr->addr.in6));
- addr->prefix = cur_pio->length;
+ addr->prefix_len = cur_pio->length;
addr->preferred_lt = 0;
addr->valid_lt = (uint32_t) (now + ND_VALID_LIMIT);
total_addr_cnt++;
@@ -681,9 +686,9 @@ static int send_router_advert(struct interface *iface, const struct in6_addr *fr
uint32_t preferred_lt = 0;
uint32_t valid_lt = 0;
- if (addr->prefix > 96 || (i < valid_addr_cnt && addr->valid_lt <= (uint32_t)now)) {
+ if (addr->prefix_len > 96 || (i < valid_addr_cnt && addr->valid_lt <= (uint32_t)now)) {
info("Address %s (prefix %d, valid-lifetime %u) not suitable as RA prefix on %s",
- inet_ntop(AF_INET6, &addr->addr.in6, buf, sizeof(buf)), addr->prefix,
+ inet_ntop(AF_INET6, &addr->addr.in6, buf, sizeof(buf)), addr->prefix_len,
addr->valid_lt, iface->name);
continue;
}
@@ -696,9 +701,9 @@ static int send_router_advert(struct interface *iface, const struct in6_addr *fr
}
for (size_t i = 0; i < pfxs_cnt; ++i) {
- if (addr->prefix == pfxs[i].nd_opt_pi_prefix_len &&
- !odhcpd_bmemcmp(&pfxs[i].nd_opt_pi_prefix,
- &addr->addr.in6, addr->prefix))
+ if (addr->prefix_len == pfxs[i].nd_opt_pi_prefix_len &&
+ !odhcpd_bmemcmp(&pfxs[i].nd_opt_pi_prefix,
+ &addr->addr.in6, addr->prefix_len))
p = &pfxs[i];
}
@@ -752,17 +757,17 @@ static int send_router_advert(struct interface *iface, const struct in6_addr *fr
}
odhcpd_bmemcpy(&p->nd_opt_pi_prefix, &addr->addr.in6,
- (iface->ra_advrouter) ? 128 : addr->prefix);
+ (iface->ra_advrouter) ? 128 : addr->prefix_len);
p->nd_opt_pi_type = ND_OPT_PREFIX_INFORMATION;
p->nd_opt_pi_len = 4;
- p->nd_opt_pi_prefix_len = (addr->prefix < 64) ? 64 : addr->prefix;
+ p->nd_opt_pi_prefix_len = (addr->prefix_len < 64) ? 64 : addr->prefix_len;
/* RFC9762 DHCPv6-PD Preferred Flag § 6:
* Routers SHOULD set the P flag to zero by default...
*/
p->nd_opt_pi_flags_reserved = 0;
if (!iface->ra_not_onlink)
p->nd_opt_pi_flags_reserved |= ND_OPT_PI_FLAG_ONLINK;
- if (iface->ra_slaac && addr->prefix <= 64)
+ if (iface->ra_slaac && addr->prefix_len <= 64)
p->nd_opt_pi_flags_reserved |= ND_OPT_PI_FLAG_AUTO;
if (iface->dhcpv6 != MODE_DISABLED && iface->dhcpv6_pd && iface->dhcpv6_pd_preferred)
/* RFC9762 DHCPv6-PD Preferred Flag
@@ -961,10 +966,10 @@ static int send_router_advert(struct interface *iface, const struct in6_addr *fr
struct nd_opt_route_info *tmp;
uint32_t valid_lt;
- if (addr->dprefix >= 64 || addr->dprefix == 0 || addr->valid_lt <= (uint32_t)now) {
+ if (addr->dprefix_len >= 64 || addr->dprefix_len == 0 || addr->valid_lt <= (uint32_t)now) {
info("Address %s (dprefix %d, valid-lifetime %u) not suitable as RA route on %s",
inet_ntop(AF_INET6, &addr->addr.in6, buf, sizeof(buf)),
- addr->dprefix, addr->valid_lt, iface->name);
+ addr->dprefix_len, addr->valid_lt, iface->name);
continue; /* Address not suitable */
}
@@ -976,10 +981,10 @@ static int send_router_advert(struct interface *iface, const struct in6_addr *fr
continue; /* PIO filtered out of this RA */
}
- if (addr->dprefix > 32) {
- addr->addr.in6.s6_addr32[1] &= htonl(~((1U << (64 - addr->dprefix)) - 1));
- } else if (addr->dprefix <= 32) {
- addr->addr.in6.s6_addr32[0] &= htonl(~((1U << (32 - addr->dprefix)) - 1));
+ if (addr->dprefix_len > 32) {
+ addr->addr.in6.s6_addr32[1] &= htonl(~((1U << (64 - addr->dprefix_len)) - 1));
+ } else if (addr->dprefix_len <= 32) {
+ addr->addr.in6.s6_addr32[0] &= htonl(~((1U << (32 - addr->dprefix_len)) - 1));
addr->addr.in6.s6_addr32[1] = 0;
}
@@ -994,7 +999,7 @@ static int send_router_advert(struct interface *iface, const struct in6_addr *fr
memset(&routes[routes_cnt], 0, sizeof(*routes));
routes[routes_cnt].type = ND_OPT_ROUTE_INFO;
routes[routes_cnt].len = sizeof(*routes) / 8;
- routes[routes_cnt].prefix = addr->dprefix;
+ routes[routes_cnt].prefix_len = addr->dprefix_len;
routes[routes_cnt].flags = 0;
if (iface->route_preference < 0)
routes[routes_cnt].flags |= ND_RA_PREF_LOW;