From: Marcin Siodelski Date: Tue, 26 Aug 2014 11:24:47 +0000 (+0200) Subject: [3512] Addressed review comments. X-Git-Tag: trac3482_base~11^2~2^2~1 X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=4bac08469a64bd0e4d9ad7b05a7cd748ad263b43;p=thirdparty%2Fkea.git [3512] Addressed review comments. --- diff --git a/src/lib/dhcp/tests/iface_mgr_unittest.cc b/src/lib/dhcp/tests/iface_mgr_unittest.cc index 06c74c6835..53f6c5fe01 100644 --- a/src/lib/dhcp/tests/iface_mgr_unittest.cc +++ b/src/lib/dhcp/tests/iface_mgr_unittest.cc @@ -614,6 +614,7 @@ TEST_F(IfaceMgrTest, ifaceHasAddress) { Iface* iface = IfaceMgr::instance().getIface("eth0"); ASSERT_FALSE(iface == NULL); EXPECT_TRUE(iface->hasAddress(IOAddress("10.0.0.1"))); + EXPECT_FALSE(iface->hasAddress(IOAddress("10.0.0.2"))); EXPECT_TRUE(iface->hasAddress(IOAddress("fe80::3a60:77ff:fed5:cdef"))); EXPECT_TRUE(iface->hasAddress(IOAddress("2001:db8:1::1"))); EXPECT_FALSE(iface->hasAddress(IOAddress("2001:db8:1::2"))); diff --git a/src/lib/dhcpsrv/cfg_iface.cc b/src/lib/dhcpsrv/cfg_iface.cc index cc596e8135..21651820db 100644 --- a/src/lib/dhcpsrv/cfg_iface.cc +++ b/src/lib/dhcpsrv/cfg_iface.cc @@ -237,6 +237,13 @@ CfgIface::use(const std::string& iface_name) { " a valid IPv6 unicast address"); } + // There are valid cases where link local address can be specified to + // receive unicast traffic, e.g. sent by relay agent. + if (addr.isV6LinkLocal()) { + LOG_WARN(dhcpsrv_logger, DHCPSRV_CFGMGR_UNICAST_LINK_LOCAL) + .arg(addr.toText()).arg(name); + } + // Interface must have this address assigned. if (!iface->hasAddress(addr)) { isc_throw(NoSuchAddress, diff --git a/src/lib/dhcpsrv/cfg_iface.h b/src/lib/dhcpsrv/cfg_iface.h index 7e2b380919..01376da358 100644 --- a/src/lib/dhcpsrv/cfg_iface.h +++ b/src/lib/dhcpsrv/cfg_iface.h @@ -176,17 +176,22 @@ private: /// @brief Protocol family. Family family_; + /// @brief Represents a set of interface names. typedef std::set IfaceSet; + /// @brief A set of interface names specified by the user. IfaceSet iface_set_; + /// @brief A map of interfaces and unicast addresses. typedef std::map UnicastMap; + /// @brief A map which holds the pairs of interface names and unicast /// addresses for which the unicast sockets should be opened. /// /// This is only used for V6 family. UnicastMap unicast_map_; + /// @brief A booolean value which indicates that the wildcard interface name /// has been specified (*). bool wildcard_used_; diff --git a/src/lib/dhcpsrv/dhcpsrv_messages.mes b/src/lib/dhcpsrv/dhcpsrv_messages.mes index cb04ad6001..17813e44fd 100644 --- a/src/lib/dhcpsrv/dhcpsrv_messages.mes +++ b/src/lib/dhcpsrv/dhcpsrv_messages.mes @@ -145,6 +145,11 @@ This is a debug message reporting that the DHCP configuration manager has returned the specified IPv6 subnet, because detected relay agent address matches value specified for this subnet. +% DHCPSRV_CFGMGR_UNICAST_LINK_LOCAL specified link local address %1 for unicast traffic on interface %2 +This warning message is logged when user specified a link-local address to +receive unicast traffic. The warning message is issued because it is an +uncommon use. + % DHCPSRV_CLOSE_DB closing currently open %1 database This is a debug message, issued when the DHCP server closes the currently open lease database. It is issued at program shutdown and whenever diff --git a/src/lib/dhcpsrv/tests/cfg_iface_unittest.cc b/src/lib/dhcpsrv/tests/cfg_iface_unittest.cc index 8e0ae19a4a..01aba833c5 100644 --- a/src/lib/dhcpsrv/tests/cfg_iface_unittest.cc +++ b/src/lib/dhcpsrv/tests/cfg_iface_unittest.cc @@ -146,7 +146,7 @@ TEST_F(CfgIfaceTest, explicitNamesV6) { // select all interfaces to open IPv4 sockets. TEST_F(CfgIfaceTest, wildcardV4) { CfgIface cfg(CfgIface::V4); - ASSERT_NO_THROW(cfg.use(CfgIface::ALL_IFACES_KEYWORD)); + ASSERT_NO_THROW(cfg.use("*")); cfg.openSockets(DHCP4_SERVER_PORT); @@ -165,7 +165,7 @@ TEST_F(CfgIfaceTest, wildcardV4) { // select all interfaces to open IPv6 sockets. TEST_F(CfgIfaceTest, wildcardV6) { CfgIface cfg(CfgIface::V6); - ASSERT_NO_THROW(cfg.use(CfgIface::ALL_IFACES_KEYWORD)); + ASSERT_NO_THROW(cfg.use("*")); cfg.openSockets(DHCP4_SERVER_PORT); @@ -219,8 +219,8 @@ TEST_F(CfgIfaceTest, invalidValues) { ASSERT_THROW(cfg.use("eth0/fe80::3a60:77ff:fed5:cdef"), InvalidIfaceName); ASSERT_THROW(cfg.use("eth0/2001:db8:1::2"), NoSuchAddress); - ASSERT_NO_THROW(cfg.use(CfgIface::ALL_IFACES_KEYWORD)); - ASSERT_THROW(cfg.use(CfgIface::ALL_IFACES_KEYWORD), DuplicateIfaceName); + ASSERT_NO_THROW(cfg.use("*")); + ASSERT_THROW(cfg.use("*"), DuplicateIfaceName); } } // end of anonymous namespace