
sqlippool sqlippool {

 #
 # SQL connection information
 #
 sql-instance-name = "sql"

 # lease_duration. fix for lost acc-stop packets
 lease-duration = 3600

 # Attribute which should be considered unique per NAS
 pool-key = "%{NAS-Port}"
 # pool-key = "%{Calling-Station-Id}"


 #
 # This series of queries allocates an IP address
 #
 allocate-clear = "UPDATE radippool \
  SET nasipaddress = '', pool_key = 0, callingstationid = '', \
  expiry_time = 'now'::timestamp(0) - '1 second'::interval \
  WHERE pool_key = '%{Calling-Station-Id}'"

 # note the ORDER BY clause of next query, it'll try to allocate IPs
 # like Cisco internal pools do - it _trys_ to allocate the same IP-address
 # which user had last session...
 allocate-find = "SELECT framedipaddress FROM radippool \
  WHERE pool_name = '%{reply:Pool-Name}' AND expiry_time < 'now'::timestamp(0) \
  ORDER BY pool_name, (username <> '%{User-Name}'), (callingstationid <> '%{Calling-Station-Id}'), expiry_time \
  LIMIT 1 \
  FOR UPDATE"

 allocate-update = "UPDATE radippool \
  SET nasipaddress = '%{NAS-IP-Address}', pool_key = '%{Calling-Station-Id}', \
  callingstationid = '%{Calling-Station-Id}', username = '%{User-Name}', \
  expiry_time = 'now'::timestamp(0) + '${lease-duration} second'::interval \
  WHERE framedipaddress = '%I'"



 #
 # This series of queries frees an IP number when an accounting
 # START record arrives
 #
 start-update = "UPDATE radippool \
  SET expiry_time = 'now'::timestamp(0) + '%J second'::interval \
  WHERE nasipaddress = '%n' AND nas_port = '%p' AND pool_name = '%P'"

 #
 # This series of queries frees an IP number when an accounting
 # STOP record arrives
 #
 stop-clear = "UPDATE radippool \
  SET nasipaddress = '', pool_key = 0, callingstationid = '', \
  expiry_time = 'now'::timestamp(0) - '1 second'::interval \
  WHERE nasipaddress = '%{Nas-IP-Address}' AND pool_key = '${pool-key}' AND username = '%{User-Name}' \
  AND callingstationid = '%{Calling-Station-Id}' AND framedipaddress = '%{Framed-IP-Address}'"




 #
 # This series of queries frees an IP number when an accounting
 # ALIVE record arrives
 #
 alive-update = "UPDATE radippool \
  SET expiry_time = 'now'::timestamp(0) + '${lease-duration} seconds'::interval \
  WHERE nasipaddress = '%{Nas-IP-Address}' AND pool_key = '${pool-key}' AND username = '%{User-Name}' \
  AND callingstationid = '%{Calling-Station-Id}' AND framedipaddress = '%{Framed-IP-Address}'"


 #
 # This series of queries frees the IP numbers allocate to a
 # NAS when an accounting ON record arrives
 #
 on-clear = "UPDATE radippool \
  SET nasipaddress = '', pool_key = 0, callingstationid = '', \
  expiry_time = 'now'::timestamp(0) - '1 second'::interval \
  WHERE nasipaddress = '%{Nas-IP-Address}' AND username = '%{User-Name}' \
  AND callingstationid = '%{Calling-Station-Id}' AND framedipaddress = '%{Framed-IP-Address}'"

 #
 # This series of queries frees the IP numbers allocate to a
 # NAS when an accounting OFF record arrives
 #
 off-clear = "UPDATE radippool \
  SET nasipaddress = '', pool_key = 0, callingstationid = '', \
  expiry_time = 'now'::timestamp(0) - '1 second'::interval \
  WHERE nasipaddress = '%{Nas-IP-Address}' AND username = '%{User-Name}' \
  AND callingstationid = '%{Calling-Station-Id}' AND framedipaddress = '%{Framed-IP-Address}'"


}

