xref: /freebsd/libexec/rc/pccard_ether (revision 6d3bc576abbd84f736d917f5bfec4e3fe7e6c125)
10696600cSBjoern A. Zeeb#!/bin/sh -
20696600cSBjoern A. Zeeb#
30696600cSBjoern A. Zeeb#
40696600cSBjoern A. Zeeb# pccard_ether interfacename [start|stop|restart]
50696600cSBjoern A. Zeeb#
60696600cSBjoern A. Zeeb# example: pccard_ether fxp0 start
70696600cSBjoern A. Zeeb#
80696600cSBjoern A. Zeeb
90696600cSBjoern A. Zeeb. /etc/rc.subr
100696600cSBjoern A. Zeeb. /etc/network.subr
110696600cSBjoern A. Zeeb
120696600cSBjoern A. Zeebname="pccard_ether"
130696600cSBjoern A. Zeebstart_precmd="checkauto"
140696600cSBjoern A. Zeebstart_cmd="pccard_ether_start"
150696600cSBjoern A. Zeebstop_precmd="checkauto"
160696600cSBjoern A. Zeebstop_cmd="pccard_ether_stop"
170696600cSBjoern A. Zeebrestart_precmd="checkauto"
180696600cSBjoern A. Zeebrestart_cmd="pccard_ether_restart"
190696600cSBjoern A. Zeebstartchildren_cmd="pccard_ether_startchildren"
200696600cSBjoern A. Zeebstopchildren_cmd="pccard_ether_stopchildren"
210696600cSBjoern A. Zeebextra_commands="startchildren stopchildren"
220696600cSBjoern A. Zeeb
230696600cSBjoern A. Zeebsetup_routes()
240696600cSBjoern A. Zeeb{
250696600cSBjoern A. Zeeb	# Add default route into $static_routes
260696600cSBjoern A. Zeeb	case ${defaultrouter} in
270696600cSBjoern A. Zeeb	[Nn][Oo] | '')
280696600cSBjoern A. Zeeb		;;
290696600cSBjoern A. Zeeb	*)
300696600cSBjoern A. Zeeb		static_routes="default ${static_routes}"
310696600cSBjoern A. Zeeb		route_default="default ${defaultrouter}"
320696600cSBjoern A. Zeeb		;;
330696600cSBjoern A. Zeeb	esac
340696600cSBjoern A. Zeeb
350696600cSBjoern A. Zeeb	# Add private route for this interface into $static_routes
360696600cSBjoern A. Zeeb	eval ifx_routes=\$static_routes_${ifn}
370696600cSBjoern A. Zeeb	if [ -n "${ifx_routes}" ]; then
380696600cSBjoern A. Zeeb		static_routes="${ifx_routes} ${static_routes}"
390696600cSBjoern A. Zeeb	fi
400696600cSBjoern A. Zeeb
410696600cSBjoern A. Zeeb	# Set up any static routes if specified
420696600cSBjoern A. Zeeb	if [ -n "${static_routes}" ]; then
430696600cSBjoern A. Zeeb		for i in ${static_routes}; do
440696600cSBjoern A. Zeeb			eval route_args=\$route_${i}
450696600cSBjoern A. Zeeb			route add ${route_args}
460696600cSBjoern A. Zeeb		done
470696600cSBjoern A. Zeeb	fi
480696600cSBjoern A. Zeeb}
490696600cSBjoern A. Zeeb
500696600cSBjoern A. Zeebremove_routes()
510696600cSBjoern A. Zeeb{
520696600cSBjoern A. Zeeb	# Delete static route if specified
530696600cSBjoern A. Zeeb	eval ifx_routes=\$static_routes_${ifn}
540696600cSBjoern A. Zeeb	if [ -n "${ifx_routes}" ]; then
550696600cSBjoern A. Zeeb		for i in ${ifx_routes}; do
560696600cSBjoern A. Zeeb			eval route_args=\$route_${i}
570696600cSBjoern A. Zeeb			route delete ${route_args}
580696600cSBjoern A. Zeeb		done
590696600cSBjoern A. Zeeb	fi
600696600cSBjoern A. Zeeb}
610696600cSBjoern A. Zeeb
620696600cSBjoern A. Zeebcheckauto()
630696600cSBjoern A. Zeeb{
640696600cSBjoern A. Zeeb	if [ -z "$rc_force" ]; then
650696600cSBjoern A. Zeeb		# Ignore interfaces with the NOAUTO keyword
660696600cSBjoern A. Zeeb		autoif $ifn || exit 0
670696600cSBjoern A. Zeeb	fi
680696600cSBjoern A. Zeeb}
690696600cSBjoern A. Zeeb
700696600cSBjoern A. Zeebpccard_ether_start()
710696600cSBjoern A. Zeeb{
72*6d3bc576SEugene Grosbein	ifisup $ifn
73*6d3bc576SEugene Grosbein	case $? in
74*6d3bc576SEugene Grosbein		0)	# Interface is already up, so ignore it.
750696600cSBjoern A. Zeeb			if [ -z "$rc_force"]; then
760696600cSBjoern A. Zeeb				exit 0
770696600cSBjoern A. Zeeb			fi
78*6d3bc576SEugene Grosbein			;;
79*6d3bc576SEugene Grosbein		2)	# Interface does not exist.
80*6d3bc576SEugene Grosbein			exit 1
81*6d3bc576SEugene Grosbein			;;
82*6d3bc576SEugene Grosbein	esac
830696600cSBjoern A. Zeeb
840696600cSBjoern A. Zeeb	/etc/rc.d/netif quietstart $ifn
850696600cSBjoern A. Zeeb
860696600cSBjoern A. Zeeb	# Do route configuration if needed.
870696600cSBjoern A. Zeeb	# XXX: should probably do this by calling rc.d/routing.
880696600cSBjoern A. Zeeb	if [ -n "`ifconfig_getargs $ifn`" ]; then
890696600cSBjoern A. Zeeb		if ! dhcpif $ifn; then
900696600cSBjoern A. Zeeb			setup_routes
910696600cSBjoern A. Zeeb		fi
920696600cSBjoern A. Zeeb	fi
930696600cSBjoern A. Zeeb
940696600cSBjoern A. Zeeb	# XXX: IPv6 setup should be done in some way.
950696600cSBjoern A. Zeeb}
960696600cSBjoern A. Zeeb
970696600cSBjoern A. Zeebpccard_ether_stop()
980696600cSBjoern A. Zeeb{
990696600cSBjoern A. Zeeb	if [ -n "`ifconfig_getargs $ifn`" ]; then
1000696600cSBjoern A. Zeeb		if ! dhcpif $ifn; then
1010696600cSBjoern A. Zeeb			remove_routes
1020696600cSBjoern A. Zeeb		fi
1030696600cSBjoern A. Zeeb	fi
1040696600cSBjoern A. Zeeb
1050696600cSBjoern A. Zeeb	/etc/rc.d/netif quietstop $ifn
1060696600cSBjoern A. Zeeb
1070696600cSBjoern A. Zeeb	# clean ARP table
1080696600cSBjoern A. Zeeb	ifexists $ifn && arp -d -i $ifn -a
1090696600cSBjoern A. Zeeb}
1100696600cSBjoern A. Zeeb
1110696600cSBjoern A. Zeebpccard_ether_restart()
1120696600cSBjoern A. Zeeb{
1130696600cSBjoern A. Zeeb	# Hand implemented because the default implementation runs
1140696600cSBjoern A. Zeeb	# the equivalent of "$0 start; $0 stop" and this script
1150696600cSBjoern A. Zeeb	# doesn't support that syntax
1160696600cSBjoern A. Zeeb	pccard_ether_stop
1170696600cSBjoern A. Zeeb	pccard_ether_start
1180696600cSBjoern A. Zeeb}
1190696600cSBjoern A. Zeeb
1200696600cSBjoern A. Zeebpccard_ether_startchildren()
1210696600cSBjoern A. Zeeb{
1220696600cSBjoern A. Zeeb	for child in `get_if_var $ifn wlans_IF`; do
1230696600cSBjoern A. Zeeb		if ifexists $child; then
1240696600cSBjoern A. Zeeb			continue
1250696600cSBjoern A. Zeeb		fi
1260696600cSBjoern A. Zeeb		/etc/rc.d/netif quietstart $child
1270696600cSBjoern A. Zeeb	done
1280696600cSBjoern A. Zeeb}
1290696600cSBjoern A. Zeeb
1300696600cSBjoern A. Zeebpccard_ether_stopchildren()
1310696600cSBjoern A. Zeeb{
1320696600cSBjoern A. Zeeb	for child in `get_if_var $ifn wlans_IF`; do
1330696600cSBjoern A. Zeeb		/etc/rc.d/netif quietstop $child
1340696600cSBjoern A. Zeeb	done
1350696600cSBjoern A. Zeeb}
1360696600cSBjoern A. Zeeb
1370696600cSBjoern A. Zeebifn=$1
1380696600cSBjoern A. Zeebshift
1390696600cSBjoern A. Zeebif [ -z "$*" ]; then
1400696600cSBjoern A. Zeeb	args="start"
1410696600cSBjoern A. Zeebelse
1420696600cSBjoern A. Zeeb	args=$*
1430696600cSBjoern A. Zeebfi
1440696600cSBjoern A. Zeeb
1450696600cSBjoern A. Zeebload_rc_config pccard_ether
1460696600cSBjoern A. Zeebload_rc_config network
1470696600cSBjoern A. Zeebrun_rc_command $args
148