Encontrei a resposta para este problema e queria publicá-lo. Descobriu-se que não tinha nada a ver com a forma como os padrões estavam sendo combinados. De fato,
class "user" {
match if substring(hardware, 1, 3) = 00:01:02;
log(info, "matched to a 3com";
}
esta é a sintaxe correta para combinar no hardware.
No entanto, este foi um caso em que os fatos me levaram à conclusão errada. Depois de analisar vários RFCs sobre bootp e dhcp, ficou claro que o dispositivo em questão não tinha a opção obrigatória de tipo DHCP, de RFC 1541 seção 3, tornando-o um cliente somente bootp. Assim, a correção veio de algo que eu não esperava que fosse necessário. A instrução range
inclui o modificador dynamic-bootp
, que indica que o intervalo de IPs é para clientes dhcp ou bootp. No entanto, também precisei de allow dynamic bootp clients;
no conjunto da seguinte forma:
pool {
allow dynamic bootp clients;
allow members of "controller";
# never more than 1 on the network at a time
range dynamic-bootp 192.168.1.240;
log(info, "Allocated to a pwr user");
}
Eu teria pensado que esse modificador teria sido suficiente, mas não foi. Eu precisava de ambos para realizar a tarefa.
Espero que isso seja útil para alguém.