udhcpd: if a lease from lease file coincides with a static one, ignore it
authorDenys Vlasenko <vda.linux@googlemail.com>
Tue, 25 Nov 2014 17:49:14 +0000 (18:49 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Tue, 25 Nov 2014 17:49:14 +0000 (18:49 +0100)
function                                             old     new   delta
read_leases                                          269     328     +59

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
networking/udhcp/files.c

index 6840f3c259a93fa8de318acf76b9a74bc554dbbc..1c8808c0f1fcc911c54ec093421eb535a820c48d 100644 (file)
@@ -189,12 +189,24 @@ void FAST_FUNC read_leases(const char *file)
                goto ret;
 
        while (full_read(fd, &lease, sizeof(lease)) == sizeof(lease)) {
-//FIXME: what if it matches some static lease?
                uint32_t y = ntohl(lease.lease_nip);
                if (y >= server_config.start_ip && y <= server_config.end_ip) {
                        signed_leasetime_t expires = ntohl(lease.expires) - (signed_leasetime_t)time_passed;
+                       uint32_t static_nip;
+
                        if (expires <= 0)
                                continue;
+
+                       /* 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;
+
                        /* NB: add_lease takes "relative time", IOW,
                         * lease duration, not lease deadline. */
                        if (add_lease(lease.lease_mac, lease.lease_nip,