From 617213ea265a79bbe8c20ee760d8b3bcab0ac016 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zsombor=20Bodn=C3=A1r?= <zsombor.bodnar@kszk.bme.hu>
Date: Fri, 3 Sep 2021 22:08:35 +0200
Subject: [PATCH] SM-19

---
 sql/prepared_statements.sql |  23 ++++++
 src/callouts.cc             | 149 ++++++++++++++++++++----------------
 src/framework_functions.cc  | 113 ++++++++++++++-------------
 src/globals.h               |   7 +-
 src/logger.cc               |   2 +-
 src/logger.h                |   8 +-
 src/messages.cc             |  46 +++++------
 src/messages.h              |  24 +++---
 src/messages.mes            |  22 +++---
 9 files changed, 221 insertions(+), 173 deletions(-)
 create mode 100644 sql/prepared_statements.sql

diff --git a/sql/prepared_statements.sql b/sql/prepared_statements.sql
new file mode 100644
index 0000000..caec01e
--- /dev/null
+++ b/sql/prepared_statements.sql
@@ -0,0 +1,23 @@
+-- ip_conflict
+select ip_conflict::int from mueb where mac_address = :mac;
+
+-- mueb_in_room
+select room_id from port p join room r using(room_id) where p.port_id = :port_id and p.switch_id = :switch_id;
+
+-- mueb_count_in_room
+select count(*) from port p join mueb m using(port_id, switch_id) where m.mac_address != :mac_address and p.room_id = :room_id;
+
+-- ip_override
+select ip_override from mueb where mac_address = :mac and ip_override is not null;
+
+-- ip_address
+select ip_address from port p join room r using(room_id) where p.port_id = :port_id and p.switch_id = :switch_id;
+
+-- clear_port
+update mueb set port_id = null, switch_id = null where port_id = :port_id and switch_id = :switch_id;
+
+-- insert_mueb
+insert into mueb (mac_address) values (:mac_address) on conflict (mac_address) do update set port_id = :port_id, switch_id = :switch_id where mueb.mac_address = :mac_address;
+
+-- set ip conflict
+update mueb m set ip_conflict = true where m.mac_address = :mac_address;
\ No newline at end of file
diff --git a/src/callouts.cc b/src/callouts.cc
index fc7d6c9..41beafd 100644
--- a/src/callouts.cc
+++ b/src/callouts.cc
@@ -7,7 +7,6 @@
 #include <pgsql/pgsql_connection.h>
 
 #include <algorithm>
-#include <cstdlib>
 #include <string>
 #include <tuple>
 
@@ -15,65 +14,77 @@
 #include "logger.h"
 
 static std::tuple<int, std::string, std::string, std::string> parseOption82(
-    const isc::dhcp::Pkt4Ptr &query4_ptr) {
+    const isc::dhcp::Pkt4Ptr& query4_ptr) {
   /* Get switch hostname and port name from DHCP option 82
+   * Also check if option 82 is valid
    * https://www.cisco.com/c/en/us/td/docs/switches/lan/catalyst4500/12-2/15-02SG/configuration/guide/config/dhcp.html#57094
    */
-  auto option82{query4_ptr->getOption(82)};
-  if (!option82) {
-    LOG_FATAL(schmatrix_logger, SCHMATRIX_DHCP_OPTION_82_ERROR);
+  const auto& option82{query4_ptr->getOption(82)};
+  if (!option82 || !option82->valid() || !option82->getOption(1) ||
+      !option82->getOption(1)->valid() || !option82->getOption(2) ||
+      !option82->getOption(2)->valid()) {
+    LOG_FATAL(kea_hook_logger, KEA_HOOK_DHCP_OPTION_82_ERROR);
     return std::make_tuple(1, nullptr, nullptr, nullptr);
   }
 
-  auto circuit_id{option82->getOption(1)->getData()};
-  auto remote_id{option82->getOption(2)->getData()};
+  const auto& circuit_id{option82->getOption(1)->getData()};
+  const auto& remote_id{option82->getOption(2)->getData()};
 
   // Check suboption ID types
   if (circuit_id[0] != 0 || remote_id[0] != 1) {
-    LOG_FATAL(schmatrix_logger, SCHMATRIX_DHCP_OPTION_82_ERROR);
+    LOG_FATAL(kea_hook_logger, KEA_HOOK_DHCP_OPTION_82_ERROR);
     return std::make_tuple(1, nullptr, nullptr, nullptr);
   }
 
   std::string port_id{std::to_string(circuit_id[4]) + "/" +
                       std::to_string(circuit_id[5])};
   std::string switch_name{remote_id.begin() + 2, remote_id.end()};
-  auto switch_id{g_switch_data.at(switch_name)};
 
-  return std::make_tuple(1, std::move(switch_name), std::move(port_id),
-                         std::move(switch_id));
+  try {
+    const auto& switch_id{g_switch_data.at(switch_name)};
+    return std::make_tuple(0, std::move(switch_name), std::move(port_id),
+                           switch_id);
+  } catch (const std::out_of_range& e) {
+    LOG_FATAL(kea_hook_logger, KEA_HOOK_DHCP_OPTION_82_ERROR);
+    return std::make_tuple(1, nullptr, nullptr, nullptr);
+  }
 }
 
 extern "C" {
 // Check IP conflict
-int pkt4_receive(isc::hooks::CalloutHandle &handle) {
+int pkt4_receive(isc::hooks::CalloutHandle& handle) {
   isc::dhcp::Pkt4Ptr query4_ptr;
   handle.getArgument("query4", query4_ptr);
 
-  // Skip non MUEB devices check
-  auto hwaddr_ptr = query4_ptr->getHWAddr();
+  // Skip non MUEB devices
+  const auto& hwaddr_ptr = query4_ptr->getHWAddr();
+  const auto& mac_address{hwaddr_ptr->toText(false)};
   if (hwaddr_ptr->hwaddr_[0] != 0x54 || hwaddr_ptr->hwaddr_[1] != 0x10 ||
       hwaddr_ptr->hwaddr_[2] != 0xEC) {
     return 0;
   }
 
-  const auto [result, switch_name, port_id, switch_id] =
+  const auto& [result, switch_name, port_id, switch_id] =
       parseOption82(query4_ptr);
-  const std::string &mac_address{hwaddr_ptr->toText(false)};
-  const char *values[2] = {port_id.c_str(), switch_id.c_str()};
+  if (result != 0) {
+    return 1;
+  }
+
+  const char* values[2] = {port_id.c_str(), switch_id.c_str()};
 
   // Get room id
   isc::db::PgSqlResult r(PQexecPrepared(*g_pg_sql_connection, "mueb_in_room", 2,
                                         values, nullptr, nullptr, 0));
   // Handle incorrect room
-  if (r.getRows() < 0) {
-    LOG_ERROR(schmatrix_logger, SCHMATRIX_UNKNOWN_ROOM)
+  if (r.getRows() <= 0) {
+    LOG_ERROR(kea_hook_logger, KEA_HOOK_UNKNOWN_ROOM)
         .arg(mac_address)
         .arg(switch_name)
         .arg(port_id);
     return 1;
   }
 
-  const auto room_id{PQgetvalue(r, 0, 0)};
+  const auto& room_id{PQgetvalue(r, 0, 0)};
   values[0] = mac_address.c_str();
   values[1] = room_id;
 
@@ -81,44 +92,52 @@ int pkt4_receive(isc::hooks::CalloutHandle &handle) {
   isc::db::PgSqlResult r2(PQexecPrepared(*g_pg_sql_connection,
                                          "mueb_count_in_room", 2, values,
                                          nullptr, nullptr, 0));
-  if (r.getRows() > 0 && std::atoi(PQgetvalue(r, 0, 0)) > 0) {
-    LOG_WARN(schmatrix_logger, SCHMATRIX_MULTIPLE_MUEB).arg(room_id);
-    handle.setStatus(isc::hooks::CalloutHandle::NEXT_STEP_DROP);
-    return 0;
-  }
 
-  isc::db::PgSqlResult r3(PQexecPrepared(*g_pg_sql_connection, "ip_conflict", 1,
-                                         values, nullptr, nullptr, 0));
-  /* Drop packet when a MUEB has IP conflict
-   * Needs manual fix
-   */
-  if (r.getRows() > 0 && std::atoi(PQgetvalue(r, 0, 0)) > 0) {
-    handle.setStatus(isc::hooks::CalloutHandle::NEXT_STEP_DROP);
+  try {
+    if (std::stoi(PQgetvalue(r2, 0, 0)) > 0) {
+      LOG_WARN(kea_hook_logger, KEA_HOOK_MULTIPLE_MUEB).arg(room_id);
+      handle.setStatus(isc::hooks::CalloutHandle::NEXT_STEP_DROP);
+      return 0;
+    }
+
+    isc::db::PgSqlResult r3(PQexecPrepared(*g_pg_sql_connection, "ip_conflict",
+                                           1, values, nullptr, nullptr, 0));
+    /* Drop packet when a MUEB has IP conflict
+     * Needs manual fix
+     */
+    if (r3.getRows() > 0 && std::stoi(PQgetvalue(r3, 0, 0)) > 0) {
+      handle.setStatus(isc::hooks::CalloutHandle::NEXT_STEP_DROP);
+    }
+  } catch (const std::exception& e) {
+    LOG_ERROR(kea_hook_logger, KEA_HOOK_DATABASE_FAILED).arg(e.what());
+    return 1;
   }
 
   return 0;
 }
 
 // handle IP lease
-int lease4_select(isc::hooks::CalloutHandle &handle) {
+int lease4_select(isc::hooks::CalloutHandle& handle) {
   isc::dhcp::Pkt4Ptr query4_ptr;
   handle.getArgument("query4", query4_ptr);
+
   isc::dhcp::Lease4Ptr lease4_ptr;
   handle.getArgument("lease4", lease4_ptr);
+
   bool fake_allocation;
   handle.getArgument("fake_allocation", fake_allocation);
 
-  LOG_DEBUG(schmatrix_logger, 0, SCHMATRIX_DHCP_STATE)
+  LOG_DEBUG(kea_hook_logger, 0, KEA_HOOK_DHCP_STATE)
       .arg((fake_allocation) ? "---[DISCOVER]---" : "---[REQUEST]---");
 
-  auto hwaddr_ptr = query4_ptr->getHWAddr();
-  auto mac_address = hwaddr_ptr->toText(false);
+  const auto& hwaddr_ptr = query4_ptr->getHWAddr();
+  const auto& mac_address = hwaddr_ptr->toText(false);
 
   // Allocate IP for non MUEB devices
   if (hwaddr_ptr->hwaddr_[0] != 0x54 || hwaddr_ptr->hwaddr_[1] != 0x10 ||
       hwaddr_ptr->hwaddr_[2] != 0xEC) {
-    LOG_INFO(schmatrix_logger, SCHMATRIX_NOT_MUEB).arg(mac_address);
-    LOG_DEBUG(schmatrix_logger, 0, SCHMATRIX_DHCP_STATE)
+    LOG_INFO(kea_hook_logger, KEA_HOOK_NOT_MUEB).arg(mac_address);
+    LOG_DEBUG(kea_hook_logger, 0, KEA_HOOK_DHCP_STATE)
         .arg((fake_allocation) ? "---<DISCOVER>---" : "---<REQUEST>---");
 
     return 0;
@@ -133,22 +152,26 @@ int lease4_select(isc::hooks::CalloutHandle &handle) {
   }
 
   // Check for IP override
-  const char *values[3] = {mac_address.c_str()};
+  const char* values[3] = {mac_address.c_str()};
   isc::db::PgSqlResult r(PQexecPrepared(*g_pg_sql_connection, "ip_override", 1,
                                         values, nullptr, nullptr, 0));
-  bool ip_overriden{r.getRows() > 0};
 
-  // Query DB to get IP address
   std::string ip_address;
-  if (!ip_overriden) {
+  if (r.getRows() > 0) {
+    // IP is overridden
+    ip_address = PQgetvalue(r, 0, 0);
+    LOG_INFO(kea_hook_logger, KEA_HOOK_IP_OVERRIDDEN)
+        .arg(mac_address)
+        .arg(ip_address);
+  } else {
     values[0] = port_id.c_str();
     values[1] = switch_id.c_str();
     isc::db::PgSqlResult r2(PQexecPrepared(*g_pg_sql_connection, "ip_address",
                                            2, values, nullptr, nullptr, 0));
 
     // Handle incorrect room
-    if (r2.getRows() < 0) {
-      LOG_ERROR(schmatrix_logger, SCHMATRIX_UNKNOWN_ROOM)
+    if (r2.getRows() <= 0) {
+      LOG_ERROR(kea_hook_logger, KEA_HOOK_UNKNOWN_ROOM)
           .arg(mac_address)
           .arg(switch_name)
           .arg(port_id);
@@ -157,11 +180,6 @@ int lease4_select(isc::hooks::CalloutHandle &handle) {
     }
 
     ip_address = PQgetvalue(r2, 0, 0);
-  } else {
-    ip_address = PQgetvalue(r, 0, 0);
-    LOG_INFO(schmatrix_logger, SCHMATRIX_IP_OVERRIDDEN)
-        .arg(mac_address)
-        .arg(ip_address);
   }
 
   // Modify kea's IP lease
@@ -172,12 +190,11 @@ int lease4_select(isc::hooks::CalloutHandle &handle) {
   // Critical part end, it's safe to lease IP now
   handle.setStatus(isc::hooks::CalloutHandle::NEXT_STEP_CONTINUE);
 
-  LOG_DEBUG(schmatrix_logger, 0, SCHMATRIX_QUERIED_IP).arg(ip_address);
-
-  LOG_DEBUG(schmatrix_logger, 0, SCHMATRIX_DHCP_STATE)
+  LOG_DEBUG(kea_hook_logger, 0, KEA_HOOK_QUERIED_IP).arg(ip_address);
+  LOG_DEBUG(kea_hook_logger, 0, KEA_HOOK_DHCP_STATE)
       .arg((fake_allocation) ? "---<DISCOVER>---" : "---<REQUEST>---");
 
-  // Save to DB when the DHCP state is DHCPREQUEST For debugging purposes
+  // Save to DB when the DHCP state is DHCPREQUEST
   if (!fake_allocation) {
     // Clear switch-port
     values[0] = port_id.c_str();
@@ -189,8 +206,9 @@ int lease4_select(isc::hooks::CalloutHandle &handle) {
     values[0] = mac_address.c_str();
     values[1] = port_id.c_str();
     values[2] = switch_id.c_str();
-    isc::db::PgSqlResult r4(PQexecPrepared(*g_pg_sql_connection, "insert_mueb",
-                                           3, values, nullptr, nullptr, 0));
+    isc::db::PgSqlResult r4(PQexecPrepared(*g_pg_sql_connection,
+                                           "insert_or_mueb", 3, values, nullptr,
+                                           nullptr, 0));
   } else {
     /* Handle device swap
      * Remove the current IP from the lease DB before DHCPREQUEST
@@ -208,17 +226,17 @@ int lease4_select(isc::hooks::CalloutHandle &handle) {
 /* Handle lease after one allocation
  * State after DHCPDISCOVER, DHCPREQUEST(renew)
  */
-int lease4_renew(isc::hooks::CalloutHandle &handle) {
+int lease4_renew(isc::hooks::CalloutHandle& handle) {
   isc::dhcp::Pkt4Ptr query4Ptr;
   handle.getArgument("query4", query4Ptr);
-  auto isRequest = query4Ptr->getType() == isc::dhcp::DHCPREQUEST;
 
-  std::string tmp = (isRequest) ? "---[REQUEST" : "---[DISCOVER";
+  const auto& isRequest = query4Ptr->getType() == isc::dhcp::DHCPREQUEST;
+  std::string tmp{(isRequest) ? "---[REQUEST" : "---[DISCOVER"};
 
-  LOG_DEBUG(schmatrix_logger, 0, SCHMATRIX_DHCP_STATE).arg(tmp + "(RENEW)]---");
+  LOG_DEBUG(kea_hook_logger, 0, KEA_HOOK_DHCP_STATE).arg(tmp + "(RENEW)]---");
 
   // Used for DHCPREQUEST check in lease4_select
-  handle.setArgument("fake_allocation", !(isRequest));
+  handle.setArgument("fake_allocation", !isRequest);
 
   if (lease4_select(handle) != 0) {
     return 1;
@@ -228,22 +246,23 @@ int lease4_renew(isc::hooks::CalloutHandle &handle) {
 }
 
 // Handle IP conflict
-int lease4_decline(isc::hooks::CalloutHandle &handle) {
+int lease4_decline(isc::hooks::CalloutHandle& handle) {
   isc::dhcp::Pkt4Ptr query4Ptr;
   handle.getArgument("query4", query4Ptr);
+
   isc::dhcp::Lease4Ptr lease4Ptr;
   handle.getArgument("lease4", lease4Ptr);
 
-  const std::string &mac_address = query4Ptr->getHWAddr()->toText(false);
-  LOG_FATAL(schmatrix_logger, SCHMATRIX_IP_CONFLICT)
+  const auto& mac_address{query4Ptr->getHWAddr()->toText(false)};
+  LOG_FATAL(kea_hook_logger, KEA_HOOK_IP_CONFLICT)
       .arg(lease4Ptr->addr_.toText())
       .arg(mac_address);
 
   // set IP conflict to true
-  const char *values[] = {mac_address.c_str()};
+  const char* values[] = {mac_address.c_str()};
   isc::db::PgSqlResult r(PQexecPrepared(*g_pg_sql_connection, "set_ip_conflict",
                                         1, values, nullptr, nullptr, 0));
 
   return 0;
 }
-}
+}
\ No newline at end of file
diff --git a/src/framework_functions.cc b/src/framework_functions.cc
index 1f7d7e7..0146100 100644
--- a/src/framework_functions.cc
+++ b/src/framework_functions.cc
@@ -21,78 +21,81 @@ int load(isc::hooks::LibraryHandle& handle) {
 
   if (!host_ptr || !port_ptr || !database_ptr || !username_ptr ||
       !password_ptr) {
-    LOG_FATAL(schmatrix_logger, SCHMATRIX_MISSING_PARAMETERS);
+    LOG_FATAL(kea_hook_logger, KEA_HOOK_MISSING_PARAMETERS);
 
     return 1;
   }
 
-  const isc::db::DatabaseConnection::ParameterMap parameterMap{
+  g_pg_sql_connection = new isc::db::PgSqlConnection({
       {"host", host_ptr->stringValue()},
       {"port", port_ptr->stringValue()},
       {"name", database_ptr->stringValue()},
       {"user", username_ptr->stringValue()},
       {"password", password_ptr->stringValue()},
-  };
-  g_pg_sql_connection = new isc::db::PgSqlConnection(parameterMap);
+  });
+
   try {
     g_pg_sql_connection->openDatabase();
+
+    // Store prepared statements
+    std::array<isc::db::PgSqlTaggedStatement, 8> statements{
+        {{1,
+          {829},
+          "ip_conflict",
+          "select ip_conflict::int from mueb where mac_address = $1"},
+         {2,
+          {isc::db::OID_TEXT, 869},
+          "mueb_in_room",
+          "select room_id from port p join room r using(room_id) where "
+          "p.port_id "
+          "= $1 and p.switch_id = $2"},
+         {2,
+          {829, isc::db::OID_INT4},
+          "mueb_count_in_room",
+          "select count(*) from port p join mueb m using(port_id, switch_id) "
+          "where m.mac_address != $1 and p.room_id = $2"},
+         {1,
+          {829},
+          "ip_override",
+          "select ip_override from mueb where mac_address = $1 and "
+          "ip_override "
+          "is not null"},
+         {2,
+          {isc::db::OID_TEXT, 869},
+          "ip_address",
+          "select ip_address from port p join room r using(room_id) where "
+          "p.port_id "
+          "= $1 and switch_id = $2"},
+         {2,
+          {isc::db::OID_TEXT, 869},
+          "clear_port",
+          "update mueb set port_id = null, switch_id = null where port_id = $1 "
+          "and switch_id = $2"},
+         {3,
+          {829, isc::db::OID_TEXT, 869},
+          "insert_or_update_mueb",
+          "insert into mueb (mac_address) values ($1) on conflict "
+          "(mac_address) do update set "
+          "port_id = $2, switch_id = $3 where mueb.mac_address = "
+          "$1"},
+         {1,
+          {829},
+          "set_ip_conflict",
+          "update mueb set ip_conflict = true where mac_address = $1"}}};
+    g_pg_sql_connection->prepareStatements(statements.cbegin(),
+                                           statements.cend());
+
   } catch (const std::exception& e) {
-    LOG_FATAL(schmatrix_logger, SCHMATRIX_DATABASE_FAILED).arg(e.what());
+    LOG_FATAL(kea_hook_logger, KEA_HOOK_DATABASE_FAILED).arg(e.what());
     return 1;
   }
 
-  // Store prepared statements
-  std::array<isc::db::PgSqlTaggedStatement, 8> statements{
-      {{1,
-        {isc::db::OID_TEXT},
-        "ip_conflict",
-        "select ip_conflict::int from mueb where mac_address = $1::macaddr"},
-       {2,
-        {isc::db::OID_TEXT, isc::db::OID_TEXT},
-        "mueb_in_room",
-        "select room_id from port p join room r using(room_id) where p.port_id "
-        "= $1 and p.switch_id = $2::inet"},
-       {2,
-        {isc::db::OID_TEXT, isc::db::OID_TEXT},
-        "mueb_count_in_room",
-        "select count(*) from port p join mueb m using(port_id, switch_id) "
-        "where m.mac_address::macaddr != $1 and p.room_id = $2"},
-       {1,
-        {isc::db::OID_TEXT},
-        "ip_override",
-        "select ip_override from mueb where mac_address = $1::macaddr and "
-        "ip_override "
-        "is not null"},
-       {2,
-        {isc::db::OID_TEXT, isc::db::OID_TEXT},
-        "ip_address",
-        "select ip_address from port join room r using(room_id) where port_id "
-        "= $1 and switch_id = $2::inet"},
-       {2,
-        {isc::db::OID_TEXT, isc::db::OID_TEXT},
-        "clear_port",
-        "update mueb set port_id = null, switch_id = null where port_id = $1 "
-        "and switch_id = $2::inet"},
-       {3,
-        {isc::db::OID_TEXT, isc::db::OID_TEXT, isc::db::OID_TEXT},
-        "insert_mueb",
-        "insert into mueb (mac_address) values ($1::macaddr) on conflict "
-        "(mac_address) do update set "
-        "port_id = $2, switch_id = $3::inet where mueb.mac_address = "
-        "$1::macaddr"},
-       {1,
-        {isc::db::OID_TEXT},
-        "set_ip_conflict",
-        "update mueb set ip_conflict = true where mac_address = $1::macaddr"}}};
-  g_pg_sql_connection->prepareStatements(statements.cbegin(),
-                                         statements.cend());
-
   // Cache switch data
   isc::db::PgSqlResult r(
-      PQexec(*g_pg_sql_connection, "select name, switch_id from switch"));
+      PQexec(*g_pg_sql_connection, "select hostname, switch_id from switch"));
   if (r.getRows() <= 0) {
-    LOG_FATAL(schmatrix_logger, SCHMATRIX_DATABASE_FAILED)
-        .arg("switch table is empty!");
+    LOG_FATAL(kea_hook_logger, KEA_HOOK_DATABASE_FAILED)
+        .arg("Switch table is empty!");
 
     return 1;
   }
@@ -101,7 +104,7 @@ int load(isc::hooks::LibraryHandle& handle) {
     g_switch_data.emplace(PQgetvalue(r, i, 0), PQgetvalue(r, i, 1));
   }
 
-  LOG_DEBUG(schmatrix_logger, 0, SCHMATRIX_OPEN_DATABASE);
+  LOG_DEBUG(kea_hook_logger, 0, KEA_HOOK_OPEN_DATABASE);
 
   return 0;
 }
diff --git a/src/globals.h b/src/globals.h
index 0176656..813c23c 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -1,4 +1,5 @@
-#pragma once
+#ifndef KEA_HOOK_SRC_GLOBALS_H_
+#define KEA_HOOK_SRC_GLOBALS_H_
 
 #include <pgsql/pgsql_connection.h>
 
@@ -6,4 +7,6 @@
 #include <string>
 
 extern std::map<std::string, std::string> g_switch_data;
-extern isc::db::PgSqlConnection* g_pg_sql_connection;
\ No newline at end of file
+extern isc::db::PgSqlConnection* g_pg_sql_connection;
+
+#endif // KEA_HOOK_SRC_GLOBALS_H_
\ No newline at end of file
diff --git a/src/logger.cc b/src/logger.cc
index dceb9df..be318cb 100644
--- a/src/logger.cc
+++ b/src/logger.cc
@@ -1,3 +1,3 @@
 #include "logger.h"
 
-isc::log::Logger schmatrix_logger("schmatrix");
+isc::log::Logger kea_hook_logger("kea_hook");
\ No newline at end of file
diff --git a/src/logger.h b/src/logger.h
index e85fb09..34e21c3 100644
--- a/src/logger.h
+++ b/src/logger.h
@@ -1,5 +1,5 @@
-#ifndef SCHMATRIX_LOGGER_H
-#define SCHMATRIX_LOGGER_H
+#ifndef KEA_HOOK_SRC_LOGGER_H_
+#define KEA_HOOK_SRC_LOGGER_H_
 
 #include <log/logger.h>
 #include <log/macros.h>
@@ -7,6 +7,6 @@
 
 #include "messages.h"
 
-extern isc::log::Logger schmatrix_logger;
+extern isc::log::Logger kea_hook_logger;
 
-#endif
+#endif // KEA_HOOK_SRC_LOGGER_H_
\ No newline at end of file
diff --git a/src/messages.cc b/src/messages.cc
index 15908e9..a40b881 100644
--- a/src/messages.cc
+++ b/src/messages.cc
@@ -1,35 +1,35 @@
-// File created from messages.mes on Thu Sep 02 2021 20:36
+// File created from messages.mes on Fri Sep 03 2021 19:53
 
 #include <cstddef>
 #include <log/message_types.h>
 #include <log/message_initializer.h>
 
-extern const isc::log::MessageID SCHMATRIX_DATABASE_FAILED = "SCHMATRIX_DATABASE_FAILED";
-extern const isc::log::MessageID SCHMATRIX_DHCP_OPTION_82_ERROR = "SCHMATRIX_DHCP_OPTION_82_ERROR";
-extern const isc::log::MessageID SCHMATRIX_DHCP_STATE = "SCHMATRIX_DHCP_STATE";
-extern const isc::log::MessageID SCHMATRIX_IP_CONFLICT = "SCHMATRIX_IP_CONFLICT";
-extern const isc::log::MessageID SCHMATRIX_IP_OVERRIDDEN = "SCHMATRIX_IP_OVERRIDDEN";
-extern const isc::log::MessageID SCHMATRIX_MISSING_PARAMETERS = "SCHMATRIX_MISSING_PARAMETERS";
-extern const isc::log::MessageID SCHMATRIX_MULTIPLE_MUEB = "SCHMATRIX_MULTIPLE_MUEB";
-extern const isc::log::MessageID SCHMATRIX_NOT_MUEB = "SCHMATRIX_NOT_MUEB";
-extern const isc::log::MessageID SCHMATRIX_OPEN_DATABASE = "SCHMATRIX_OPEN_DATABASE";
-extern const isc::log::MessageID SCHMATRIX_QUERIED_IP = "SCHMATRIX_QUERIED_IP";
-extern const isc::log::MessageID SCHMATRIX_UNKNOWN_ROOM = "SCHMATRIX_UNKNOWN_ROOM";
+extern const isc::log::MessageID KEA_HOOK_DATABASE_FAILED = "KEA_HOOK_DATABASE_FAILED";
+extern const isc::log::MessageID KEA_HOOK_DHCP_OPTION_82_ERROR = "KEA_HOOK_DHCP_OPTION_82_ERROR";
+extern const isc::log::MessageID KEA_HOOK_DHCP_STATE = "KEA_HOOK_DHCP_STATE";
+extern const isc::log::MessageID KEA_HOOK_IP_CONFLICT = "KEA_HOOK_IP_CONFLICT";
+extern const isc::log::MessageID KEA_HOOK_IP_OVERRIDDEN = "KEA_HOOK_IP_OVERRIDDEN";
+extern const isc::log::MessageID KEA_HOOK_MISSING_PARAMETERS = "KEA_HOOK_MISSING_PARAMETERS";
+extern const isc::log::MessageID KEA_HOOK_MULTIPLE_MUEB = "KEA_HOOK_MULTIPLE_MUEB";
+extern const isc::log::MessageID KEA_HOOK_NOT_MUEB = "KEA_HOOK_NOT_MUEB";
+extern const isc::log::MessageID KEA_HOOK_OPEN_DATABASE = "KEA_HOOK_OPEN_DATABASE";
+extern const isc::log::MessageID KEA_HOOK_QUERIED_IP = "KEA_HOOK_QUERIED_IP";
+extern const isc::log::MessageID KEA_HOOK_UNKNOWN_ROOM = "KEA_HOOK_UNKNOWN_ROOM";
 
 namespace {
 
 const char* values[] = {
-    "SCHMATRIX_DATABASE_FAILED", "%1",
-    "SCHMATRIX_DHCP_OPTION_82_ERROR", "Invalid DHCP option 82",
-    "SCHMATRIX_DHCP_STATE", "%1",
-    "SCHMATRIX_IP_CONFLICT", "Could not lease IP: %1 to MUEB: %2 because of IP conflict",
-    "SCHMATRIX_IP_OVERRIDDEN", "MUEB: %1 IP's overridden to: %2",
-    "SCHMATRIX_MISSING_PARAMETERS", "Not all parameters are provided",
-    "SCHMATRIX_MULTIPLE_MUEB", "Multiple MUEBs in the same room %1",
-    "SCHMATRIX_NOT_MUEB", "Device with MAC: %1 is not a MUEB",
-    "SCHMATRIX_OPEN_DATABASE", "Opened database successfully",
-    "SCHMATRIX_QUERIED_IP", "Queried IP is: %1",
-    "SCHMATRIX_UNKNOWN_ROOM", "MUEB: %1 connected to a unknown room, switch: %2, port: %3",
+    "KEA_HOOK_DATABASE_FAILED", "%1",
+    "KEA_HOOK_DHCP_OPTION_82_ERROR", "Invalid DHCP option 82",
+    "KEA_HOOK_DHCP_STATE", "%1",
+    "KEA_HOOK_IP_CONFLICT", "Could not lease IP: %1 to MUEB: %2 because of IP conflict",
+    "KEA_HOOK_IP_OVERRIDDEN", "MUEB: %1 IP's overridden to: %2",
+    "KEA_HOOK_MISSING_PARAMETERS", "Not all parameters are provided",
+    "KEA_HOOK_MULTIPLE_MUEB", "Multiple MUEBs in the same room %1",
+    "KEA_HOOK_NOT_MUEB", "Device with MAC: %1 is not a MUEB",
+    "KEA_HOOK_OPEN_DATABASE", "Opened database successfully",
+    "KEA_HOOK_QUERIED_IP", "Queried IP is: %1",
+    "KEA_HOOK_UNKNOWN_ROOM", "MUEB: %1 connected to a unknown room, switch: %2, port: %3",
     NULL
 };
 
diff --git a/src/messages.h b/src/messages.h
index c7113e9..2b417c5 100644
--- a/src/messages.h
+++ b/src/messages.h
@@ -1,20 +1,20 @@
-// File created from messages.mes on Thu Sep 02 2021 20:36
+// File created from messages.mes on Fri Sep 03 2021 19:53
 
 #ifndef MESSAGES_H
 #define MESSAGES_H
 
 #include <log/message_types.h>
 
-extern const isc::log::MessageID SCHMATRIX_DATABASE_FAILED;
-extern const isc::log::MessageID SCHMATRIX_DHCP_OPTION_82_ERROR;
-extern const isc::log::MessageID SCHMATRIX_DHCP_STATE;
-extern const isc::log::MessageID SCHMATRIX_IP_CONFLICT;
-extern const isc::log::MessageID SCHMATRIX_IP_OVERRIDDEN;
-extern const isc::log::MessageID SCHMATRIX_MISSING_PARAMETERS;
-extern const isc::log::MessageID SCHMATRIX_MULTIPLE_MUEB;
-extern const isc::log::MessageID SCHMATRIX_NOT_MUEB;
-extern const isc::log::MessageID SCHMATRIX_OPEN_DATABASE;
-extern const isc::log::MessageID SCHMATRIX_QUERIED_IP;
-extern const isc::log::MessageID SCHMATRIX_UNKNOWN_ROOM;
+extern const isc::log::MessageID KEA_HOOK_DATABASE_FAILED;
+extern const isc::log::MessageID KEA_HOOK_DHCP_OPTION_82_ERROR;
+extern const isc::log::MessageID KEA_HOOK_DHCP_STATE;
+extern const isc::log::MessageID KEA_HOOK_IP_CONFLICT;
+extern const isc::log::MessageID KEA_HOOK_IP_OVERRIDDEN;
+extern const isc::log::MessageID KEA_HOOK_MISSING_PARAMETERS;
+extern const isc::log::MessageID KEA_HOOK_MULTIPLE_MUEB;
+extern const isc::log::MessageID KEA_HOOK_NOT_MUEB;
+extern const isc::log::MessageID KEA_HOOK_OPEN_DATABASE;
+extern const isc::log::MessageID KEA_HOOK_QUERIED_IP;
+extern const isc::log::MessageID KEA_HOOK_UNKNOWN_ROOM;
 
 #endif // MESSAGES_H
diff --git a/src/messages.mes b/src/messages.mes
index d1e174f..b5b3012 100644
--- a/src/messages.mes
+++ b/src/messages.mes
@@ -1,21 +1,21 @@
-% SCHMATRIX_MISSING_PARAMETERS Not all parameters are provided
+% KEA_HOOK_MISSING_PARAMETERS Not all parameters are provided
 
-% SCHMATRIX_OPEN_DATABASE Opened database successfully
+% KEA_HOOK_OPEN_DATABASE Opened database successfully
 
-% SCHMATRIX_DATABASE_FAILED %1
+% KEA_HOOK_DATABASE_FAILED %1
 
-% SCHMATRIX_QUERIED_IP Queried IP is: %1
+% KEA_HOOK_QUERIED_IP Queried IP is: %1
 
-% SCHMATRIX_NOT_MUEB Device with MAC: %1 is not a MUEB
+% KEA_HOOK_NOT_MUEB Device with MAC: %1 is not a MUEB
 
-% SCHMATRIX_IP_CONFLICT Could not lease IP: %1 to MUEB: %2 because of IP conflict
+% KEA_HOOK_IP_CONFLICT Could not lease IP: %1 to MUEB: %2 because of IP conflict
 
-% SCHMATRIX_UNKNOWN_ROOM MUEB: %1 connected to a unknown room, switch: %2, port: %3
+% KEA_HOOK_UNKNOWN_ROOM MUEB: %1 connected to a unknown room, switch: %2, port: %3
 
-% SCHMATRIX_DHCP_STATE %1
+% KEA_HOOK_DHCP_STATE %1
 
-% SCHMATRIX_IP_OVERRIDDEN MUEB: %1 IP's overridden to: %2
+% KEA_HOOK_IP_OVERRIDDEN MUEB: %1 IP's overridden to: %2
 
-% SCHMATRIX_DHCP_OPTION_82_ERROR Invalid DHCP option 82
+% KEA_HOOK_DHCP_OPTION_82_ERROR Invalid DHCP option 82
 
-% SCHMATRIX_MULTIPLE_MUEB Multiple MUEBs in the same room %1
+% KEA_HOOK_MULTIPLE_MUEB Multiple MUEBs in the same room %1
-- 
GitLab