pccard_ether revision 70349
155714Skris#!/bin/sh -
255714Skris#
355714Skris# $FreeBSD: head/etc/pccard_ether 70349 2000-12-25 09:21:18Z toshi $
455714Skris#
555714Skris# pccard_ether interfacename [start|stop] [ifconfig option]
655714Skris#
755714Skris# example: pccard_ether ep0 start -link0
8280304Sjkim#
955714Skris
1055714Skrisstop_dhcp() {
1155714Skris	if [ -s /var/run/dhclient.${interface}.pid ]; then
1255714Skris		pidfile="/var/run/dhclient.${interface}.pid"
1355714Skris	elif [ -s /var/run/dhcpc.${interface}.pid ]; then
1455714Skris		pidfile="/var/run/dhcpc.${interface}.pid"
15280304Sjkim	else
1655714Skris		return
1755714Skris	fi
1855714Skris	kill `cat ${pidfile}`
1955714Skris	rm -f ${pidfile}
2055714Skris}
2155714Skris
22280304Sjkimstart_dhcp() {
2355714Skris	stop_dhcp
2455714Skris	if [ -x "${dhcp_program}" ]; then
2555714Skris		if [ `basename ${dhcp_program}` = "dhclient" ]; then
2655714Skris			pidfile="/var/run/dhclient.${interface}.pid"
2755714Skris			dhcp_flags="${dhcp_flags} -pf ${pidfile}"
2855714Skris		fi
2955714Skris		${dhcp_program} ${dhcp_flags} ${interface}
3055714Skris	else
3155714Skris		echo "${dhcp_program}: DHCP client software not available"
3255714Skris	fi
3355714Skris}
3455714Skris
3555714Skris# Suck in the configuration variables
3655714Skris#
37280304Sjkimif [ -r /etc/defaults/rc.conf ]; then
3855714Skris	. /etc/defaults/rc.conf
3955714Skris	source_rc_confs
40280304Sjkimelif [ -r /etc/rc.conf ]; then
4155714Skris	. /etc/rc.conf
4255714Skrisfi
4355714Skris
4455714Skrisinterface=$1
4555714Skrisshift
4655714Skrisstartstop=$1
4755714Skrisshift
4855714Skris
4955714Skriscase ${pccard_ifconfig} in
5055714Skris[Nn][Oo] | '')
5155714Skris	expr "${removable_interfaces}" : ".*${interface}" > /dev/null || exit 0
52280304Sjkim	;;
5355714Skris*)
5455714Skris	# Backward compatible
5555714Skris	eval ifconfig_${interface}=\${pccard_ifconfig}
5655714Skris	;;
5755714Skrisesac
5855714Skris
5955714Skriscase ${startstop} in
6055714Skris[Ss][Tt][Aa][Rr][Tt] | '')
6155714Skris	if [ -r /etc/start_if.${interface} ]; then
6255714Skris		. /etc/start_if.${interface}
63280304Sjkim	fi
64280304Sjkim
65280304Sjkim	eval ifconfig_args=\$ifconfig_${interface}
66280304Sjkim	case ${ifconfig_args} in
67280304Sjkim	[Nn][Oo] | '')
68280304Sjkim		;;
69280304Sjkim	[Dd][Hh][Cc][Pp])
70280304Sjkim		# Start up the DHCP client program
71280304Sjkim		start_dhcp
72280304Sjkim		;;
73280304Sjkim	*)
74280304Sjkim		# Do the primary ifconfig if specified
75280304Sjkim		ifconfig ${interface} ${ifconfig_args} $*
76280304Sjkim
77280304Sjkim		# Check to see if aliases need to be added
78280304Sjkim		alias=0
79280304Sjkim		while :
80280304Sjkim		do
81280304Sjkim			eval ifx_args=\$ifconfig_${interface}_alias${alias}
82280304Sjkim			if [ -n "${ifx_args}" ]; then
83280304Sjkim				ifconfig ${interface} ${ifx_args} alias
84280304Sjkim				alias=`expr ${alias} + 1`
85280304Sjkim			else
86280304Sjkim				break;
87280304Sjkim			fi
88280304Sjkim		done
89280304Sjkim
90280304Sjkim		# Do ipx address if specified
91280304Sjkim		eval ifx_args=\$ifconfig_${interface}_ipx
92280304Sjkim		if [ -n "${ifx_args}" ]; then
93280304Sjkim			ifconfig ${interface} ${ifx_args}
94280304Sjkim		fi
95280304Sjkim
96280304Sjkim		# Add default route into $static_routes
97280304Sjkim		case ${defaultrouter} in
98280304Sjkim		[Nn][Oo] | '')
9955714Skris		        ;;
100109998Smarkm		*)
101280304Sjkim			static_routes="default ${static_routes}"
102280304Sjkim			route_default="default ${defaultrouter}"
103280304Sjkim			;;
104280304Sjkim		esac
105280304Sjkim
106280304Sjkim		# Add private route for this interface into $static_routes
107280304Sjkim		eval ifx_routes=\$static_routes_${interface}
10855714Skris		if [ -n "${ifx_routes}" ]; then
109280304Sjkim			static_routes="${ifx_routes} ${static_routes}"
110280304Sjkim		fi
111280304Sjkim
112280304Sjkim		# Set up any static routes if specified
113280304Sjkim		if [ -n "${static_routes}" ]; then
114280304Sjkim			for i in ${static_routes}; do
115280304Sjkim				eval route_args=\$route_${i}
11655714Skris				route add ${route_args}
117280304Sjkim			done
118280304Sjkim		fi
119280304Sjkim		;;
120280304Sjkim	esac
121280304Sjkim
122280304Sjkim	# IPv6 setup
123280304Sjkim	case ${ipv6_enable} in
124280304Sjkim	[Yy][Ee][Ss])
125194206Ssimon		case ${ipv6_gateway_enable} in
12655714Skris		[Yy][Ee][Ss])
127109998Smarkm			;;
128280304Sjkim		*)
129280304Sjkim			sysctl -w net.inet6.ip6.forwarding=0
130280304Sjkim			sysctl -w net.inet6.ip6.accept_rtadv=1
131280304Sjkim			ifconfig ${interface} up
132280304Sjkim			rtsol ${interface}
133280304Sjkim			;;
134280304Sjkim		esac
135280304Sjkim		;;
136280304Sjkim	esac
137280304Sjkim	;;
138280304Sjkim# Stop the interface
13955714Skris*)
140280304Sjkim	if [ -r /etc/stop_if.${interface} ]; then
141280304Sjkim		. /etc/stop_if.${interface}
142280304Sjkim	fi
143280304Sjkim
144280304Sjkim	eval ifconfig_args=\$ifconfig_${interface}
145280304Sjkim	case ${ifconfig_args} in
14655714Skris	[Nn][Oo] | '')
147280304Sjkim	        ;;
14855714Skris	[Dd][Hh][Cc][Pp])
149280304Sjkim		# Stop the DHCP client for this interface
150280304Sjkim		stop_dhcp
151280304Sjkim		;;
152280304Sjkim	*)
153280304Sjkim		# Delelte static route if specified
154280304Sjkim		eval ifx_routes=\$static_routes_${interface}
155280304Sjkim		if [ -n "${ifx_routes}" ]; then
156280304Sjkim			for i in ${ifx_routes}; do
157280304Sjkim				eval route_args=\$route_${i}
158280304Sjkim				route delete ${route_args}
159280304Sjkim			done
160280304Sjkim		fi
161280304Sjkim
162280304Sjkim		# Delete aliases if exist
163280304Sjkim		alias=0
164280304Sjkim		while :
165280304Sjkim		do
166280304Sjkim			eval ifx_args=\$ifconfig_${interface}_alias${alias}
167280304Sjkim			if [ -n "${ifx_args}" ]; then
168280304Sjkim				ifconfig ${interface} ${ifx_args} alias delete
169280304Sjkim				alias=`expr ${alias} + 1`
170280304Sjkim			else
171280304Sjkim				break;
172280304Sjkim			fi
173280304Sjkim		done
174280304Sjkim		;;
175280304Sjkim	esac
176280304Sjkim
177280304Sjkim	# Remove the network interface and cleaning ARP table
178280304Sjkim	ifconfig ${interface} delete
179280304Sjkim	arp -d -a
180280304Sjkim
181280304Sjkim	# Clean the routing table
182280304Sjkim	case ${removable_route_flush} in
183280304Sjkim	[Nn][Oo])
184280304Sjkim	        ;;
185280304Sjkim	*)	
186280304Sjkim		# flush beforehand, just in case....
187280304Sjkim		route -n flush
188280304Sjkim		;;
189280304Sjkim	esac
190280304Sjkim	;;
191280304Sjkimesac
192280304Sjkim