mirror of
https://gitlab.isc.org/isc-projects/kea
synced 2025-09-05 00:15:17 +00:00
[5437] Optimized lease search in INIT_REBOOT case.
This commit is contained in:
@@ -1799,14 +1799,18 @@ Dhcpv4Srv::assignLease(Dhcpv4Exchange& ex) {
|
||||
|
||||
Lease4Ptr lease;
|
||||
Subnet4Ptr original_subnet = subnet;
|
||||
Subnet4Ptr s = original_subnet;
|
||||
while (s) {
|
||||
if (client_id) {
|
||||
lease = LeaseMgrFactory::instance().getLease4(*client_id, s->getID());
|
||||
}
|
||||
|
||||
if (!lease && hwaddr) {
|
||||
lease = LeaseMgrFactory::instance().getLease4(*hwaddr, s->getID());
|
||||
if (client_id) {
|
||||
Lease4Collection leases_client_id = LeaseMgrFactory::instance().getLease4(*client_id);
|
||||
if (!leases_client_id.empty()) {
|
||||
Subnet4Ptr s = original_subnet;
|
||||
|
||||
while (s) {
|
||||
for (auto l = leases_client_id.begin(); l != leases_client_id.end(); ++l) {
|
||||
if ((*l)->subnet_id_ == s->getID()) {
|
||||
lease = *l;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (lease) {
|
||||
@@ -1816,6 +1820,31 @@ Dhcpv4Srv::assignLease(Dhcpv4Exchange& ex) {
|
||||
s = s->getNextSubnet(original_subnet, query->getClasses());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!lease && hwaddr) {
|
||||
Lease4Collection leases_hwaddr = LeaseMgrFactory::instance().getLease4(*hwaddr);
|
||||
if (!leases_hwaddr.empty()) {
|
||||
Subnet4Ptr s = original_subnet;
|
||||
|
||||
while (s) {
|
||||
for (auto l = leases_hwaddr.begin(); l != leases_hwaddr.end(); ++l) {
|
||||
if ((*l)->subnet_id_ == s->getID()) {
|
||||
lease = *l;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (lease) {
|
||||
break;
|
||||
|
||||
} else {
|
||||
s = s->getNextSubnet(original_subnet, query->getClasses());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Check the first error case: unknown client. We check this before
|
||||
// validating the address sent because we don't want to respond if
|
||||
|
Reference in New Issue
Block a user