]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#3140] Addressed or answered comments
authorFrancis Dupont <fdupont@isc.org>
Thu, 6 Nov 2025 00:10:47 +0000 (01:10 +0100)
committerFrancis Dupont <fdupont@isc.org>
Thu, 6 Nov 2025 00:10:47 +0000 (01:10 +0100)
changelog_unreleased/3140-add-statistics-counters-for-dropped-packets
doc/sphinx/arm/dhcp4-srv.rst
doc/sphinx/arm/dhcp6-srv.rst
src/bin/dhcp4/dhcp4_srv.cc
src/bin/dhcp4/tests/dhcp4_srv_unittest.cc
src/bin/dhcp6/dhcp6_hooks.dox
src/bin/dhcp6/dhcp6_srv.cc
src/bin/dhcp6/tests/dhcp6_srv_unittest.cc
src/bin/dhcp6/tests/sarr_unittest.cc

index 986b42512c47ecba53761e0308a16353e8f2e885..310de68ae8867a00f6bc9486c757385e8f5e3c1e 100644 (file)
@@ -18,8 +18,8 @@
 
        Added "pkt4-processing-failed" and "pkt6-processing-failed"
        statistics which are increased when an incoming packet
-       was dropped because an unexpected exception was thrown
-       during processing.
+       was dropped because an unexpected error occurred during
+       processing.
 
        Added "pkt4-limit-exceeded" and "pkt6-limit-exceeded"
        statistics which are increased when an incoming packet
index 2b3a75d4e6b65b7b563ae3501b3cddc241ebb27c..f4f3de365fea7ef93dfacd2811a4a08599d7d22e 100644 (file)
@@ -7423,8 +7423,7 @@ The DHCPv4 server supports the following statistics:
    +----------------------------------------------------+----------------+------------------------------------+
    | pkt4-processing-failed                             | integer        | Number of incoming packets that    |
    |                                                    |                | was dropped because an unexpected  |
-   |                                                    |                | exception was thrown during        |
-   |                                                    |                | processing.                        |
+   |                                                    |                | error occurred during processing.  |
    +----------------------------------------------------+----------------+------------------------------------+
    | pkt4-limit-exceeded                                | integer        | Number of incoming packets that    |
    |                                                    |                | were dropped by the ``limits``     |
@@ -7843,7 +7842,7 @@ a second counter detailing the drop cause:
 
 - ``pkt4-not-for-us`` - to be handled by another server
 
-- ``pkt4-processing-failed`` - git an unexpected exception during processing
+- ``pkt4-processing-failed`` - got an unexpected error during processing
 
 - ``pkt4-limit-exceeded`` - dropped by the limits (:ref:`hooks-limits`)
   hook library
index a148d33a65ed1f1452c19facb3bdf92c5d0660a3..2dc3caee4cb332c629609fdc9e8dd6d96ab9063d 100644 (file)
@@ -6986,8 +6986,7 @@ The DHCPv6 server supports the following statistics:
    +---------------------------------------------------+----------------+------------------------------------+
    | pkt6-processing-failed                            | integer        | Number of incoming packets that    |
    |                                                   |                | was dropped because an unexpected  |
-   |                                                   |                | exception was thrown during        |
-   |                                                   |                | processing.                        |
+   |                                                   |                | error occurred during processing.  |
    +---------------------------------------------------+----------------+------------------------------------+
    | pkt6-limit-exceeded                               | integer        | Number of incoming packets that    |
    |                                                   |                | were dropped by the ``limits``     |
@@ -7738,7 +7737,7 @@ a second counter detailing the drop cause:
 
 - ``pkt6-not-for-us`` - to be handled by another server
 
-- ``pkt6-processing-failed`` - git an unexpected exception during processing
+- ``pkt6-processing-failed`` - got an unexpected error during processing
 
 - ``pkt6-limit-exceeded`` - dropped by the limits (:ref:`hooks-limits`)
   hook library
index 643cdd076f23900c4e55492b2398562c9d905ced..4efbe15e2e67b8475f11b937f98026df075245c7 100644 (file)
@@ -1318,6 +1318,10 @@ Dhcpv4Srv::runOne() {
                                                        this, query));
             if (!MultiThreadingMgr::instance().getThreadPool().add(call_back)) {
                 LOG_DEBUG(dhcp4_logger, DBG_DHCP4_BASIC, DHCP4_PACKET_QUEUE_FULL);
+                StatsMgr::instance().addValue("pkt4-queue-full",
+                                              static_cast<int64_t>(1));
+                StatsMgr::instance().addValue("pkt4-receive-drop",
+                                              static_cast<int64_t>(1));
             }
         } else {
             processPacketAndSendResponseNoThrow(query);
index 7fbf0de5ceaa1004ef49dd12838d73fcedc288b5..5fa5636a21cf0567ff141ad713d659b42ad15f2e 100644 (file)
@@ -65,6 +65,7 @@ using namespace isc::db;
 using namespace isc::dhcp;
 using namespace isc::dhcp::test;
 using namespace isc::process;
+using namespace isc::stats;
 using namespace isc::util;
 using namespace std;
 
@@ -1067,17 +1068,29 @@ TEST_F(Dhcpv4SrvTest, sanityCheckDiscover) {
                      "Missing or useless client-id and no HW address"
                      " provided in message DHCPDISCOVER");
 
+    // The pkt4-rfc-violation stat should be bumped by one.
+    StatsMgr& mgr = StatsMgr::instance();
+    ObservationPtr stat = mgr.getObservation("pkt4-rfc-violation");
+    ASSERT_TRUE(stat);
+    EXPECT_EQ(1, stat->getInteger().first);
+
     // Add a hardware address. This should not throw.
     std::vector<uint8_t> data = { 0, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe};
     HWAddrPtr hwaddr(new HWAddr(data, HTYPE_ETHER));
     pkt->setHWAddr(hwaddr);
     ASSERT_NO_THROW(srv_->processDiscover(pkt));
 
+    // The pkt4-rfc-violation stat should be unchanged.
+    EXPECT_EQ(1, stat->getInteger().first);
+
     // Now let's make a new pkt with client-id only, it should not throw.
     pkt.reset(new Pkt4(DHCPDISCOVER, 1234));
     pkt->addOption(generateClientId());
     ASSERT_NO_THROW(srv_->processDiscover(pkt));
 
+    // The pkt4-rfc-violation stat should be unchanged.
+    EXPECT_EQ(1, stat->getInteger().first);
+
     // Now let's add a server-id. This should throw.
     const OptionDefinition& server_id_def = LibDHCP::DHO_DHCP_SERVER_IDENTIFIER_DEF();
 
@@ -1088,11 +1101,7 @@ TEST_F(Dhcpv4SrvTest, sanityCheckDiscover) {
                      "Server-id option was not expected,"
                      " but received in message DHCPDISCOVER");
 
-    // The pkt4-rfc-violation stat should be bumped by one before each throw.
-    using namespace isc::stats;
-    StatsMgr& mgr = StatsMgr::instance();
-    ObservationPtr stat = mgr.getObservation("pkt4-rfc-violation");
-    ASSERT_TRUE(stat);
+    // The pkt4-rfc-violation stat should be bumped by one.
     EXPECT_EQ(2, stat->getInteger().first);
 }
 
@@ -1108,8 +1117,7 @@ TEST_F(Dhcpv4SrvTest, sanityCheckRequest) {
                      "Missing or useless client-id and no HW address"
                      " provided in message DHCPREQUEST");
 
-    // The pkt4-rfc-violation stat should be bumped by one before each throw.
-    using namespace isc::stats;
+    // The pkt4-rfc-violation stat should be bumped by one.
     StatsMgr& mgr = StatsMgr::instance();
     ObservationPtr stat = mgr.getObservation("pkt4-rfc-violation");
     ASSERT_TRUE(stat);
@@ -1141,6 +1149,9 @@ TEST_F(Dhcpv4SrvTest, sanityCheckRequest) {
     server_id->writeAddress(IOAddress("192.0.2.3"));
     pkt->addOption(server_id);
     EXPECT_NO_THROW(srv_->processRequest(pkt));
+
+    // The pkt4-rfc-violation stat should be unchanged.
+    EXPECT_EQ(1, stat->getInteger().first);
 }
 
 // Verifies that DHCPDECLINEs are sanity checked correctly.
@@ -1155,6 +1166,12 @@ TEST_F(Dhcpv4SrvTest, sanityCheckDecline) {
                      "Missing or useless client-id and no HW address"
                      " provided in message DHCPDECLINE");
 
+    // The pkt4-rfc-violation stat should be bumped by one.
+    StatsMgr& mgr = StatsMgr::instance();
+    ObservationPtr stat = mgr.getObservation("pkt4-rfc-violation");
+    ASSERT_TRUE(stat);
+    EXPECT_EQ(1, stat->getInteger().first);
+
     // Add a hardware address. Should throw because of missing address.
     std::vector<uint8_t> data = { 0, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe};
     HWAddrPtr hwaddr(new HWAddr(data, HTYPE_ETHER));
@@ -1163,11 +1180,7 @@ TEST_F(Dhcpv4SrvTest, sanityCheckDecline) {
                     "Mandatory 'Requested IP address' option missing in DHCPDECLINE"
                     " sent from [hwtype=1 00:fe:fe:fe:fe:fe], cid=[no info], tid=0x4d2");
 
-    // The pkt4-rfc-violation stat should be bumped by one before each throw.
-    using namespace isc::stats;
-    StatsMgr& mgr = StatsMgr::instance();
-    ObservationPtr stat = mgr.getObservation("pkt4-rfc-violation");
-    ASSERT_TRUE(stat);
+    // The pkt4-rfc-violation stat should be bumped by one.
     EXPECT_EQ(2, stat->getInteger().first);
 
     // Now let's add a requested address. This should not throw.
@@ -1190,6 +1203,9 @@ TEST_F(Dhcpv4SrvTest, sanityCheckDecline) {
     server_id->writeAddress(IOAddress("192.0.2.3"));
     pkt->addOption(server_id);
     EXPECT_NO_THROW(srv_->processDecline(pkt));
+
+    // The pkt4-rfc-violation stat should be unchanged.
+    EXPECT_EQ(2, stat->getInteger().first);
 }
 
 // Verifies that DHCPRELEASEs are sanity checked correctly.
@@ -1203,8 +1219,7 @@ TEST_F(Dhcpv4SrvTest, sanityCheckRelease) {
                      "Missing or useless client-id and no HW address"
                      " provided in message DHCPRELEASE");
 
-    // The pkt4-rfc-violation stat should be bumped by one before each throw.
-    using namespace isc::stats;
+    // The pkt4-rfc-violation stat should be bumped by one.
     StatsMgr& mgr = StatsMgr::instance();
     ObservationPtr stat = mgr.getObservation("pkt4-rfc-violation");
     ASSERT_TRUE(stat);
@@ -1228,6 +1243,9 @@ TEST_F(Dhcpv4SrvTest, sanityCheckRelease) {
     server_id->writeAddress(IOAddress("192.0.2.3"));
     pkt->addOption(server_id);
     EXPECT_NO_THROW(srv_->processRelease(pkt));
+
+    // The pkt4-rfc-violation stat should be unchanged.
+    EXPECT_EQ(1, stat->getInteger().first);
 }
 
 // Verifies that DHCPINFORMs are sanity checked correctly.
@@ -1242,8 +1260,7 @@ TEST_F(Dhcpv4SrvTest, sanityCheckInform) {
                      "Missing or useless client-id and no HW address"
                      " provided in message DHCPINFORM");
 
-    // The pkt4-rfc-violation stat should be bumped by one before each throw.
-    using namespace isc::stats;
+    // The pkt4-rfc-violation stat should be bumped by one.
     StatsMgr& mgr = StatsMgr::instance();
     ObservationPtr stat = mgr.getObservation("pkt4-rfc-violation");
     ASSERT_TRUE(stat);
@@ -1275,6 +1292,9 @@ TEST_F(Dhcpv4SrvTest, sanityCheckInform) {
     server_id->writeAddress(IOAddress("192.0.2.3"));
     pkt->addOption(server_id);
     EXPECT_NO_THROW(srv_->processInform(pkt));
+
+    // The pkt4-rfc-violation stat should be unchanged.
+    EXPECT_EQ(1, stat->getInteger().first);
 }
 
 // This test verifies that incoming DISCOVER can be handled properly, that an
@@ -2518,7 +2538,6 @@ TEST_F(Dhcpv4SrvTest, acceptServerId) {
     EXPECT_FALSE(srv_->acceptServerId(pkt));
 
     // The pkt4-not-for-us stat should be bumped up.
-    using namespace isc::stats;
     StatsMgr& mgr = StatsMgr::instance();
     ObservationPtr stat = mgr.getObservation("pkt4-not-for-us");
     ASSERT_TRUE(stat);
@@ -2660,26 +2679,34 @@ TEST_F(Dhcpv4SrvTest, sanityCheck) {
     EXPECT_THROW(NakedDhcpv4Srv::sanityCheck(pkt, Dhcpv4Srv::MANDATORY),
                  RFCViolation);
 
+    // The pkt4-rfc-violation stat should be bumped by one.
+    StatsMgr& mgr = StatsMgr::instance();
+    ObservationPtr stat = mgr.getObservation("pkt4-rfc-violation");
+    ASSERT_TRUE(stat);
+    EXPECT_EQ(1, stat->getInteger().first);
+
     pkt->addOption(srv_->getServerID());
 
     // Server-id is mandatory and present = no exception
     EXPECT_NO_THROW(NakedDhcpv4Srv::sanityCheck(pkt, Dhcpv4Srv::MANDATORY));
 
+    // The pkt4-rfc-violation stat should be unchanged.
+    EXPECT_EQ(1, stat->getInteger().first);
+
     // Server-id is forbidden, but present => exception
     EXPECT_THROW(NakedDhcpv4Srv::sanityCheck(pkt, Dhcpv4Srv::FORBIDDEN),
                  RFCViolation);
 
+    // The pkt4-rfc-violation stat should be bumped by one.
+    EXPECT_EQ(2, stat->getInteger().first);
+
     // There's no client-id and no HWADDR. Server needs something to
     // identify the client
     pkt->setHWAddr(generateHWAddr(0));
     EXPECT_THROW(NakedDhcpv4Srv::sanityCheck(pkt, Dhcpv4Srv::MANDATORY),
                  RFCViolation);
 
-    // The pkt4-rfc-violation stat should be bumped by one before each throw.
-    using namespace isc::stats;
-    StatsMgr& mgr = StatsMgr::instance();
-    ObservationPtr stat = mgr.getObservation("pkt4-rfc-violation");
-    ASSERT_TRUE(stat);
+    // The pkt4-rfc-violation stat should be bumped by one.
     EXPECT_EQ(3, stat->getInteger().first);
 }
 
@@ -4987,7 +5014,6 @@ TEST_F(Dhcpv4SrvTest, statisticsUnknownRcvd) {
     pretendReceivingPkt(*srv_, CONFIGS[0], 200, "pkt4-unknown-received");
 
     // There should also be pkt4-receive-drop stat bumped up
-    using namespace isc::stats;
     StatsMgr& mgr = StatsMgr::instance();
     ObservationPtr drop_stat = mgr.getObservation("pkt4-receive-drop");
 
@@ -5017,7 +5043,6 @@ TEST_F(Dhcpv4SrvTest, receiveServiceDisabledStat) {
     srv_->run();
 
     // All expected statistics must be present.
-    using namespace isc::stats;
     StatsMgr& mgr = StatsMgr::instance();
     ObservationPtr pkt4_rcvd = mgr.getObservation("pkt4-received");
     ObservationPtr srv_disable = mgr.getObservation("pkt4-service-disabled");
@@ -5052,7 +5077,6 @@ TEST_F(Dhcpv4SrvTest, receiveParseFailedStat) {
     srv_->run();
 
     // All expected statistics must be present.
-    using namespace isc::stats;
     StatsMgr& mgr = StatsMgr::instance();
     ObservationPtr pkt4_rcvd = mgr.getObservation("pkt4-received");
     ObservationPtr parse_fail = mgr.getObservation("pkt4-parse-failed");
index f11967a6db85d2093873aae68304865d46cecdf1..58e66f9df9a44374b3f57604b5428b93fb29faa8 100644 (file)
@@ -38,7 +38,7 @@
     status to specified value. Actions not listed explicitly are not supported.
    If a callout sets status to unsupported value, this specific value will be
    ignored and treated as if the status was CONTINUE. If the action is to
-   drop        the incoming query it is the responsibilty of the hook to increase
+   drop the incoming query it is the responsibilty of the hook to increase
    statistics.
 
 @section dhcpv6HooksHookPoints Hooks in the DHCPv6 Server
index 9077efe51c5f668b97dfe235988c17389bf5a5b8..08b794e447837e21a4c2c72a9679d9f0005c16b3 100644 (file)
@@ -793,6 +793,10 @@ Dhcpv6Srv::runOne() {
                                                        this, query));
             if (!MultiThreadingMgr::instance().getThreadPool().add(call_back)) {
                 LOG_DEBUG(dhcp6_logger, DBG_DHCP6_BASIC, DHCP6_PACKET_QUEUE_FULL);
+                StatsMgr::instance().addValue("pkt6-queue-full",
+                                              static_cast<int64_t>(1));
+                StatsMgr::instance().addValue("pkt6-receive-drop",
+                                              static_cast<int64_t>(1));
             }
         } else {
             processPacketAndSendResponseNoThrow(query);
index 894f452c03ed897b182f60800ea391d7f44a2441..0bb5a64723614e83740b7ad2ec17e58a8956a038 100644 (file)
@@ -66,6 +66,7 @@ using namespace isc::db;
 using namespace isc::dhcp;
 using namespace isc::dhcp::test;
 using namespace isc::process;
+using namespace isc::stats;
 using namespace isc::util;
 using namespace std;
 
@@ -2477,7 +2478,6 @@ TEST_F(Dhcpv6SrvTest, testServerID) {
 
 
     // Check the pkt6-not-for-us stat was bumped by one.
-    using namespace isc::stats;
     StatsMgr& mgr = StatsMgr::instance();
     ObservationPtr stat = mgr.getObservation("pkt6-not-for-us");
     ASSERT_TRUE(stat);
@@ -2521,7 +2521,6 @@ TEST_F(Dhcpv6SrvTest, testUnicast) {
     }
 
     // The pkt6-rfc-violation stat should be bumped by one each time.
-    using namespace isc::stats;
     StatsMgr& mgr = StatsMgr::instance();
     ObservationPtr stat = mgr.getObservation("pkt6-rfc-violation");
     ASSERT_TRUE(stat);
@@ -3646,7 +3645,6 @@ TEST_F(Dhcpv6SrvTest, receiveAddrRegInformStat) {
 // Test checks if reception of a packet when the service is disabled
 // increases pkt6-service-disabled and pkt6-receive-drop.
 TEST_F(Dhcpv6SrvTest, receiveServiceDisableddStat) {
-    using namespace isc::stats;
     StatsMgr& mgr = StatsMgr::instance();
 
     // Let's get a simple SOLICIT...
@@ -3660,6 +3658,7 @@ TEST_F(Dhcpv6SrvTest, receiveServiceDisableddStat) {
     ObservationPtr pkt6_rcvd = mgr.getObservation("pkt6-received");
     ObservationPtr srv_disable = mgr.getObservation("pkt6-service-disabled");
     ObservationPtr recv_drop = mgr.getObservation("pkt6-receive-drop");
+    // All expected statistics must be present.
     ASSERT_TRUE(pkt6_rcvd);
     ASSERT_TRUE(srv_disable);
     ASSERT_TRUE(recv_drop);
@@ -3675,15 +3674,7 @@ TEST_F(Dhcpv6SrvTest, receiveServiceDisableddStat) {
     // fakeReceive()
     srv_->run();
 
-    // All expected statistics must be present.
-    pkt6_rcvd = mgr.getObservation("pkt6-received");
-    srv_disable = mgr.getObservation("pkt6-service-disabled");
-    recv_drop = mgr.getObservation("pkt6-receive-drop");
-    ASSERT_TRUE(pkt6_rcvd);
-    ASSERT_TRUE(srv_disable);
-    ASSERT_TRUE(recv_drop);
-
-    // They also must have expected values.
+    // All statistics should have been dumped by one.
     EXPECT_EQ(1, pkt6_rcvd->getInteger().first);
     EXPECT_EQ(1, srv_disable->getInteger().first);
     EXPECT_EQ(1, recv_drop->getInteger().first);
@@ -3692,7 +3683,6 @@ TEST_F(Dhcpv6SrvTest, receiveServiceDisableddStat) {
 // Test checks if reception of a malformed packet increases pkt6-parse-failed
 // and pkt6-receive-drop
 TEST_F(Dhcpv6SrvTest, receiveParseFailedStat) {
-    using namespace isc::stats;
     StatsMgr& mgr = StatsMgr::instance();
 
     // Let's get a simple SOLICIT...
@@ -3705,6 +3695,7 @@ TEST_F(Dhcpv6SrvTest, receiveParseFailedStat) {
     ObservationPtr pkt6_rcvd = mgr.getObservation("pkt6-received");
     ObservationPtr parse_fail = mgr.getObservation("pkt6-parse-failed");
     ObservationPtr recv_drop = mgr.getObservation("pkt6-receive-drop");
+    // All expected statistics must be present.
     ASSERT_TRUE(pkt6_rcvd);
     ASSERT_TRUE(parse_fail);
     ASSERT_TRUE(recv_drop);
@@ -3720,15 +3711,7 @@ TEST_F(Dhcpv6SrvTest, receiveParseFailedStat) {
     // fakeReceive()
     srv_->run();
 
-    // All expected statistics must be present.
-    pkt6_rcvd = mgr.getObservation("pkt6-received");
-    parse_fail = mgr.getObservation("pkt6-parse-failed");
-    recv_drop = mgr.getObservation("pkt6-receive-drop");
-    ASSERT_TRUE(pkt6_rcvd);
-    ASSERT_TRUE(parse_fail);
-    ASSERT_TRUE(recv_drop);
-
-    // They also must have expected values.
+    // All statistics should have been dumped by one.
     EXPECT_EQ(1, pkt6_rcvd->getInteger().first);
     EXPECT_EQ(1, parse_fail->getInteger().first);
     EXPECT_EQ(1, recv_drop->getInteger().first);
index f1244d96b1095aee618db81988e80cbfd8317a6f..82b3fbe535731decc2963e605050e6a66dc47f31 100644 (file)
@@ -385,7 +385,7 @@ public:
         : Dhcpv6SrvTest(),
           iface_mgr_test_config_(true) {
         // Let's wipe all existing statistics.
-        isc::stats::StatsMgr::instance().removeAll();
+        StatsMgr::instance().removeAll();
     }
 
     /// @brief Destructor.
@@ -396,7 +396,7 @@ public:
         CfgMgr::instance().setD2ClientConfig(cfg);
 
         // Let's wipe all existing statistics.
-        isc::stats::StatsMgr::instance().removeAll();
+        StatsMgr::instance().removeAll();
     }
 
     /// @brief Check that server processes correctly a prefix hint sent by the
@@ -1054,14 +1054,15 @@ SARRTest::pkt6ReceiveDropStat1() {
     client.useServerId(bogus_srv_id);
     client.doRequest();
 
-    // Ok, let's check the statistic. pkt6-receive-drop should be set to 1.
-    using namespace isc::stats;
+    // Ok, let's check the statistics. pkt6-receive-drop should be set to 1.
     StatsMgr& mgr = StatsMgr::instance();
-
     ObservationPtr pkt6_recv_drop = mgr.getObservation("pkt6-receive-drop");
     ASSERT_TRUE(pkt6_recv_drop);
-
     EXPECT_EQ(1, pkt6_recv_drop->getInteger().first);
+    // and pkt6-not-for-us should be set to 1.
+    ObservationPtr pkt6_not_for_us = mgr.getObservation("pkt6-not-for-us");
+    ASSERT_TRUE(pkt6_not_for_us);
+    EXPECT_EQ(1, pkt6_not_for_us->getInteger().first);
 }
 
 TEST_F(SARRTest, pkt6ReceiveDropStat1) {
@@ -1087,14 +1088,14 @@ SARRTest::pkt6ReceiveDropStat2() {
     client.setDestAddress(asiolink::IOAddress("2001:db8::1")); // Pretend it's unicast
     client.doSolicit();
 
-    // Ok, let's check the statistic. pkt6-receive-drop should be set to 1.
-    using namespace isc::stats;
+    // Ok, let's check the statistics. pkt6-receive-drop should be set to 1.
     StatsMgr& mgr = StatsMgr::instance();
-
     ObservationPtr pkt6_recv_drop = mgr.getObservation("pkt6-receive-drop");
     ASSERT_TRUE(pkt6_recv_drop);
-
     EXPECT_EQ(1, pkt6_recv_drop->getInteger().first);
+    // and pkt6-rfc-violation should be set to 1.
+    ObservationPtr pkt6_rfc_violation = mgr.getObservation("pkt6-rfc-violation");
+    EXPECT_EQ(1, pkt6_rfc_violation->getInteger().first);
 }
 
 TEST_F(SARRTest, pkt6ReceiveDropStat2) {
@@ -1123,14 +1124,14 @@ SARRTest::pkt6ReceiveDropStat3() {
     client.useServerId(client.getClientId());
     client.doSolicit();
 
-    // Ok, let's check the statistic. pkt6-receive-drop should be set to 1.
-    using namespace isc::stats;
+    // Ok, let's check the statistics. pkt6-receive-drop should be set to 1.
     StatsMgr& mgr = StatsMgr::instance();
-
     ObservationPtr pkt6_recv_drop = mgr.getObservation("pkt6-receive-drop");
     ASSERT_TRUE(pkt6_recv_drop);
-
     EXPECT_EQ(1, pkt6_recv_drop->getInteger().first);
+    // and pkt6-rfc-violation should be set to 1.
+    ObservationPtr pkt6_rfc_violation = mgr.getObservation("pkt6-rfc-violation");
+    EXPECT_EQ(1, pkt6_rfc_violation->getInteger().first);
 }
 
 TEST_F(SARRTest, pkt6ReceiveDropStat3) {