114596Snate#!/bin/sh -
214596Snate#
350472Speter# $FreeBSD: stable/11/etc/pccard_ether 310233 2016-12-18 20:40:22Z avos $
438738Sbrian#
5150882Sbrooks# pccard_ether interfacename [start|stop|restart]
614596Snate#
7147088Sbrooks# example: pccard_ether fxp0 start
814596Snate#
914596Snate
10147088Sbrooks. /etc/rc.subr
11118840Smbr. /etc/network.subr
12118840Smbr
13150882Sbrooksname="pccard_ether"
14150882Sbrooksstart_precmd="checkauto"
15150882Sbrooksstart_cmd="pccard_ether_start"
16150882Sbrooksstop_precmd="checkauto"
17150882Sbrooksstop_cmd="pccard_ether_stop"
18150882Sbrooksrestart_precmd="checkauto"
19150882Sbrooksrestart_cmd="pccard_ether_restart"
20287394Sglebiusstartchildren_cmd="pccard_ether_startchildren"
21287394Sglebiusstopchildren_cmd="pccard_ether_stopchildren"
22287394Sglebiusextra_commands="startchildren stopchildren"
23118840Smbr
24147088Sbrookssetup_routes()
25147088Sbrooks{
26147088Sbrooks	# Add default route into $static_routes
27147088Sbrooks	case ${defaultrouter} in
28147088Sbrooks	[Nn][Oo] | '')
29118840Smbr		;;
30118840Smbr	*)
31147088Sbrooks		static_routes="default ${static_routes}"
32147088Sbrooks		route_default="default ${defaultrouter}"
33118840Smbr		;;
34118840Smbr	esac
3567221Sjoe
36147088Sbrooks	# Add private route for this interface into $static_routes
37147088Sbrooks	eval ifx_routes=\$static_routes_${ifn}
38147088Sbrooks	if [ -n "${ifx_routes}" ]; then
39147088Sbrooks		static_routes="${ifx_routes} ${static_routes}"
4067221Sjoe	fi
41147088Sbrooks
42147088Sbrooks	# Set up any static routes if specified
43147088Sbrooks	if [ -n "${static_routes}" ]; then
44147088Sbrooks		for i in ${static_routes}; do
45147088Sbrooks			eval route_args=\$route_${i}
46147088Sbrooks			route add ${route_args}
47147088Sbrooks		done
48147088Sbrooks	fi
4967221Sjoe}
5067221Sjoe
51147088Sbrooksremove_routes()
52147088Sbrooks{
53147088Sbrooks	# Delete static route if specified
54147088Sbrooks	eval ifx_routes=\$static_routes_${ifn}
55147088Sbrooks	if [ -n "${ifx_routes}" ]; then
56147088Sbrooks		for i in ${ifx_routes}; do
57147088Sbrooks			eval route_args=\$route_${i}
58147088Sbrooks			route delete ${route_args}
59147088Sbrooks		done
60118840Smbr	fi
61118840Smbr}
62118840Smbr
63150882Sbrookscheckauto()
64150882Sbrooks{
65150882Sbrooks	if [ -z "$rc_force" ]; then
66150882Sbrooks		# Ignore interfaces with the NOAUTO keyword
67150882Sbrooks		autoif $ifn || exit 0
68150882Sbrooks	fi
69150882Sbrooks}
70147424Sbrooks
71150882Sbrookspccard_ether_start()
72150882Sbrooks{
73161437Sbrooks	ifexists $ifn || exit 1
74161437Sbrooks
75162480Sbrooks	if [ -z "$rc_force" ]; then
76162480Sbrooks		for uif in `ifconfig -ul`; do
77162480Sbrooks			if [ "${uif}" = "${ifn}" ]; then
78162480Sbrooks				# Interface is already up, so ignore it.
79162480Sbrooks				exit 0
80162480Sbrooks			fi
81162480Sbrooks		done
82107761Simp	fi
83107761Simp
84179961Smtm	/etc/rc.d/netif quietstart $ifn
8570349Stoshi
86147088Sbrooks	# Do route configuration if needed.
87147088Sbrooks	# XXX: should probably do this by calling rc.d/routing.
88147088Sbrooks	if [ -n "`ifconfig_getargs $ifn`" ]; then
89147088Sbrooks		if ! dhcpif $ifn; then
90147088Sbrooks			setup_routes
9170349Stoshi		fi
92147088Sbrooks	fi
9370349Stoshi
94165011Shrs	# XXX: IPv6 setup should be done in some way.
95150882Sbrooks}
96147088Sbrooks
97150882Sbrookspccard_ether_stop()
98150882Sbrooks{
99147088Sbrooks	if [ -n "`ifconfig_getargs $ifn`" ]; then
100147088Sbrooks		if ! dhcpif $ifn; then
101147088Sbrooks			remove_routes
102147088Sbrooks		fi
10370349Stoshi	fi
10470349Stoshi
105179961Smtm	/etc/rc.d/netif quietstop $ifn
10670349Stoshi
107147088Sbrooks	# clean ARP table
108161386Sbrooks	ifexists $ifn && arp -d -i $ifn -a
109150882Sbrooks}
110150882Sbrooks
111150882Sbrookspccard_ether_restart()
112150882Sbrooks{
113150882Sbrooks	# Hand implemented because the default implementation runs
114150882Sbrooks	# the equivalent of "$0 start; $0 stop" and this script
115150882Sbrooks	# doesn't support that syntax
116150882Sbrooks	pccard_ether_stop
117150882Sbrooks	pccard_ether_start
118150882Sbrooks}
119150882Sbrooks
120287394Sglebiuspccard_ether_startchildren()
121287394Sglebius{
122287394Sglebius	for child in `get_if_var $ifn wlans_IF`; do
123310233Savos		if ifexists $child; then
124310233Savos			continue
125310233Savos		fi
126287394Sglebius		/etc/rc.d/netif quietstart $child
127287394Sglebius	done
128287394Sglebius}
129287394Sglebius
130287394Sglebiuspccard_ether_stopchildren()
131287394Sglebius{
132287394Sglebius	for child in `get_if_var $ifn wlans_IF`; do
133287394Sglebius		/etc/rc.d/netif quietstop $child
134287394Sglebius	done
135287394Sglebius}
136287394Sglebius
137150882Sbrooksifn=$1
138150882Sbrooksshift
139150882Sbrooksif [ -z "$*" ]; then
140150882Sbrooks	args="start"
141150882Sbrookselse
142150882Sbrooks	args=$*
143150882Sbrooksfi
144150882Sbrooks
145150882Sbrooksload_rc_config pccard_ether
146242784Sn_hibmaload_rc_config network
147150882Sbrooksrun_rc_command $args
148