Код: Выделить всё
# cat /etc/issue
Debian GNU/Linux 6.0 \n \l
# dhcpd --version
isc-dhcpd-4.1.1-P1Допустим, есть несколько классов (в dhcpd.conf), определенных так:
Код: Выделить всё
class "wired" {
match hardware;
}
subclass "wired" 1:00:03:0d:29:38:9a;
class "wireless" {
match hardware;
}
subclass "wirelss" 1:00:90:4B:CE:E4:98;
class "test" {
match if substring (option dhcp-client-identifier, 0, 4) = "test";
}и я хочу сделать несколько пулов для клиентов из разных классов. Например, разделение на пулы будет таким:
Код: Выделить всё
wired && test = x.x.x.20 - x.x.x.29
wireless && test = x.x.x.30 - x.x.x.39
wired && ! test = x.x.x.40 - x.x.x.59
wireless && ! test = x.x.x.60 - x.x.x.79И вот теперь это надо переписать в allow/deny выражения dhcpd. Но, насколько я понял, два allow соответствуют объединению множеств, а не пересечению. И вот вопрос: как сделать пересечение?
ЗЫ. Единственное, решение, которое я придумал, это определять классы так
Код: Выделить всё
class "wired" {
match hardware;
}
class "test_wired" {
match if substring (option dhcp-client-identifier, 0, 4) = "test";
match hardware;
}
subclass "wired" 1:00:03:0d:29:38:9a;
subclass "test_wired" 1:00:03:0d:29:38:9a;
class "wireless" {
match hardware;
}
class "test_wireless" {
match if substring (option dhcp-client-identifier, 0, 4) = "test";
match hardware;
}
subclass "wirelss" 1:00:90:4B:CE:E4:98;
subclass "test_wirelss" 1:00:90:4B:CE:E4:98;И тогда это переписывается вот так
Код: Выделить всё
pool
{
range 20 - 29;
allow members of "test_wired";
}
pool
{
range 30 - 39;
allow members of "test_wireless";
}
pool
{
range 40 - 59
allow members of "wired";
deny members of "test_wired";
}
pool
{
range 60 - 79
allow members of "wireless";
deny members of "test_wireless";
}но мне не нравится этот способ, тк приходится дважды прописывать MAC. Те, фактически, для test_wired класса приходится повторять условие wired класса. А, если добавить еще один класс A, то, чтобы сделать пул для (test && wired && A) в определении класса A, придется повторить условие для классов test и wired. Ну и тд.