Browse Source

[4109a] Rebased

Francis Dupont 8 years ago
parent
commit
d66833c0b8
2 changed files with 30 additions and 0 deletions
  1. 24 0
      src/bin/dhcp6/dhcp6_srv.cc
  2. 6 0
      src/bin/dhcp6/dhcp6_srv.h

+ 24 - 0
src/bin/dhcp6/dhcp6_srv.cc

@@ -631,6 +631,10 @@ Dhcpv6Srv::processPacket(Pkt6Ptr& query, Pkt6Ptr& rsp) {
             rsp = processInfRequest(query);
             break;
 
+        case DHCPV6_DHCPV4_QUERY:
+            rsp = processDhcp4Query(query);
+            break;
+
         default:
             // We received a packet type that we do not recognize.
             LOG_DEBUG(bad_packet6_logger, DBG_DHCP6_BASIC, DHCP6_UNKNOWN_MSG_RECEIVED)
@@ -2784,6 +2788,26 @@ Dhcpv6Srv::processInfRequest(const Pkt6Ptr& inf_request) {
     return (reply);
 }
 
+Pkt6Ptr
+Dhcpv6Srv::processDhcp4Query(const Pkt6Ptr& dhcp4_query) {
+
+    sanityCheck(dhcp4_query, OPTIONAL, OPTIONAL);
+
+    // flags are in transid
+    // uint32_t flags = dhcp4_query->getTransid();
+    // do nothing with DHCPV4_QUERY_FLAGS_UNICAST
+
+    // Get the DHCPv4 message option
+    OptionPtr dhcp4_msg = dhcp4_query->getOption(D6O_DHCPV4_MSG);
+    if (dhcp4_msg) {
+        // Forward the whole message to the DHCPv4 server via IPC
+        Dhcp6to4Ipc::instance().send(dhcp4_query);
+    }
+
+    // Our job is finished
+    return (Pkt6Ptr());
+}
+
 void Dhcpv6Srv::classifyByVendor(const Pkt6Ptr& pkt, std::string& classes) {
     OptionVendorClassPtr vclass = boost::dynamic_pointer_cast<
         OptionVendorClass>(pkt->getOption(D6O_VENDOR_CLASS));

+ 6 - 0
src/bin/dhcp6/dhcp6_srv.h

@@ -289,6 +289,12 @@ protected:
     /// @return Reply message to be sent to the client.
     Pkt6Ptr processInfRequest(const Pkt6Ptr& inf_request);
 
+    /// @brief Processes incoming DHCPv4-query message.
+    ///
+    /// @param dhcp4_query message received from client
+    /// @return Reply (empty) message to (not) be sent to the client.
+    Pkt6Ptr processDhcp4Query(const Pkt6Ptr& dhcp4_query);
+
     /// @brief Selects a subnet for a given client's packet.
     ///
     /// @param question client's message