summaryrefslogtreecommitdiffstats
path: root/etc/pccard_ether
diff options
context:
space:
mode:
authortoshi <toshi@FreeBSD.org>2000-12-25 09:21:18 +0000
committertoshi <toshi@FreeBSD.org>2000-12-25 09:21:18 +0000
commit7da3a08277c6f08405758747e5a0a9fe1b1213a4 (patch)
treecc9c771023ec6469ae61dc697f86613f75636288 /etc/pccard_ether
parent86f19c12df0f606055f8c67cafdfba8086cd2a1d (diff)
downloadFreeBSD-src-7da3a08277c6f08405758747e5a0a9fe1b1213a4.zip
FreeBSD-src-7da3a08277c6f08405758747e5a0a9fe1b1213a4.tar.gz
Add support for PC-card router configuration. (MFPAO)
o Add the removable_interfaces variable for list of removable network interfaces (PC-card ethernet, wireless network and USB ethernet etc). o ifconfig_<ifn>_alias0, static_routes_<ifn>, removable_route_flush, /etc/start_if.<ifn> and /etc/stop_if.<ifn> are support. o removable_route_flush variable is set to "NO" if you want to use the machine as gateway using two or more removable network cards. If static routing is needed use static_routes_<ifn> instead of static_routes or defaultrouter. o The optional static_routes_<ifn> variable is likely static_routes. o /etc/start_if.<ifn> and /etc/stop_if.<ifn> are shell script to be specified that are called when a card is inserted or removed.
Diffstat (limited to 'etc/pccard_ether')
-rwxr-xr-xetc/pccard_ether164
1 files changed, 124 insertions, 40 deletions
diff --git a/etc/pccard_ether b/etc/pccard_ether
index cc79672..58f0ca6 100755
--- a/etc/pccard_ether
+++ b/etc/pccard_ether
@@ -8,30 +8,27 @@
#
stop_dhcp() {
- if [ -r /sbin/dhclient ]; then
+ if [ -s /var/run/dhclient.${interface}.pid ]; then
pidfile="/var/run/dhclient.${interface}.pid"
- if [ -s ${pidfile} ]; then
- kill `cat ${pidfile}`
- rm ${pidfile}
- fi
- elif [ -r /usr/local/sbin/dhcpc ]; then
+ elif [ -s /var/run/dhcpc.${interface}.pid ]; then
pidfile="/var/run/dhcpc.${interface}.pid"
- if [ -s ${pidfile} ]; then
- kill `cat ${pidfile}`
- rm ${pidfile}
- fi
+ else
+ return
fi
+ kill `cat ${pidfile}`
+ rm -f ${pidfile}
}
start_dhcp() {
stop_dhcp
- if [ -r /sbin/dhclient ]; then
- pidfile="/var/run/dhclient.${interface}.pid"
- /sbin/dhclient -pf ${pidfile} $interface
- elif [ -r /usr/local/sbin/dhcpc ]; then
- /usr/local/sbin/dhcpc $interface
+ if [ -x "${dhcp_program}" ]; then
+ if [ `basename ${dhcp_program}` = "dhclient" ]; then
+ pidfile="/var/run/dhclient.${interface}.pid"
+ dhcp_flags="${dhcp_flags} -pf ${pidfile}"
+ fi
+ ${dhcp_program} ${dhcp_flags} ${interface}
else
- echo 'DHCP client software not available (isc-dhcp2)'
+ echo "${dhcp_program}: DHCP client software not available"
fi
}
@@ -49,40 +46,79 @@ shift
startstop=$1
shift
+case ${pccard_ifconfig} in
+[Nn][Oo] | '')
+ expr "${removable_interfaces}" : ".*${interface}" > /dev/null || exit 0
+ ;;
+*)
+ # Backward compatible
+ eval ifconfig_${interface}=\${pccard_ifconfig}
+ ;;
+esac
+
case ${startstop} in
[Ss][Tt][Aa][Rr][Tt] | '')
- case ${pccard_ifconfig} in
+ if [ -r /etc/start_if.${interface} ]; then
+ . /etc/start_if.${interface}
+ fi
+
+ eval ifconfig_args=\$ifconfig_${interface}
+ case ${ifconfig_args} in
[Nn][Oo] | '')
;;
[Dd][Hh][Cc][Pp])
+ # Start up the DHCP client program
start_dhcp
;;
*)
- ifconfig ${interface} ${pccard_ifconfig} $*
- ;;
- esac
+ # Do the primary ifconfig if specified
+ ifconfig ${interface} ${ifconfig_args} $*
- case ${defaultrouter} in
- [Nn][Oo] | '')
- ;;
- *)
- static_routes="default ${static_routes}"
- route_default="default ${defaultrouter}"
+ # Check to see if aliases need to be added
+ alias=0
+ while :
+ do
+ eval ifx_args=\$ifconfig_${interface}_alias${alias}
+ if [ -n "${ifx_args}" ]; then
+ ifconfig ${interface} ${ifx_args} alias
+ alias=`expr ${alias} + 1`
+ else
+ break;
+ fi
+ done
+
+ # Do ipx address if specified
+ eval ifx_args=\$ifconfig_${interface}_ipx
+ if [ -n "${ifx_args}" ]; then
+ ifconfig ${interface} ${ifx_args}
+ fi
+
+ # Add default route into $static_routes
+ case ${defaultrouter} in
+ [Nn][Oo] | '')
+ ;;
+ *)
+ static_routes="default ${static_routes}"
+ route_default="default ${defaultrouter}"
+ ;;
+ esac
+
+ # Add private route for this interface into $static_routes
+ eval ifx_routes=\$static_routes_${interface}
+ if [ -n "${ifx_routes}" ]; then
+ static_routes="${ifx_routes} ${static_routes}"
+ fi
+
+ # Set up any static routes if specified
+ if [ -n "${static_routes}" ]; then
+ for i in ${static_routes}; do
+ eval route_args=\$route_${i}
+ route add ${route_args}
+ done
+ fi
;;
esac
- # Set up any static routes.
- #
- if [ -n "${static_routes}" ]; then
- # flush beforehand, just in case....
- route -n flush
- arp -d -a
- for i in ${static_routes}; do
- eval route_args=\$route_${i}
- route add ${route_args}
- done
- fi
-
# IPv6 setup
case ${ipv6_enable} in
[Yy][Ee][Ss])
@@ -101,7 +137,55 @@ case ${startstop} in
;;
# Stop the interface
*)
- /sbin/ifconfig ${interface} delete
- stop_dhcp
+ if [ -r /etc/stop_if.${interface} ]; then
+ . /etc/stop_if.${interface}
+ fi
+
+ eval ifconfig_args=\$ifconfig_${interface}
+ case ${ifconfig_args} in
+ [Nn][Oo] | '')
+ ;;
+ [Dd][Hh][Cc][Pp])
+ # Stop the DHCP client for this interface
+ stop_dhcp
+ ;;
+ *)
+ # Delelte static route if specified
+ eval ifx_routes=\$static_routes_${interface}
+ if [ -n "${ifx_routes}" ]; then
+ for i in ${ifx_routes}; do
+ eval route_args=\$route_${i}
+ route delete ${route_args}
+ done
+ fi
+
+ # Delete aliases if exist
+ alias=0
+ while :
+ do
+ eval ifx_args=\$ifconfig_${interface}_alias${alias}
+ if [ -n "${ifx_args}" ]; then
+ ifconfig ${interface} ${ifx_args} alias delete
+ alias=`expr ${alias} + 1`
+ else
+ break;
+ fi
+ done
+ ;;
+ esac
+
+ # Remove the network interface and cleaning ARP table
+ ifconfig ${interface} delete
+ arp -d -a
+
+ # Clean the routing table
+ case ${removable_route_flush} in
+ [Nn][Oo])
+ ;;
+ *)
+ # flush beforehand, just in case....
+ route -n flush
+ ;;
+ esac
;;
esac
OpenPOWER on IntegriCloud