mirror of
https://gitlab.isc.org/isc-projects/kea
synced 2025-09-01 14:35:29 +00:00
[5029] Allocation engine allows for multiple leases w/ the same HW addr.
This commit is contained in:
@@ -2149,13 +2149,21 @@ void findClientLease(const AllocEngine::ClientContext4& ctx, Lease4Ptr& client_l
|
||||
// If no lease found using the client identifier, try the lookup using
|
||||
// the HW address.
|
||||
if (!client_lease && ctx.hwaddr_) {
|
||||
client_lease = lease_mgr.getLease4(*ctx.hwaddr_, ctx.subnet_->getID());
|
||||
// This lookup may return the lease which has conflicting client
|
||||
// identifier and thus is considered to belong to someone else.
|
||||
// If this is the case, we need to toss the result and force the
|
||||
// Allocation Engine to allocate another lease.
|
||||
if (client_lease && !client_lease->belongsToClient(ctx.hwaddr_, ctx.clientid_)) {
|
||||
client_lease.reset();
|
||||
|
||||
// There may be cases when there is a lease for the same MAC address
|
||||
// (even within the same subnet). Such situation may occur for PXE
|
||||
// boot clients using the same MAC address but different client
|
||||
// identifiers.
|
||||
Lease4Collection client_leases = lease_mgr.getLease4(*ctx.hwaddr_);
|
||||
for (Lease4Collection::const_iterator client_lease_it = client_leases.begin();
|
||||
client_lease_it != client_leases.end(); ++client_lease_it) {
|
||||
Lease4Ptr existing_lease = *client_lease_it;
|
||||
if ((existing_lease->subnet_id_ == ctx.subnet_->getID()) &&
|
||||
existing_lease->belongsToClient(ctx.hwaddr_, ctx.clientid_)) {
|
||||
// Found the lease of this client, so return it.
|
||||
client_lease = existing_lease;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user