xref: /freebsd/libexec/rc/pccard_ether (revision d0b2dbfa0ecf2bbc9709efc5e20baf8e4b44bbbf)
1*0696600cSBjoern A. Zeeb#!/bin/sh -
2*0696600cSBjoern A. Zeeb#
3*0696600cSBjoern A. Zeeb#
4*0696600cSBjoern A. Zeeb# pccard_ether interfacename [start|stop|restart]
5*0696600cSBjoern A. Zeeb#
6*0696600cSBjoern A. Zeeb# example: pccard_ether fxp0 start
7*0696600cSBjoern A. Zeeb#
8*0696600cSBjoern A. Zeeb
9*0696600cSBjoern A. Zeeb. /etc/rc.subr
10*0696600cSBjoern A. Zeeb. /etc/network.subr
11*0696600cSBjoern A. Zeeb
12*0696600cSBjoern A. Zeebname="pccard_ether"
13*0696600cSBjoern A. Zeebstart_precmd="checkauto"
14*0696600cSBjoern A. Zeebstart_cmd="pccard_ether_start"
15*0696600cSBjoern A. Zeebstop_precmd="checkauto"
16*0696600cSBjoern A. Zeebstop_cmd="pccard_ether_stop"
17*0696600cSBjoern A. Zeebrestart_precmd="checkauto"
18*0696600cSBjoern A. Zeebrestart_cmd="pccard_ether_restart"
19*0696600cSBjoern A. Zeebstartchildren_cmd="pccard_ether_startchildren"
20*0696600cSBjoern A. Zeebstopchildren_cmd="pccard_ether_stopchildren"
21*0696600cSBjoern A. Zeebextra_commands="startchildren stopchildren"
22*0696600cSBjoern A. Zeeb
23*0696600cSBjoern A. Zeebsetup_routes()
24*0696600cSBjoern A. Zeeb{
25*0696600cSBjoern A. Zeeb	# Add default route into $static_routes
26*0696600cSBjoern A. Zeeb	case ${defaultrouter} in
27*0696600cSBjoern A. Zeeb	[Nn][Oo] | '')
28*0696600cSBjoern A. Zeeb		;;
29*0696600cSBjoern A. Zeeb	*)
30*0696600cSBjoern A. Zeeb		static_routes="default ${static_routes}"
31*0696600cSBjoern A. Zeeb		route_default="default ${defaultrouter}"
32*0696600cSBjoern A. Zeeb		;;
33*0696600cSBjoern A. Zeeb	esac
34*0696600cSBjoern A. Zeeb
35*0696600cSBjoern A. Zeeb	# Add private route for this interface into $static_routes
36*0696600cSBjoern A. Zeeb	eval ifx_routes=\$static_routes_${ifn}
37*0696600cSBjoern A. Zeeb	if [ -n "${ifx_routes}" ]; then
38*0696600cSBjoern A. Zeeb		static_routes="${ifx_routes} ${static_routes}"
39*0696600cSBjoern A. Zeeb	fi
40*0696600cSBjoern A. Zeeb
41*0696600cSBjoern A. Zeeb	# Set up any static routes if specified
42*0696600cSBjoern A. Zeeb	if [ -n "${static_routes}" ]; then
43*0696600cSBjoern A. Zeeb		for i in ${static_routes}; do
44*0696600cSBjoern A. Zeeb			eval route_args=\$route_${i}
45*0696600cSBjoern A. Zeeb			route add ${route_args}
46*0696600cSBjoern A. Zeeb		done
47*0696600cSBjoern A. Zeeb	fi
48*0696600cSBjoern A. Zeeb}
49*0696600cSBjoern A. Zeeb
50*0696600cSBjoern A. Zeebremove_routes()
51*0696600cSBjoern A. Zeeb{
52*0696600cSBjoern A. Zeeb	# Delete static route if specified
53*0696600cSBjoern A. Zeeb	eval ifx_routes=\$static_routes_${ifn}
54*0696600cSBjoern A. Zeeb	if [ -n "${ifx_routes}" ]; then
55*0696600cSBjoern A. Zeeb		for i in ${ifx_routes}; do
56*0696600cSBjoern A. Zeeb			eval route_args=\$route_${i}
57*0696600cSBjoern A. Zeeb			route delete ${route_args}
58*0696600cSBjoern A. Zeeb		done
59*0696600cSBjoern A. Zeeb	fi
60*0696600cSBjoern A. Zeeb}
61*0696600cSBjoern A. Zeeb
62*0696600cSBjoern A. Zeebcheckauto()
63*0696600cSBjoern A. Zeeb{
64*0696600cSBjoern A. Zeeb	if [ -z "$rc_force" ]; then
65*0696600cSBjoern A. Zeeb		# Ignore interfaces with the NOAUTO keyword
66*0696600cSBjoern A. Zeeb		autoif $ifn || exit 0
67*0696600cSBjoern A. Zeeb	fi
68*0696600cSBjoern A. Zeeb}
69*0696600cSBjoern A. Zeeb
70*0696600cSBjoern A. Zeebpccard_ether_start()
71*0696600cSBjoern A. Zeeb{
72*0696600cSBjoern A. Zeeb	ifexists $ifn || exit 1
73*0696600cSBjoern A. Zeeb
74*0696600cSBjoern A. Zeeb	if [ -z "$rc_force" ]; then
75*0696600cSBjoern A. Zeeb		for uif in `ifconfig -ul`; do
76*0696600cSBjoern A. Zeeb			if [ "${uif}" = "${ifn}" ]; then
77*0696600cSBjoern A. Zeeb				# Interface is already up, so ignore it.
78*0696600cSBjoern A. Zeeb				exit 0
79*0696600cSBjoern A. Zeeb			fi
80*0696600cSBjoern A. Zeeb		done
81*0696600cSBjoern A. Zeeb	fi
82*0696600cSBjoern A. Zeeb
83*0696600cSBjoern A. Zeeb	/etc/rc.d/netif quietstart $ifn
84*0696600cSBjoern A. Zeeb
85*0696600cSBjoern A. Zeeb	# Do route configuration if needed.
86*0696600cSBjoern A. Zeeb	# XXX: should probably do this by calling rc.d/routing.
87*0696600cSBjoern A. Zeeb	if [ -n "`ifconfig_getargs $ifn`" ]; then
88*0696600cSBjoern A. Zeeb		if ! dhcpif $ifn; then
89*0696600cSBjoern A. Zeeb			setup_routes
90*0696600cSBjoern A. Zeeb		fi
91*0696600cSBjoern A. Zeeb	fi
92*0696600cSBjoern A. Zeeb
93*0696600cSBjoern A. Zeeb	# XXX: IPv6 setup should be done in some way.
94*0696600cSBjoern A. Zeeb}
95*0696600cSBjoern A. Zeeb
96*0696600cSBjoern A. Zeebpccard_ether_stop()
97*0696600cSBjoern A. Zeeb{
98*0696600cSBjoern A. Zeeb	if [ -n "`ifconfig_getargs $ifn`" ]; then
99*0696600cSBjoern A. Zeeb		if ! dhcpif $ifn; then
100*0696600cSBjoern A. Zeeb			remove_routes
101*0696600cSBjoern A. Zeeb		fi
102*0696600cSBjoern A. Zeeb	fi
103*0696600cSBjoern A. Zeeb
104*0696600cSBjoern A. Zeeb	/etc/rc.d/netif quietstop $ifn
105*0696600cSBjoern A. Zeeb
106*0696600cSBjoern A. Zeeb	# clean ARP table
107*0696600cSBjoern A. Zeeb	ifexists $ifn && arp -d -i $ifn -a
108*0696600cSBjoern A. Zeeb}
109*0696600cSBjoern A. Zeeb
110*0696600cSBjoern A. Zeebpccard_ether_restart()
111*0696600cSBjoern A. Zeeb{
112*0696600cSBjoern A. Zeeb	# Hand implemented because the default implementation runs
113*0696600cSBjoern A. Zeeb	# the equivalent of "$0 start; $0 stop" and this script
114*0696600cSBjoern A. Zeeb	# doesn't support that syntax
115*0696600cSBjoern A. Zeeb	pccard_ether_stop
116*0696600cSBjoern A. Zeeb	pccard_ether_start
117*0696600cSBjoern A. Zeeb}
118*0696600cSBjoern A. Zeeb
119*0696600cSBjoern A. Zeebpccard_ether_startchildren()
120*0696600cSBjoern A. Zeeb{
121*0696600cSBjoern A. Zeeb	for child in `get_if_var $ifn wlans_IF`; do
122*0696600cSBjoern A. Zeeb		if ifexists $child; then
123*0696600cSBjoern A. Zeeb			continue
124*0696600cSBjoern A. Zeeb		fi
125*0696600cSBjoern A. Zeeb		/etc/rc.d/netif quietstart $child
126*0696600cSBjoern A. Zeeb	done
127*0696600cSBjoern A. Zeeb}
128*0696600cSBjoern A. Zeeb
129*0696600cSBjoern A. Zeebpccard_ether_stopchildren()
130*0696600cSBjoern A. Zeeb{
131*0696600cSBjoern A. Zeeb	for child in `get_if_var $ifn wlans_IF`; do
132*0696600cSBjoern A. Zeeb		/etc/rc.d/netif quietstop $child
133*0696600cSBjoern A. Zeeb	done
134*0696600cSBjoern A. Zeeb}
135*0696600cSBjoern A. Zeeb
136*0696600cSBjoern A. Zeebifn=$1
137*0696600cSBjoern A. Zeebshift
138*0696600cSBjoern A. Zeebif [ -z "$*" ]; then
139*0696600cSBjoern A. Zeeb	args="start"
140*0696600cSBjoern A. Zeebelse
141*0696600cSBjoern A. Zeeb	args=$*
142*0696600cSBjoern A. Zeebfi
143*0696600cSBjoern A. Zeeb
144*0696600cSBjoern A. Zeebload_rc_config pccard_ether
145*0696600cSBjoern A. Zeebload_rc_config network
146*0696600cSBjoern A. Zeebrun_rc_command $args
147