xref: /minix3/etc/rs.lwip (revision 1dee92ebe9d36c122dd2fee6f8e8b3cb279ddbfc)
1*60299d87SDavid van Moolenbroek#!/bin/sh
2*60299d87SDavid van Moolenbroek
3*60299d87SDavid van Moolenbroek# Recovery script for LWIP.  Aside from restarting the LWIP service itself, the
4*60299d87SDavid van Moolenbroek# script aims to restart all of networking.  This includes in particular any
5*60299d87SDavid van Moolenbroek# network daemons: these daemons typically have open (listening) sockets that
6*60299d87SDavid van Moolenbroek# will now have become invalid, and the daemons typically do not know how to
7*60299d87SDavid van Moolenbroek# deal with that.  Unfortunately, there is no reliable way to determine the
8*60299d87SDavid van Moolenbroek# list of rc scripts that concern network daemons, so for now we hardcode a
9*60299d87SDavid van Moolenbroek# list of known ones here: this is the list of network-related rc.d scripts.
10*60299d87SDavid van Moolenbroek# FIXME: since we are not yet done importing etc/rc.d from NetBSD, this list is
11*60299d87SDavid van Moolenbroek# still incomplete and should be extended as more scripts are imported!
12*60299d87SDavid van MoolenbroekRC_SCRIPTS="dhclient dhcpcd dhcpd dhcrelay ftpd inetd named network rtadvd \
13*60299d87SDavid van Moolenbroek    sshd staticroute syslogd"
14*60299d87SDavid van Moolenbroek
15*60299d87SDavid van Moolenbroekexec < /dev/console
16*60299d87SDavid van Moolenbroekexec > /dev/console
17*60299d87SDavid van Moolenbroekexec 2> /dev/console
18*60299d87SDavid van Moolenbroek
19*60299d87SDavid van Moolenbroekexport HOME=/
20*60299d87SDavid van Moolenbroekexport PATH=/sbin:/usr/sbin:/bin:/usr/bin
21*60299d87SDavid van Moolenbroek
22*60299d87SDavid van Moolenbroek. /etc/rc.subr
23*60299d87SDavid van Moolenbroek. /etc/rc.conf
24*60299d87SDavid van Moolenbroek
25*60299d87SDavid van Moolenbroek# Restart the LWIP service.
26*60299d87SDavid van Moolenbroek
27*60299d87SDavid van Moolenbroek# There is no need to shut down daemons before bringing back up the service.
28*60299d87SDavid van Moolenbroek# Note that "minix-service restart" does not do the same as these steps, and in
29*60299d87SDavid van Moolenbroek# fact breaks a proper LWIP restart.
30*60299d87SDavid van Moolenbroekrestarts=$(grep restarts /proc/service/$1 | cut -d: -f2)
31*60299d87SDavid van Moolenbroekminix-service down "$1"
32*60299d87SDavid van Moolenbroekminix-service up /service/lwip -dev /dev/bpf -script /etc/rs.lwip \
33*60299d87SDavid van Moolenbroek    -restarts $(($restarts + 1))
34*60299d87SDavid van Moolenbroek
35*60299d87SDavid van Moolenbroek# Reload TCP ISN, or make a new one if there is none.  Do not save anything.
36*60299d87SDavid van MoolenbroekTCPISN_FILE=/usr/adm/tcpisn.dat
37*60299d87SDavid van MoolenbroekTCPISN_LEN=$(sysctl -n net.inet.tcp.isn_secret | awk '{print length/2}')
38*60299d87SDavid van Moolenbroekif [ ! -f $TCPISN_FILE ]; then TCPISN_FILE=/dev/random; fi
39*60299d87SDavid van Moolenbroeksysctl -qw net.inet.tcp.isn_secret=`dd if=$TCPISN_FILE bs=$TCPISN_LEN \
40*60299d87SDavid van Moolenbroek    count=1 2>/dev/null | hexdump -v -e '/1 "%02x"'` 2>/dev/null
41*60299d87SDavid van Moolenbroek
42*60299d87SDavid van Moolenbroek# Let LWIP find all network drivers before performing initialization.
43*60299d87SDavid van Moolenbroeksleep 1
44*60299d87SDavid van Moolenbroek
45*60299d87SDavid van Moolenbroek# Restart all network daemons.
46*60299d87SDavid van Moolenbroek
47*60299d87SDavid van Moolenbroek# Start with dhcpcd, which may be launched directly from ifconfig.if(5) scripts
48*60299d87SDavid van Moolenbroek# and therefore may not be enabled in, and thus stopped by, rc.d scripts below.
49*60299d87SDavid van Moolenbroekservice dhcpcd onestop >/dev/null 2>&1
50*60299d87SDavid van Moolenbroek
51*60299d87SDavid van Moolenbroek# Then stop and start all known network daemons using their rc.d scripts.
52*60299d87SDavid van Moolenbroekregex='/('"$(echo $RC_SCRIPTS | tr ' ' '|')"')$'
53*60299d87SDavid van Moolenbroekscripts=$(for rcd in ${rc_directories:-/etc/rc.d}; do
54*60299d87SDavid van Moolenbroek	test -d ${rcd} && echo ${rcd}/*; done)
55*60299d87SDavid van Moolenbroekfiles=$(rcorder ${scripts} | grep -E "$regex")
56*60299d87SDavid van Moolenbroek
57*60299d87SDavid van Moolenbroekfor _rc_elem in $(reverse_list $files); do
58*60299d87SDavid van Moolenbroek	# We have already stopped dhcpcd if it was running, so skip it here.
59*60299d87SDavid van Moolenbroek	[ $_rc_elem != /etc/rc.d/dhcpcd ] && run_rc_script $_rc_elem stop
60*60299d87SDavid van Moolenbroekdone
61*60299d87SDavid van Moolenbroek
62*60299d87SDavid van Moolenbroekfor _rc_elem in $files; do
63*60299d87SDavid van Moolenbroek	run_rc_script $_rc_elem start
64*60299d87SDavid van Moolenbroekdone
65