# relative = no
}
delay delay_reject {
- delay = "%{%{reply.FreeRADIUS-Response-Delay}:-1}"
+ delay = "%{&reply.FreeRADIUS-Response-Delay || 1}"
relative = yes
}
```
linelog {
# delimiter = "\n"
format = "This is a log message for %{User-Name}"
- reference = "messages.%{%{reply.Packet-Type}:-default}"
+ reference = "messages.%{&reply.Packet-Type || default}"
messages {
default = "Unknown packet type %{Packet-Type}"
Access-Accept = "Sent accept: %{User-Name}"
filename = ${logdir}/linelog-accounting
permissions = 0600
}
- reference = "Accounting-Request.%{%{Acct-Status-Type}:-unknown}"
+ reference = "Accounting-Request.%{&Acct-Status-Type || unknown}"
Accounting-Request {
Start = "Connect: [%{User-Name}] (did %{Called-Station-Id} cli %{Calling-Station-Id} port %{NAS-Port} ip %{Framed-IP-Address})"
Stop = "Disconnect: [%{User-Name}] (did %{Called-Station-Id} cli %{Calling-Station-Id} port %{NAS-Port} ip %{Framed-IP-Address}) %{Acct-Session-Time} seconds"
trim_count = 15
expire_time = 86400
Start {
- insert = "LPUSH %{User-Name} %l,%{Acct-Session-Id},%{&NAS-IP-Address || &NAS-IPv6-Address},%{Acct-Session-Time},%{Framed-IP-Address},%{%{Acct-Input-Gigawords}:-0},%{%{Acct-Output-Gigawords}:-0},%{%{Acct-Input-Octets}:-0},%{%{Acct-Output-Octets}:-0}"
+ insert = "LPUSH %{User-Name} %l,%{Acct-Session-Id},%{&NAS-IP-Address || &NAS-IPv6-Address},%{Acct-Session-Time},%{Framed-IP-Address},%{&Acct-Input-Gigawords || 0},%{&Acct-Output-Gigawords || 0},%{&Acct-Input-Octets || 0},%{&Acct-Output-Octets || 0}"
trim = "LTRIM %{User-Name} 0 ${..trim_count}"
expire = "EXPIRE %{User-Name} ${..expire_time}"
}
Interim-Update {
- insert = "LPUSH %{User-Name} %l,%{Acct-Session-Id},%{&NAS-IP-Address || &NAS-IPv6-Address},%{Acct-Session-Time},%{Framed-IP-Address},%{%{Acct-Input-Gigawords}:-0},%{%{Acct-Output-Gigawords}:-0},%{%{Acct-Input-Octets}:-0},%{%{Acct-Output-Octets}:-0}"
+ insert = "LPUSH %{User-Name} %l,%{Acct-Session-Id},%{&NAS-IP-Address || &NAS-IPv6-Address},%{Acct-Session-Time},%{Framed-IP-Address},%{&Acct-Input-Gigawords || 0},%{&Acct-Output-Gigawords || 0},%{&Acct-Input-Octets || 0},%{&Acct-Output-Octets || 0}"
trim = "LTRIM %{User-Name} 0 ${..trim_count}"
expire = "EXPIRE %{User-Name} ${..expire_time}"
}
Stop {
- insert = "LPUSH %{User-Name} %l,%{Acct-Session-Id},%{&NAS-IP-Address || &NAS-IPv6-Address},%{Acct-Session-Time},%{Framed-IP-Address},%{%{Acct-Input-Gigawords}:-0},%{%{Acct-Output-Gigawords}:-0},%{%{Acct-Input-Octets}:-0},%{%{Acct-Output-Octets}:-0}"
+ insert = "LPUSH %{User-Name} %l,%{Acct-Session-Id},%{&NAS-IP-Address || &NAS-IPv6-Address},%{Acct-Session-Time},%{Framed-IP-Address},%{&Acct-Input-Gigawords || 0},%{&Acct-Output-Gigawords || 0},%{&Acct-Input-Octets || 0},%{&Acct-Output-Octets || 0}"
trim = "LTRIM %{User-Name} 0 ${..trim_count}"
expire = "EXPIRE %{User-Name} ${..expire_time}"
}
# received.
#
delay delay_reject {
- delay = "%{%{reply.FreeRADIUS-Response-Delay}:-1}"
+ delay = "%{&reply.FreeRADIUS-Response-Delay || 1}"
relative = yes
}
#
# May be an attribute reference, e.g. `&User-Name`, or `xlat`, `literal` or `exec`.
#
- reference = "messages.%{%{reply.Packet-Type}:-default}"
+ reference = "messages.%{&reply.Packet-Type || default}"
#
# messages { ... }::
permissions = 0600
}
- reference = "Accounting-Request.%{%{Acct-Status-Type}:-unknown}"
+ reference = "Accounting-Request.%{&Acct-Status-Type || unknown}"
#
# Example for `Accounting-Request`.
# ### Start
#
Start {
- insert = "LPUSH %{User-Name} %l,%{Acct-Session-Id},%{&NAS-IP-Address || &NAS-IPv6-Address},%{Acct-Session-Time},%{Framed-IP-Address},%{%{Acct-Input-Gigawords}:-0},%{%{Acct-Output-Gigawords}:-0},%{%{Acct-Input-Octets}:-0},%{%{Acct-Output-Octets}:-0}"
+ insert = "LPUSH %{User-Name} %l,%{Acct-Session-Id},%{&NAS-IP-Address || &NAS-IPv6-Address},%{Acct-Session-Time},%{Framed-IP-Address},%{&Acct-Input-Gigawords || 0},%{&Acct-Output-Gigawords || 0},%{&Acct-Input-Octets || 0},%{&Acct-Output-Octets || 0}"
trim = "LTRIM %{User-Name} 0 ${..trim_count}"
expire = "EXPIRE %{User-Name} ${..expire_time}"
}
# ### Interim-Update
#
Interim-Update {
- insert = "LPUSH %{User-Name} %l,%{Acct-Session-Id},%{&NAS-IP-Address || &NAS-IPv6-Address},%{Acct-Session-Time},%{Framed-IP-Address},%{%{Acct-Input-Gigawords}:-0},%{%{Acct-Output-Gigawords}:-0},%{%{Acct-Input-Octets}:-0},%{%{Acct-Output-Octets}:-0}"
+ insert = "LPUSH %{User-Name} %l,%{Acct-Session-Id},%{&NAS-IP-Address || &NAS-IPv6-Address},%{Acct-Session-Time},%{Framed-IP-Address},%{&Acct-Input-Gigawords || 0},%{&Acct-Output-Gigawords || 0},%{&Acct-Input-Octets || 0},%{&Acct-Output-Octets || 0}"
trim = "LTRIM %{User-Name} 0 ${..trim_count}"
expire = "EXPIRE %{User-Name} ${..expire_time}"
}
# ### Stop
#
Stop {
- insert = "LPUSH %{User-Name} %l,%{Acct-Session-Id},%{&NAS-IP-Address || &NAS-IPv6-Address},%{Acct-Session-Time},%{Framed-IP-Address},%{%{Acct-Input-Gigawords}:-0},%{%{Acct-Output-Gigawords}:-0},%{%{Acct-Input-Octets}:-0},%{%{Acct-Output-Octets}:-0}"
+ insert = "LPUSH %{User-Name} %l,%{Acct-Session-Id},%{&NAS-IP-Address || &NAS-IPv6-Address},%{Acct-Session-Time},%{Framed-IP-Address},%{&Acct-Input-Gigawords || 0},%{&Acct-Output-Gigawords || 0},%{&Acct-Input-Octets || 0},%{&Acct-Output-Octets || 0}"
trim = "LTRIM %{User-Name} 0 ${..trim_count}"
expire = "EXPIRE %{User-Name} ${..expire_time}"
}
# Use Stripped-User-Name, if it's there.
# Else use User-Name, if it's there,
# Else use hard-coded string "DEFAULT" as the user name.
-#sql_user_name = "%{%{Stripped-User-Name}:-%{%{User-Name}:-DEFAULT}}"
+#sql_user_name = "%{%{Stripped-User-Name}:-%{&User-Name || DEFAULT}}"
#
sql_user_name = "%{User-Name}"
VALUES ( \
'%{User-Name}', '%S' \
'%{&reply.WiMAX.MN-hHA-MIP4-SPI || &reply.WiMAX.MN-hHA-MIP6-SPI}', \
- '%{&reply.WiMAX.MN-hHA-MIP4-Key || &reply.WiMAX.MN-hHA-MIP6-Key}', '%{%{reply.Session-Timeout}:-86400}' )"
+ '%{&reply.WiMAX.MN-hHA-MIP4-Key || &reply.WiMAX.MN-hHA-MIP6-Key}', '%{&reply.Session-Timeout || 86400}' )"
AcctStopTime = ${....event_timestamp}, \
AcctUpdateTime = ${....event_timestamp}, \
AcctSessionTime = (${....event_timestamp_epoch} - EXTRACT(EPOCH FROM(AcctStartTime))), \
- AcctTerminateCause = '%{%{Acct-Terminate-Cause}:-NAS-Reboot}', \
+ AcctTerminateCause = '%{&Acct-Terminate-Cause || NAS-Reboot}', \
Class = '%{Class}' \
WHERE AcctStopTime IS NULL \
AND NASIPAddress= '%{&NAS-IPv6-Address || &NAS-IP-Address}' \
FramedIPv6Prefix = NULLIF('%{Framed-IPv6-Prefix}', '')::inet, \
FramedInterfaceId = NULLIF('%{Framed-Interface-Id}', ''), \
DelegatedIPv6Prefix = NULLIF('%{Delegated-IPv6-Prefix}', '')::inet, \
- AcctSessionTime = %{%{Acct-Session-Time}:-NULL}, \
+ AcctSessionTime = %{&Acct-Session-Time || NULL}, \
AcctInterval = (${....event_timestamp_epoch} - EXTRACT(EPOCH FROM (COALESCE(AcctUpdateTime, AcctStartTime)))), \
AcctUpdateTime = ${....event_timestamp}, \
AcctInputOctets = %{(((uint64) &Acct-Input-Gigawords) << 32) | (uint64) &Acct-Input-Octets}, \
${....event_timestamp}, \
${....event_timestamp}, \
NULL, \
- %{%{Acct-Session-Time}:-NULL}, \
+ %{&Acct-Session-Time || NULL}, \
'%{Acct-Authentic}', \
'%{Connect-Info}', \
NULL, \
SET \
AcctStopTime = ${....event_timestamp}, \
AcctUpdateTime = ${....event_timestamp}, \
- AcctSessionTime = COALESCE(%{%{Acct-Session-Time}:-NULL}, \
+ AcctSessionTime = COALESCE(%{&Acct-Session-Time || NULL}, \
(${....event_timestamp_epoch} - EXTRACT(EPOCH FROM(AcctStartTime)))), \
AcctInputOctets = %{(((uint64) &Acct-Input-Gigawords) << 32) | (uint64) &Acct-Input-Octets}, \
AcctOutputOctets = %{(((uint64) &Acct-Output-Gigawords) << 32) | (uint64) &Acct-Output-Octets}, \
'%{&NAS-IPv6-Address || &NAS-IP-Address}', \
NULLIF('%{&NAS-Port-ID || &NAS-Port}', ''), \
'%{NAS-Port-Type}', \
- TO_TIMESTAMP(${....event_timestamp_epoch} - %{%{Acct-Session-Time}:-0}), \
+ TO_TIMESTAMP(${....event_timestamp_epoch} - %{&Acct-Session-Time || 0}), \
${....event_timestamp}, \
${....event_timestamp}, \
NULLIF('%{Acct-Session-Time}', '')::bigint, \
SET \
AcctStopTime = ${....event_timestamp}, \
AcctUpdateTime = ${....event_timestamp}, \
- AcctSessionTime = COALESCE(%{%{Acct-Session-Time}:-NULL}, \
+ AcctSessionTime = COALESCE(%{&Acct-Session-Time || NULL}, \
(${....event_timestamp_epoch} - EXTRACT(EPOCH FROM(AcctStartTime)))), \
AcctInputOctets = (%{(((uint64) &Acct-Input-Gigawords) << 32) | (uint64) &Acct-Input-Octets})::bigint, \
AcctOutputOctets = (%{(((uint64) &Acct-Output-Gigawords) << 32) | (uint64) &Acct-Output-Octets})::bigint, \
# Use Stripped-User-Name, if it's there.
# Else use User-Name, if it's there,
# Else use hard-coded string "DEFAULT" as the user name.
-#sql_user_name = "%{%{Stripped-User-Name}:-%{%{User-Name}:-DEFAULT}}"
+#sql_user_name = "%{%{Stripped-User-Name}:-%{&User-Name || DEFAULT}}"
#
sql_user_name = "%{User-Name}"
'%{NAS-IP-Address}', \
'%{&NAS-Port-ID || &NAS-Port}', \
'%{NAS-Port-Type}', \
- (${....event_timestamp_epoch} - %{%{Acct-Session-Time}:-0}), \
+ (${....event_timestamp_epoch} - %{&Acct-Session-Time || 0}), \
${....event_timestamp}, \
NULL, \
- %{%{Acct-Session-Time}:-NULL}, \
+ %{&Acct-Session-Time || NULL}, \
'%{Acct-Authentic}', \
'%{Connect-Info}', \
'', \
- %{%{Acct-Input-Gigawords}:-0} << 32 | %{%{Acct-Input-Octets}:-0}, \
- %{%{Acct-Output-Gigawords}:-0} << 32 | %{%{Acct-Output-Octets}:-0}, \
+ %{&Acct-Input-Gigawords || 0} << 32 | %{&Acct-Input-Octets || 0}, \
+ %{&Acct-Output-Gigawords || 0} << 32 | %{&Acct-Output-Octets || 0}, \
'%{Called-Station-Id}', \
'%{Calling-Station-Id}', \
'', \
query = "\
UPDATE ${....acct_table2} SET \
acctstoptime = ${....event_timestamp}, \
- acctsessiontime = %{%{Acct-Session-Time}:-NULL}, \
+ acctsessiontime = %{&Acct-Session-Time || NULL}, \
acctinputoctets = %{(((uint64) &Acct-Input-Gigawords) << 32) | (uint64) &Acct-Input-Octets}, \
acctoutputoctets = %{(((uint64) &Acct-Output-Gigawords) << 32) | (uint64) &Acct-Output-Octets}, \
acctterminatecause = '%{Acct-Terminate-Cause}', \
'%{NAS-IP-Address}', \
'%{&NAS-Port-ID || &NAS-Port}', \
'%{NAS-Port-Type}', \
- (${....event_timestamp_epoch} - %{%{Acct-Session-Time}:-0}), \
+ (${....event_timestamp_epoch} - %{&Acct-Session-Time || 0}), \
${....event_timestamp}, \
${....event_timestamp}, \
- %{%{Acct-Session-Time}:-NULL}, \
+ %{&Acct-Session-Time || NULL}, \
'%{Acct-Authentic}', \
'', \
'%{Connect-Info}', \
#
acct_counters64.preacct {
if (!&Acct-Input-Gigawords) {
- &request.Acct-Input-Octets64 := "%{%{Acct-Input-Octets}:-0}"
+ &request.Acct-Input-Octets64 := "%{&Acct-Input-Octets || 0}"
}
else {
&request.Acct-Input-Octets64 = (((uint64) &Acct-Input-Gigawords) << 32) | (uint64) &Acct-Input-Octets
}
if (!&Acct-Output-Gigawords) {
- &request.Acct-Output-Octets64 := "%{%{Acct-Output-Octets}:-0}"
+ &request.Acct-Output-Octets64 := "%{&Acct-Output-Octets || 0}"
}
else {
&request.Acct-Output-Octets64 = (((uint64) &Acct-Output-Gigawords) << 32) | (uint64) &Acct-Output-Octets