Fix failure to build against Nettle-3.0. Thanks to Steven
Barth for spotting this and finding the fix.
+ When assigning existing DHCP leases to intefaces by comparing
+ networks, handle the case that two or more interfaces have the
+ same network part, but different prefix lengths (favour the
+ longer prefix length.) Thanks to Lung-Pin Chang for the
+ patch.
+
version 2.71
Subtle change to error handling to help DNSSEC validation
struct in_addr netmask, struct in_addr broadcast, void *vparam)
{
struct dhcp_lease *lease;
- int prefix;
+ int prefix = netmask_length(netmask);
(void) label;
(void) broadcast;
(void) vparam;
for (lease = leases; lease; lease = lease->next)
- if (!(lease->flags & (LEASE_TA | LEASE_NA))) {
- prefix = netmask_length(netmask);
- if (is_same_net(local, lease->addr, netmask) && prefix > lease->new_prefixlen) {
- lease->new_interface = if_index;
+ if (!(lease->flags & (LEASE_TA | LEASE_NA)) &&
+ is_same_net(local, lease->addr, netmask) &&
+ prefix > lease->new_prefixlen)
+ {
+ lease->new_interface = if_index;
lease->new_prefixlen = prefix;
}
- }
return 1;
}
start-time. */
void lease_find_interfaces(time_t now)
{
+ struct dhcp_lease *lease;
+
+ for (lease = leases; lease; lease = lease->next)
+ lease->new_prefixlen = lease->new_interface = 0;
+
iface_enumerate(AF_INET, &now, find_interface_v4);
#ifdef HAVE_DHCP6
iface_enumerate(AF_INET6, &now, find_interface_v6);
#endif
- lease_update_interface(now);
+
+ for (lease = leases; lease; lease = lease->next)
+ if (lease->new_interface != 0)
+ lease_set_interface(lease, lease->new_interface, now);
}
#ifdef HAVE_DHCP6
}
}
-void lease_update_interface(time_t now)
-{
- struct dhcp_lease *lease;
-
- for (lease = leases; lease; lease = lease->next)
- if (lease->new_interface > 0) {
- lease_set_interface(lease, lease->new_interface, now);
- }
-}
-
void lease_prune(struct dhcp_lease *target, time_t now)
{
struct dhcp_lease *lease, *tmp, **up;