ISC dhcpd динамическое имя загрузочного файла. Это возможно?

На самом деле я хочу динамически назначить имя загрузочного файла на основе клиентов MAC.

Я попробовал этот конфиг:

option bootfile-name concat( binary-to-ascii(16, 8, "", substring (hardware, 1, 6)), ".cfg");

Но это неверный конфиг (так как сервер dhcp вообще не запускается). Если вместо concat(...) я поставлю просто реальное имя файла (например, "000102030405.cfg"), то все в порядке. Но это не то, что мне нужно. Есть ли способ динамически установить имя загрузочного файла?

2 ответа

Решение

Ну, хорошие новости. Я нашел ответ сам. Сам ответ был на страницах руководства. Все, что вам нужно, это использовать ВЫРАЖЕНИЯ. Это верно для любой опции (не только bootfile-name), которой вы хотите присвоить значение из запроса клиента.

От 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

Другие вопросы по тегам