diff --git a/src/bin/dhcp6/dhcp6_messages.mes b/src/bin/dhcp6/dhcp6_messages.mes index 5f9cd02b68cdf7070181be56e15b5e24ab8d1a90..96649d5890426f41a3268e8efd83acaadb6d11d7 100644 --- a/src/bin/dhcp6/dhcp6_messages.mes +++ b/src/bin/dhcp6/dhcp6_messages.mes @@ -30,7 +30,7 @@ from the BIND 10 control system by the IPv6 DHCP server. A debug message indicating that the IPv6 DHCP server has received an updated configuration from the BIND 10 configuration system. -% DHCP6_DB_BACKEND_STARTED Lease database started (backend type: %1) +% DHCP6_DB_BACKEND_STARTED lease database started (type: %1, name: %2) This informational message is printed every time DHCPv6 is started. It indicates what database backend type is being to store lease and other information. @@ -47,7 +47,7 @@ interfaces and is therefore shutting down. A debug message issued during startup, this indicates that the IPv6 DHCP server is about to open sockets on the specified port. -% DHCP6_LEASE_ADVERT Lease %1 advertised (client duid=%2, iaid=%3) +% DHCP6_LEASE_ADVERT lease %1 advertised (client duid=%2, iaid=%3) This debug message indicates that the server successfully advertised a lease. It is up to the client to choose one server out of othe advertised and continue allocation with that server. This is a normal behavior and @@ -154,14 +154,16 @@ the response will only contain generic configuration parameters and no addresses or prefixes. % DHCP6_NO_SUBNET_DEF_OPT failed to find subnet for address %1 when adding default options -This warning message indicates that when attempting to add default options to a response, -the server found that it was not configured to support the subnet from which the DHCPv6 -request was received. The packet has been ignored. +This warning message indicates that when attempting to add default options +to a response, the server found that it was not configured to support +the subnet from which the DHCPv6 request was received. The packet has +been ignored. % DHCP6_NO_SUBNET_REQ_OPT failed to find subnet for address %1 when adding requested options -This warning message indicates that when attempting to add requested options to a response, -the server found that it was not configured to support the subnet from which the DHCPv6 -request was received. The packet has been ignored. +This warning message indicates that when attempting to add requested +options to a response, the server found that it was not configured +to support the subnet from which the DHCPv6 request was received. +The packet has been ignored. % DHCP6_CONFIG_LOAD_FAIL failed to load configuration: %1 This critical error message indicates that the initial DHCPv6 diff --git a/src/bin/dhcp6/dhcp6_srv.cc b/src/bin/dhcp6/dhcp6_srv.cc index 1c76b7510356a457fb90e340c0f5d83d641d6552..82a47774339482ae20e34090c224673b9075f10d 100644 --- a/src/bin/dhcp6/dhcp6_srv.cc +++ b/src/bin/dhcp6/dhcp6_srv.cc @@ -80,6 +80,7 @@ Dhcpv6Srv::Dhcpv6Srv(uint16_t port, const char* dbconfig) // Instantiate LeaseMgr LeaseMgrFactory::create(dbconfig); LOG_INFO(dhcp6_logger, DHCP6_DB_BACKEND_STARTED) + .arg(LeaseMgrFactory::instance().getType()) .arg(LeaseMgrFactory::instance().getName()); // Instantiate allocation engine diff --git a/src/lib/dhcp/lease_mgr.h b/src/lib/dhcp/lease_mgr.h index 40c20cd529e2fa0c5b9ae3175100c318192e772f..7819aad423bc139941fdc9ca9eb0cd6c2d69c7dd 100644 --- a/src/lib/dhcp/lease_mgr.h +++ b/src/lib/dhcp/lease_mgr.h @@ -505,14 +505,26 @@ public: /// @return true if deletion was successful, false if no such lease exists virtual bool deleteLease6(const isc::asiolink::IOAddress& addr) = 0; + /// @brief Return backend type + /// + /// Returns the type of the backend (e.g. "mysql", "memfile" etc.) + /// + /// @return Type of the backend. + virtual std::string getType() const = 0; + /// @brief Returns backend name. /// - /// Each backend have specific name, e.g. "mysql" or "sqlite". + /// If the backend is a database, this is the name of the database or the + /// file. Otherwise it is just the same as the type. + /// + /// @return Name of the backend. virtual std::string getName() const = 0; /// @brief Returns description of the backend. /// /// This description may be multiline text that describes the backend. + /// + /// @return Description of the backend. virtual std::string getDescription() const = 0; /// @brief Returns backend version. @@ -548,7 +560,7 @@ public: /// is currently postponed. /// @brief returns value of the parameter - std::string getParameter(const std::string& name) const; + virtual std::string getParameter(const std::string& name) const; private: /// @brief list of parameters passed in dbconfig diff --git a/src/lib/dhcp/memfile_lease_mgr.h b/src/lib/dhcp/memfile_lease_mgr.h index cb02360db23737334a9ff676e2de53e89c835ec5..2f66e8c02ed1d9c24395046b6416429a463b06bb 100644 --- a/src/lib/dhcp/memfile_lease_mgr.h +++ b/src/lib/dhcp/memfile_lease_mgr.h @@ -188,15 +188,31 @@ public: /// @return true if deletion was successful, false if no such lease exists bool deleteLease6(const isc::asiolink::IOAddress& addr); + /// @brief Return backend type + /// + /// Returns the type of the backend. + /// + /// @return Type of the backend. + virtual std::string getType() const { + return (std::string("memfile")); + } + /// @brief Returns backend name. /// - /// Each backend have specific name, e.g. "mysql" or "sqlite". - std::string getName() const { return ("memfile"); } + /// As there is no variation, in this case we return the type of the + /// backend. + /// + /// @return Name of the backend. + virtual std::string getName() const { + return ("memfile"); + } /// @brief Returns description of the backend. /// /// This description may be multiline text that describes the backend. - std::string getDescription() const; + /// + /// @return Description of the backend. + virtual std::string getDescription() const; /// @brief Returns backend version. virtual std::pair getVersion() const { diff --git a/src/lib/dhcp/mysql_lease_mgr.h b/src/lib/dhcp/mysql_lease_mgr.h index 8712c330352b33fc1075684594f82b7ab93be37b..e3f1a7a1ea40909fc7d11af7d19ac5c8cb485fb7 100644 --- a/src/lib/dhcp/mysql_lease_mgr.h +++ b/src/lib/dhcp/mysql_lease_mgr.h @@ -239,14 +239,27 @@ public: /// failed. virtual bool deleteLease6(const isc::asiolink::IOAddress& addr); + /// @brief Return backend type + /// + /// Returns the type of the backend (e.g. "mysql", "memfile" etc.) + /// + /// @return Type of the backend. + virtual std::string getType() const { + return (std::string("mysql")); + } + /// @brief Returns backend name. /// /// Each backend have specific name, e.g. "mysql" or "sqlite". + /// + /// @return Name of the backend. virtual std::string getName() const; /// @brief Returns description of the backend. /// /// This description may be multiline text that describes the backend. + /// + /// @return Description of the backend. virtual std::string getDescription() const; /// @brief Returns backend version. diff --git a/src/lib/dhcp/tests/lease_mgr_unittest.cc b/src/lib/dhcp/tests/lease_mgr_unittest.cc index 64ce9b1653c8aec07323a4e6abe19a3bafa8fb12..7ad203693094c4d6616882ff4c72ec6df2f927ba 100644 --- a/src/lib/dhcp/tests/lease_mgr_unittest.cc +++ b/src/lib/dhcp/tests/lease_mgr_unittest.cc @@ -134,7 +134,7 @@ public: /// @param addr address of the searched lease /// /// @return smart pointer to the lease (or NULL if a lease is not found) - Lease6Ptr getLease6(const isc::asiolink::IOAddress&) const { + virtual Lease6Ptr getLease6(const isc::asiolink::IOAddress&) const { return (Lease6Ptr()); } @@ -144,7 +144,7 @@ public: /// @param iaid IA identifier /// /// @return collection of IPv6 leases - Lease6Collection getLease6(const DUID&, uint32_t) const { + virtual Lease6Collection getLease6(const DUID&, uint32_t) const { return (Lease6Collection()); } @@ -155,7 +155,7 @@ public: /// @param subnet_id identifier of the subnet the lease must belong to /// /// @return smart pointer to the lease (or NULL if a lease is not found) - Lease6Ptr getLease6(const DUID&, uint32_t, SubnetID) const { + virtual Lease6Ptr getLease6(const DUID&, uint32_t, SubnetID) const { return (Lease6Ptr()); } @@ -164,21 +164,21 @@ public: /// @param lease4 The lease to be updated. /// /// If no such lease is present, an exception will be thrown. - void updateLease4(const Lease4Ptr&) {} + virtual void updateLease4(const Lease4Ptr&) {} /// @brief Updates IPv4 lease. /// /// @param lease4 The lease to be updated. /// /// If no such lease is present, an exception will be thrown. - void updateLease6(const Lease6Ptr&) {} + virtual void updateLease6(const Lease6Ptr&) {} /// @brief Deletes a lease. /// /// @param addr IPv4 address of the lease to be deleted. /// /// @return true if deletion was successful, false if no such lease exists - bool deleteLease4(const isc::asiolink::IOAddress&) { + virtual bool deleteLease4(const isc::asiolink::IOAddress&) { return (false); } @@ -187,35 +187,49 @@ public: /// @param addr IPv4 address of the lease to be deleted. /// /// @return true if deletion was successful, false if no such lease exists - bool deleteLease6(const isc::asiolink::IOAddress&) { + virtual bool deleteLease6(const isc::asiolink::IOAddress&) { return (false); } + /// @brief Returns backend type. + /// + /// Returns the type of the backend (e.g. "mysql", "memfile" etc.) + /// + /// @return Type of the backend. + virtual std::string getType() const { + return (std::string("concrete")); + } + /// @brief Returns backend name. /// - /// Each backend have specific name, e.g. "mysql" or "sqlite". - std::string getName() const { + /// If the backend is a database, this is the name of the database or the + /// file. Otherwise it is just the same as the type. + /// + /// @return Name of the backend. + virtual std::string getName() const { return (std::string("concrete")); } /// @brief Returns description of the backend. /// /// This description may be multiline text that describes the backend. - std::string getDescription() const { + /// + /// @return Description of the backend. + virtual std::string getDescription() const { return (std::string("This is a dummy concrete backend implementation.")); } /// @brief Returns backend version. - std::pair getVersion() const { + virtual std::pair getVersion() const { return (make_pair(uint32_t(0), uint32_t(0))); } /// @brief Commit transactions - void commit() { + virtual void commit() { } /// @brief Rollback transactions - void rollback() { + virtual void rollback() { } }; diff --git a/src/lib/dhcp/tests/memfile_lease_mgr_unittest.cc b/src/lib/dhcp/tests/memfile_lease_mgr_unittest.cc index c625a16f28c48a76de6a7890584f5ab965fed1b7..f25ceabb9a4f37b11e2cad91393ab5c750dd5f0a 100644 --- a/src/lib/dhcp/tests/memfile_lease_mgr_unittest.cc +++ b/src/lib/dhcp/tests/memfile_lease_mgr_unittest.cc @@ -45,6 +45,14 @@ TEST_F(MemfileLeaseMgrTest, constructor) { ASSERT_NO_THROW(lease_mgr.reset(new Memfile_LeaseMgr(pmap))); } +TEST_F(MemfileLeaseMgrTest, GetTypeAndName) { + const LeaseMgr::ParameterMap pmap; // Empty parameter map + boost::scoped_ptr lease_mgr(new Memfile_LeaseMgr(pmap)); + + EXPECT_EQ(std::string("memfile"), lease_mgr->getType()); + EXPECT_EQ(std::string("memfile"), lease_mgr->getName()); +} + // There's no point in calling any other methods in LeaseMgr, as they // are purely virtual, so we would only call Memfile_LeaseMgr methods. // Those methods are just stubs that does not return anything. diff --git a/src/lib/dhcp/tests/mysql_lease_mgr_unittest.cc b/src/lib/dhcp/tests/mysql_lease_mgr_unittest.cc index a9b09ffbaeea57437c84ffb47b2be4733a9dcedf..fc43bb56f4e692efb91d3a53b996d72e80902f14 100644 --- a/src/lib/dhcp/tests/mysql_lease_mgr_unittest.cc +++ b/src/lib/dhcp/tests/mysql_lease_mgr_unittest.cc @@ -470,6 +470,10 @@ TEST(MySqlOpenTest, OpenDatabase) { destroySchema(); } +TEST_F(MySqlLeaseMgrTest, GetType) { + EXPECT_EQ(std::string("mysql"), lmptr_->getType()); +} + // @brief Check conversion functions TEST_F(MySqlLeaseMgrTest, CheckTimeConversion) { const time_t cltt = time(NULL);