rsg wrote:
Hi,
Can you provide me with some more info to proceed with this?
There's no need to email me directly; I read the list.
I'm not quite sure of how to do it with "allocate-find".
Neither am I. It was a general suggestion.
Personally I wouldn't do it that way; I'd just insert the IPs into the
table and let the module do it's work (unless you're leasing tens of
millions of ips).
I guess if you want the radippool to only contain "active" ips it would
be something like the following:
allocate-find = "select freeip('%P')"
allocate-update = "insert into radippool ..."
allocate-clear = "delete from radippool ..."
"freeip" would need to be a database stored procedure that did something
like:
create function freeip(text) as $$$
# mypools contains a mapping of pool name to netblock
for netblock in select net from mypools where pool_name=$1
# for each block in the pool, try to find a free IP
ips = select ip from radippool where ip<<netblock and pool_name=$1
free_ips = netblock - ips
if free_ips:
return free_ips[0]
$$$ language pseudo-python
...however, the stored procedure language would need IP address
awareness and the ability to intersect/subtract CIDR blocks and IP
lists. I'm not aware of any such capability in e.g. postgres plpgsql, so
you'd need python or perl.
Basically, you'll have to write this yourself.
How could I define IP Prefixes and have my DB tables filled only with
network prefixes?
That's not possible. You will have to retain state per-IP in order to
map the nas+port (or whatever key you choose) to the IP leased and
expiry time.
From your email you sound like you're familiar with perl - you may wish
to use rlm_perl instead of rlm_sqlippool; however you'll basically have
to re-implement rlm_sqlippool.
-
List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html