#  Configuration for the SQL based IP Pool module (rlm_sqlippool)
#
#  The database schemas are available at:
#
#       raddb/sql/ippool/<DB>/schema.sql
#
#  $Id: 26960222182b4656ed895e365a4ca4659d87e2a9 $

sqlippool {
	# SQL instance to use (from sql.conf)
	#
	#  If you have multiple sql instances, such as "sql sql1 {...}",
	#  use the *instance* name here: sql1.
	sql_module_instance = "sql"

	#  This is duplicative of info available in the SQL module, but
	#  we have to list it here as we do not yet support nested
	#  reference expansions.
	dialect = "mysql"

	# SQL table to use for ippool range and lease info
	ippool_table = "radippool"

	# IP lease duration. (Leases expire even if Acct Stop packet is lost)
	lease_duration = 3600

	# Attribute which should be considered unique per NAS
	#
	#  Using NAS-Port gives behaviour similar to rlm_ippool. (And ACS)
	#  Using Calling-Station-Id works for NAS that send fixed NAS-Port
	#  ONLY change this if you know what you are doing!
	pool_key = "%{NAS-Port}"
	# pool_key = "%{Calling-Station-Id}"

	################################################################
	#
	#  WARNING: MySQL (MyISAM) has certain limitations that means it can
	#           hand out the same IP address to 2 different users.
	#
	#           We suggest using an SQL DB with proper transaction
	#           support, such as PostgreSQL, or using MySQL
	#	     with InnoDB.
	#
	################################################################

	#  These messages are added to the "control" items, as
	#  Module-Success-Message.  They are not logged anywhere else,
	#  unlike previous versions.  If you want to have them logged
	#  to a file, see the "linelog" module, and create an entry
	#  which writes Module-Success-Message message.
	#
	messages {
		exists = "Existing IP: %{reply:Framed-IP-Address} (did %{Called-Station-Id} cli %{Calling-Station-Id} port %{NAS-Port} user %{User-Name})"

		success = "Allocated IP: %{reply:Framed-IP-Address} from %{control:Pool-Name} (did %{Called-Station-Id} cli %{Calling-Station-Id} port %{NAS-Port} user %{User-Name})"

		clear = "Released IP %{Framed-IP-Address} (did %{Called-Station-Id} cli %{Calling-Station-Id} user %{User-Name})"

		failed = "IP Allocation FAILED from %{control:Pool-Name} (did %{Called-Station-Id} cli %{Calling-Station-Id} port %{NAS-Port} user %{User-Name})"

		nopool = "No Pool-Name defined (did %{Called-Station-Id} cli %{Calling-Station-Id} port %{NAS-Port} user %{User-Name})"
	}

	$INCLUDE ${modconfdir}/sql/ippool/${dialect}/queries.conf
}
