6da9aa1452
interface is an IPv6 interface. Use this method to decide if we should attempt to configure an interface with an IPv6 address in pccard_ether. The mechanism pccard_ether uses to do this is unsuited to the task because it assumes the list of interfaces it is passed is the full list of IPv6 interfaces and makes decissions based on that. This is at least a step in the right direction and is probably about as much as we can MFC safely. PR: conf/103428 MFC after: 3 days
134 lines
2.5 KiB
Bash
Executable File
134 lines
2.5 KiB
Bash
Executable File
#!/bin/sh -
|
|
#
|
|
# $FreeBSD$
|
|
#
|
|
# pccard_ether interfacename [start|stop|restart]
|
|
#
|
|
# example: pccard_ether fxp0 start
|
|
#
|
|
|
|
. /etc/rc.subr
|
|
. /etc/network.subr
|
|
|
|
name="pccard_ether"
|
|
start_precmd="checkauto"
|
|
start_cmd="pccard_ether_start"
|
|
stop_precmd="checkauto"
|
|
stop_cmd="pccard_ether_stop"
|
|
restart_precmd="checkauto"
|
|
restart_cmd="pccard_ether_restart"
|
|
|
|
setup_routes()
|
|
{
|
|
# 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_${ifn}
|
|
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
|
|
}
|
|
|
|
remove_routes()
|
|
{
|
|
# Delete static route if specified
|
|
eval ifx_routes=\$static_routes_${ifn}
|
|
if [ -n "${ifx_routes}" ]; then
|
|
for i in ${ifx_routes}; do
|
|
eval route_args=\$route_${i}
|
|
route delete ${route_args}
|
|
done
|
|
fi
|
|
}
|
|
|
|
checkauto()
|
|
{
|
|
if [ -z "$rc_force" ]; then
|
|
# Ignore interfaces with the NOAUTO keyword
|
|
autoif $ifn || exit 0
|
|
fi
|
|
}
|
|
|
|
pccard_ether_start()
|
|
{
|
|
ifexists $ifn || exit 1
|
|
|
|
if [ -z "$rc_force" ]; then
|
|
for uif in `ifconfig -ul`; do
|
|
if [ "${uif}" = "${ifn}" ]; then
|
|
# Interface is already up, so ignore it.
|
|
exit 0
|
|
fi
|
|
done
|
|
fi
|
|
|
|
/etc/rc.d/netif start $ifn
|
|
|
|
# Do route configuration if needed.
|
|
# XXX: should probably do this by calling rc.d/routing.
|
|
if [ -n "`ifconfig_getargs $ifn`" ]; then
|
|
if ! dhcpif $ifn; then
|
|
setup_routes
|
|
fi
|
|
fi
|
|
|
|
# IPv6 setup
|
|
if ipv6if $ifn; then
|
|
# XXX: network6_interface_setup assumes you're calling
|
|
# it with ALL the IPv6 interfaces at once and thus isn't
|
|
# really appropraite for this job, but it's the best we've
|
|
# got for now.
|
|
network6_interface_setup $ifn
|
|
fi
|
|
}
|
|
|
|
pccard_ether_stop()
|
|
{
|
|
if [ -n "`ifconfig_getargs $ifn`" ]; then
|
|
if ! dhcpif $ifn; then
|
|
remove_routes
|
|
fi
|
|
fi
|
|
|
|
/etc/rc.d/netif stop $ifn
|
|
|
|
# clean ARP table
|
|
ifexists $ifn && arp -d -i $ifn -a
|
|
}
|
|
|
|
pccard_ether_restart()
|
|
{
|
|
# Hand implemented because the default implementation runs
|
|
# the equivalent of "$0 start; $0 stop" and this script
|
|
# doesn't support that syntax
|
|
pccard_ether_stop
|
|
pccard_ether_start
|
|
}
|
|
|
|
ifn=$1
|
|
shift
|
|
if [ -z "$*" ]; then
|
|
args="start"
|
|
else
|
|
args=$*
|
|
fi
|
|
|
|
load_rc_config pccard_ether
|
|
run_rc_command $args
|