Skip to content

Commit 3c3beb1

Browse files
author
Razvan Becheriu
committed
[#3035] add v6 relay options 18, 37 and 38 to run script
1 parent 158b365 commit 3c3beb1

File tree

3 files changed

+50
-2
lines changed

3 files changed

+50
-2
lines changed

src/hooks/dhcp/run_script/run_script.cc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,15 @@ RunScriptImpl::extractPkt6(ProcessEnvVars& vars,
447447
prefix + "_PROTO", suffix);
448448
RunScriptImpl::extractDUID(vars, pkt6->getClientId(),
449449
prefix + "_CLIENT_ID", suffix);
450+
RunScriptImpl::extractOption(vars,
451+
pkt6->getAnyRelayOption(D6O_INTERFACE_ID, Pkt6::RELAY_SEARCH_FROM_CLIENT),
452+
prefix, suffix);
453+
RunScriptImpl::extractOption(vars,
454+
pkt6->getAnyRelayOption(D6O_REMOTE_ID, Pkt6::RELAY_SEARCH_FROM_CLIENT),
455+
prefix, suffix);
456+
RunScriptImpl::extractOption(vars,
457+
pkt6->getAnyRelayOption(D6O_SUBSCRIBER_ID, Pkt6::RELAY_SEARCH_FROM_CLIENT),
458+
prefix, suffix);
450459
} else {
451460
RunScriptImpl::extractString(vars, "", prefix + "_TYPE", suffix);
452461
RunScriptImpl::extractString(vars, "", prefix + "_TXID", suffix);

src/hooks/dhcp/run_script/run_script.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
#define RUN_SCRIPT_H
99

1010
#include <asiolink/process_spawn.h>
11+
#include <dhcp/dhcp4.h>
12+
#include <dhcp/dhcp6.h>
1113
#include <dhcp/duid.h>
1214
#include <dhcp/hwaddr.h>
1315
#include <dhcp/option6_ia.h>

src/hooks/dhcp/run_script/tests/run_script_unittests.cc

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,40 @@ generatePkt6() {
324324
pkt6->addOption(OptionPtr(new Option(Option::V6, D6O_CLIENTID,
325325
generateDUID()->getDuid())));
326326

327+
Pkt6::RelayInfo relay;
328+
relay.msg_type_ = DHCPV6_RELAY_FORW;
329+
relay.hop_count_ = 1;
330+
relay.linkaddr_ = isc::asiolink::IOAddress("3001::1");
331+
relay.peeraddr_ = isc::asiolink::IOAddress("fe80::abcd");
332+
333+
const uint8_t rem_data[] = {
334+
1, 2, 3, 4, // enterprise-number
335+
0xa, 0xb, 0xc, 0xd, 0xe, 0xf // MAC
336+
};
337+
338+
OptionPtr relay_opt(new Option(Option::V6, D6O_REMOTE_ID,
339+
OptionBuffer(rem_data, rem_data + sizeof(rem_data))));
340+
341+
relay.options_.insert(make_pair(relay_opt->getType(), relay_opt));
342+
343+
const uint8_t sub_data[] = {
344+
0x1a, 0x2b, 0x3c, 0x4d, 0x5e, 0x6f
345+
};
346+
347+
relay_opt.reset(new Option(Option::V6, D6O_SUBSCRIBER_ID,
348+
OptionBuffer(sub_data, sub_data + sizeof(sub_data))));
349+
350+
relay.options_.insert(make_pair(relay_opt->getType(), relay_opt));
351+
352+
const string iface_id("relay1:eth0");
353+
354+
relay_opt.reset(new Option(Option::V6, D6O_INTERFACE_ID,
355+
OptionBuffer(iface_id.begin(), iface_id.end())));
356+
357+
relay.options_.insert(make_pair(relay_opt->getType(), relay_opt));
358+
359+
pkt6->addRelayInfo(relay);
360+
327361
return (pkt6);
328362
}
329363

@@ -766,7 +800,7 @@ TEST(RunScript, extractPkt6) {
766800
vars.clear();
767801
pkt6 = generatePkt6();
768802
RunScriptImpl::extractPkt6(vars, pkt6, "PKT6_PREFIX", "_PKT6_SUFFIX");
769-
ASSERT_EQ(12, vars.size());
803+
ASSERT_EQ(15, vars.size());
770804
expected = "PKT6_PREFIX_TYPE_PKT6_SUFFIX=UNKNOWN\n"
771805
"PKT6_PREFIX_TXID_PKT6_SUFFIX=0\n"
772806
"PKT6_PREFIX_LOCAL_ADDR_PKT6_SUFFIX=ff02::1:2\n"
@@ -778,7 +812,10 @@ TEST(RunScript, extractPkt6) {
778812
"PKT6_PREFIX_REMOTE_HWADDR_PKT6_SUFFIX=00:01:02:03\n"
779813
"PKT6_PREFIX_REMOTE_HWADDR_TYPE_PKT6_SUFFIX=1\n"
780814
"PKT6_PREFIX_PROTO_PKT6_SUFFIX=UDP\n"
781-
"PKT6_PREFIX_CLIENT_ID_PKT6_SUFFIX=00:01:02:03:04:05:06\n";
815+
"PKT6_PREFIX_CLIENT_ID_PKT6_SUFFIX=00:01:02:03:04:05:06\n"
816+
"PKT6_PREFIX_OPTION_18_PKT6_SUFFIX=0x72656C6179313A65746830\n"
817+
"PKT6_PREFIX_OPTION_37_PKT6_SUFFIX=0x010203040A0B0C0D0E0F\n"
818+
"PKT6_PREFIX_OPTION_38_PKT6_SUFFIX=0x1A2B3C4D5E6F\n";
782819
EXPECT_EQ(expected, join(vars));
783820
}
784821

0 commit comments

Comments
 (0)