summaryrefslogtreecommitdiffstats
path: root/etc/pccard_ether
blob: 4bf9b52fce55757e20e4c6895c72f7b57e7661de (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
#!/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"

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 start $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

	# IPv6 setup
	if ipv6if $ifn; then
		# XXX: network6_interface_setup assumes you're calling
		# it with ALL the IPv6 interfaces at once and thus isn't
		# really appropraite for this job, but it's the best we've
		# got for now.
		network6_interface_setup $ifn
	fi
}

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

	/etc/rc.d/netif stop $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
}

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

load_rc_config pccard_ether
run_rc_command $args
OpenPOWER on IntegriCloud