blob: 673547bb9aa4fb52966e81424e1a67600b047dcc [file] [log] [blame]
# -*- text -*-
#
# ippool-dhcp/oracle/queries.conf -- Oracle queries for dhcp-ippool
#
# $id: 416d59802a1321c16b936bb5e63c288ca3634bcd $
#
# "START TRANSACTION" not required with Oracle
#
allocate_begin = ""
start_begin = ""
alive_begin = ""
stop_begin = ""
on_begin = ""
off_begin = ""
#
# This query allocates an IP address from the Pool
# It query tries to allocate to the user
# either the same IP-address that they had last session
# or the IP which has been unused for the longest period of time
#
allocate_find = "\
WITH POOLS AS (\
SELECT * \
FROM ${ippool_table} \
WHERE pool_name = '%{control:Pool-Name}' \
AND (\
pool_key = '${pool_key}' \
OR expiry_time = (\
SELECT MIN(expiry_time) \
FROM ${ippool_table} \
WHERE pool_name = '%{control:Pool-Name}' \
AND expiry_time < CURRENT_TIMESTAMP AND pool_key != '${pool_key}'\
)\
)\
) \
SELECT framedipaddress \
FROM (\
SELECT framedipaddress \
FROM POOLS \
WHERE pool_key = '${pool_key}' \
OR (\
NOT EXISTS (\
SELECT 1 \
FROM POOLS \
WHERE pool_key = '${pool_key}'\
)\
)\
) WHERE ROWNUM = 1 FOR UPDATE"
#
# This function is available if you want to use multiple pools
#
#allocate_find = "\
SELECT msqlippool('%{SQL-User-Name}','%{control:Pool-Name}') \
FROM dual"
#
# If you prefer to allocate a random IP address every time, use this query instead
#
#allocate_find = "\
# SELECT framedipaddress \
# FROM ${ippool_table}\
# WHERE framedipaddress = (\
# SELECT framedipaddress \
# FROM (\
# SELECT framedipaddress \
# FROM ${ippool_table} \
# WHERE pool_name = '%{control:Pool-Name}' \
# AND expiry_time < CURRENT_TIMESTAMP \
# ORDER BY DBMS_RANDOM.VALUE\
# ) \
# WHERE ROWNUM = 1\
# ) \
# FOR UPDATE"
#
# If an IP could not be allocated, check to see whether the pool exists or not
# This allows the module to differentiate between a full pool and no pool
# Note: If you are not running redundant pool modules this query may be commented
# out to save running this query every time an ip is not allocated.
#
#pool_check = "\
# SELECT id \
# FROM (\
# SELECT id \
# FROM ${ippool_table} \
# WHERE pool_name = '%{control:Pool-Name}'\
# ) WHERE ROWNUM = 1"
#
# This query marks the IP address handed out by "allocate_find" as used
# for the period of "lease_duration" after which time it may be reused.
#
allocate_update = "\
UPDATE ${ippool_table} \
SET \
nasipaddress = '%{NAS-IP-Address}', \
pool_key = '${pool_key}', \
callingstationid = '%{Calling-Station-id}', \
username = '%{SQL-User-Name}', \
expiry_time = CURRENT_TIMESTAMP + INTERVAL '${lease_duration}' SECOND(1) \
WHERE framedipaddress = '%I'"
#
# This query frees the IP address assigned to "pool_key" when a new request
# comes in for the same "pool_key". This means that either you are losing
# accounting Stop records or you use Calling-Station-id instead of NAS-Port
# as your "pool_key" and your users are able to reconnect before your NAS
# has timed out their previous session. (Generally on wireless networks)
# (Note: If your pool_key is set to Calling-Station-id and not NAS-Port
# then you may wish to delete the "AND nasipaddress = '%{NAS-IP-Address}'
# from the WHERE clause)
#
allocate_clear = "\
UPDATE ${ippool_table} \
SET \
expiry_time = CURRENT_TIMESTAMP - INTERVAL '1' SECOND(1) \
WHERE pool_key = '${pool_key}'"
#
# This query extends an IP address lease by "lease_duration" when an accounting
# START record arrives
#
start_update = "\
UPDATE ${ippool_table} \
SET \
expiry_time = CURRENT_TIMESTAMP + INTERVAL '${lease_duration}' SECOND(1) \
WHERE nasipaddress = '%{NAS-IP-Address}' \
AND pool_name = '%{control:Pool-Name}' \
AND pool_key = '${pool_key}' \
AND framedipaddress = '%{Framed-IP-Address}'"
#
# This query frees an IP address when an accounting
# STOP record arrives
#
stop_clear = "\
UPDATE ${ippool_table} \
SET \
expiry_time = CURRENT_TIMESTAMP - INTERVAL '1' SECOND(1) \
WHERE pool_key = '${pool_key}'"
#
# This query extends an IP address lease by "lease_duration" when an accounting
# ALIVE record arrives
#
alive_update = "\
UPDATE ${ippool_table} \
SET \
expiry_time = CURRENT_TIMESTAMP + INTERVAL '${lease_duration}' SECOND(1) \
WHERE pool_key = '${pool_key}' \
AND pool_name = '%{control:Pool-Name}' \
AND framedipaddress = '%{Framed-IP-Address}'"
#
# This query frees all IP addresses allocated to a NAS when an
# accounting ON record arrives from that NAS
#
on_clear = "\
UPDATE ${ippool_table} \
SET \
expiry_time = CURRENT_TIMESTAMP - INTERVAL '1' SECOND(1) \
WHERE nasipaddress = '%{NAS-IP-Address}'"
#
# This query frees all IP addresses allocated to a NAS when an
# accounting OFF record arrives from that NAS
#
off_clear = "\
UPDATE ${ippool_table} \
SET \
expiry_time = CURRENT_TIMESTAMP - INTERVAL '1' SECOND(1) \
WHERE nasipaddress = '%{NAS-IP-Address}'"