Browse Source

query4: check for hwaddr being NULL, and use getMAC() instead of getHWAddr()

getMAC() seems to be the generic interface (working for both IPv4 and
IPv6), while getHWAddr() is specific to IPv4.

In addition, getMAC() properly sets the "source" of the MAC address, while
getHWAddr() does not.
Baptiste Jonglez 7 years ago
parent
commit
747a8623aa
1 changed files with 10 additions and 4 deletions
  1. 10 4
      src/callouts.cc

+ 10 - 4
src/callouts.cc

@@ -29,10 +29,16 @@ void extract_query4(std::vector<std::string>& env, const Pkt4Ptr query)
     env.push_back("KEA_QUERY4_TYPE=" + std::string(query->getName()));
     env.push_back("KEA_QUERY4_INTERFACE=" + query->getIface());
     /* Hardware address */
-    HWAddrPtr hwaddr = query->getHWAddr();
-    env.push_back("KEA_QUERY4_HWADDR_TYPE=" + std::to_string(hwaddr->htype_));
-    env.push_back("KEA_QUERY4_HWADDR_SOURCE=" + std::to_string(hwaddr->source_));
-    env.push_back("KEA_QUERY4_HWADDR=" + hwaddr->toText(false));
+    HWAddrPtr hwaddr = query->getMAC(HWAddr::HWADDR_SOURCE_ANY);
+    if (hwaddr) {
+        env.push_back("KEA_QUERY4_HWADDR=" + hwaddr->toText(false));
+        env.push_back("KEA_QUERY4_HWADDR_TYPE=" + std::to_string(hwaddr->htype_));
+        env.push_back("KEA_QUERY4_HWADDR_SOURCE=" + std::to_string(hwaddr->source_));
+    } else {
+        env.push_back("KEA_QUERY4_HWADDR=");
+        env.push_back("KEA_QUERY4_HWADDR_TYPE=");
+        env.push_back("KEA_QUERY4_HWADDR_SOURCE=");
+    }
     /* Misc */
     env.push_back("KEA_QUERY4_CIADDR=" + query->getCiaddr().toText());
     env.push_back("KEA_QUERY4_SIADDR=" + query->getSiaddr().toText());