]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
Merge remote-tracking branch 'isc-kea/master' into HEAD 40/head
authorRazvan Becheriu <razvan.becheriu@qualitance.com>
Tue, 12 Dec 2017 12:25:02 +0000 (14:25 +0200)
committerRazvan Becheriu <razvan.becheriu@qualitance.com>
Tue, 12 Dec 2017 12:25:02 +0000 (14:25 +0200)
1  2 
configure.ac
doc/devel/contribute.dox
doc/guide/install.xml
src/bin/dhcp4/tests/dora_unittest.cc
src/bin/dhcp4/tests/kea_controller_unittest.cc
src/bin/dhcp6/tests/kea_controller_unittest.cc
src/lib/dhcpsrv/database_backends.dox

diff --cc configure.ac
Simple merge
Simple merge
Simple merge
index 8c4fbbd2e72f25abf059ccf4b2aa18fb9e06f2ee,2ecc55e5f6750aa3059702033b5f36bcdb9ccda0..88b19127bf3f1ea94e472a3a1fb4dbf53098b4cb
@@@ -1541,9 -1643,109 +1643,109 @@@ TEST_F(DORATest, multiStageBoot) 
      testMultiStageBoot(0);
  }
  
+ // This test verifies that custom server identifier can be specified for
+ // a subnet.
+ TEST_F(DORATest, customServerIdentifier) {
+     Dhcp4Client client1(Dhcp4Client::SELECTING);
+     // Configure DHCP server.
+     ASSERT_NO_THROW(configure(DORA_CONFIGS[7], *client1.getServer()));
+     ASSERT_NO_THROW(client1.doDORA());
+     // Make sure that the server responded.
+     ASSERT_TRUE(client1.getContext().response_);
+     Pkt4Ptr resp = client1.getContext().response_;
+     // Make sure that the server has responded with DHCPACK.
+     ASSERT_EQ(DHCPACK, static_cast<int>(resp->getType()));
+     // The explicitly configured server identifier should take precedence
+     // over generated server identifier.
+     EXPECT_EQ("1.2.3.4", client1.config_.serverid_.toText());
+     // Repeat the test for different subnet.
+     Dhcp4Client client2(client1.getServer(), Dhcp4Client::SELECTING);
+     client2.setIfaceName("eth1");
+     ASSERT_NO_THROW(client2.doDORA());
+     ASSERT_TRUE(client2.getContext().response_);
+     resp = client2.getContext().response_;
+     ASSERT_EQ(DHCPACK, static_cast<int>(resp->getType()));
+     EXPECT_EQ("2.3.4.5", client2.config_.serverid_.toText());
+     // Create relayed client which will be assigned a lease from the third
+     // subnet. This subnet inherits server identifier value from the global
+     // scope.
+     Dhcp4Client client3(client1.getServer(), Dhcp4Client::SELECTING);
+     client3.useRelay(true, IOAddress("10.2.3.4"));
+     ASSERT_NO_THROW(client3.doDORA());
+     ASSERT_TRUE(client3.getContext().response_);
+     resp = client3.getContext().response_;
+     ASSERT_EQ(DHCPACK, static_cast<int>(resp->getType()));
+     EXPECT_EQ("3.4.5.6", client3.config_.serverid_.toText());
+ }
+ // This test verifies that reserved lease is not assigned to a client which
+ // identifier doesn't match the identifier in the reservation.
+ TEST_F(DORATest, changingCircuitId) {
+     Dhcp4Client client(Dhcp4Client::SELECTING);
+     client.setHWAddress("aa:bb:cc:dd:ee:ff");
+     // Use relay agent so as the circuit-id can be inserted.
+     client.useRelay(true, IOAddress("10.0.0.1"), IOAddress("10.0.0.2"));
+     // Configure DHCP server.
+     configure(DORA_CONFIGS[11], *client.getServer());
+     // Send DHCPDISCOVER.
+     boost::shared_ptr<IOAddress> requested_address(new IOAddress("10.0.0.9"));
+     ASSERT_NO_THROW(client.doDiscover(requested_address));
+     // Make sure that the server responded.
+     ASSERT_TRUE(client.getContext().response_);
+     Pkt4Ptr resp = client.getContext().response_;
+     // Make sure that the server has responded with DHCPOFFER
+     ASSERT_EQ(DHCPOFFER, static_cast<int>(resp->getType()));
+     // Make sure that the client has been offerred a different address
+     // given that circuit-id is not used.
+     EXPECT_NE("10.0.0.9", resp->getYiaddr().toText());
+     // Specify circuit-id matching the one in the configuration.
+     client.setCircuitId("charter950");
+     // Send DHCPDISCOVER.
+     ASSERT_NO_THROW(client.doDiscover());
+     // Make sure that the server responded.
+     ASSERT_TRUE(client.getContext().response_);
+     resp = client.getContext().response_;
+     // Make sure that the server has responded with DHCPOFFER
+     ASSERT_EQ(DHCPOFFER, static_cast<int>(resp->getType()));
+     // Make sure that the client has been offerred reserved address given that
+     // matching circuit-id has been specified.
+     EXPECT_EQ("10.0.0.9", resp->getYiaddr().toText());
+     // Let's now change the circuit-id.
+     client.setCircuitId("gdansk");
+     // The client requests offerred address but should be refused this address
+     // given that the circuit-id is not matching.
+     ASSERT_NO_THROW(client.doRequest());
+     // Make sure that the server responded.
+     ASSERT_TRUE(client.getContext().response_);
+     resp = client.getContext().response_;
+     // The client should be refused this address.
+     EXPECT_EQ(DHCPNAK, static_cast<int>(resp->getType()));
+     // In this case, the client falls back to the 4-way exchange and should be
+     // allocated an address from the dynamic pool.
+     ASSERT_NO_THROW(client.doDORA());
+     // Make sure that the server responded.
+     ASSERT_TRUE(client.getContext().response_);
+     resp = client.getContext().response_;
+     // The client should be allocated some address.
+     ASSERT_EQ(DHCPACK, static_cast<int>(resp->getType()));
+     EXPECT_NE("10.0.0.9", client.config_.lease_.addr_.toText());
+ }
  // Starting tests which require MySQL backend availability. Those tests
  // will not be executed if Kea has been compiled without the
 -// --with-dhcp-mysql.
 +// --with-mysql.
  #ifdef HAVE_MYSQL
  
  /// @brief Test fixture class for the test utilizing MySQL database backend.
Simple merge