Browse Source

[2414] Allocation process is now logged properly.

Tomek Mrugalski 12 years ago
parent
commit
3d69190c34
2 changed files with 54 additions and 14 deletions
  1. 32 0
      src/bin/dhcp6/dhcp6_messages.mes
  2. 22 14
      src/bin/dhcp6/dhcp6_srv.cc

+ 32 - 0
src/bin/dhcp6/dhcp6_messages.mes

@@ -30,6 +30,11 @@ from the BIND 10 control system by the IPv6 DHCP server.
 A debug message indicating that the IPv6 DHCP server has received an
 A debug message indicating that the IPv6 DHCP server has received an
 updated configuration from the BIND 10 configuration system.
 updated configuration from the BIND 10 configuration system.
 
 
+% DHCP6_DB_BACKEND_STARTED Lease database started (backend type: %1)
+This informational message is printed every time DHCPv6 is started.
+It indicates which backend type will be used throughout the server
+operation.
+
 % DHCP6_NOT_RUNNING IPv6 DHCP server is not running
 % DHCP6_NOT_RUNNING IPv6 DHCP server is not running
 A warning message is issued when an attempt is made to shut down the
 A warning message is issued when an attempt is made to shut down the
 IPv6 DHCP server but it is not running.
 IPv6 DHCP server but it is not running.
@@ -42,6 +47,17 @@ interfaces and is therefore shutting down.
 A debug message issued during startup, this indicates that the IPv6 DHCP
 A debug message issued during startup, this indicates that the IPv6 DHCP
 server is about to open sockets on the specified port.
 server is about to open sockets on the specified port.
 
 
+% DHCP6_LEASE_ALLOC Lease %1 %2 allocated (client duid=%3, iaid=%4)
+This debug message indicates that the server successfully advertised (i.e.
+responded to SOLICIT) or granted (i.e. responded to REQUEST) a lease.
+This is a normal behavior and incicates successful operation.
+
+% DHCP6_LEASE_ALLOC_FAIL Failed to %1 a lease for client duid=%2, iaid=%3
+This message indicates that the server failed to advertise (i.e. respond
+to SOLICIT) or grant (i.e. respond to REQUEST) a lease for a given client.
+There may be many reasons for such failure. Each specific failure is logged
+in a separate log entry.
+
 % DHCP6_PACKET_PARSE_FAIL failed to parse incoming packet
 % DHCP6_PACKET_PARSE_FAIL failed to parse incoming packet
 The IPv6 DHCP server has received a packet that it is unable to interpret.
 The IPv6 DHCP server has received a packet that it is unable to interpret.
 
 
@@ -66,6 +82,11 @@ This error is output if the server failed to assemble the data to be
 returned to the client into a valid packet.  The reason is most likely
 returned to the client into a valid packet.  The reason is most likely
 to be to a programming error: please raise a bug report.
 to be to a programming error: please raise a bug report.
 
 
+% DHCP6_PROCESS_IA_NA_REQUEST Server is processing IA_NA option (duid=%1, iaid=%2, hint=%3)
+This is a debug message that indicates a processing of received IA_NA
+option. It may optionally contain an address that may be used by the server
+as a hint for possible requested address.
+
 % DHCP6_QUERY_DATA received packet length %1, data length %2, data is %3
 % DHCP6_QUERY_DATA received packet length %1, data length %2, data is %3
 A debug message listing the data received from the client or relay.
 A debug message listing the data received from the client or relay.
 
 
@@ -110,6 +131,17 @@ This is a debug message issued during the IPv6 DHCP server startup.
 It lists some information about the parameters with which the server
 It lists some information about the parameters with which the server
 is running.
 is running.
 
 
+% DHCP6_SUBNET_SELECTED The %s subnet was selected for client assignment
+This is a debug message informing that a given subnet was selected. It will
+be used for address and option assignment. This is one of the early steps
+in the processing of incoming client message.
+
+% DHCP6_SUBNET_SELECTION_FAILED Failed to select a subnet for incoming packet, src=%1 type=%2
+This is a warning message that a packet was received, but the server is
+not configured to support the subnet the packet originated from. This
+message means that the received traffic does not match server configuration
+and is likely a configuration issue.
+
 % DHCP6_CONFIG_LOAD_FAIL failed to load configuration: %1
 % DHCP6_CONFIG_LOAD_FAIL failed to load configuration: %1
 This critical error message indicates that the initial DHCPv6
 This critical error message indicates that the initial DHCPv6
 configuration has failed. The server will start, but nothing will be
 configuration has failed. The server will start, but nothing will be

+ 22 - 14
src/bin/dhcp6/dhcp6_srv.cc

@@ -79,6 +79,9 @@ Dhcpv6Srv::Dhcpv6Srv(uint16_t port) {
     // @todo: Replace this with MySQL_LeaseMgr once it is merged
     // @todo: Replace this with MySQL_LeaseMgr once it is merged
     new isc::dhcp::test::Memfile_LeaseMgr("");
     new isc::dhcp::test::Memfile_LeaseMgr("");
 
 
+    LOG_INFO(dhcp6_logger, DHCP6_DB_BACKEND_STARTED)
+        .arg(LeaseMgr::instance().getName());
+
     // Instantiate allocation engine
     // Instantiate allocation engine
     alloc_engine_ = new AllocEngine(AllocEngine::ALLOC_ITERATIVE, 100);
     alloc_engine_ = new AllocEngine(AllocEngine::ALLOC_ITERATIVE, 100);
 
 
@@ -330,9 +333,12 @@ void Dhcpv6Srv::assignLeases(const Pkt6Ptr& question, Pkt6Ptr& answer) {
 
 
     Subnet6Ptr subnet = selectSubnet(question);
     Subnet6Ptr subnet = selectSubnet(question);
     if (subnet) {
     if (subnet) {
-        cout << "#### Selected subnet " << subnet->toText() << endl;
+        LOG_DEBUG(dhcp6_logger, DBG_DHCP6_DETAIL_DATA, DHCP6_SUBNET_SELECTED)
+            .arg(subnet->toText());
     } else {
     } else {
-        cout << "#### Failed to select a subnet" << endl;
+        // perhaps this should be logged on some higher level? This is most likely
+        // configuration bug.
+        LOG_DEBUG(dhcp6_logger, DBG_DHCP6_BASIC, DHCP6_SUBNET_SELECTION_FAILED);
     }
     }
 
 
     // @todo: We should implement Option6Duid some day, but we can do without it
     // @todo: We should implement Option6Duid some day, but we can do without it
@@ -342,11 +348,6 @@ void Dhcpv6Srv::assignLeases(const Pkt6Ptr& question, Pkt6Ptr& answer) {
     if (opt_duid) {
     if (opt_duid) {
         duid = DuidPtr(new DUID(opt_duid->getData()));
         duid = DuidPtr(new DUID(opt_duid->getData()));
     }
     }
-    if (duid) {
-        cout << "#### Processing request from client with duid=" << duid->toText() << endl;
-    } else {
-        cout << "#### Failed to find client-id :(" << endl;
-    }
 
 
     for (Option::OptionCollection::iterator opt = question->options_.begin();
     for (Option::OptionCollection::iterator opt = question->options_.begin();
          opt != question->options_.end(); ++opt) {
          opt != question->options_.end(); ++opt) {
@@ -375,16 +376,15 @@ OptionPtr Dhcpv6Srv::handleIA_NA(const Subnet6Ptr& subnet, const DuidPtr& duid,
     }
     }
 
 
     shared_ptr<Option6IAAddr> hintOpt = dynamic_pointer_cast<Option6IAAddr>(ia->getOption(D6O_IAADDR));
     shared_ptr<Option6IAAddr> hintOpt = dynamic_pointer_cast<Option6IAAddr>(ia->getOption(D6O_IAADDR));
-
     IOAddress hint("::");
     IOAddress hint("::");
-    cout << "#### Processing request IA_NA: iaid=" << ia->getIAID();
     if (hintOpt) {
     if (hintOpt) {
         hint = hintOpt->getAddress();
         hint = hintOpt->getAddress();
-        cout << ", hint=" << hint.toText() << endl;
-    } else {
-        cout << ", no hint provided" << endl;
     }
     }
 
 
+    LOG_DEBUG(dhcp6_logger, DBG_DHCP6_DETAIL, DHCP6_PROCESS_IA_NA_REQUEST)
+        .arg(duid?duid->toText():"(no-duid)").arg(ia->getIAID())
+        .arg(hintOpt?hint.toText():"(no hint)");
+
     bool fake_allocation = false;
     bool fake_allocation = false;
     if (question->getType() == DHCPV6_SOLICIT) {
     if (question->getType() == DHCPV6_SOLICIT) {
         /// @todo: Check if we support rapid commit
         /// @todo: Check if we support rapid commit
@@ -397,7 +397,11 @@ OptionPtr Dhcpv6Srv::handleIA_NA(const Subnet6Ptr& subnet, const DuidPtr& duid,
     boost::shared_ptr<Option6IA> ia_rsp(new Option6IA(D6O_IA_NA, ia->getIAID()));
     boost::shared_ptr<Option6IA> ia_rsp(new Option6IA(D6O_IA_NA, ia->getIAID()));
 
 
     if (lease) {
     if (lease) {
-        cout << "#### Allocated lease:" << lease->addr_.toText() << endl;
+        LOG_DEBUG(dhcp6_logger, DBG_DHCP6_DETAIL, DHCP6_LEASE_ALLOC)
+            .arg(lease->addr_.toText())
+            .arg(fake_allocation?"would be":"has been")
+            .arg(duid?duid->toText():"(no-duid)")
+            .arg(ia->getIAID());
 
 
         ia_rsp->setT1(subnet->getT1());
         ia_rsp->setT1(subnet->getT1());
         ia_rsp->setT2(subnet->getT2());
         ia_rsp->setT2(subnet->getT2());
@@ -409,7 +413,11 @@ OptionPtr Dhcpv6Srv::handleIA_NA(const Subnet6Ptr& subnet, const DuidPtr& duid,
                                    lease->valid_lft_));
                                    lease->valid_lft_));
         ia_rsp->addOption(addr);
         ia_rsp->addOption(addr);
     } else {
     } else {
-        cout << "#### Failed to allocate a lease";
+        LOG_DEBUG(dhcp6_logger, DBG_DHCP6_DETAIL, DHCP6_LEASE_ALLOC_FAIL)
+            .arg(fake_allocation?"advertise":"grant")
+            .arg(duid?duid->toText():"(no-duid)")
+            .arg(ia->getIAID())
+            .arg(subnet->toText());
 
 
         ia_rsp->addOption(createStatusCode(STATUS_NoAddrsAvail, "Sorry, no address could be allocated."));
         ia_rsp->addOption(createStatusCode(STATUS_NoAddrsAvail, "Sorry, no address could be allocated."));
     }
     }