aboutsummaryrefslogtreecommitdiff
path: root/net-mgmt/ng_ipacct/files/ng_ipacct.in
diff options
context:
space:
mode:
Diffstat (limited to 'net-mgmt/ng_ipacct/files/ng_ipacct.in')
-rw-r--r--net-mgmt/ng_ipacct/files/ng_ipacct.in194
1 files changed, 194 insertions, 0 deletions
diff --git a/net-mgmt/ng_ipacct/files/ng_ipacct.in b/net-mgmt/ng_ipacct/files/ng_ipacct.in
new file mode 100644
index 000000000000..572f354bb8b8
--- /dev/null
+++ b/net-mgmt/ng_ipacct/files/ng_ipacct.in
@@ -0,0 +1,194 @@
+#!/bin/sh
+#
+# $FreeBSD$
+#
+
+# PROVIDE: ng_ipacct
+# REQUIRE: LOGIN abi
+# BEFORE: securelevel
+# KEYWORD: shutdown
+
+#
+# Define these ng_ipacct_* variables in one of these files:
+#
+# /etc/rc.conf
+# /etc/rc.conf.local
+# /etc/rc.conf.d/ng_ipacct
+# %%PREFIX%%/etc/ng_ipacct.conf
+#
+# Add the following line to enable `ng_ipacct':
+#
+# ng_ipacct_enable="YES"
+# ng_ipacct_flags="<set as needed>"
+#
+# See %%PREFIX%%/etc/ng_ipacct.conf for futher reference.
+
+. /etc/rc.subr
+
+name="ng_ipacct"
+rcvar=ng_ipacct_enable
+
+# for debugging purpose you can append flag "-d" to these cmds
+# or even use dumb stubs.
+ngctl="/usr/sbin/ngctl"
+ngctl_batch="/usr/sbin/ngctl -f-"
+#ngctl_batch="cat"
+ipacctctl="%%PREFIX%%/sbin/ipacctctl"
+#ipacctctl="echo %%PREFIX%%/sbin/ipacctctl"
+sed="/usr/bin/sed"
+
+extra_commands="checkpoint"
+start_cmd="start_cmd"
+stop_cmd="stop_cmd"
+checkpoint_cmd="checkpoint_cmd"
+
+bool2int()
+{
+ eval _value=\$${1}
+ case $_value in
+ # "yes", "true", "on", or "1"
+ [Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1)
+ eval $1=1
+ ;;
+ # "no", "false", "off", or "0"
+ [Nn][Oo]|[Ff][Aa][Ll][Ss][Ee]|[Oo][Ff][Ff]|0)
+ eval $1=0
+ ;;
+ *)
+ echo "\$${1} is not set properly - see rc.conf(5)."
+ exit 1
+ ;;
+ esac
+}
+
+start_cmd()
+{
+ if checkyesno ng_ipacct_modules_load; then
+ debug "Load kld modules '${ng_ipacct_modules_list}'"
+ local module
+ for module in ${ng_ipacct_modules_list}; do
+ if ! /sbin/kldstat -n ${module} >/dev/null 2>&1; then
+ if ! /sbin/kldload ${module} >/dev/null; then
+ warn "can not load kld module ${module}"
+ fi
+ fi
+ done
+ fi
+
+ local iface
+
+ for iface in ${ng_ipacct_interfaces}; do
+ debug "start ng_ipacct interface ${iface}"
+ local dlt threshold verbose saveuid savetime start_script
+
+ eval dlt=\$ng_ipacct_${iface}_dlt
+ if [ -z "$dlt" ]; then
+ echo " you must define 'ng_ipacct_${iface}_dlt'"
+ exit 1
+ fi
+
+ eval start_script=\$ng_ipacct_${iface}_start
+ if [ -z "$start_script" ]; then
+ echo " you must define 'ng_ipacct_${iface}_start'"
+ exit 1
+ fi
+
+ eval threshold=\${ng_ipacct_${iface}_threshold:-"5000"}
+
+ eval verbose=\${ng_ipacct_${iface}_verbose:-"yes"}
+ bool2int verbose
+
+ eval saveuid=\${ng_ipacct_${iface}_saveuid:-"no"}
+ bool2int saveuid
+
+ eval savetime=\${ng_ipacct_${iface}_savetime:-"no"}
+ bool2int savetime
+
+ ${sed} "s!%%iface%%!${iface}!g" <<-EOF | ${ngctl_batch}
+$start_script
+EOF
+ if ! ${ngctl} show ${iface}_ip_acct: >/dev/null 2>&1; then
+ warn "netgraph node '${iface}_ip_acct' did not created!"
+ else
+ ${ipacctctl} ${iface}_ip_acct:${iface} dlt ${dlt}
+ ${ipacctctl} ${iface}_ip_acct:${iface} threshold ${threshold}
+ ${ipacctctl} ${iface}_ip_acct:${iface} verbose ${verbose}
+ ${ipacctctl} ${iface}_ip_acct:${iface} saveuid ${saveuid}
+ ${ipacctctl} ${iface}_ip_acct:${iface} savetime ${savetime}
+
+ eval afterstart_script=\$ng_ipacct_${iface}_afterstart_script
+ if [ -n "${afterstart_script}" ]; then
+ (set -T
+ trap 'exit 1' 2
+ ${afterstart_script} ${iface})
+ fi
+ fi
+ done
+}
+
+checkpoint_cmd()
+{
+ local iface
+
+ for iface in ${ng_ipacct_interfaces}; do
+ debug "checlpoint ng_ipacct interface ${iface}"
+ eval checkpoint_script=\$ng_ipacct_${iface}_checkpoint_script
+
+ if [ -n "${checkpoint_script}" ]; then
+ (set -T
+ trap 'exit 1' 2
+ ${checkpoint_script})
+ fi
+ done
+}
+
+stop_cmd()
+{
+ local iface
+
+ for iface in ${ng_ipacct_interfaces}; do
+ debug "stop ng_ipacct interface ${iface}"
+
+ local stop_script
+ eval stop_script=\$ng_ipacct_${iface}_stop
+ eval checkpoint_script=\$ng_ipacct_${iface}_checkpoint_script
+
+ if ${ngctl} show ${iface}_ip_acct: >/dev/null 2>&1; then
+ if [ -n "${checkpoint_script}" ]; then
+ (set -T
+ trap 'exit 1' 2
+ ${checkpoint_script})
+ fi
+
+ ${sed} "s!%%iface%%!${iface}!g" <<-EOF | ${ngctl_batch}
+$stop_script
+EOF
+
+ if ${ngctl} show ${iface}_ip_acct: >/dev/null 2>&1; then
+ warn "netgraph node '${iface}_ip_acct' did not destroyed!"
+ fi
+ fi
+ done
+
+ if checkyesno ng_ipacct_modules_load; then
+ debug "Unload kld module 'ng_ipacct'"
+ local module
+ for module in ng_ipacct; do
+ if /sbin/kldstat -n ${module} >/dev/null 2>&1; then
+ /sbin/kldunload ${module}
+ fi
+ done
+ fi
+}
+
+# read settings, set default values
+if [ -f %%PREFIX%%/etc/${name}.conf ]; then
+ debug "Sourcing %%PREFIX%%/etc/${name}.conf"
+ . %%PREFIX%%/etc/${name}.conf
+fi
+
+load_rc_config $name
+
+: ${ng_ipacct_enable="NO"}
+
+run_rc_command "$1"