]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - etc/pccard_ether
This commit was generated by cvs2svn to compensate for changes in r159285,
[FreeBSD/FreeBSD.git] / etc / pccard_ether
1 #!/bin/sh -
2 #
3 # $FreeBSD$
4 #
5 # pccard_ether interfacename [start|stop|restart]
6 #
7 # example: pccard_ether fxp0 start
8 #
9
10 . /etc/rc.subr
11 . /etc/network.subr
12
13 name="pccard_ether"
14 start_precmd="checkauto"
15 start_cmd="pccard_ether_start"
16 stop_precmd="checkauto"
17 stop_cmd="pccard_ether_stop"
18 restart_precmd="checkauto"
19 restart_cmd="pccard_ether_restart"
20
21 setup_routes()
22 {
23         # Add default route into $static_routes
24         case ${defaultrouter} in
25         [Nn][Oo] | '')
26                 ;;
27         *)
28                 static_routes="default ${static_routes}"
29                 route_default="default ${defaultrouter}"
30                 ;;
31         esac
32
33         # Add private route for this interface into $static_routes
34         eval ifx_routes=\$static_routes_${ifn}
35         if [ -n "${ifx_routes}" ]; then
36                 static_routes="${ifx_routes} ${static_routes}"
37         fi
38
39         # Set up any static routes if specified
40         if [ -n "${static_routes}" ]; then
41                 for i in ${static_routes}; do
42                         eval route_args=\$route_${i}
43                         route add ${route_args}
44                 done
45         fi
46 }
47
48 remove_routes()
49 {
50         # Delete static route if specified
51         eval ifx_routes=\$static_routes_${ifn}
52         if [ -n "${ifx_routes}" ]; then
53                 for i in ${ifx_routes}; do
54                         eval route_args=\$route_${i}
55                         route delete ${route_args}
56                 done
57         fi
58 }
59
60 checkauto()
61 {
62         if [ -z "$rc_force" ]; then
63                 # Ignore interfaces with the NOAUTO keyword
64                 autoif $ifn || exit 0
65         fi
66 }
67
68 pccard_ether_start()
69 {
70         if [ -z "$rc_force" -a -x /usr/bin/grep ]; then
71                 if ifconfig $ifn | grep -s '[<,]UP[,>]' > /dev/null 2>&1; then
72                     # Interface is already up, so ignore it.
73                     exit 0
74                 fi
75         fi
76
77         /etc/rc.d/netif start $ifn
78
79         # Do route configuration if needed.
80         # XXX: should probably do this by calling rc.d/routing.
81         if [ -n "`ifconfig_getargs $ifn`" ]; then
82                 if ! dhcpif $ifn; then
83                         setup_routes
84                 fi
85         fi
86
87         # IPv6 setup
88         if checkyesno ipv6_enable; then
89                 network6_interface_setup $ifn
90         fi
91 }
92
93 pccard_ether_stop()
94 {
95         if [ -n "`ifconfig_getargs $ifn`" ]; then
96                 if ! dhcpif $ifn; then
97                         remove_routes
98                 fi
99         fi
100
101         /etc/rc.d/netif stop $ifn
102
103         # clean ARP table
104         arp -d -a
105
106         # Clean the routing table
107         if checkyesno removable_route_flush; then
108                 route -n flush -inet > /dev/null
109         fi
110 }
111
112 pccard_ether_restart()
113 {
114         # Hand implemented because the default implementation runs
115         # the equivalent of "$0 start; $0 stop" and this script
116         # doesn't support that syntax
117         pccard_ether_stop
118         pccard_ether_start
119 }
120
121 ifn=$1
122 shift
123 if [ -z "$*" ]; then
124         args="start"
125 else
126         args=$*
127 fi
128
129 load_rc_config pccard_ether
130 run_rc_command $args