Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

#!/bin/sh
#
# $NetBSD: rtadvd,v 1.11 2020/07/04 06:24:53 skrll Exp $
#

# PROVIDE: rtadvd
# REQUIRE: DAEMON
# BEFORE:  LOGIN

$_rc_subr_loaded . /etc/rc.subr

name=rtadvd
rcvar=$name
command="/usr/sbin/$name"
pidfile="/var/run/$name.pid"
extra_commands=reload
start_precmd=rtadvd_prestart
reload_precmd=rtadvd_prereload

rtadvd_prereload()
{
	local chdir="$(getent passwd _rtadvd | cut -d: -f6)"
	local conf=/etc/rtadvd.conf myflags o confdir
	local cflag=false

	[ -z "${chdir}" ] || [ "/${chdir}" = // ] && return 0

	if [ -n "${flags}" ]; then
		myflags=${flags}
	else
		eval myflags=\$${name}_flags
	fi
	set -- ${myflags}
	while getopts c:dDfM:Rs o; do
		# ignore other args, they are processed by rtadvd itself
		case "${o}" in
		c)	conf="${OPTARG}"
			case "${conf}" in
			/*)	;;
			*)	echo "${name}: config file (${conf}) must be" \
					"full pathname"
				return 1
				;;
			esac
			cflag=true;;
		esac
	done

	${cflag} || test -f "${conf}" && {
		confdir=$(dirname "${conf}")
		echo "${name}: copying ${conf} to ${chdir}${conf}"
		mkdir -p "${chdir}${confdir}"
		cp "${conf}" "${chdir}${conf}" || return 1
	}

	# Make sure /var/run exists in the chroot
	mkdir -p "${chdir}/var/run"

	# Provide a link to the chrooted dump file
	ln -snf "${chdir}/var/run/${name}.dump" /var/run

	# Note: actual chroot is done by rtadvd itself

	return 0
}

rtadvd_prestart()
{
	if [ "$ip6mode" != router ]; then
		warn \
	"${name} cannot be used on IPv6 host, only on an IPv6 router."
		return 1
	fi

	rtadvd_prereload
}

load_rc_config $name
run_rc_command "$1"