summaryrefslogtreecommitdiffstats
path: root/etc/pccard_ether
blob: d2a24fafe24b4ba1f28298f036d228d2d2ee9f31 (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
#!/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" -a -x /usr/bin/grep ]; then
		if ifconfig $ifn | grep -s '[<,]UP[,>]' > /dev/null 2>&1; then
		    # Interface is already up, so ignore it.
		    exit 0
		fi
	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 checkyesno ipv6_enable; then
		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

	# Clean the routing table
	if checkyesno removable_route_flush; then
		route -n flush -inet > /dev/null
	fi
}

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