Commit db7182c1 authored by Marcin Siodelski's avatar Marcin Siodelski

[5388] Corrected bug in allocation engine.

The bug was manifesting itself in inability to find an existing lease
within shared network when client performed DORA without a hint.
parent eb2a764b
......@@ -1062,6 +1062,31 @@ TEST_F(Dhcpv4SharedNetworkTest, poolInSharedNetworkShortage) {
// Returning client sends 4-way exchange.
TEST_F(Dhcpv4SharedNetworkTest, returningClientStartsOver) {
// Create client.
Dhcp4Client client(Dhcp4Client::SELECTING);
// Configure the server with one shared network including two subnets and
// one subnet outside of the shared network.
configure(NETWORKS_CONFIG[0], *client.getServer());
// Client requests an address in first subnet within a shared network.
// We'll send a hint of and expect to get it.
testAssigned([this, &client]() {
doDORA(client, "", "");
// The client reboots and performs 4-way exchange again without a hint.
// It should be assigned the same (existing) lease.
testAssigned([this, &client]() {
doDORA(client, "");
// Shared network is selected based on giaddr value (relay specified
// on shared network level)
TEST_F(Dhcpv4SharedNetworkTest, sharedNetworkSelectedByRelay1) {
......@@ -2443,6 +2443,10 @@ void findClientLease(AllocEngine::ClientContext4& ctx, Lease4Ptr& client_lease)
// configured to ignore client identifier).
if (client_id) {
client_lease = lease_mgr.getLease4(*client_id, subnet->getID());
if (client_lease) {
ctx.subnet_ = subnet;
// If no lease found using the client identifier, try the lookup using
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment