]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#4141] move to util
authorRazvan Becheriu <razvan@isc.org>
Thu, 30 Oct 2025 11:59:26 +0000 (13:59 +0200)
committerRazvan Becheriu <razvan@isc.org>
Mon, 3 Nov 2025 18:59:34 +0000 (18:59 +0000)
17 files changed:
src/hooks/dhcp/high_availability/libloadtests/close_unittests.cc
src/lib/dhcp/iface_mgr.cc
src/lib/dhcp/iface_mgr.h
src/lib/dhcp/meson.build
src/lib/dhcp/tests/meson.build
src/lib/util/fd_event_handler.cc [moved from src/lib/dhcp/fd_event_handler.cc with 85% similarity]
src/lib/util/fd_event_handler.h [moved from src/lib/dhcp/fd_event_handler.h with 98% similarity]
src/lib/util/fd_event_handler_factory.cc [moved from src/lib/dhcp/fd_event_handler_factory.cc with 80% similarity]
src/lib/util/fd_event_handler_factory.h [moved from src/lib/dhcp/fd_event_handler_factory.h with 91% similarity]
src/lib/util/meson.build
src/lib/util/ready_check.cc
src/lib/util/select_event_handler.cc [moved from src/lib/dhcp/select_event_handler.cc with 95% similarity]
src/lib/util/select_event_handler.h [moved from src/lib/dhcp/select_event_handler.h with 96% similarity]
src/lib/util/tests/fd_event_handler_factory_unittests.cc [moved from src/lib/dhcp/tests/fd_event_handler_factory_unittests.cc with 91% similarity]
src/lib/util/tests/fd_event_handler_unittests.h [moved from src/lib/dhcp/tests/fd_event_handler_unittests.h with 91% similarity]
src/lib/util/tests/meson.build
src/lib/util/tests/select_event_handler_unittests.cc [moved from src/lib/dhcp/tests/select_event_handler_unittests.cc with 100% similarity]

index 741fc9c271c2edd8cc646bb639635b72690d80a2..d01b2228e1dc0f73dd12f4f56df1defe89e9f101 100644 (file)
@@ -228,29 +228,29 @@ CloseHATest::runPartners(bool const backup /* = true */) {
         }
 
         wthread_->markReady(WatchedThread::READY);
-        FDEventHandlerPtr ev_handler_ = FDEventHandlerFactory::factoryFDEventHandler();
+        FDEventHandlerPtr handler = FDEventHandlerFactory::factoryFDEventHandler();
 
         for (;;) {
-            ev_handler_->clear();
-            ev_handler_->add(wthread_->getWatchFd(WatchedThread::TERMINATE));
-            ev_handler_->add(accept_partner1);
-            ev_handler_->add(accept_partner2);
+            handler->clear();
+            handler->add(wthread_->getWatchFd(WatchedThread::TERMINATE));
+            handler->add(accept_partner1);
+            handler->add(accept_partner2);
             for (auto const& reader : readers) {
                 if (!reader.second) {
                     continue;
                 }
-                ev_handler_->add(reader.first);
+                handler->add(reader.first);
             }
 
-            int n = ev_handler_->waitEvent(0, 0);
+            int n = handler->waitEvent(0, 0);
             if ((n < 0) && (errno == EINTR)) {
                 cerr << "interrupted" << endl;
                 continue;
             }
-            if (ev_handler_->readReady(wthread_->getWatchFd(WatchedThread::TERMINATE))) {
+            if (handler->readReady(wthread_->getWatchFd(WatchedThread::TERMINATE))) {
                 break;
             }
-            if (ev_handler_->readReady(accept_partner1)) {
+            if (handler->readReady(accept_partner1)) {
                 int fd = accept(accept_partner1, 0, 0);
                 if (fd < 0) {
                     cerr << "accept1 failed " << strerror(errno) << endl;
@@ -261,7 +261,7 @@ CloseHATest::runPartners(bool const backup /* = true */) {
                     readers[fd] = true;
                 }
             }
-            if (ev_handler_->readReady(accept_partner2)) {
+            if (handler->readReady(accept_partner2)) {
                 int fd = accept(accept_partner2, 0, 0);
                 if (fd < 0) {
                     cerr << "accept2 failed " << strerror(errno) << endl;
@@ -277,7 +277,7 @@ CloseHATest::runPartners(bool const backup /* = true */) {
                     continue;
                 }
                 int fd = reader.first;
-                if (ev_handler_->readReady(fd)) {
+                if (handler->readReady(fd)) {
                     char buf[128];
                     int cc = read(fd, buf, 128);
                     if (cc < 0) {
index cec5c896e9c3e67fb9bf656c4daf380223e61a6a..520a846cf8f64b7d1269bbf77a7a580f5136a729 100644 (file)
@@ -14,8 +14,8 @@
 #include <dhcp/iface_mgr_error_handler.h>
 #include <dhcp/pkt_filter_inet.h>
 #include <dhcp/pkt_filter_inet6.h>
-#include <dhcp/fd_event_handler_factory.h>
 #include <exceptions/exceptions.h>
+#include <util/fd_event_handler_factory.h>
 #include <util/io/pktinfo_utilities.h>
 #include <util/multi_threading_mgr.h>
 
index 4db709a7216941f07d009e05a994e6d7d021da55..7a5f27f92eaf8120541e2babfc74eedb3ff18bf7 100644 (file)
 #include <asiolink/io_address.h>
 #include <dhcp/dhcp4.h>
 #include <dhcp/dhcp6.h>
-#include <dhcp/fd_event_handler_factory.h>
 #include <dhcp/pkt4.h>
 #include <dhcp/pkt6.h>
 #include <dhcp/packet_queue_mgr4.h>
 #include <dhcp/packet_queue_mgr6.h>
 #include <dhcp/pkt_filter.h>
 #include <dhcp/pkt_filter6.h>
+#include <util/fd_event_handler_factory.h>
 #include <util/optional.h>
 #include <util/watch_socket.h>
 #include <util/watched_thread.h>
@@ -35,7 +35,6 @@
 #include <mutex>
 
 namespace isc {
-
 namespace dhcp {
 
 /// @brief IfaceMgr exception thrown thrown when interface detection fails.
@@ -1630,10 +1629,10 @@ private:
     isc::util::WatchedThreadPtr dhcp_receiver_;
 
     /// @brief The FDEventHandler instance.
-    FDEventHandlerPtr fd_event_handler_;
+    util::FDEventHandlerPtr fd_event_handler_;
 
     /// @brief The receiver FDEventHandler instance.
-    FDEventHandlerPtr receiver_fd_event_handler_;
+    util::FDEventHandlerPtr receiver_fd_event_handler_;
 };
 
 }  // namespace isc::dhcp
index 306cac9a52fbfc42c98f130f81de8411bc8efd80..6d2c0ab73316be52e8d075fdfa57cc05119bd4a1 100644 (file)
@@ -15,8 +15,6 @@ kea_dhcp_lib = shared_library(
     'classify.cc',
     'duid.cc',
     'duid_factory.cc',
-    'fd_event_handler.cc',
-    'fd_event_handler_factory.cc',
     'hwaddr.cc',
     'iface_mgr.cc',
     iface_mgr,
@@ -56,7 +54,6 @@ kea_dhcp_lib = shared_library(
     'pkt_filter_inet6.cc',
     pkt_filter_cc,
     'protocol_util.cc',
-    'select_event_handler.cc',
     include_directories: [include_directories('.')] + INCLUDES,
     install: true,
     install_dir: LIBDIR,
@@ -75,8 +72,6 @@ kea_dhcp_headers = [
     'docsis3_option_defs.h',
     'duid.h',
     'duid_factory.h',
-    'fd_event_handler.h',
-    'fd_event_handler_factory.h',
     'hwaddr.h',
     'iface_mgr.h',
     'iface_mgr_error_handler.h',
@@ -124,7 +119,6 @@ kea_dhcp_headers = [
     'pkt_filter_lpf.h',
     'pkt_template.h',
     'protocol_util.h',
-    'select_event_handler.h',
     'socket_info.h',
     'std_option_defs.h',
 ]
index 9a66ab0734ef639e5f2203cc7d902e0ad9270374..b08f6ca9acc87165272035251cb23626ce4ec476 100644 (file)
@@ -17,7 +17,6 @@ kea_dhcp_tests = executable(
     'classify_unittest.cc',
     'duid_factory_unittest.cc',
     'duid_unittest.cc',
-    'fd_event_handler_factory_unittests.cc',
     'hwaddr_unittest.cc',
     'iface_mgr_unittest.cc',
     'libdhcp++_unittest.cc',
@@ -62,7 +61,6 @@ kea_dhcp_tests = executable(
     'protocol_util_unittest.cc',
     'run_unittests.cc',
     pkt_filter_xpf_unittest_cc,
-    'select_event_handler_unittests.cc',
     dependencies: [GTEST_DEP, CRYPTO_DEP],
     cpp_args: [f'-DTEST_DATA_BUILDDIR="@current_build_dir@"'],
     include_directories: [include_directories('.')] + INCLUDES,
similarity index 85%
rename from src/lib/dhcp/fd_event_handler.cc
rename to src/lib/util/fd_event_handler.cc
index ddd324e777e214dec2355cb0b1b101ceeb516b05..9f9b778e0997f07db8f4bd265e758c046057f4f9 100644 (file)
@@ -6,10 +6,10 @@
 
 #include <config.h>
 
-#include <fd_event_handler.h>
+#include <util/fd_event_handler.h>
 
 namespace isc {
-namespace dhcp {
+namespace util {
 
 FDEventHandler::FDEventHandler(HandlerType type) : type_(type) {
 }
@@ -18,5 +18,5 @@ FDEventHandler::HandlerType FDEventHandler::type() {
     return (type_);
 }
 
-} // end of namespace isc::dhcp
+} // end of namespace isc::util
 } // end of namespace isc
similarity index 98%
rename from src/lib/dhcp/fd_event_handler.h
rename to src/lib/util/fd_event_handler.h
index a5f5ed85f9223072efe9402648aa7c7e2d8f6b71..e8e93986902c18b6a5fffa34595ac297faa9b3d2 100644 (file)
@@ -11,7 +11,7 @@
 #include <stdint.h>
 
 namespace isc {
-namespace dhcp {
+namespace util {
 
 /// @brief File descriptor event handler class handles events for registered
 /// file descriptors.
@@ -77,7 +77,7 @@ private:
 /// @brief Shared pointer to an FD event handler.
 typedef boost::shared_ptr<FDEventHandler> FDEventHandlerPtr;
 
-}  // namespace isc::dhcp
+}  // namespace isc::util
 }  // namespace isc
 
 #endif  // FD_EVENT_HANDLER_H
similarity index 80%
rename from src/lib/dhcp/fd_event_handler_factory.cc
rename to src/lib/util/fd_event_handler_factory.cc
index ec99519f629c373bfb5ffff57bdcf7d5c3d7fbc6..91a5b99818eafffa1b355bd766dde13a35413573 100644 (file)
@@ -6,16 +6,16 @@
 
 #include <config.h>
 
-#include <dhcp/fd_event_handler_factory.h>
-#include <dhcp/select_event_handler.h>
+#include <util/fd_event_handler_factory.h>
+#include <util/select_event_handler.h>
 
 namespace isc {
-namespace dhcp {
+namespace util {
 
 FDEventHandlerPtr FDEventHandlerFactory::factoryFDEventHandler() {
     // todo: use configuration to initialize the FDEventHandler.
     return (FDEventHandlerPtr(new SelectEventHandler()));
 }
 
-} // end of namespace isc::dhcp
+} // end of namespace isc::util
 } // end of namespace isc
similarity index 91%
rename from src/lib/dhcp/fd_event_handler_factory.h
rename to src/lib/util/fd_event_handler_factory.h
index 567cbbbd689f3e269d4031ca183d4c7627a6caa6..b45dec11c81148d012b18aabdbb5b63b8690faa0 100644 (file)
@@ -7,10 +7,10 @@
 #ifndef FD_EVENT_HANDLER_FACTORY_H
 #define FD_EVENT_HANDLER_FACTORY_H
 
-#include <dhcp/fd_event_handler.h>
+#include <util/fd_event_handler.h>
 
 namespace isc {
-namespace dhcp {
+namespace util {
 
 /// @brief File descriptor event handler factory class handles the creation of
 /// the FDEventHangler instance according to configuration and OS supported
@@ -28,7 +28,7 @@ public:
     static FDEventHandlerPtr factoryFDEventHandler();
 };
 
-}  // namespace isc::dhcp
+}  // namespace isc::util
 }  // namespace isc
 
 #endif  // FD_EVENT_HANDLER_FACTORY_H
index 845a8dd3f62891843dad1a250c7a5eaffdbb6cdd..0a90402e0894a1ce36dad178a06c0deb9f43fc99 100644 (file)
@@ -6,6 +6,8 @@ kea_util_lib = shared_library(
     'dhcp_space.cc',
     'encode/encode.cc',
     'encode/utf8.cc',
+    'fd_event_handler.cc',
+    'fd_event_handler_factory.cc',
     'filesystem.cc',
     'labeled_value.cc',
     'memory_segment_local.cc',
@@ -13,6 +15,7 @@ kea_util_lib = shared_library(
     'pid_file.cc',
     'ready_check.cc',
     'reconnect_ctl.cc',
+    'select_event_handler.cc',
     'state_model.cc',
     'stopwatch.cc',
     'stopwatch_impl.cc',
@@ -43,6 +46,8 @@ kea_util_headers = [
     'doubles.h',
     'encode/encode.h',
     'encode/utf8.h',
+    'fd_event_handler.h',
+    'fd_event_handler_factory.h',
     'filesystem.h',
     'io/fd.h',
     'io/pktinfo_utilities.h',
@@ -60,6 +65,7 @@ kea_util_headers = [
     'readwrite_mutex.h',
     'ready_check.h',
     'reconnect_ctl.h',
+    'select_event_handler.h',
     'staged_value.h',
     'state_model.h',
     'stopwatch.h',
index 29d835606e0dc301cfec9e18e2c6d61a880884fe..703ee43dc87a7f3bada5948dfa45f0c419fdbb24 100644 (file)
@@ -6,53 +6,16 @@
 
 #include <config.h>
 
-#include <sys/select.h>
+#include <util/fd_event_handler_factory.h>
 
 namespace isc {
 namespace util {
 
 int selectCheck(const int fd_to_check, const unsigned int timeout_sec,
                 bool read_check, bool write_check) {
-    // @todo: implement this using SelectEventHandler
-    // @todo: should move to epoll/kqueue?
-    if (fd_to_check < 0) {
-        return (-1);
-    }
-    if (fd_to_check >= FD_SETSIZE) {
-        return (-1);
-    }
-    int maxfd = 0;
-
-    fd_set read_fds;
-    FD_ZERO(&read_fds);
-
-    fd_set write_fds;
-    FD_ZERO(&write_fds);
-
-    maxfd = fd_to_check;
-
-    // Add this socket to read set
-    FD_SET(fd_to_check, &read_fds);
-
-    // Add this socket to write set
-    FD_SET(fd_to_check, &write_fds);
-
-    struct timeval select_timeout;
-    select_timeout.tv_sec = static_cast<time_t>(timeout_sec);
-    select_timeout.tv_usec = 0;
-
-    fd_set* read_p = 0;
-    fd_set* write_p = 0;
-
-    if (read_check) {
-        read_p = &read_fds;
-    }
-
-    if (write_check) {
-        write_p = &write_fds;
-    }
-
-    return (select(maxfd + 1, read_p, write_p, 0, &select_timeout));
+    FDEventHandlerPtr handler = FDEventHandlerFactory::factoryFDEventHandler();
+    handler->add(fd_to_check, read_check, write_check);
+    return (handler->waitEvent(timeout_sec, 0));
 }
 
 } // end of isc::util namespace
similarity index 95%
rename from src/lib/dhcp/select_event_handler.cc
rename to src/lib/util/select_event_handler.cc
index 0d63f6e57928ee369f6898f10ea1659e1846f055..e4daf7a9631b7e3497d54ad44a3c5c31764b0b4d 100644 (file)
@@ -7,7 +7,7 @@
 #include <config.h>
 
 #include <exceptions/exceptions.h>
-#include <select_event_handler.h>
+#include <util/select_event_handler.h>
 
 #ifndef FD_COPY
 #define FD_COPY(orig, copy) \
@@ -17,7 +17,7 @@
 #endif
 
 namespace isc {
-namespace dhcp {
+namespace util {
 
 SelectEventHandler::SelectEventHandler() : FDEventHandler(TYPE_SELECT), max_fd_(0) {
     clear();
@@ -73,5 +73,5 @@ void SelectEventHandler::clear() {
     max_fd_ = 0;
 }
 
-} // end of namespace isc::dhcp
+} // end of namespace isc::util
 } // end of namespace isc
similarity index 96%
rename from src/lib/dhcp/select_event_handler.h
rename to src/lib/util/select_event_handler.h
index 4dd8a38a492ae1393bdc1cf2e47f03deace5e70c..579a7c00daaee45e8e38f5b2c3b6f5a9b0d63778 100644 (file)
@@ -7,12 +7,12 @@
 #ifndef SELECT_EVENT_HANDLER_H
 #define SELECT_EVENT_HANDLER_H
 
-#include <dhcp/fd_event_handler.h>
+#include <util/fd_event_handler.h>
 
 #include <sys/select.h>
 
 namespace isc {
-namespace dhcp {
+namespace util {
 
 /// @brief File descriptor event handler class handles events for registered
 /// file descriptors. This class uses the OS select syscall for event handling.
@@ -75,7 +75,7 @@ private:
     fd_set write_fd_set_data_;
 };
 
-}  // namespace isc::dhcp
+}  // namespace isc::util;
 }  // namespace isc
 
 #endif  // SELECT_EVENT_HANDLER_H
similarity index 91%
rename from src/lib/dhcp/tests/fd_event_handler_factory_unittests.cc
rename to src/lib/util/tests/fd_event_handler_factory_unittests.cc
index 4539ad418c25b03a6ed9ef81e2b84b19878fdd49..40405f8c44da1ee4bf3bb6bb3f474a2f187f73e2 100644 (file)
@@ -6,14 +6,14 @@
 
 #include <config.h>
 
-#include <dhcp/fd_event_handler_factory.h>
 #include <exceptions/exceptions.h>
+#include <util/fd_event_handler_factory.h>
 
 #include <gtest/gtest.h>
 #include <sys/select.h>
 
 using namespace isc;
-using namespace isc::dhcp;
+using namespace isc::util;
 
 namespace {
 
similarity index 91%
rename from src/lib/dhcp/tests/fd_event_handler_unittests.h
rename to src/lib/util/tests/fd_event_handler_unittests.h
index e41523eabc34c7083aeb7ec3cba8df6c20a5212c..04e2ad8854232663f64f4b753586d62e0af8ff98 100644 (file)
@@ -6,13 +6,18 @@
 
 #include <config.h>
 
-#include <dhcp/fd_event_handler.h>
-#include <dhcp/select_event_handler.h>
+#include <exceptions/exceptions.h>
+#include <util/fd_event_handler.h>
+#include <util/select_event_handler.h>
 
 #include <gtest/gtest.h>
 
+#include <thread>
+
+#include <signal.h>
+
 using namespace isc;
-using namespace isc::dhcp;
+using namespace isc::util;
 
 const unsigned char MARKER = 0;
 
@@ -26,7 +31,7 @@ class FDEventHandlerTest : public ::testing::Test {
 public:
     /// @brief Constructor.
     FDEventHandlerTest() {
-        handler_.reset(new isc::dhcp::FDEventHandlerType);
+        handler_.reset(new FDEventHandlerType);
         pipe(pipefd);
     }
 
@@ -39,7 +44,7 @@ public:
     /// @brief The tested fd event handler.
     FDEventHandlerPtr handler_;
 
-    /// @brief The pipe used tor testing read and write operations.
+    /// @brief The pipe used for testing read and write operations.
     int pipefd[2];
 };
 
@@ -48,6 +53,8 @@ TEST_F(FDEventHandlerTest, events) {
 
     EXPECT_EQ(0, handler_->waitEvent(0, 1000));
 
+    EXPECT_THROW(handler_->add(-1), BadValue);
+
     handler_->add(pipefd[0], true, false);
     handler_->add(pipefd[1], false, true);
 
index 9c2ce19a28321b66ea95788f73220844cd5e43fb..9dd8f69097095e5a2b4db799fc61b67e5aa646c4 100644 (file)
@@ -12,6 +12,7 @@ kea_util_tests = executable(
     'dhcp_space_unittest.cc',
     'doubles_unittest.cc',
     'encode_unittest.cc',
+    'fd_event_handler_factory_unittests.cc',
     'fd_tests.cc',
     'filesystem_unittests.cc',
     'hash_unittest.cc',
@@ -25,6 +26,7 @@ kea_util_tests = executable(
     'range_utilities_unittest.cc',
     'readwrite_mutex_unittest.cc',
     'run_unittests.cc',
+    'select_event_handler_unittests.cc',
     'staged_value_unittest.cc',
     'state_model_unittest.cc',
     'stopwatch_unittest.cc',