]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[4109a] Rebased
authorFrancis Dupont <fdupont@isc.org>
Thu, 16 Jun 2016 20:00:41 +0000 (22:00 +0200)
committerFrancis Dupont <fdupont@isc.org>
Thu, 16 Jun 2016 20:00:41 +0000 (22:00 +0200)
src/bin/dhcp6/dhcp6_srv.cc
src/bin/dhcp6/dhcp6_srv.h

index b8159a15a423d1db8e34dc3c5ae00d36c97c9c9d..182cf3386bd551b6894712557b66963237236322 100644 (file)
@@ -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));
index a49ac51cb56dd521e2db7362e2b7da0eeac92285..0c9f6c22166916ce0ceaa0153a76267c4d87fd33 100644 (file)
@@ -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