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