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