Skip to content

Commit 4c40c4e

Browse files
author
Razvan Becheriu
committed
[#3826] Implemented lease6-get-by-hw-address command.
1 parent 8da73b8 commit 4c40c4e

35 files changed

+746
-57
lines changed

doc/sphinx/api-files.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ src/share/api/lease6-del.json
6161
src/share/api/lease6-get.json
6262
src/share/api/lease6-get-all.json
6363
src/share/api/lease6-get-by-duid.json
64+
src/share/api/lease6-get-by-hw-address.json
6465
src/share/api/lease6-get-by-hostname.json
6566
src/share/api/lease6-get-page.json
6667
src/share/api/lease6-resend-ddns.json

doc/sphinx/arm/hooks-lease-cmds.rst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,9 @@ This library provides the following commands:
7171
- :isccmd:`lease4-get-by-hw-address` - returns all IPv4 leases with the specified
7272
hardware address.
7373

74+
- :isccmd:`lease6-get-by-hw-address` - returns all IPv6 leases with the specified
75+
hardware address.
76+
7477
- :isccmd:`lease4-get-by-client-id` - returns all IPv4 leases with the specified
7578
``client-id``.
7679

@@ -751,6 +754,9 @@ leases were found.
751754
.. isccmd:: lease4-get-by-hw-address
752755
.. _command-lease4-get-by-hw-address:
753756

757+
.. isccmd:: lease6-get-by-hw-address
758+
.. _command-lease6-get-by-hw-address:
759+
754760
.. isccmd:: lease4-get-by-client-id
755761
.. _command-lease4-get-by-client-id:
756762

src/hooks/dhcp/lease_cmds/lease_cmds.cc

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ class LeaseCmdsImpl : private CmdsImpl {
194194
int
195195
leaseGetPageHandler(hooks::CalloutHandle& handle);
196196

197-
/// @brief lease4-get-by-hw-address command handler
197+
/// @brief lease4-get-by-hw-address, lease6-get-by-hw-address command handler
198198
///
199199
/// Provides the implementation for @ref isc::lease_cmds::LeaseCmds::leaseGetByHwAddressHandler
200200
///
@@ -1576,8 +1576,10 @@ LeaseCmdsImpl::leaseGetPageHandler(CalloutHandle& handle) {
15761576

15771577
int
15781578
LeaseCmdsImpl::leaseGetByHwAddressHandler(CalloutHandle& handle) {
1579+
bool v4 = true;
15791580
try {
15801581
extractCommand(handle);
1582+
v4 = (cmd_name_ == "lease4-get-by-hw-address");
15811583

15821584
// arguments must always be present
15831585
if (!cmd_args_ || (cmd_args_->getType() != Element::map)) {
@@ -1597,16 +1599,28 @@ LeaseCmdsImpl::leaseGetByHwAddressHandler(CalloutHandle& handle) {
15971599

15981600
HWAddr hwaddr = HWAddr::fromText(hw_address->stringValue());
15991601

1600-
Lease4Collection leases =
1601-
LeaseMgrFactory::instance().getLease4(hwaddr);
16021602
ElementPtr leases_json = Element::createList();
1603-
for (auto const& lease : leases) {
1604-
ElementPtr lease_json = lease->toElement();
1605-
leases_json->add(lease_json);
1603+
1604+
if (v4) {
1605+
Lease4Collection leases =
1606+
LeaseMgrFactory::instance().getLease4(hwaddr);
1607+
for (auto const& lease : leases) {
1608+
ElementPtr lease_json = lease->toElement();
1609+
leases_json->add(lease_json);
1610+
}
1611+
} else {
1612+
Lease6Collection leases =
1613+
LeaseMgrFactory::instance().getLease6(hwaddr);
1614+
for (auto const& lease : leases) {
1615+
ElementPtr lease_json = lease->toElement();
1616+
leases_json->add(lease_json);
1617+
}
16061618
}
16071619

16081620
std::ostringstream s;
1609-
s << leases_json->size() << " IPv4 lease(s) found.";
1621+
s << leases_json->size()
1622+
<< " IPv" << (v4 ? "4" : "6")
1623+
<< " lease(s) found.";
16101624
ElementPtr args = Element::createMap();
16111625
args->set("leases", leases_json);
16121626
ConstElementPtr response =

src/hooks/dhcp/lease_cmds/lease_cmds.dox

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ For details see documentation and code of the following handlers:
6464
- @ref isc::lease_cmds::LeaseCmdsImpl::leaseGetHandler (lease4-get, lease6-get)
6565
- @ref isc::lease_cmds::LeaseCmdsImpl::leaseGetAllHandler(lease4-get-all, lease6-get-all)
6666
- @ref isc::lease_cmds::LeaseCmdsImpl::leaseGetPageHandler(lease4-get-page, lease6-get-page)
67-
- @ref isc::lease_cmds::LeaseCmdsImpl::leaseGetByHwAddressHandler(lease4-get-by-hw-address)
67+
- @ref isc::lease_cmds::LeaseCmdsImpl::leaseGetByHwAddressHandler(lease4-get-by-hw-address, lease6-get-by-hw-address)
6868
- @ref isc::lease_cmds::LeaseCmdsImpl::leaseGetByClientIdHandler(lease4-get-by-client-id)
6969
- @ref isc::lease_cmds::LeaseCmdsImpl::leaseGetByDuidHandler(lease6-get-by-duid)
7070
- @ref isc::lease_cmds::LeaseCmdsImpl::leaseGetByHostnameHandler(lease4-get-by-hostname, lease6-get-by-hostname)

src/hooks/dhcp/lease_cmds/lease_cmds.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -262,12 +262,12 @@ class LeaseCmds {
262262
int
263263
leaseGetPageHandler(hooks::CalloutHandle& handle);
264264

265-
/// @brief lease4-get-by-hw-address command handler
265+
/// @brief lease4-get-by-hw-address, lease6-get-by-hw-address command handler
266266
///
267-
/// This command attempts to retrieve all IPv4 leases with a particular
267+
/// This command attempts to retrieve all IPv4 or IPv6 leases with a particular
268268
/// hardware address.
269269
///
270-
/// Example command:
270+
/// Example command for IPv4:
271271
/// {
272272
/// "command": "lease4-get-by-hw-address",
273273
/// "arguments": {

src/hooks/dhcp/lease_cmds/lease_cmds_callouts.cc

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,17 @@ int lease4_get_by_hw_address(CalloutHandle& handle) {
147147
return (lease_cmds.leaseGetByHwAddressHandler(handle));
148148
}
149149

150+
/// @brief This is a command callout for 'lease6-get-by-hw-address' command.
151+
///
152+
/// @param handle Callout handle used to retrieve a command and
153+
/// provide a response.
154+
/// @return 0 if this callout has been invoked successfully,
155+
/// 1 if an error occurs, 3 if no leases are returned.
156+
int lease6_get_by_hw_address(CalloutHandle& handle) {
157+
LeaseCmds lease_cmds;
158+
return (lease_cmds.leaseGetByHwAddressHandler(handle));
159+
}
160+
150161
/// @brief This is a command callout for 'lease4-get-by-client-id' command.
151162
///
152163
/// @param handle Callout handle used to retrieve a command and
@@ -332,6 +343,8 @@ int load(LibraryHandle& handle) {
332343
handle.registerCommandCallout("lease6-get-page", lease6_get_page);
333344
handle.registerCommandCallout("lease4-get-by-hw-address",
334345
lease4_get_by_hw_address);
346+
handle.registerCommandCallout("lease6-get-by-hw-address",
347+
lease6_get_by_hw_address);
335348
handle.registerCommandCallout("lease4-get-by-client-id",
336349
lease4_get_by_client_id);
337350
handle.registerCommandCallout("lease6-get-by-duid", lease6_get_by_duid);

0 commit comments

Comments
 (0)