xref: /dragonfly/etc/pccard_ether (revision cc41928392d83f4c9800219f797fd4ce87fbb295)
1#!/bin/sh -
2#
3# $FreeBSD: head/libexec/rc/pccard_ether 339413 2018-10-17 16:49:11Z bz $
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
13name="pccard_ether"
14start_cmd="pccard_ether_start"
15stop_cmd="pccard_ether_stop"
16restart_cmd="pccard_ether_restart"
17startchildren_cmd="pccard_ether_startchildren"
18stopchildren_cmd="pccard_ether_stopchildren"
19extra_commands="startchildren stopchildren"
20
21setup_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
48remove_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
60pccard_ether_start()
61{
62          ifexists $ifn || exit 1
63
64          if [ -z "$rc_force" ]; then
65                    for uif in `ifconfig -ul`; do
66                              if [ "${uif}" = "${ifn}" ]; then
67                                        # Interface is already up, so ignore it.
68                                        exit 0
69                              fi
70                    done
71          fi
72
73          /etc/rc.d/netif start $ifn
74
75          # Do route configuration if needed.
76          # XXX: should probably do this by calling rc.d/routing.
77          if [ -n "`ifconfig_getargs $ifn`" ]; then
78                    if ! dhcpif $ifn; then
79                              setup_routes
80                    fi
81          fi
82
83          # XXX: IPv6 setup should be done in some way.
84}
85
86pccard_ether_stop()
87{
88          if [ -n "`ifconfig_getargs $ifn`" ]; then
89                    if ! dhcpif $ifn; then
90                              remove_routes
91                    fi
92          fi
93
94          /etc/rc.d/netif stop $ifn
95
96          # clean ARP table
97          ifexists $ifn && arp -d -i $ifn -a
98}
99
100pccard_ether_restart()
101{
102          # Hand implemented because the default implementation runs
103          # the equivalent of "$0 start; $0 stop" and this script
104          # doesn't support that syntax
105          pccard_ether_stop
106          pccard_ether_start
107}
108
109pccard_ether_startchildren()
110{
111          for child in `get_if_var $ifn wlans_IF`; do
112                    if ifexists $child; then
113                              continue
114                    fi
115                    /etc/rc.d/netif start $child
116          done
117}
118
119pccard_ether_stopchildren()
120{
121          for child in `get_if_var $ifn wlans_IF`; do
122                    /etc/rc.d/netif stop $child
123          done
124}
125
126ifn=$1
127shift
128if [ -z "$*" ]; then
129          args="start"
130else
131          args=$*
132fi
133
134load_rc_config pccard_ether
135load_rc_config network
136run_rc_command $args
137