# -*- text -*-
######################################################################
#
#	This is a sample configuration for "decoupled" accounting.
#	"Decoupled" accounting is where the accounting packets are
#	NOT written "live" to the back-end database.  This method
#	can only be used if you are not interested in "live"
#	accounting.  i.e. Where you can tolerate delays that may be
#	a few seconds, before accounting packets get written to
#	the DB.
#
#	Oddly enough, this method can speed up the processing of
#	accounting packets, as all database activity is serialized.
#
#	This file is NOT meant to be used as-is.  It needs to be
#	edited to match your local configuration.
#
#	$Id$
#
######################################################################

#  Define a virtual server to write the accounting packets.
#  Any "listen" section that listens on an accounting port should
#  set "virtual_server = write-detail.example.com
server write_detail.example.com {
	accounting {
		#
		#  Write the "detail" files.
		#
		#  See raddb/modules/detail.example.com for more info.
		detail.example.com
	}

	# That's it!
}

#  Define a virtual server to process the accounting packets.
server read-detail.example.com {
	#  Read accounting packets from the detail file(s) for
	#  the home server.
	listen {
		type = detail
		filename = "${radacctdir}/detail.example.com/detail-*:*"
		load_factor = 10
	}

	#  All packets read from the detail file are processed through
	#  the preacct && accounting sections.
	#
	#  The following text is copied verbatim from sites-available/default.
	#  You should edit it for your own local configuration.

#
#  Pre-accounting.  Decide which accounting type to use.
#
preacct {
	preprocess

	#
	#  Ensure that we have a semi-unique identifier for every
	#  request, and many NAS boxes are broken.
	acct_unique

	#
	#  Look for IPASS-style 'realm/', and if not found, look for
	#  '@realm', and decide whether or not to proxy, based on
	#  that.
	#
	#  Accounting requests are generally proxied to the same
	#  home server as authentication requests.
#	IPASS
	suffix
#	ntdomain

	#
	#  Read the 'acct_users' file
	files
}

#
#  Accounting.  Log the accounting data.
#
accounting {
	#
	#  Create a 'detail'ed log of the packets.
	#  Note that accounting requests which are proxied
	#  are also logged in the detail file.
	detail
#	daily

	#  Update the wtmp file
	#
	#  If you don't use "radlast", you can delete this line.
	unix

	#
	#  For Simultaneous-Use tracking.
	#
	#  Due to packet losses in the network, the data here
	#  may be incorrect.  There is little we can do about it.
	radutmp
#	sradutmp

	#  Return an address to the IP Pool when we see a stop record.
#	main_pool

	#
	#  Log traffic to an SQL database.
	#
	#  NOTE! You will have to ensure that any accounting packets
	#  NOT handled by the SQL module (e.g. "stop with zero session length"
	#  result in the accounting section still returning "ok".
	#
	#  Otherwise, the server will think that the accounting packet
	#  was NOT handled properly, and will keep trying to process it
	#  through this virtual server!
	#
	#  See "Accounting queries" in sql.conf
#	sql

	#
	#  Instead of sending the query to the SQL server,
	#  write it into a log file.
	#
#	sql_log

	#  Cisco VoIP specific bulk accounting
#	pgsql-voip

	#  Filter attributes from the accounting response.
	attr_filter.accounting_response

	#
	#  See "Autz-Type Status-Server" for how this works.
	#
#	Acct-Type Status-Server {
#
#	}
}
}
