Browse Source

[2983] Server now handles v4 packet without message type option correctly.

Tomek Mrugalski 11 years ago
parent
commit
949fc23ebb
2 changed files with 9 additions and 3 deletions
  1. 4 0
      src/bin/dhcp4/dhcp4_messages.mes
  2. 5 3
      src/bin/dhcp4/dhcp4_srv.cc

+ 4 - 0
src/bin/dhcp4/dhcp4_messages.mes

@@ -158,6 +158,10 @@ This is a general catch-all message indicating that the processing of a
 received packet failed.  The reason is given in the message.  The server
 will not send a response but will instead ignore the packet.
 
+% DHCP4_PACKET_DROP_NO_TYPE dropped packet received on interface %1: does not have msg-type option
+THis is a debug message informing that incoming DHCPv4 packet did not
+have mandatory DHCP message type option and thus was dropped.
+
 % DHCP4_PACKET_RECEIVED %1 (type %2) packet received on interface %3
 A debug message noting that the server has received the specified type of
 packet on the specified interface.  Note that a packet marked as UNKNOWN

+ 5 - 3
src/bin/dhcp4/dhcp4_srv.cc

@@ -241,12 +241,14 @@ Dhcpv4Srv::run() {
         int type = -1;
         try {
             type = query->getType();
-        } catch (const std::exception& e) {
-
+        } catch (...) {
+            LOG_DEBUG(dhcp4_logger, DBG_DHCP4_DETAIL, DHCP4_PACKET_DROP_NO_TYPE)
+                .arg(query->getIface());
+            continue;
         }
 
         LOG_DEBUG(dhcp4_logger, DBG_DHCP4_DETAIL, DHCP4_PACKET_RECEIVED)
-            .arg(serverReceivedPacketName(query->getType()))
+            .arg(serverReceivedPacketName(type))
             .arg(type)
             .arg(query->getIface());
         LOG_DEBUG(dhcp4_logger, DBG_DHCP4_DETAIL_DATA, DHCP4_QUERY_DATA)