summaryrefslogtreecommitdiffstats
path: root/etc/pccard_ether
blob: bf4f9c231440ee0440f1136cd9adc9c051052bba (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#!/bin/sh -
#
# $FreeBSD$
#
# pccard_ether interfacename [start|stop|restart]
#
# example: pccard_ether fxp0 start
#

. /etc/rc.subr
. /etc/network.subr

name="pccard_ether"
start_precmd="checkauto"
start_cmd="pccard_ether_start"
stop_precmd="checkauto"
stop_cmd="pccard_ether_stop"
restart_precmd="checkauto"
restart_cmd="pccard_ether_restart"
startchildren_cmd="pccard_ether_startchildren"
stopchildren_cmd="pccard_ether_stopchildren"
extra_commands="startchildren stopchildren"

setup_routes()
{
	# Add default route into $static_routes
	case ${defaultrouter} in
	[Nn][Oo] | '')
		;;
	*)
		static_routes="default ${static_routes}"
		route_default="default ${defaultrouter}"
		;;
	esac

	# Add private route for this interface into $static_routes
	eval ifx_routes=\$static_routes_${ifn}
	if [ -n "${ifx_routes}" ]; then
		static_routes="${ifx_routes} ${static_routes}"
	fi

	# Set up any static routes if specified
	if [ -n "${static_routes}" ]; then
		for i in ${static_routes}; do
			eval route_args=\$route_${i}
			route add ${route_args}
		done
	fi
}

remove_routes()
{
	# Delete static route if specified
	eval ifx_routes=\$static_routes_${ifn}
	if [ -n "${ifx_routes}" ]; then
		for i in ${ifx_routes}; do
			eval route_args=\$route_${i}
			route delete ${route_args}
		done
	fi
}

checkauto()
{
	if [ -z "$rc_force" ]; then
		# Ignore interfaces with the NOAUTO keyword
		autoif $ifn || exit 0
	fi
}

pccard_ether_start()
{
	ifexists $ifn || exit 1

	if [ -z "$rc_force" ]; then
		for uif in `ifconfig -ul`; do
			if [ "${uif}" = "${ifn}" ]; then
				# Interface is already up, so ignore it.
				exit 0
			fi
		done
	fi

	/etc/rc.d/netif quietstart $ifn

	# Do route configuration if needed.
	# XXX: should probably do this by calling rc.d/routing.
	if [ -n "`ifconfig_getargs $ifn`" ]; then
		if ! dhcpif $ifn; then
			setup_routes
		fi
	fi

	# XXX: IPv6 setup should be done in some way.
}

pccard_ether_stop()
{
	if [ -n "`ifconfig_getargs $ifn`" ]; then
		if ! dhcpif $ifn; then
			remove_routes
		fi
	fi

	/etc/rc.d/netif quietstop $ifn

	# clean ARP table
	ifexists $ifn && arp -d -i $ifn -a
}

pccard_ether_restart()
{
	# Hand implemented because the default implementation runs
	# the equivalent of "$0 start; $0 stop" and this script
	# doesn't support that syntax
	pccard_ether_stop
	pccard_ether_start
}

pccard_ether_startchildren()
{
	for child in `get_if_var $ifn wlans_IF`; do
		if ifexists $child; then
			continue
		fi
		/etc/rc.d/netif quietstart $child
	done
}

pccard_ether_stopchildren()
{
	for child in `get_if_var $ifn wlans_IF`; do
		/etc/rc.d/netif quietstop $child
	done
}

ifn=$1
shift
if [ -z "$*" ]; then
	args="start"
else
	args=$*
fi

load_rc_config pccard_ether
load_rc_config network
run_rc_command $args
OpenPOWER on IntegriCloud