Change this in ippool.conf: allocate-update = "UPDATE ${ippool_table} \ SET nasipaddress = '%{NAS-IP-Address}', pool_key = '${pool-key}', \ callingstationid = '%{Calling-Station-Id}', username = '%{User-Name}', \ expiry_time = NOW() + INTERVAL ${lease-duration} SECOND \ WHERE framedipaddress = '%I'" AND expiry_time IS NULL ^^^^^^^^^^^^^^^ this is new
That should cause module to fail if another thread has updated wth this IP address while update was being executed. Ivan Kalik Kalik Informatika ISP Dana 15/1/2009, "Dave" <d...@optionsdsl.ca> piše: > >I dont know if this means anything, but Im not using DHCP, Im using >PPPoE. I didnt know FR could even be a dhcp server. > >Im just throwing out ideas, but is there a way to not thread the >sqlippool module ? Let one request at a time for an IP, sure it would >be slower, but for my use would be fine. > > >Ben Wiechman wrote: >> >> Canâ��t you do the select and update as part of one >> transaction? >> >> >> >> For example with MySQL: >> >> START TRANSACTION; >> >> SELECT @A:=SUM(salary) FROM table1 WHERE type=1; >> >> UPDATE table2 SET summa...@a WHERE type=1; >> >> COMMIT; >> >> >> >> The transaction may need to be changed to serializable as well. I >> donâ��t know how the DHCP RFC handles preallocations. >> >> >> >> You could probably use Repeatable Read level if it is acceptable to >> mark an address as taken when a DHCPOFFER is sent while waiting for a >> DHCPREQUEST from the client, so long as the address if confirmed to be >> free before the DHCPACK is sent, or a DHCPNAK in the case that the >> address was offered to multiple clients. >> >> Ben Wiechman >> >> >> >> >> >> *From:* >> freeradius-users-bounces+ben=wisper-wireless....@lists.freeradius.org >> [mailto:freeradius-users-bounces+ben=wisper-wireless....@lists.freeradius.org] >> *On Behalf Of *Padam J Singh >> *Sent:* Thursday, January 15, 2009 9:39 AM >> *To:* FreeRadius users mailing list >> *Subject:* Re: Handing out duplicate IP addresses >> >> >> >> Hello Ivan, >> >> Would adding a mutex around the select-update code in the sqlippool >> module solve this issue? >> >> Padam >> >> t...@kalik.net <mailto:t...@kalik.net> wrote: >> >> The requests all came in at the same time, to the second (among others), >> >> its like FR took 3 requests and looked at the database at the exact same >> >> time, saw it was an available IP and all those 3 requests assigned it. >> >> >> >> >> That can't be avoided. SELECT (allocate-find) will always work much >> faster than UPDATE (allocate-update). >> >> >> >> My NAS rejects two of the 3 because the IP is assigned, >> >> >> >> >> I think that you make a good point here. If the allocate-update query was >> made to fail in the case that the IP address was already issued to >> another thread between allocate-find and allocate-update (by expanding >> it with AND expiry_time IS NULL in WHERE), point of failure will be in >> sqlippool module and not on the NAS. Logic can then perhaps try to issue >> a new IP address (best just once more in order not to create a loop). >> That way issuing same IP address to multiple threads can be handled by >> the sqlippool module. >> >> Ivan Kalik >> Kalik Informatika ISP >> >> - >> List info/subscribe/unsubscribe? See >> http://www.freeradius.org/list/users.html >> >> >> >> >> >> -- >> PGP Id 9EED2E09 >> ------------------------------------------------------------------------ >> >> - >> List info/subscribe/unsubscribe? See >> http://www.freeradius.org/list/users.html > >- >List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html - List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html