Parcourir la source

Extract relevant information for pkt4_receive hook point

Baptiste Jonglez il y a 7 ans
Parent
commit
1a3f0f6a3a
2 fichiers modifiés avec 24 ajouts et 5 suppressions
  1. 11 2
      src/lease_select.cc
  2. 13 3
      src/pkt_receive.cc

+ 11 - 2
src/lease_select.cc

@@ -2,6 +2,7 @@
 #include <dhcp/pkt4.h>
 #include <dhcp/dhcp6.h>
 #include <dhcp/pkt6.h>
+#include <dhcpsrv/subnet.h>
 #include <dhcpsrv/lease.h>
 
 #include <string>
@@ -15,9 +16,17 @@ using namespace isc::hooks;
 extern "C" {
 
 int lease4_select(CalloutHandle& handle) {
-    int ret;
     std::vector<std::string> env;
-    env.push_back("FOO=bar");
+    Pkt4Ptr query;
+    Subnet4Ptr subnet;
+    bool fake_allocation;
+    Lease4Ptr lease;
+    handle.getArgument("query4", query);
+    handle.getArgument("subnet4", subnet);
+    handle.getArgument("fake_allocation", fake_allocation);
+    handle.getArgument("lease4", lease);
+    /* Run script */
+    int ret;
     ret = run_script("lease4_select", env);
     fprintf(stderr, "ret = %d\n", ret);
     return 0;

+ 13 - 3
src/pkt_receive.cc

@@ -14,10 +14,20 @@ using namespace isc::hooks;
 extern "C" {
 
 int pkt4_receive(CalloutHandle& handle) {
-    int ret;
     std::vector<std::string> env;
-    env.push_back("DHCP4_RELAYED=1");
-    env.push_back("HWADDR_TYPE=foo");
+    Pkt4Ptr query;
+    handle.getArgument("query4", query);
+    /* General information */
+    env.push_back("DHCP4_TYPE=" + std::to_string(query->getType()));
+    /* Hardware address */
+    HWAddrPtr hwaddr = query->getHWAddr();
+    env.push_back("HWADDR_TYPE=" + std::to_string(hwaddr->htype_));
+    env.push_back("HWADDR_SOURCE=" + std::to_string(hwaddr->source_));
+    env.push_back("HWADDR=" + hwaddr->toText(false));
+    /* Misc */
+    env.push_back("DHCP4_RELAYED=" + std::to_string(query->isRelayed()));
+    /* Run script */
+    int ret;
     ret = run_script("pkt4_receive", env);
     fprintf(stderr, "ret = %d\n", ret);
     return 0;