]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#3035] add v6 relay options 18, 37 and 38 to run script
authorRazvan Becheriu <razvan@isc.org>
Wed, 5 Jun 2024 16:20:35 +0000 (19:20 +0300)
committerRazvan Becheriu <razvan@isc.org>
Thu, 6 Jun 2024 05:36:36 +0000 (08:36 +0300)
src/hooks/dhcp/run_script/run_script.cc
src/hooks/dhcp/run_script/run_script.h
src/hooks/dhcp/run_script/tests/run_script_unittests.cc

index a6a93031b84871620d4d14a708bb6e0bf6728307..6aecc7ab7b90c12371ebad5ebbdeae134a259a72 100644 (file)
@@ -447,6 +447,15 @@ RunScriptImpl::extractPkt6(ProcessEnvVars& vars,
                                      prefix + "_PROTO", suffix);
         RunScriptImpl::extractDUID(vars, pkt6->getClientId(),
                                    prefix + "_CLIENT_ID", suffix);
+        RunScriptImpl::extractOption(vars,
+                                     pkt6->getAnyRelayOption(D6O_INTERFACE_ID, Pkt6::RELAY_SEARCH_FROM_CLIENT),
+                                     prefix, suffix);
+        RunScriptImpl::extractOption(vars,
+                                     pkt6->getAnyRelayOption(D6O_REMOTE_ID, Pkt6::RELAY_SEARCH_FROM_CLIENT),
+                                     prefix, suffix);
+        RunScriptImpl::extractOption(vars,
+                                     pkt6->getAnyRelayOption(D6O_SUBSCRIBER_ID, Pkt6::RELAY_SEARCH_FROM_CLIENT),
+                                     prefix, suffix);
     } else {
         RunScriptImpl::extractString(vars, "", prefix + "_TYPE", suffix);
         RunScriptImpl::extractString(vars, "", prefix + "_TXID", suffix);
index 02423311e838f7d17a4b3db4c67405a7d4d25786..31fd2454d38e9dd52af2347876896049fa5a1d15 100644 (file)
@@ -8,6 +8,8 @@
 #define RUN_SCRIPT_H
 
 #include <asiolink/process_spawn.h>
+#include <dhcp/dhcp4.h>
+#include <dhcp/dhcp6.h>
 #include <dhcp/duid.h>
 #include <dhcp/hwaddr.h>
 #include <dhcp/option6_ia.h>
index 9292cc66c8897c58ef9c0c14c57232af37d24488..0b6d9203e20861078929165183f01d1790568022 100644 (file)
@@ -324,6 +324,40 @@ generatePkt6() {
     pkt6->addOption(OptionPtr(new Option(Option::V6, D6O_CLIENTID,
                               generateDUID()->getDuid())));
 
+    Pkt6::RelayInfo relay;
+    relay.msg_type_ = DHCPV6_RELAY_FORW;
+    relay.hop_count_ = 1;
+    relay.linkaddr_ = isc::asiolink::IOAddress("3001::1");
+    relay.peeraddr_ = isc::asiolink::IOAddress("fe80::abcd");
+
+    const uint8_t rem_data[] = {
+        1, 2, 3, 4,  // enterprise-number
+        0xa, 0xb, 0xc, 0xd, 0xe, 0xf // MAC
+    };
+
+    OptionPtr relay_opt(new Option(Option::V6, D6O_REMOTE_ID,
+                        OptionBuffer(rem_data, rem_data + sizeof(rem_data))));
+
+    relay.options_.insert(make_pair(relay_opt->getType(), relay_opt));
+
+    const uint8_t sub_data[] = {
+        0x1a, 0x2b, 0x3c, 0x4d, 0x5e, 0x6f
+    };
+
+    relay_opt.reset(new Option(Option::V6, D6O_SUBSCRIBER_ID,
+                        OptionBuffer(sub_data, sub_data + sizeof(sub_data))));
+
+    relay.options_.insert(make_pair(relay_opt->getType(), relay_opt));
+
+    const string iface_id("relay1:eth0");
+
+    relay_opt.reset(new Option(Option::V6, D6O_INTERFACE_ID,
+                               OptionBuffer(iface_id.begin(), iface_id.end())));
+
+    relay.options_.insert(make_pair(relay_opt->getType(), relay_opt));
+
+    pkt6->addRelayInfo(relay);
+
     return (pkt6);
 }
 
@@ -766,7 +800,7 @@ TEST(RunScript, extractPkt6) {
     vars.clear();
     pkt6 = generatePkt6();
     RunScriptImpl::extractPkt6(vars, pkt6, "PKT6_PREFIX", "_PKT6_SUFFIX");
-    ASSERT_EQ(12, vars.size());
+    ASSERT_EQ(15, vars.size());
     expected = "PKT6_PREFIX_TYPE_PKT6_SUFFIX=UNKNOWN\n"
                "PKT6_PREFIX_TXID_PKT6_SUFFIX=0\n"
                "PKT6_PREFIX_LOCAL_ADDR_PKT6_SUFFIX=ff02::1:2\n"
@@ -778,7 +812,10 @@ TEST(RunScript, extractPkt6) {
                "PKT6_PREFIX_REMOTE_HWADDR_PKT6_SUFFIX=00:01:02:03\n"
                "PKT6_PREFIX_REMOTE_HWADDR_TYPE_PKT6_SUFFIX=1\n"
                "PKT6_PREFIX_PROTO_PKT6_SUFFIX=UDP\n"
-               "PKT6_PREFIX_CLIENT_ID_PKT6_SUFFIX=00:01:02:03:04:05:06\n";
+               "PKT6_PREFIX_CLIENT_ID_PKT6_SUFFIX=00:01:02:03:04:05:06\n"
+               "PKT6_PREFIX_OPTION_18_PKT6_SUFFIX=0x72656C6179313A65746830\n"
+               "PKT6_PREFIX_OPTION_37_PKT6_SUFFIX=0x010203040A0B0C0D0E0F\n"
+               "PKT6_PREFIX_OPTION_38_PKT6_SUFFIX=0x1A2B3C4D5E6F\n";
     EXPECT_EQ(expected, join(vars));
 }