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 13name="pccard_ether" 14start_precmd="checkauto" 15start_cmd="pccard_ether_start" 16stop_precmd="checkauto" 17stop_cmd="pccard_ether_stop" 18restart_precmd="checkauto" 19restart_cmd="pccard_ether_restart" 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 60checkauto() 61{ 62 if [ -z "$rc_force" ]; then 63 # Ignore interfaces with the NOAUTO keyword 64 autoif $ifn || exit 0 65 fi 66} 67 68pccard_ether_start() 69{ 70 ifexists $ifn || exit 1 71 72 if [ -z "$rc_force" ]; then 73 for uif in `ifconfig -ul`; do 74 if [ "${uif}" = "${ifn}" ]; then 75 # Interface is already up, so ignore it. 76 exit 0 77 fi 78 done 79 fi 80 81 /etc/rc.d/netif quietstart $ifn 82 83 # Do route configuration if needed. 84 # XXX: should probably do this by calling rc.d/routing. 85 if [ -n "`ifconfig_getargs $ifn`" ]; then 86 if ! dhcpif $ifn; then 87 setup_routes 88 fi 89 fi 90 91 # XXX: IPv6 setup should be done in some way. 92} 93 94pccard_ether_stop() 95{ 96 if [ -n "`ifconfig_getargs $ifn`" ]; then 97 if ! dhcpif $ifn; then 98 remove_routes 99 fi 100 fi 101 102 /etc/rc.d/netif quietstop $ifn 103 104 # clean ARP table 105 ifexists $ifn && arp -d -i $ifn -a 106} 107 108pccard_ether_restart() 109{ 110 # Hand implemented because the default implementation runs 111 # the equivalent of "$0 start; $0 stop" and this script 112 # doesn't support that syntax 113 pccard_ether_stop 114 pccard_ether_start 115} 116 117ifn=$1 118shift 119if [ -z "$*" ]; then 120 args="start" 121else 122 args=$* 123fi 124 125load_rc_config pccard_ether 126load_rc_config network 127run_rc_command $args 128