-// File created from ../../../../src/hooks/dhcp/high_availability/ha_messages.mes on Wed Jun 26 2019 09:25
+// File created from ../../../../src/hooks/dhcp/high_availability/ha_messages.mes on Wed Jun 26 2019 15:13
#include <cstddef>
#include <log/message_types.h>
extern const isc::log::MessageID HA_LOCAL_DHCP_ENABLE = "HA_LOCAL_DHCP_ENABLE";
extern const isc::log::MessageID HA_MISSING_CONFIGURATION = "HA_MISSING_CONFIGURATION";
extern const isc::log::MessageID HA_SCOPES_HANDLER_FAILED = "HA_SCOPES_HANDLER_FAILED";
-extern const isc::log::MessageID HA_SERVICE_CONNECT_INVALID_SOCKET = "HA_SERVICE_CONNECT_INVALID_SOCKET";
extern const isc::log::MessageID HA_SERVICE_STARTED = "HA_SERVICE_STARTED";
extern const isc::log::MessageID HA_STATE_MACHINE_CONTINUED = "HA_STATE_MACHINE_CONTINUED";
extern const isc::log::MessageID HA_STATE_MACHINE_PAUSED = "HA_STATE_MACHINE_PAUSED";
"HA_LOCAL_DHCP_ENABLE", "local DHCP service is enabled while the %1 is in the %2 state",
"HA_MISSING_CONFIGURATION", "high-availability parameter not specified for High Availability hooks library",
"HA_SCOPES_HANDLER_FAILED", "ha-scopes command failed: %1",
- "HA_SERVICE_CONNECT_INVALID_SOCKET", "Attempted to register an invalid socket, error code: %1",
"HA_SERVICE_STARTED", "started high availability service in %1 mode as %2 server",
"HA_STATE_MACHINE_CONTINUED", "state machine is un-paused",
"HA_STATE_MACHINE_PAUSED", "state machine paused in state %1",
-// File created from ../../../../src/hooks/dhcp/high_availability/ha_messages.mes on Wed Jun 26 2019 09:25
+// File created from ../../../../src/hooks/dhcp/high_availability/ha_messages.mes on Wed Jun 26 2019 15:13
#ifndef HA_MESSAGES_H
#define HA_MESSAGES_H
extern const isc::log::MessageID HA_LOCAL_DHCP_ENABLE;
extern const isc::log::MessageID HA_MISSING_CONFIGURATION;
extern const isc::log::MessageID HA_SCOPES_HANDLER_FAILED;
-extern const isc::log::MessageID HA_SERVICE_CONNECT_INVALID_SOCKET;
extern const isc::log::MessageID HA_SERVICE_STARTED;
extern const isc::log::MessageID HA_STATE_MACHINE_CONTINUED;
extern const isc::log::MessageID HA_STATE_MACHINE_PAUSED;
This informational message indicates that the High Availability hooks library
has been unloaded successfully.
-% HA_SERVICE_CONNECT_INVALID_SOCKET Attempted to register an invalid socket, error code: %1
-This is an error message that indicates that the server attempted to
-register an invalid socket with the Interface Manager. This is an internal
-server error and a bug report should be created.
-
% HA_DHCP4_START_SERVICE_FAILED failed to start DHCPv4 HA service in dhcp4_srv_configured callout: %1
This error message is issued when an attempt to start High Availability service
for the DHCPv4 server failed in the dhcp4_srv_configured callout. This
bool
HAService::clientConnectHandler(const boost::system::error_code& ec, int tcp_native_fd) {
- if (!ec || (ec.value() == boost::asio::error::in_progress)) {
- if (tcp_native_fd < 0) {
- // This really should not be possible, but just in case.
- LOG_ERROR(ha_logger, HA_SERVICE_CONNECT_INVALID_SOCKET)
- .arg(ec.value());
- return (false);
- }
-
- // Register the socket with Interface Manager.
- // External socket callback is a NOP. Ready events handlers are run by an
- // explicit call IOService ready in kea-dhcp<n> code. We are registering
- // the socket only to interrupt main-thread select().
+ // If things look ok register the socket with Interface Manager. Note
+ // we don't register if the FD is < 0 to avoid an expection throw.
+ // It is unlikely that this will occur but we want to be liberal
+ // and avoid issues.
+ if ((!ec || (ec.value() == boost::asio::error::in_progress))
+ && (tcp_native_fd >= 0)) {
+ // External socket callback is a NOP. Ready events handlers are
+ // run by an explicit call IOService ready in kea-dhcp<n> code.
+ // We are registerin the socket only to interrupt main-thread
+ // select().
IfaceMgr::instance().addExternalSocket(tcp_native_fd, 0);
}
void
Connection::close() {
+ // Pass in true to discard the callback.
closeCallback(true);
timer_.cancel();
/// @param tcp_native_fd socket descriptor to register
bool connectHandler(const boost::system::error_code& ec, int tcp_native_fd) {
++connect_cnt_;
- if (!ec || ec.value() == boost::asio::error::in_progress) {
- if (tcp_native_fd >= 0) {
- registered_fd_ = tcp_native_fd;
- return (true);
- }
-
- // Invalid fd?, this really should not be possible. EXPECT makes
- // sure we log it.
- EXPECT_TRUE (tcp_native_fd >= 0) << "no ec error but invalid fd?";
+ if ((!ec || (ec.value() == boost::asio::error::in_progress))
+ && (tcp_native_fd >= 0)) {
+ registered_fd_ = tcp_native_fd;
+ return (true);
+ } else if ((ec.value() == boost::asio::error::already_connected)
+ && (registered_fd_ != tcp_native_fd)) {
return (false);
-
- } else if (ec.value() == boost::asio::error::already_connected) {
- if (registered_fd_ != tcp_native_fd) {
- return (false);
- }
}
// ec indicates an error, return true, so that error can be handled