2015-07-22 2 views
2

У меня проблема с новым ISC DHCP, KEA, на сервере MySQL. Я хочу хранить лизинг в своей БД, он работает, но некоторая информация не сохраняется.KEA dhcp Mysql Backend

я получаю такого рода запись в моей БД:

+------------+--------+-----------+----------------+---------------------+-----------+----------+----------+----------+     
| 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 и как сохранить адрес mac в поле hwaddr в документации KEA.

Если кто-то знает, как это сделать, я буду очень благодарен!

Спасибо!

ответ

1

Согласно документации КЭА hwaddr поле VARBINARY. Вы должны быть в состоянии видеть IP значение адреса и HWaddr с помощью:

SELECT INET_NTOA(address), HEX(hwaddr), lease4.* FROM lease4; 
+0

Это работает, я могу видеть свой IP-адрес и hwaddr! Спасибо ! Но я хотел бы иметь эти значения в моей базе данных, есть ли у вас идея заставить KEA хранить эти данные непосредственно в этом формате? это даже возможно? И можете ли вы поделиться мне ссылкой, где вы нашли тип данных? Еще раз спасибо! – MaxGeneGrim

+0

@MaxGeneGrim, вы можете найти [dhcpdb_create.mysql] (https://github.com/isc-projects/kea/blob/master/src/bin/admin/scripts/mysql/dhcpdb_create.mysql) скрипт в пакете Kea , Не знаете, как изменить способ хранения информации в базе данных. – vhu

0

У меня была подобная необходимость создания оговорки хоста Кеа и заселить адреса MAC и IP как обычные строки, все еще имея поля КЭА использует обновляются автоматически на INSERT или UPDATE.

То, что я в конечном итоге делает это создание двух новых полей, которые будут удерживать эти значения строки («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`; 

Тогда я держу соответствующие поля, Кеа использует ('hosts.dhcp_identifier' и 'hosts.ipv4_address') до настоящего времени с помощью дО INSERT/UPDATE MySQL триггеры:

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 
// 

Это работает ВСТАВИТЬ ли вы/обновить запись с помощью dhcp_identifier/ipv4_address или dhcp_identifier_str/ipv4_address_str.

Я уверен, что вы можете использовать те же триггеры для таблицы «lease4».

Надеюсь, что это поможет.

Смежные вопросы