xref: /freebsd/libexec/rc/rc.d/pflog (revision 02e9120893770924227138ba49df1edb3896112a)
1#!/bin/sh
2#
3#
4
5# PROVIDE: pflog
6# REQUIRE: FILESYSTEMS netif
7# KEYWORD: nojailvnet
8
9. /etc/rc.subr
10
11name="pflog"
12desc="Packet filter logging interface"
13rcvar="pflog_enable"
14command="/sbin/pflogd"
15pidfile="/var/run/pflogd.pid"
16start_precmd="pflog_prestart"
17stop_postcmd="pflog_poststop"
18extra_commands="reload resync"
19
20# for backward compatibility
21resync_cmd="pflog_resync"
22
23pflog_prestart()
24{
25	load_kld pflog || return 1
26
27	# create pflog_dev interface if needed
28	if ! ifconfig $pflog_dev > /dev/null 2>&1; then
29		if ! ifconfig $pflog_dev create; then
30			warn "could not create $pflog_dev."
31			return 1
32		fi
33	fi
34
35	# set pflog_dev interface to up state
36	if ! ifconfig $pflog_dev up; then
37		warn "could not bring up $pflog_dev."
38		return 1
39	fi
40
41	# -p flag requires stripping pidfile's leading /var/run and trailing .pid
42	pidfile=$(echo $pidfile | sed -e 's|/var/run/||' -e 's|.pid$||')
43
44	# prepare the command line for pflogd
45	rc_flags="-p $pidfile -f $pflog_logfile -i $pflog_dev $rc_flags"
46
47	# report we're ready to run pflogd
48	return 0
49}
50
51pflog_poststop()
52{
53	if ! ifconfig $pflog_dev down; then
54		warn "could not bring down $pflog_dev."
55		return 1
56	fi
57
58	if [ "$pflog_instances" ] && [ -n "$pflog_instances" ]; then
59		rm $pidfile
60	fi
61
62	return 0
63}
64
65# for backward compatibility
66pflog_resync()
67{
68	run_rc_command reload
69}
70
71load_rc_config $name
72
73# Check if spawning multiple pflogd and told what to spawn
74if [ -n "$2" ]; then
75	# Set required variables
76	eval pflog_dev=\$pflog_${2}_dev
77	eval pflog_logfile=\$pflog_${2}_logfile
78	eval pflog_flags=\$pflog_${2}_flags
79	# Check that required vars have non-zero length, warn if not.
80	if [ -z $pflog_dev ]; then
81		warn "pflog_dev not set"
82		continue
83	fi
84	if [ -z $pflog_logfile ]; then
85		warn "pflog_logfile not set"
86		continue
87	fi
88
89	# Provide a unique pidfile name for pflogd -p <pidfile> flag
90	pidfile="/var/run/pflogd.$2.pid"
91
92	# Override service name and execute command
93	name=$pflog_dev
94	run_rc_command "$1"
95# Check if spawning multiple pflogd and not told what to spawn
96elif [ "$pflog_instances" ] && [ -n "$pflog_instances" ]; then
97	# Interate through requested instances.
98	for i in $pflog_instances; do
99		/etc/rc.d/pflog $1 $i
100	done
101else
102	# Typical case, spawn single instance only.
103	pflog_dev=${pflog_dev:-"pflog0"}
104	run_rc_command "$1"
105fi
106