pccard_ether revision 162480
114596Snate#!/bin/sh -
214596Snate#
350472Speter# $FreeBSD: head/etc/pccard_ether 162480 2006-09-20 19:45:30Z brooks $
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"
20118840Smbr
21147088Sbrookssetup_routes()
22147088Sbrooks{
23147088Sbrooks	# Add default route into $static_routes
24147088Sbrooks	case ${defaultrouter} in
25147088Sbrooks	[Nn][Oo] | '')
26118840Smbr		;;
27118840Smbr	*)
28147088Sbrooks		static_routes="default ${static_routes}"
29147088Sbrooks		route_default="default ${defaultrouter}"
30118840Smbr		;;
31118840Smbr	esac
3267221Sjoe
33147088Sbrooks	# Add private route for this interface into $static_routes
34147088Sbrooks	eval ifx_routes=\$static_routes_${ifn}
35147088Sbrooks	if [ -n "${ifx_routes}" ]; then
36147088Sbrooks		static_routes="${ifx_routes} ${static_routes}"
3767221Sjoe	fi
38147088Sbrooks
39147088Sbrooks	# Set up any static routes if specified
40147088Sbrooks	if [ -n "${static_routes}" ]; then
41147088Sbrooks		for i in ${static_routes}; do
42147088Sbrooks			eval route_args=\$route_${i}
43147088Sbrooks			route add ${route_args}
44147088Sbrooks		done
45147088Sbrooks	fi
4667221Sjoe}
4767221Sjoe
48147088Sbrooksremove_routes()
49147088Sbrooks{
50147088Sbrooks	# Delete static route if specified
51147088Sbrooks	eval ifx_routes=\$static_routes_${ifn}
52147088Sbrooks	if [ -n "${ifx_routes}" ]; then
53147088Sbrooks		for i in ${ifx_routes}; do
54147088Sbrooks			eval route_args=\$route_${i}
55147088Sbrooks			route delete ${route_args}
56147088Sbrooks		done
57118840Smbr	fi
58118840Smbr}
59118840Smbr
60150882Sbrookscheckauto()
61150882Sbrooks{
62150882Sbrooks	if [ -z "$rc_force" ]; then
63150882Sbrooks		# Ignore interfaces with the NOAUTO keyword
64150882Sbrooks		autoif $ifn || exit 0
65150882Sbrooks	fi
66150882Sbrooks}
67147424Sbrooks
68150882Sbrookspccard_ether_start()
69150882Sbrooks{
70161437Sbrooks	ifexists $ifn || exit 1
71161437Sbrooks
72162480Sbrooks	if [ -z "$rc_force" ]; then
73162480Sbrooks		for uif in `ifconfig -ul`; do
74162480Sbrooks			if [ "${uif}" = "${ifn}" ]; then
75162480Sbrooks				# Interface is already up, so ignore it.
76162480Sbrooks				exit 0
77162480Sbrooks			fi
78162480Sbrooks		done
79107761Simp	fi
80107761Simp
81147088Sbrooks	/etc/rc.d/netif start $ifn
8270349Stoshi
83147088Sbrooks	# Do route configuration if needed.
84147088Sbrooks	# XXX: should probably do this by calling rc.d/routing.
85147088Sbrooks	if [ -n "`ifconfig_getargs $ifn`" ]; then
86147088Sbrooks		if ! dhcpif $ifn; then
87147088Sbrooks			setup_routes
8870349Stoshi		fi
89147088Sbrooks	fi
9070349Stoshi
9167221Sjoe	# IPv6 setup
92147088Sbrooks	if checkyesno ipv6_enable; then
93147088Sbrooks		network6_interface_setup $ifn
94147088Sbrooks	fi
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
105147088Sbrooks	/etc/rc.d/netif stop $ifn
10670349Stoshi
107147088Sbrooks	# clean ARP table
108161386Sbrooks	ifexists $ifn && arp -d -i $ifn -a
10970349Stoshi
11070349Stoshi	# Clean the routing table
111147088Sbrooks	if checkyesno removable_route_flush; then
112147088Sbrooks		route -n flush -inet > /dev/null
113147088Sbrooks	fi
114150882Sbrooks}
115150882Sbrooks
116150882Sbrookspccard_ether_restart()
117150882Sbrooks{
118150882Sbrooks	# Hand implemented because the default implementation runs
119150882Sbrooks	# the equivalent of "$0 start; $0 stop" and this script
120150882Sbrooks	# doesn't support that syntax
121150882Sbrooks	pccard_ether_stop
122150882Sbrooks	pccard_ether_start
123150882Sbrooks}
124150882Sbrooks
125150882Sbrooksifn=$1
126150882Sbrooksshift
127150882Sbrooksif [ -z "$*" ]; then
128150882Sbrooks	args="start"
129150882Sbrookselse
130150882Sbrooks	args=$*
131150882Sbrooksfi
132150882Sbrooks
133150882Sbrooksload_rc_config pccard_ether
134150882Sbrooksrun_rc_command $args
135