114596Snate#!/bin/sh - 214596Snate# 350472Speter# $FreeBSD: stable/11/etc/pccard_ether 310233 2016-12-18 20:40:22Z avos $ 438738Sbrian# 5150882Sbrooks# pccard_ether interfacename [start|stop|restart] 614596Snate# 7147088Sbrooks# example: pccard_ether fxp0 start 814596Snate# 914596Snate 10147088Sbrooks. /etc/rc.subr 11118840Smbr. /etc/network.subr 12118840Smbr 13150882Sbrooksname="pccard_ether" 14150882Sbrooksstart_precmd="checkauto" 15150882Sbrooksstart_cmd="pccard_ether_start" 16150882Sbrooksstop_precmd="checkauto" 17150882Sbrooksstop_cmd="pccard_ether_stop" 18150882Sbrooksrestart_precmd="checkauto" 19150882Sbrooksrestart_cmd="pccard_ether_restart" 20287394Sglebiusstartchildren_cmd="pccard_ether_startchildren" 21287394Sglebiusstopchildren_cmd="pccard_ether_stopchildren" 22287394Sglebiusextra_commands="startchildren stopchildren" 23118840Smbr 24147088Sbrookssetup_routes() 25147088Sbrooks{ 26147088Sbrooks # Add default route into $static_routes 27147088Sbrooks case ${defaultrouter} in 28147088Sbrooks [Nn][Oo] | '') 29118840Smbr ;; 30118840Smbr *) 31147088Sbrooks static_routes="default ${static_routes}" 32147088Sbrooks route_default="default ${defaultrouter}" 33118840Smbr ;; 34118840Smbr esac 3567221Sjoe 36147088Sbrooks # Add private route for this interface into $static_routes 37147088Sbrooks eval ifx_routes=\$static_routes_${ifn} 38147088Sbrooks if [ -n "${ifx_routes}" ]; then 39147088Sbrooks static_routes="${ifx_routes} ${static_routes}" 4067221Sjoe fi 41147088Sbrooks 42147088Sbrooks # Set up any static routes if specified 43147088Sbrooks if [ -n "${static_routes}" ]; then 44147088Sbrooks for i in ${static_routes}; do 45147088Sbrooks eval route_args=\$route_${i} 46147088Sbrooks route add ${route_args} 47147088Sbrooks done 48147088Sbrooks fi 4967221Sjoe} 5067221Sjoe 51147088Sbrooksremove_routes() 52147088Sbrooks{ 53147088Sbrooks # Delete static route if specified 54147088Sbrooks eval ifx_routes=\$static_routes_${ifn} 55147088Sbrooks if [ -n "${ifx_routes}" ]; then 56147088Sbrooks for i in ${ifx_routes}; do 57147088Sbrooks eval route_args=\$route_${i} 58147088Sbrooks route delete ${route_args} 59147088Sbrooks done 60118840Smbr fi 61118840Smbr} 62118840Smbr 63150882Sbrookscheckauto() 64150882Sbrooks{ 65150882Sbrooks if [ -z "$rc_force" ]; then 66150882Sbrooks # Ignore interfaces with the NOAUTO keyword 67150882Sbrooks autoif $ifn || exit 0 68150882Sbrooks fi 69150882Sbrooks} 70147424Sbrooks 71150882Sbrookspccard_ether_start() 72150882Sbrooks{ 73161437Sbrooks ifexists $ifn || exit 1 74161437Sbrooks 75162480Sbrooks if [ -z "$rc_force" ]; then 76162480Sbrooks for uif in `ifconfig -ul`; do 77162480Sbrooks if [ "${uif}" = "${ifn}" ]; then 78162480Sbrooks # Interface is already up, so ignore it. 79162480Sbrooks exit 0 80162480Sbrooks fi 81162480Sbrooks done 82107761Simp fi 83107761Simp 84179961Smtm /etc/rc.d/netif quietstart $ifn 8570349Stoshi 86147088Sbrooks # Do route configuration if needed. 87147088Sbrooks # XXX: should probably do this by calling rc.d/routing. 88147088Sbrooks if [ -n "`ifconfig_getargs $ifn`" ]; then 89147088Sbrooks if ! dhcpif $ifn; then 90147088Sbrooks setup_routes 9170349Stoshi fi 92147088Sbrooks fi 9370349Stoshi 94165011Shrs # XXX: IPv6 setup should be done in some way. 95150882Sbrooks} 96147088Sbrooks 97150882Sbrookspccard_ether_stop() 98150882Sbrooks{ 99147088Sbrooks if [ -n "`ifconfig_getargs $ifn`" ]; then 100147088Sbrooks if ! dhcpif $ifn; then 101147088Sbrooks remove_routes 102147088Sbrooks fi 10370349Stoshi fi 10470349Stoshi 105179961Smtm /etc/rc.d/netif quietstop $ifn 10670349Stoshi 107147088Sbrooks # clean ARP table 108161386Sbrooks ifexists $ifn && arp -d -i $ifn -a 109150882Sbrooks} 110150882Sbrooks 111150882Sbrookspccard_ether_restart() 112150882Sbrooks{ 113150882Sbrooks # Hand implemented because the default implementation runs 114150882Sbrooks # the equivalent of "$0 start; $0 stop" and this script 115150882Sbrooks # doesn't support that syntax 116150882Sbrooks pccard_ether_stop 117150882Sbrooks pccard_ether_start 118150882Sbrooks} 119150882Sbrooks 120287394Sglebiuspccard_ether_startchildren() 121287394Sglebius{ 122287394Sglebius for child in `get_if_var $ifn wlans_IF`; do 123310233Savos if ifexists $child; then 124310233Savos continue 125310233Savos fi 126287394Sglebius /etc/rc.d/netif quietstart $child 127287394Sglebius done 128287394Sglebius} 129287394Sglebius 130287394Sglebiuspccard_ether_stopchildren() 131287394Sglebius{ 132287394Sglebius for child in `get_if_var $ifn wlans_IF`; do 133287394Sglebius /etc/rc.d/netif quietstop $child 134287394Sglebius done 135287394Sglebius} 136287394Sglebius 137150882Sbrooksifn=$1 138150882Sbrooksshift 139150882Sbrooksif [ -z "$*" ]; then 140150882Sbrooks args="start" 141150882Sbrookselse 142150882Sbrooks args=$* 143150882Sbrooksfi 144150882Sbrooks 145150882Sbrooksload_rc_config pccard_ether 146242784Sn_hibmaload_rc_config network 147150882Sbrooksrun_rc_command $args 148