1*0696600cSBjoern A. Zeeb#!/bin/sh - 2*0696600cSBjoern A. Zeeb# 3*0696600cSBjoern A. Zeeb# $FreeBSD$ 4*0696600cSBjoern A. Zeeb# 5*0696600cSBjoern A. Zeeb# pccard_ether interfacename [start|stop|restart] 6*0696600cSBjoern A. Zeeb# 7*0696600cSBjoern A. Zeeb# example: pccard_ether fxp0 start 8*0696600cSBjoern A. Zeeb# 9*0696600cSBjoern A. Zeeb 10*0696600cSBjoern A. Zeeb. /etc/rc.subr 11*0696600cSBjoern A. Zeeb. /etc/network.subr 12*0696600cSBjoern A. Zeeb 13*0696600cSBjoern A. Zeebname="pccard_ether" 14*0696600cSBjoern A. Zeebstart_precmd="checkauto" 15*0696600cSBjoern A. Zeebstart_cmd="pccard_ether_start" 16*0696600cSBjoern A. Zeebstop_precmd="checkauto" 17*0696600cSBjoern A. Zeebstop_cmd="pccard_ether_stop" 18*0696600cSBjoern A. Zeebrestart_precmd="checkauto" 19*0696600cSBjoern A. Zeebrestart_cmd="pccard_ether_restart" 20*0696600cSBjoern A. Zeebstartchildren_cmd="pccard_ether_startchildren" 21*0696600cSBjoern A. Zeebstopchildren_cmd="pccard_ether_stopchildren" 22*0696600cSBjoern A. Zeebextra_commands="startchildren stopchildren" 23*0696600cSBjoern A. Zeeb 24*0696600cSBjoern A. Zeebsetup_routes() 25*0696600cSBjoern A. Zeeb{ 26*0696600cSBjoern A. Zeeb # Add default route into $static_routes 27*0696600cSBjoern A. Zeeb case ${defaultrouter} in 28*0696600cSBjoern A. Zeeb [Nn][Oo] | '') 29*0696600cSBjoern A. Zeeb ;; 30*0696600cSBjoern A. Zeeb *) 31*0696600cSBjoern A. Zeeb static_routes="default ${static_routes}" 32*0696600cSBjoern A. Zeeb route_default="default ${defaultrouter}" 33*0696600cSBjoern A. Zeeb ;; 34*0696600cSBjoern A. Zeeb esac 35*0696600cSBjoern A. Zeeb 36*0696600cSBjoern A. Zeeb # Add private route for this interface into $static_routes 37*0696600cSBjoern A. Zeeb eval ifx_routes=\$static_routes_${ifn} 38*0696600cSBjoern A. Zeeb if [ -n "${ifx_routes}" ]; then 39*0696600cSBjoern A. Zeeb static_routes="${ifx_routes} ${static_routes}" 40*0696600cSBjoern A. Zeeb fi 41*0696600cSBjoern A. Zeeb 42*0696600cSBjoern A. Zeeb # Set up any static routes if specified 43*0696600cSBjoern A. Zeeb if [ -n "${static_routes}" ]; then 44*0696600cSBjoern A. Zeeb for i in ${static_routes}; do 45*0696600cSBjoern A. Zeeb eval route_args=\$route_${i} 46*0696600cSBjoern A. Zeeb route add ${route_args} 47*0696600cSBjoern A. Zeeb done 48*0696600cSBjoern A. Zeeb fi 49*0696600cSBjoern A. Zeeb} 50*0696600cSBjoern A. Zeeb 51*0696600cSBjoern A. Zeebremove_routes() 52*0696600cSBjoern A. Zeeb{ 53*0696600cSBjoern A. Zeeb # Delete static route if specified 54*0696600cSBjoern A. Zeeb eval ifx_routes=\$static_routes_${ifn} 55*0696600cSBjoern A. Zeeb if [ -n "${ifx_routes}" ]; then 56*0696600cSBjoern A. Zeeb for i in ${ifx_routes}; do 57*0696600cSBjoern A. Zeeb eval route_args=\$route_${i} 58*0696600cSBjoern A. Zeeb route delete ${route_args} 59*0696600cSBjoern A. Zeeb done 60*0696600cSBjoern A. Zeeb fi 61*0696600cSBjoern A. Zeeb} 62*0696600cSBjoern A. Zeeb 63*0696600cSBjoern A. Zeebcheckauto() 64*0696600cSBjoern A. Zeeb{ 65*0696600cSBjoern A. Zeeb if [ -z "$rc_force" ]; then 66*0696600cSBjoern A. Zeeb # Ignore interfaces with the NOAUTO keyword 67*0696600cSBjoern A. Zeeb autoif $ifn || exit 0 68*0696600cSBjoern A. Zeeb fi 69*0696600cSBjoern A. Zeeb} 70*0696600cSBjoern A. Zeeb 71*0696600cSBjoern A. Zeebpccard_ether_start() 72*0696600cSBjoern A. Zeeb{ 73*0696600cSBjoern A. Zeeb ifexists $ifn || exit 1 74*0696600cSBjoern A. Zeeb 75*0696600cSBjoern A. Zeeb if [ -z "$rc_force" ]; then 76*0696600cSBjoern A. Zeeb for uif in `ifconfig -ul`; do 77*0696600cSBjoern A. Zeeb if [ "${uif}" = "${ifn}" ]; then 78*0696600cSBjoern A. Zeeb # Interface is already up, so ignore it. 79*0696600cSBjoern A. Zeeb exit 0 80*0696600cSBjoern A. Zeeb fi 81*0696600cSBjoern A. Zeeb done 82*0696600cSBjoern A. Zeeb fi 83*0696600cSBjoern A. Zeeb 84*0696600cSBjoern A. Zeeb /etc/rc.d/netif quietstart $ifn 85*0696600cSBjoern A. Zeeb 86*0696600cSBjoern A. Zeeb # Do route configuration if needed. 87*0696600cSBjoern A. Zeeb # XXX: should probably do this by calling rc.d/routing. 88*0696600cSBjoern A. Zeeb if [ -n "`ifconfig_getargs $ifn`" ]; then 89*0696600cSBjoern A. Zeeb if ! dhcpif $ifn; then 90*0696600cSBjoern A. Zeeb setup_routes 91*0696600cSBjoern A. Zeeb fi 92*0696600cSBjoern A. Zeeb fi 93*0696600cSBjoern A. Zeeb 94*0696600cSBjoern A. Zeeb # XXX: IPv6 setup should be done in some way. 95*0696600cSBjoern A. Zeeb} 96*0696600cSBjoern A. Zeeb 97*0696600cSBjoern A. Zeebpccard_ether_stop() 98*0696600cSBjoern A. Zeeb{ 99*0696600cSBjoern A. Zeeb if [ -n "`ifconfig_getargs $ifn`" ]; then 100*0696600cSBjoern A. Zeeb if ! dhcpif $ifn; then 101*0696600cSBjoern A. Zeeb remove_routes 102*0696600cSBjoern A. Zeeb fi 103*0696600cSBjoern A. Zeeb fi 104*0696600cSBjoern A. Zeeb 105*0696600cSBjoern A. Zeeb /etc/rc.d/netif quietstop $ifn 106*0696600cSBjoern A. Zeeb 107*0696600cSBjoern A. Zeeb # clean ARP table 108*0696600cSBjoern A. Zeeb ifexists $ifn && arp -d -i $ifn -a 109*0696600cSBjoern A. Zeeb} 110*0696600cSBjoern A. Zeeb 111*0696600cSBjoern A. Zeebpccard_ether_restart() 112*0696600cSBjoern A. Zeeb{ 113*0696600cSBjoern A. Zeeb # Hand implemented because the default implementation runs 114*0696600cSBjoern A. Zeeb # the equivalent of "$0 start; $0 stop" and this script 115*0696600cSBjoern A. Zeeb # doesn't support that syntax 116*0696600cSBjoern A. Zeeb pccard_ether_stop 117*0696600cSBjoern A. Zeeb pccard_ether_start 118*0696600cSBjoern A. Zeeb} 119*0696600cSBjoern A. Zeeb 120*0696600cSBjoern A. Zeebpccard_ether_startchildren() 121*0696600cSBjoern A. Zeeb{ 122*0696600cSBjoern A. Zeeb for child in `get_if_var $ifn wlans_IF`; do 123*0696600cSBjoern A. Zeeb if ifexists $child; then 124*0696600cSBjoern A. Zeeb continue 125*0696600cSBjoern A. Zeeb fi 126*0696600cSBjoern A. Zeeb /etc/rc.d/netif quietstart $child 127*0696600cSBjoern A. Zeeb done 128*0696600cSBjoern A. Zeeb} 129*0696600cSBjoern A. Zeeb 130*0696600cSBjoern A. Zeebpccard_ether_stopchildren() 131*0696600cSBjoern A. Zeeb{ 132*0696600cSBjoern A. Zeeb for child in `get_if_var $ifn wlans_IF`; do 133*0696600cSBjoern A. Zeeb /etc/rc.d/netif quietstop $child 134*0696600cSBjoern A. Zeeb done 135*0696600cSBjoern A. Zeeb} 136*0696600cSBjoern A. Zeeb 137*0696600cSBjoern A. Zeebifn=$1 138*0696600cSBjoern A. Zeebshift 139*0696600cSBjoern A. Zeebif [ -z "$*" ]; then 140*0696600cSBjoern A. Zeeb args="start" 141*0696600cSBjoern A. Zeebelse 142*0696600cSBjoern A. Zeeb args=$* 143*0696600cSBjoern A. Zeebfi 144*0696600cSBjoern A. Zeeb 145*0696600cSBjoern A. Zeebload_rc_config pccard_ether 146*0696600cSBjoern A. Zeebload_rc_config network 147*0696600cSBjoern A. Zeebrun_rc_command $args 148