Sebastien Cantos wrote:
Phil Mayers wrote:
It would in theory be possible to save the key from the last walk, and next time we allocate an IP start from that key and wrap back around, which would allocate IPs in a more round-robin fashion.
Yes, that should be a solution. I was more thinking of adding a parameter to make sure an IP is kept used in the pool for a certain amount of time after a disconnection and before being available for allocation.
Good idea.
I don't know what is more easy to hack. I'm going to try using my some little developer skills to look at rlm_ippool.c and see what I can do.
Your idea would be much easier, since there's code in the module to deal with expiry already. You'd need to change the code in rlm_ippool.c:ippool_accounting around line 392 (in the CVS) to be: entry.active = 1; entry.timestamp = request->timestamp; entry.timeout = 240; /* or whatever TIME_WAIT time */ ...and then remove the bit further below completely: /* Decrease allocated count from the ip index */ Be aware that, rather obviously, this will greatly increase the contention for IPs from the pool. If you find that a problem, you might need to increase the pool size or change the code in postauth (around line 645) to either aggressively age inactive entries, or to pass through again if no entries are free and force inactive the oldest one. Good luck!