166a022a3SMichal Scigocki#- 266a022a3SMichal Scigocki# SPDX-License-Identifier: BSD-2-Clause 366a022a3SMichal Scigocki# 466a022a3SMichal Scigocki# Copyright (c) 2021, 2023 The FreeBSD Foundation 566a022a3SMichal Scigocki# 666a022a3SMichal Scigocki# This software was developed by Mark Johnston under sponsorship from 766a022a3SMichal Scigocki# the FreeBSD Foundation. 866a022a3SMichal Scigocki# 966a022a3SMichal Scigocki# This software was developed by Jake Freeland under sponsorship from 1066a022a3SMichal Scigocki# the FreeBSD Foundation. 1166a022a3SMichal Scigocki# 1266a022a3SMichal Scigocki 1366a022a3SMichal Scigockireadonly SYSLOGD_UDP_PORT="5140" 1466a022a3SMichal Scigockireadonly SYSLOGD_CONFIG="${PWD}/syslog.conf" 1566a022a3SMichal Scigockireadonly SYSLOGD_LOCAL_SOCKET="${PWD}/log.sock" 1666a022a3SMichal Scigockireadonly SYSLOGD_PIDFILE="${PWD}/syslogd.pid" 1766a022a3SMichal Scigockireadonly SYSLOGD_LOCAL_PRIVSOCKET="${PWD}/logpriv.sock" 1866a022a3SMichal Scigocki 1966a022a3SMichal Scigocki# Start a private syslogd instance. 2066a022a3SMichal Scigockisyslogd_start() 2166a022a3SMichal Scigocki{ 221da99b47SMark Johnston local jail bind_arg conf_file pid_file socket privsocket 2366a022a3SMichal Scigocki local opt next other_args 2466a022a3SMichal Scigocki 2566a022a3SMichal Scigocki # Setup loopback so we can deliver messages to ourself. 2666a022a3SMichal Scigocki atf_check ifconfig lo0 inet 127.0.0.1/16 2766a022a3SMichal Scigocki 2866a022a3SMichal Scigocki OPTIND=1 2966a022a3SMichal Scigocki while getopts ":b:f:j:P:p:S:" opt; do 3066a022a3SMichal Scigocki case "${opt}" in 3166a022a3SMichal Scigocki b) 321da99b47SMark Johnston bind_arg="${bind_arg} -b ${OPTARG}" 3366a022a3SMichal Scigocki ;; 3466a022a3SMichal Scigocki f) 3566a022a3SMichal Scigocki conf_file="${OPTARG}" 3666a022a3SMichal Scigocki ;; 3766a022a3SMichal Scigocki j) 3866a022a3SMichal Scigocki jail="jexec ${OPTARG}" 3966a022a3SMichal Scigocki ;; 4066a022a3SMichal Scigocki P) 4166a022a3SMichal Scigocki pid_file="${OPTARG}" 4266a022a3SMichal Scigocki ;; 4366a022a3SMichal Scigocki p) 4466a022a3SMichal Scigocki socket="${OPTARG}" 4566a022a3SMichal Scigocki ;; 4666a022a3SMichal Scigocki S) 4766a022a3SMichal Scigocki privsocket="${OPTARG}" 4866a022a3SMichal Scigocki ;; 4966a022a3SMichal Scigocki ?) 5066a022a3SMichal Scigocki opt="${OPTARG}" 5166a022a3SMichal Scigocki next="$(eval echo \${${OPTIND}})" 5266a022a3SMichal Scigocki 5366a022a3SMichal Scigocki case "${next}" in 5466a022a3SMichal Scigocki -* | "") 5566a022a3SMichal Scigocki other_args="${other_args} -${opt}" 5666a022a3SMichal Scigocki shift $((OPTIND - 1)) 5766a022a3SMichal Scigocki ;; 5866a022a3SMichal Scigocki *) 5966a022a3SMichal Scigocki other_args="${other_args} -${opt} ${next}" 6066a022a3SMichal Scigocki shift ${OPTIND} 6166a022a3SMichal Scigocki ;; 6266a022a3SMichal Scigocki esac 6366a022a3SMichal Scigocki 6466a022a3SMichal Scigocki # Tell getopts to continue parsing. 6566a022a3SMichal Scigocki OPTIND=1 6666a022a3SMichal Scigocki ;; 6766a022a3SMichal Scigocki :) 6866a022a3SMichal Scigocki atf_fail "The -${OPTARG} flag requires an argument" 6966a022a3SMichal Scigocki ;; 7066a022a3SMichal Scigocki esac 7166a022a3SMichal Scigocki done 7266a022a3SMichal Scigocki 7366a022a3SMichal Scigocki $jail syslogd \ 741da99b47SMark Johnston ${bind_arg:--b :${SYSLOGD_UDP_PORT}} \ 7566a022a3SMichal Scigocki -C \ 7666a022a3SMichal Scigocki -d \ 7766a022a3SMichal Scigocki -f "${conf_file:-${SYSLOGD_CONFIG}}" \ 7866a022a3SMichal Scigocki -H \ 7966a022a3SMichal Scigocki -P "${pid_file:-${SYSLOGD_PIDFILE}}" \ 8066a022a3SMichal Scigocki -p "${socket:-${SYSLOGD_LOCAL_SOCKET}}" \ 8166a022a3SMichal Scigocki -S "${privsocket:-${SYSLOGD_LOCAL_PRIVSOCKET}}" \ 8266a022a3SMichal Scigocki ${other_args} \ 8366a022a3SMichal Scigocki & 8466a022a3SMichal Scigocki 8566a022a3SMichal Scigocki # Give syslogd a bit of time to spin up. 8666a022a3SMichal Scigocki while [ "$((i+=1))" -le 20 ]; do 8766a022a3SMichal Scigocki [ -S "${socket:-${SYSLOGD_LOCAL_SOCKET}}" ] && return 8866a022a3SMichal Scigocki sleep 0.1 8966a022a3SMichal Scigocki done 9066a022a3SMichal Scigocki atf_fail "timed out waiting for syslogd to start" 9166a022a3SMichal Scigocki} 9266a022a3SMichal Scigocki 9366a022a3SMichal Scigocki# Simple logger(1) wrapper. 9466a022a3SMichal Scigockisyslogd_log() 9566a022a3SMichal Scigocki{ 9666a022a3SMichal Scigocki atf_check -s exit:0 -o empty -e empty logger $* 9766a022a3SMichal Scigocki} 9866a022a3SMichal Scigocki 9966a022a3SMichal Scigocki# Make syslogd reload its configuration file. 10066a022a3SMichal Scigockisyslogd_reload() 10166a022a3SMichal Scigocki{ 1023fb2371eSMark Johnston atf_check pkill -HUP -F "${1:-${SYSLOGD_PIDFILE}}" 10366a022a3SMichal Scigocki} 10466a022a3SMichal Scigocki 10566a022a3SMichal Scigocki# Stop a private syslogd instance. 10666a022a3SMichal Scigockisyslogd_stop() 10766a022a3SMichal Scigocki{ 10866a022a3SMichal Scigocki local pid_file="${1:-${SYSLOGD_PIDFILE}}" 10966a022a3SMichal Scigocki local socket_file="${2:-${SYSLOGD_LOCAL_SOCKET}}" 11066a022a3SMichal Scigocki local privsocket_file="${3:-${SYSLOGD_LOCAL_PRIVSOCKET}}" 11166a022a3SMichal Scigocki 11266a022a3SMichal Scigocki pid=$(cat "${pid_file}") 11366a022a3SMichal Scigocki if pkill -F "${pid_file}"; then 11466a022a3SMichal Scigocki wait "${pid}" 11566a022a3SMichal Scigocki rm -f "${pid_file}" "${socket_file}" "${privsocket_file}" 11666a022a3SMichal Scigocki fi 11766a022a3SMichal Scigocki} 118*8d9c25c4SJose Luis Duran 119*8d9c25c4SJose Luis Duran# Check required kernel module. 120*8d9c25c4SJose Luis Duransyslogd_check_req() 121*8d9c25c4SJose Luis Duran{ 122*8d9c25c4SJose Luis Duran type=$1 123*8d9c25c4SJose Luis Duran 124*8d9c25c4SJose Luis Duran if kldstat -q -n if_${type}.ko; then 125*8d9c25c4SJose Luis Duran return 126*8d9c25c4SJose Luis Duran fi 127*8d9c25c4SJose Luis Duran 128*8d9c25c4SJose Luis Duran if ! kldload -n -q if_${type}; then 129*8d9c25c4SJose Luis Duran atf_skip "if_${type}.ko is required to run this test." 130*8d9c25c4SJose Luis Duran return 131*8d9c25c4SJose Luis Duran fi 132*8d9c25c4SJose Luis Duran} 133*8d9c25c4SJose Luis Duran 134*8d9c25c4SJose Luis Duran# Make a jail and save its name to the created_jails.lst file. 135*8d9c25c4SJose Luis Duran# Accepts a name and optional arguments. 136*8d9c25c4SJose Luis Duransyslogd_mkjail() 137*8d9c25c4SJose Luis Duran{ 138*8d9c25c4SJose Luis Duran jailname=$1 139*8d9c25c4SJose Luis Duran shift 140*8d9c25c4SJose Luis Duran args=$* 141*8d9c25c4SJose Luis Duran 142*8d9c25c4SJose Luis Duran atf_check jail -c name=${jailname} ${args} persist 143*8d9c25c4SJose Luis Duran 144*8d9c25c4SJose Luis Duran echo $jailname >> created_jails.lst 145*8d9c25c4SJose Luis Duran} 146*8d9c25c4SJose Luis Duran 147*8d9c25c4SJose Luis Duran# Remove epair interfaces and jails. 148*8d9c25c4SJose Luis Duransyslogd_cleanup() 149*8d9c25c4SJose Luis Duran{ 150*8d9c25c4SJose Luis Duran if [ -f created_jails.lst ]; then 151*8d9c25c4SJose Luis Duran while read jailname; do 152*8d9c25c4SJose Luis Duran jail -r ${jailname} 153*8d9c25c4SJose Luis Duran done < created_jails.lst 154*8d9c25c4SJose Luis Duran rm created_jails.lst 155*8d9c25c4SJose Luis Duran fi 156*8d9c25c4SJose Luis Duran 157*8d9c25c4SJose Luis Duran if [ -f epair ]; then 158*8d9c25c4SJose Luis Duran ifconfig $(cat epair) destroy 159*8d9c25c4SJose Luis Duran fi 160*8d9c25c4SJose Luis Duran} 161