Cédric Duval wrote: > Hi, > > whenever a client sends a DISCOVER and uses the option 50 to > request an IP address (and provided a dhcp-host clause or an > existing lease did not match before), he is granted this > address if it is valid for a context, regardless of the > netids. > >>From rfc2131.c:714, > else if (opt && address_available(context, addr) > && !lease_find_by_addr(addr) > && !config_find_by_address(daemon->dhcp_conf, addr)) > mess->yiaddr = addr; > > I have a 'default' range and a range matching a netid, let's say: > dhcp-range=192.168.1.11,192.168.1.200,1h > dhcp-range=net:net1,192.168.1.201,192.168.1.210,1h > > Now, if I have a client matching 'net1' (through setting one vendor > option), two cases: > - the client does not use the option 50, then everything is > fine: an address is given from the net1 context. > - the client uses the option 50 to request an address within > the 'default' range, and... he gets what he asks for. > Which is not fine IMHO, since the context which matches the > netid should have the priority over the one without a netid. >
Note that a dhcp-range without a netid is still valid, even when the netid of another range is matched. dnsmasq favours matching ranges, but it will still use the 11--200 range for hosts which match the netid, if the 201--210 range is full, for instance. You probably want this config dhcp-range=net:#net1,192.168.1.11,192.168.1.200,1h dhcp-range=net:net1,192.168.1.201,192.168.1.210,1h Which means that the 201-210 range is never used when netid net1 is set. BUT, looking at the code, the bug does exist, even with that configuration. I'll create a fix ASAP. Cheers, Simon.