On Wed, Nov 5, 2014 at 9:33 PM, Michael McTernan
<[email protected]> wrote:
> Hi All,
>
> There's a FIXME in udhcpd which describes a small corner case when saved 
> leases are read and honoured even if the IP or MAC of that lease overlaps a 
> static_lease from the config file.  I found that because of this, after 
> updating config and restarting udhcpd, a client which already had a lease can 
> continue to renew that lease instead of either getting the IP specified in a 
> new 'static_lease' config item, or being nak'd and assigned a new free IP.
>
> Following is a small patch which removes the FIXME and adds a check to 
> discard saved lease records if they would conflict with a static_lease from 
> the config file.
>
> In my configuration, this added 48 bytes to the stripped executable.  I 
> tested it by defining a /24 subnet and adding static_lease records for all 
> but 1 on the available IP addresses, and then moving that 1 available IP 
> around while reconnecting a single client.  After the patch, verbose logging 
> and Wireshark show NAK and then offering of the single free address, with the 
> client having it's IP updated each time ipconfig /renew is issued.
>
> Please consider for inclusion to busybox.
>
> +                       // Check if there is a different static lease for 
> this IP or MAC
> +                       slnip = 
> get_static_nip_by_mac(server_config.static_leases, lease.lease_mac);
> +                       if ((slnip != 0 && slnip != lease.lease_nip)
> +                        || (slnip == 0 && 
> is_nip_reserved(server_config.static_leases, lease.lease_nip)))
> +                               continue;
> +

I'm going with a somewhat different version:

+                       /* Check if there is a different static lease
for this IP or MAC */
+                       static_nip =
get_static_nip_by_mac(server_config.static_leases, lease.lease_mac);
+                       if (static_nip) {
+                               /* NB: we do not add lease even if
static_nip == lease.lease_nip.
+                                */
+                               continue;
+                       }
+                       if
(is_nip_reserved(server_config.static_leases, lease.lease_nip))
+                               continue;

Thanks!
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to