KEA dhcp Mysql 后端
KEA dhcp Mysql Backend
我对 MySQL 后端的新 ISC DHCP、KEA 有疑问。
我想在我的数据库中存储租约,它可以工作,但未存储一些信息。
我在我的数据库中获得了这种条目:
+------------+--------+-----------+----------------+---------------------+-----------+----------+----------+----------+
| address | hwaddr | client_id | valid_lifetime | expire | subnet_id | fqdn_fwd | fqdn_rev | hostname |
+------------+--------+-----------+----------------+---------------------+-----------+----------+----------+----------+
| 3232236052 | '° | NULL | 4000 | 2015-07-22 08:54:32 | 1 | 0 | 0 | │
+------------+--------+-----------+----------------+---------------------+-----------+----------+----------+----------+
地址栏是十进制的IP地址,我查了,没问题。
我没有找到如何将 IP 地址更改为 IPv4 格式以及如何在 KEA 文档的 hwaddr 字段中存储 mac 地址。
如果有人知道如何做到这一点,我将不胜感激!
谢谢!
根据 KEA 文档 hwaddr
字段是 VARBINARY
。您应该能够看到值 IP 地址和 hwaddr 使用:
SELECT INET_NTOA(address), HEX(hwaddr), lease4.* FROM lease4;
我有类似的需求来创建 KEA 主机预留并将 MAC 和 IP 地址填充为常规字符串,同时仍然让 KEA 使用的字段在插入或更新时自动更新。
我最后做的是创建两个新字段来保存这些字符串值('hosts.dhcp_identifier_str' 和 'hosts.ipv4_address_str'):
ALTER TABLE `hosts` ADD `dhcp_identifier_str` VARCHAR(12) NOT NULL AFTER `dhcp_identifier`;
ALTER TABLE `hosts` ADD `ipv4_address_str` VARCHAR(15) NULL DEFAULT NULL AFTER `ipv4_address`;
然后,我通过使用 BEFORE INSERT/UPDATE MySQL 触发器使 KEA 使用的相应字段('hosts.dhcp_identifier' 和 'hosts.ipv4_address')保持最新:
DELIMITER //
DROP TRIGGER IF EXISTS `host_BINS`//
CREATE TRIGGER `host_BINS` BEFORE INSERT ON `hosts`
FOR EACH ROW BEGIN
IF (NEW.dhcp_identifier = '' AND NEW.dhcp_identifier_str != '') THEN
SET NEW.dhcp_identifier = UNHEX(UPPER(NEW.dhcp_identifier_str));
ELSEIF (NEW.dhcp_identifier_str = '' AND NEW.dhcp_identifier != '') THEN
SET NEW.dhcp_identifier_str = LOWER(HEX(NEW.dhcp_identifier));
END IF;
IF (NEW.ipv4_address IS NULL AND NEW.ipv4_address_str IS NOT NULL) THEN
SET NEW.ipv4_address = INET_ATON(NEW.ipv4_address_str);
ELSEIF (NEW.ipv4_address_str IS NULL AND NEW.ipv4_address IS NOT NULL) THEN
SET NEW.ipv4_address_str = CAST(INET_NTOA(NEW.ipv4_address) AS CHAR);
END IF;
END
//
DROP TRIGGER IF EXISTS `host_BUPD`//
CREATE TRIGGER `host_BUPD` BEFORE UPDATE ON `hosts`
FOR EACH ROW BEGIN
IF (NEW.dhcp_identifier_str != '' AND OLD.dhcp_identifier != UNHEX(UPPER(NEW.dhcp_identifier_str))) THEN
SET NEW.dhcp_identifier = UNHEX(UPPER(NEW.dhcp_identifier_str));
ELSEIF (NEW.dhcp_identifier != '' AND OLD.dhcp_identifier_str != LOWER(HEX(NEW.dhcp_identifier))) THEN
SET NEW.dhcp_identifier_str = LOWER(HEX(NEW.dhcp_identifier));
END IF;
IF (NEW.ipv4_address_str IS NOT NULL AND OLD.ipv4_address != INET_ATON(NEW.ipv4_address_str)) THEN
SET NEW.ipv4_address = INET_ATON(NEW.ipv4_address_str);
ELSEIF (NEW.ipv4_address IS NOT NULL AND OLD.ipv4_address_str != CAST(INET_NTOA(NEW.ipv4_address) AS CHAR)) THEN
SET NEW.ipv4_address_str = CAST(INET_NTOA(NEW.ipv4_address) AS CHAR);
END IF;
END
//
无论您 INSERT/UPDATE 使用 dhcp_identifier/ipv4_address 或 dhcp_identifier_str/ipv4_address_str 对的条目,这都有效。
我相信您可以对 'lease4' table 使用相同的触发器。
希望对您有所帮助。
我对 MySQL 后端的新 ISC DHCP、KEA 有疑问。 我想在我的数据库中存储租约,它可以工作,但未存储一些信息。
我在我的数据库中获得了这种条目:
+------------+--------+-----------+----------------+---------------------+-----------+----------+----------+----------+
| address | hwaddr | client_id | valid_lifetime | expire | subnet_id | fqdn_fwd | fqdn_rev | hostname |
+------------+--------+-----------+----------------+---------------------+-----------+----------+----------+----------+
| 3232236052 | '° | NULL | 4000 | 2015-07-22 08:54:32 | 1 | 0 | 0 | │
+------------+--------+-----------+----------------+---------------------+-----------+----------+----------+----------+
地址栏是十进制的IP地址,我查了,没问题。 我没有找到如何将 IP 地址更改为 IPv4 格式以及如何在 KEA 文档的 hwaddr 字段中存储 mac 地址。
如果有人知道如何做到这一点,我将不胜感激!
谢谢!
根据 KEA 文档 hwaddr
字段是 VARBINARY
。您应该能够看到值 IP 地址和 hwaddr 使用:
SELECT INET_NTOA(address), HEX(hwaddr), lease4.* FROM lease4;
我有类似的需求来创建 KEA 主机预留并将 MAC 和 IP 地址填充为常规字符串,同时仍然让 KEA 使用的字段在插入或更新时自动更新。
我最后做的是创建两个新字段来保存这些字符串值('hosts.dhcp_identifier_str' 和 'hosts.ipv4_address_str'):
ALTER TABLE `hosts` ADD `dhcp_identifier_str` VARCHAR(12) NOT NULL AFTER `dhcp_identifier`;
ALTER TABLE `hosts` ADD `ipv4_address_str` VARCHAR(15) NULL DEFAULT NULL AFTER `ipv4_address`;
然后,我通过使用 BEFORE INSERT/UPDATE MySQL 触发器使 KEA 使用的相应字段('hosts.dhcp_identifier' 和 'hosts.ipv4_address')保持最新:
DELIMITER //
DROP TRIGGER IF EXISTS `host_BINS`//
CREATE TRIGGER `host_BINS` BEFORE INSERT ON `hosts`
FOR EACH ROW BEGIN
IF (NEW.dhcp_identifier = '' AND NEW.dhcp_identifier_str != '') THEN
SET NEW.dhcp_identifier = UNHEX(UPPER(NEW.dhcp_identifier_str));
ELSEIF (NEW.dhcp_identifier_str = '' AND NEW.dhcp_identifier != '') THEN
SET NEW.dhcp_identifier_str = LOWER(HEX(NEW.dhcp_identifier));
END IF;
IF (NEW.ipv4_address IS NULL AND NEW.ipv4_address_str IS NOT NULL) THEN
SET NEW.ipv4_address = INET_ATON(NEW.ipv4_address_str);
ELSEIF (NEW.ipv4_address_str IS NULL AND NEW.ipv4_address IS NOT NULL) THEN
SET NEW.ipv4_address_str = CAST(INET_NTOA(NEW.ipv4_address) AS CHAR);
END IF;
END
//
DROP TRIGGER IF EXISTS `host_BUPD`//
CREATE TRIGGER `host_BUPD` BEFORE UPDATE ON `hosts`
FOR EACH ROW BEGIN
IF (NEW.dhcp_identifier_str != '' AND OLD.dhcp_identifier != UNHEX(UPPER(NEW.dhcp_identifier_str))) THEN
SET NEW.dhcp_identifier = UNHEX(UPPER(NEW.dhcp_identifier_str));
ELSEIF (NEW.dhcp_identifier != '' AND OLD.dhcp_identifier_str != LOWER(HEX(NEW.dhcp_identifier))) THEN
SET NEW.dhcp_identifier_str = LOWER(HEX(NEW.dhcp_identifier));
END IF;
IF (NEW.ipv4_address_str IS NOT NULL AND OLD.ipv4_address != INET_ATON(NEW.ipv4_address_str)) THEN
SET NEW.ipv4_address = INET_ATON(NEW.ipv4_address_str);
ELSEIF (NEW.ipv4_address IS NOT NULL AND OLD.ipv4_address_str != CAST(INET_NTOA(NEW.ipv4_address) AS CHAR)) THEN
SET NEW.ipv4_address_str = CAST(INET_NTOA(NEW.ipv4_address) AS CHAR);
END IF;
END
//
无论您 INSERT/UPDATE 使用 dhcp_identifier/ipv4_address 或 dhcp_identifier_str/ipv4_address_str 对的条目,这都有效。
我相信您可以对 'lease4' table 使用相同的触发器。
希望对您有所帮助。