From fda083c2596a6b6be03eaa27468d95d1c97f156e Mon Sep 17 00:00:00 2001 From: Razvan Becheriu Date: Tue, 16 May 2023 16:31:08 +0300 Subject: [PATCH] [#2629] added origin for ha lease commands --- doc/sphinx/arm/hooks-legal-log.rst | 40 +++++++++++++++++++ .../dhcp/high_availability/command_creator.cc | 6 +++ .../tests/command_creator_unittest.cc | 12 ++++++ 3 files changed, 58 insertions(+) diff --git a/doc/sphinx/arm/hooks-legal-log.rst b/doc/sphinx/arm/hooks-legal-log.rst index 30eb1c0b5a..68d0d315ab 100644 --- a/doc/sphinx/arm/hooks-legal-log.rst +++ b/doc/sphinx/arm/hooks-legal-log.rst @@ -425,6 +425,26 @@ Examples: 2018-01-06 01:02:12 CET Administrator deleted a lease for a device identified by: hw-address of 1a:1b:1c:1d:1e:1f +If High availability module is enabled, the partner will periodically send lease +commands which have a similar format, the only difference is that the issuer of +the command is 'HA partner' instead of 'Administrator'. + +:: + + *timestamp* HA partner added ... + +or + +:: + + *timestamp* HA partner updated ... + +or + +:: + + *timestamp* HA partner deleted ... + The ``request-parser-format`` and ``response-parser-format`` options can be used to extract and log data from the incoming packet and server response packet, respectively. The configured value is an evaluated parsed expression returning a @@ -730,6 +750,26 @@ Examples: 2018-01-06 01:02:11 PST Administrator deleted a lease for a device identified by: duid of 1a:1b:1c:1d:1e:1f:20:21:22:23:24 +If High availability module is enabled, the partner will periodically send lease +commands which have a similar format, the only difference is that the issuer of +the command is 'HA partner' instead of 'Administrator'. + +:: + + *timestamp* HA partner added ... + +or + +:: + + *timestamp* HA partner updated ... + +or + +:: + + *timestamp* HA partner deleted ... + The ``request-parser-format`` and ``response-parser-format`` options can be used to extract and log data from the incoming packet and server response packet, respectively. The configured value is an evaluated parsed expression returning a diff --git a/src/hooks/dhcp/high_availability/command_creator.cc b/src/hooks/dhcp/high_availability/command_creator.cc index 4fa0b02b58..77eb88703e 100644 --- a/src/hooks/dhcp/high_availability/command_creator.cc +++ b/src/hooks/dhcp/high_availability/command_creator.cc @@ -81,6 +81,7 @@ CommandCreator::createLease4Update(const Lease4& lease4) { ElementPtr lease_as_json = lease4.toElement(); insertLeaseExpireTime(lease_as_json); lease_as_json->set("force-create", Element::create(true)); + lease_as_json->set("origin", Element::create("ha-partner")); ConstElementPtr command = config::createCommand("lease4-update", lease_as_json); insertService(command, HAServerType::DHCPv4); return (command); @@ -90,6 +91,7 @@ ConstElementPtr CommandCreator::createLease4Delete(const Lease4& lease4) { ElementPtr lease_as_json = lease4.toElement(); insertLeaseExpireTime(lease_as_json); + lease_as_json->set("origin", Element::create("ha-partner")); ConstElementPtr command = config::createCommand("lease4-del", lease_as_json); insertService(command, HAServerType::DHCPv4); return (command); @@ -149,6 +151,7 @@ CommandCreator::createLease6BulkApply(const Lease6CollectionPtr& leases, ElementPtr args = Element::createMap(); args->set("deleted-leases", deleted_leases_list); args->set("leases", leases_list); + args->set("origin", Element::create("ha-partner")); ConstElementPtr command = config::createCommand("lease6-bulk-apply", args); insertService(command, HAServerType::DHCPv6); @@ -175,6 +178,7 @@ CommandCreator::createLease6BulkApply(LeaseUpdateBacklog& leases) { ElementPtr args = Element::createMap(); args->set("deleted-leases", deleted_leases_list); args->set("leases", leases_list); + args->set("origin", Element::create("ha-partner")); ConstElementPtr command = config::createCommand("lease6-bulk-apply", args); insertService(command, HAServerType::DHCPv6); @@ -186,6 +190,7 @@ CommandCreator::createLease6Update(const Lease6& lease6) { ElementPtr lease_as_json = lease6.toElement(); insertLeaseExpireTime(lease_as_json); lease_as_json->set("force-create", Element::create(true)); + lease_as_json->set("origin", Element::create("ha-partner")); ConstElementPtr command = config::createCommand("lease6-update", lease_as_json); insertService(command, HAServerType::DHCPv6); return (command); @@ -195,6 +200,7 @@ ConstElementPtr CommandCreator::createLease6Delete(const Lease6& lease6) { ElementPtr lease_as_json = lease6.toElement(); insertLeaseExpireTime(lease_as_json); + lease_as_json->set("origin", Element::create("ha-partner")); ConstElementPtr command = config::createCommand("lease6-del", lease_as_json); insertService(command, HAServerType::DHCPv6); return (command); diff --git a/src/hooks/dhcp/high_availability/tests/command_creator_unittest.cc b/src/hooks/dhcp/high_availability/tests/command_creator_unittest.cc index b1d1a065da..3178478a91 100644 --- a/src/hooks/dhcp/high_availability/tests/command_creator_unittest.cc +++ b/src/hooks/dhcp/high_availability/tests/command_creator_unittest.cc @@ -208,6 +208,7 @@ TEST(CommandCreatorTest, createLease4Update) { // The lease update must contain the "force-create" parameter indicating that // the lease must be created if it doesn't exist. lease_as_json->set("force-create", Element::create(true)); + lease_as_json->set("origin", Element::create("ha-partner")); EXPECT_EQ(lease_as_json->str(), arguments->str()); } @@ -219,6 +220,7 @@ TEST(CommandCreatorTest, createLease4Delete) { ASSERT_NO_FATAL_FAILURE(testCommandBasics(command, "lease4-del", "dhcp4", arguments)); ElementPtr lease_as_json = leaseAsJson(createLease4()); + lease_as_json->set("origin", Element::create("ha-partner")); EXPECT_EQ(lease_as_json->str(), arguments->str()); } @@ -334,6 +336,7 @@ TEST(CommandCreatorTest, createLease6Update) { // The lease update must contain the "force-create" parameter indicating that // the lease must be created if it doesn't exist. lease_as_json->set("force-create", Element::create(true)); + lease_as_json->set("origin", Element::create("ha-partner")); EXPECT_EQ(lease_as_json->str(), arguments->str()); } @@ -345,6 +348,7 @@ TEST(CommandCreatorTest, createLease6Delete) { ASSERT_NO_FATAL_FAILURE(testCommandBasics(command, "lease6-del", "dhcp6", arguments)); ElementPtr lease_as_json = leaseAsJson(createLease6()); + lease_as_json->set("origin", Element::create("ha-partner")); EXPECT_EQ(lease_as_json->str(), arguments->str()); } @@ -364,6 +368,10 @@ TEST(CommandCreatorTest, createLease6BulkApply) { ASSERT_NO_FATAL_FAILURE(testCommandBasics(command, "lease6-bulk-apply", "dhcp6", arguments)); + ConstElementPtr origin = arguments->get("origin"); + ASSERT_TRUE(origin); + ASSERT_EQ("ha-partner", origin->stringValue()); + // Verify deleted-leases. auto deleted_leases_json = arguments->get("deleted-leases"); ASSERT_TRUE(deleted_leases_json); @@ -396,6 +404,10 @@ TEST(CommandCreatorTest, createLease6BulkApplyFromBacklog) { ASSERT_NO_FATAL_FAILURE(testCommandBasics(command, "lease6-bulk-apply", "dhcp6", arguments)); + ConstElementPtr origin = arguments->get("origin"); + ASSERT_TRUE(origin); + ASSERT_EQ("ha-partner", origin->stringValue()); + // Verify deleted-leases. auto deleted_leases_json = arguments->get("deleted-leases"); ASSERT_TRUE(deleted_leases_json); -- 2.47.2