На самом деле я хочу динамически назначить имя загрузочного файла на основе MAC клиента.
Я пробовал эту конфигурацию:
option bootfile-name concat( binary-to-ascii(16, 8, "", substring (hardware, 1, 6)), ".cfg");
Но это неправильная конфигурация (так как dhcp сервер вообще не запускается). Если вместо concat (...) я поставлю только настоящее имя файла (например, «000102030405.cfg»), все в порядке. Но это не то, что мне нужно. Есть ли способ динамически установить имя загрузочного файла?
Что ж, хорошие новости. Я сам нашел ответ. Сам ответ был на страницах руководства. Все, что вам нужно, это использовать ВЫРАЖЕНИЯ. Это верно для любой опции (не только имени загрузочного файла), которой вы хотите присвоить значение из запроса клиента.
Из man dhcp-options
:
SETTING OPTION VALUES USING EXPRESSIONS
Sometimes it's helpful to be able to set the value of a DHCP option based on
some value that the client has sent. To do this, you can use expression
evaluation. The dhcp-eval(5) manual page describes how to write expressions.
To assign the result of an evaluation to an option,
define the option as follows:
option my-option = expression ;
For example:
option hostname = binary-to-ascii (16, 8, "-", substring (hardware, 1, 6));
Итак, как видите, единственная разница между этим кодом и моим - знак равенства!
Для любопытных, ответ на мой вопрос:
option bootfile-name = concat( binary-to-ascii(16, 8, "",
substring (hardware, 1, 6)), ".cfg");
Вы заметили "="?
110022334455 становится 11022334455 в выводе ASCII
смотрите также: https://kb.isc.org/article/AA-01039/0/Formatting-MAC-addresses-in-dhcpd-or-why-does-binary-to-ascii-strip-leading-zeroes.html