hotplug-based network script rewrite

SVN-Revision: 2531
This commit is contained in:
Felix Fietkau 2005-11-19 03:17:20 +00:00
parent 9a8a69c0b8
commit 733dc97762
15 changed files with 366 additions and 247 deletions

View file

@ -60,6 +60,3 @@ mount none /tmp -t ramfs
umount /rom/proc umount /rom/proc
umount /rom/tmp umount /rom/tmp
umount /rom/dev umount /rom/dev
# normally created by boot script
mkdir -p /var/run

View file

@ -1,4 +1,4 @@
#!/bin/ash #!/bin/sh
. /etc/nvram.sh . /etc/nvram.sh
alias debug=${DEBUG:-:} alias debug=${DEBUG:-:}
@ -7,74 +7,11 @@ alias debug=${DEBUG:-:}
if_valid () ( if_valid () (
ifconfig "$1" >&- 2>&- || ifconfig "$1" >&- 2>&- ||
[ "${1%%[0-9]}" = "br" ] || [ "${1%%[0-9]}" = "br" ] ||
{
[ "${1%%[0-9]}" = "vlan" ] && (
i=${1#vlan}
hwname=$(nvram get vlan${i}hwname)
hwaddr=$(nvram get ${hwname}macaddr)
[ -z "$hwaddr" ] && return 1
vif=$(ifconfig -a | awk '/^eth.*'$hwaddr'/ {print $1; exit}' IGNORECASE=1)
debug "# vlan$i => $vif"
$DEBUG ifconfig $vif up
$DEBUG vconfig add $vif $i 2>&-
)
} ||
{ debug "# missing interface '$1' ignored"; false; } { debug "# missing interface '$1' ignored"; false; }
) )
do_ifup() { hotplug_dev() {
if_proto=$(nvram get ${2}_proto) env -i ACTION=$1 INTERFACE=$2 /sbin/hotplug net
if=$(nvram get ${2}_ifname)
[ "${if%%[0-9]}" = "ppp" ] && if=$(nvram get ${if_proto}_ifname)
pidfile=/var/run/${if}.pid
[ -f $pidfile ] && $DEBUG kill $(cat $pidfile)
case "$1" in
static)
ip=$(nvram get ${2}_ipaddr)
netmask=$(nvram get ${2}_netmask)
gateway=$(nvram get ${2}_gateway)
$DEBUG ifconfig $if $ip ${netmask:+netmask $netmask} broadcast + up
${gateway:+$DEBUG route add default gw $gateway}
[ -f /etc/resolv.conf ] || {
debug "# --- creating /etc/resolv.conf ---"
for dns in $(nvram get ${2}_dns); do
echo "nameserver $dns" >> /etc/resolv.conf
done
}
env -i ACTION="ifup" INTERFACE="${2}" PROTO=static /sbin/hotplug "iface" &
;;
dhcp)
DHCP_IP=$(nvram get ${2}_ipaddr)
DHCP_NETMASK=$(nvram get ${2}_netmask)
$DEBUG ifconfig $if $ip ${netmask:+netmask $netmask} broadcast + up
DHCP_ARGS="-i $if ${DHCP_IP:+-r $DHCP_IP} -b -p $pidfile"
DHCP_HOSTNAME=$(nvram get ${2}_hostname)
DHCP_HOSTNAME=${DHCP_HOSTNAME%%.*}
[ -z $DHCP_HOSTNAME ] || DHCP_ARGS="$DHCP_ARGS -H $DHCP_HOSTNAME"
[ "$if_proto" = "pptp" ] && DHCP_ARGS="$DHCP_ARGS -n -q" || DHCP_ARGS="$DHCP_ARGS -R &"
oldpid=$(cat $pidfile)
${DEBUG:-eval} "udhcpc $DHCP_ARGS"
pidof udhcpc | grep "$oldpid" >&- 2>&- && {
sleep 1
kill -9 $oldpid
}
# hotplug events are handled by /usr/share/udhcpc/default.script
;;
none|"")
;;
*)
[ -x "/sbin/ifup.$1" ] && { $DEBUG /sbin/ifup.$1 ${2}; exit; }
echo "### ifup ${2}: ignored ${2}_proto=\"$1\" (not supported)"
;;
esac
} }
bitcount () { bitcount () {

View file

@ -1,5 +0,0 @@
[ "${INTERFACE%%[0-9]*}" = "wds" ] && {
ifconfig $INTERFACE 0.0.0.0 up
/usr/sbin/brctl addif br0 $INTERFACE
}

View file

@ -0,0 +1,190 @@
#!/bin/sh
setup_eth()
{
[ -f /proc/net/wl0 ] && {
lsmod | grep wlcompat >&- || insmod wlcompat
}
iwconfig "$INTERFACE" 2>&- | grep -v 'no wireless' >&- && {
/sbin/wifi
}
if="$(echo "$INTERFACE" | sed s,eth,et,)"
ifconfig "$INTERFACE" up 2>&- >&-
for vlan in $(seq 0 15); do
[ "$(nvram get vlan${vlan}hwname)" = "$if" ] && \
$DEBUG vconfig add "$INTERFACE" "$vlan"
done
}
find_name()
{
pppoa_ifname="atm0" # hack for ppp over atm, which has no ${proto}_ifname
interfaces="lan wan wifi $(nvram get ifnames)"
for ifname in $interfaces; do
IFTYPE="${ifname}"
IFPROTO="$(nvram get ${IFTYPE}_proto)"
IFACE="$(nvram get ${IFTYPE}_ifname)"
[ -z "$IFPROTO" -o "$IFPROTO" = "none" ] || {
[ "${IFACE}" = "$INTERFACE" ] && return 0
case "$IFPROTO" in
static|dhcp)
[ "${IFACE%%[0-9]*}" = "br" ] && {
for part in $(nvram get ${IFTYPE}_ifnames); do
[ "$part" = "$INTERFACE" ] && return 0
done
}
;;
*)
[ "$(nvram get ${IFPROTO}_ifname)" = "$INTERFACE" \
-a -x /sbin/ifup.${IFPROTO} ] && return 0
;;
esac
}
done
IFACE=""
IFTYPE=""
IFPROTO=""
return 255
}
do_ifup() {
if="$3"
if_proto="$(nvram get ${2}_proto)"
pidfile=/var/run/${if}.pid
[ -f $pidfile ] && $DEBUG kill $(cat $pidfile)
case "$1" in
static)
ip=$(nvram get ${2}_ipaddr)
netmask=$(nvram get ${2}_netmask)
gateway=$(nvram get ${2}_gateway)
$DEBUG ifconfig $if $ip ${netmask:+netmask $netmask} broadcast + up
${gateway:+$DEBUG route add default gw $gateway}
[ -f /etc/resolv.conf ] || {
debug "# --- creating /etc/resolv.conf ---"
for dns in $(nvram get ${2}_dns); do
echo "nameserver $dns" >> /etc/resolv.conf
done
}
env -i ACTION="ifup" INTERFACE="${2}" PROTO=static /sbin/hotplug "iface" &
;;
dhcp)
DHCP_IP=$(nvram get ${2}_ipaddr)
DHCP_NETMASK=$(nvram get ${2}_netmask)
$DEBUG ifconfig $if $ip ${netmask:+netmask $netmask} broadcast + up
DHCP_ARGS="-i $if ${DHCP_IP:+-r $DHCP_IP} -b -p $pidfile"
DHCP_HOSTNAME=$(nvram get ${2}_hostname)
DHCP_HOSTNAME=${DHCP_HOSTNAME%%.*}
[ -z $DHCP_HOSTNAME ] || DHCP_ARGS="$DHCP_ARGS -H $DHCP_HOSTNAME"
[ "$if_proto" = "pptp" ] && DHCP_ARGS="$DHCP_ARGS -n -q" || DHCP_ARGS="$DHCP_ARGS -R &"
oldpid=$(cat $pidfile)
${DEBUG:-eval} "udhcpc $DHCP_ARGS"
pidof udhcpc | grep "$oldpid" >&- 2>&- && {
sleep 1
kill -9 $oldpid
}
# hotplug events are handled by /usr/share/udhcpc/default.script
;;
*)
if [ -x "/sbin/ifup.$1" ]; then
( $DEBUG . /sbin/ifup.$1 ${2} $3 )
fi
;;
esac
}
do_register()
{
case "${INTERFACE%%[0-9]*}" in
eth) setup_eth;;
esac
[ -z "$IFTYPE" -o -z "$IFPROTO" ] && {
find_name || {
case "${INTERFACE%%[0-9]*}" in
wds)
for tmp in lan wifi; do
[ -z "$IFPROTO" ] && [ "$(nvram get ${tmp}_ifname)" = "br0" ] && {
IFPROTO="$(nvram get ${tmp}_proto)"
IFTYPE="${tmp}"
}
done
[ -z "$IFPROTO" ] && return 0
;;
atm)
for tmp in lan wan wifi $(nvram get ifnames); do
[ "$(nvram get ${tmp}_proto)" = "pppoa" ] && {
do_ifup "pppoa" "$tmp" "$INTERFACE"
return 0
}
done
;;
*)
return 0
;;
esac
}
}
case "${INTERFACE%%[0-9]*}" in
ppp|atm);;
*)
mac=$(nvram get ${IFTYPE}_hwaddr)
${mac:+$DEBUG ifconfig $INTERFACE down hw ether $mac}
;;
esac
if="$(nvram get ${IFTYPE}_ifname)"
if [ "${if%%[0-9]}" = "br" ]; then
if_valid "$INTERFACE" && {
ifconfig "$if" 2>&- >&- || {
stp=$(nvram get ${IFTYPE}_stp)
$DEBUG brctl addbr "$if"
$DEBUG brctl setfd "$if" 0
$DEBUG brctl stp "$if" "${stp:-0}"
}
if [ "$INTERFACE" != "$if" ]; then
$DEBUG ifconfig "$INTERFACE" 0.0.0.0 up
brctl addif "$if" "$INTERFACE"
else
do_ifup "$IFPROTO" "$IFTYPE" "$if"
fi
}
else
do_ifup "$IFPROTO" "$IFTYPE" "$if"
fi
}
do_unregister() {
[ "${INTERFACE%%[0-9]*}" = "atm" ] || ifconfig "$INTERFACE" 0.0.0.0 down 2>&-
[ -z "$IFTYPE" -o -z "$IFPROTO" ] && find_name
[ -z "$IFTYPE" -o -z "$IFPROTO" ] && return 0
[ "${IFACE%%[0-9]*}" = "br" ] && {
if [ "$INTERFACE" != "$IFACE" ]; then
brctl delif "$IFACE" "$INTERFACE" 2>&- >&-
else
brctl delbr "$IFACE" 2>&- >&-
fi
}
case "$IFPROTO" in
pppoe|pppoa|pptp)
killall ifup.${IFPROTO}
killall pppd
;;
dhcp)
[ -f /var/run/${INTERFACE}.pid ] && kill "$(cat /var/run/${INTERFACE}.pid)" 2>&- >&-
;;
esac
}
case "$ACTION" in
register) do_register;;
unregister) do_unregister;;
esac

View file

@ -5,10 +5,22 @@
echo "S" > /proc/jffs2_bbc echo "S" > /proc/jffs2_bbc
} }
vconfig set_name_type VLAN_PLUS_VID_NO_PAD
HOSTNAME=$(nvram get wan_hostname)
HOSTNAME=${HOSTNAME%%.*}
echo ${HOSTNAME:=OpenWrt}>/proc/sys/kernel/hostname
# automagically run firstboot
[ -z "$FAILSAFE" -a -z "$(nvram get no_root_swap)" ] && {
{ mount|grep "on / type jffs2" 1>&-; } || firstboot
}
mkdir -p /var/run mkdir -p /var/run
mkdir -p /var/log mkdir -p /var/log
touch /var/log/wtmp touch /var/log/wtmp
touch /var/log/lastlog touch /var/log/lastlog
[ "$FAILSAFE" = "true" ] && touch /tmp/.failsafe
sed 's/^[^#]/insmod &/' /etc/modules /etc/modules.d/* 2>&-|ash sed 's/^[^#]/insmod &/' /etc/modules /etc/modules.d/* 2>&-|ash
@ -20,13 +32,4 @@ ifconfig eth0 promisc
robocfg show robocfg show
} }
HOSTNAME=$(nvram get wan_hostname)
HOSTNAME=${HOSTNAME%%.*}
echo ${HOSTNAME:=OpenWrt}>/proc/sys/kernel/hostname
vconfig set_name_type VLAN_PLUS_VID_NO_PAD
# automagically run firstboot
[ -z "$FAILSAFE" -a -z "$(nvram get no_root_swap)" ] && {
{ mount|grep "on / type jffs2" 1>&-; } || firstboot
}

View file

@ -3,10 +3,10 @@
[ "$FAILSAFE" != "true" -a -e /etc/config/network ] && . /etc/config/network [ "$FAILSAFE" != "true" -a -e /etc/config/network ] && . /etc/config/network
case "$1" in case "$1" in
start|restart) start|restart)
ifup lan # ifup lan
ifup wan # ifup wan
ifup wifi # ifup wifi
wifi up # wifi up
for route in $(nvram get static_route); do { for route in $(nvram get static_route); do {
eval "set $(echo $route | sed 's/:/ /g')" eval "set $(echo $route | sed 's/:/ /g')"

View file

@ -4,8 +4,8 @@
nvram () { nvram () {
if [ -x /usr/sbin/nvram ]; then if [ -x /usr/sbin/nvram ]; then
case $1 in case $1 in
get) eval "echo \${$2:-\$(command nvram get $2)}";; get) eval "echo \${$2:-\$(/usr/sbin/nvram get $2)}";;
*) command nvram $*;; *) /usr/sbin/nvram $*;;
esac esac
else else
case $1 in case $1 in

View file

@ -1,7 +1,11 @@
#!/bin/sh #!/bin/sh
[ -e /tmp/.failsafe ] && {
export FAILSAFE=true
} || {
[ -e /etc/config/network ] && . /etc/config/network
}
. /etc/functions.sh . /etc/functions.sh
. /etc/network.overrides . /etc/network.overrides
[ "$FAILSAFE" != "true" -a -e /etc/config/network ] && . /etc/config/network
PATH=/bin:/sbin:/usr/bin:/usr/sbin PATH=/bin:/sbin:/usr/bin:/usr/sbin
LOGNAME=root LOGNAME=root

View file

@ -4,16 +4,26 @@
. /etc/network.overrides . /etc/network.overrides
[ "$FAILSAFE" != "true" -a -e /etc/config/network ] && . /etc/config/network [ "$FAILSAFE" != "true" -a -e /etc/config/network ] && . /etc/config/network
type=$1
debug "### ifdown $type ###" debug "### ifdown $type ###"
type=$1
if_proto=$(nvram get ${type}_proto)
if=$(nvram get ${type}_ifname) if=$(nvram get ${type}_ifname)
proto=$(nvram get ${type}_proto)
if_valid $if && $DEBUG ifconfig $if down case "$if_proto" in
kill $(cat /var/run/${if}.pid 2>&-) 2>&- pppoa) hotplug_dev unregister atm0; exit 0 ;;
killall ifup.$proto >&- 2>&- pppoe)
case "$proto" in [ "$(nvram get pppoe_atm)" = 1 ] && {
pptp|pppoe) killall pppd >&- 2>&- ;; hotplug_dev unregister atm0
static) env -i ACTION="ifdown" INTERFACE="$if" PROTO=static /sbin/hotplug "iface" ;; exit
}
;;
esac esac
if [ "${if%%[0-9]}" = "br" ]; then
for sif in $(nvram get ${type}_ifnames); do
hotplug_dev unregister "$sif"
done
fi
hotplug_dev unregister "$if"

View file

@ -1,36 +1,31 @@
#!/bin/ash #!/bin/sh
[ $# = 0 ] && { echo " $0 <group>"; exit; } [ $# = 0 ] && { echo " $0 <group>"; exit; }
. /etc/functions.sh . /etc/functions.sh
. /etc/network.overrides . /etc/network.overrides
[ "$FAILSAFE" != "true" -a -e /etc/config/network ] && . /etc/config/network [ "$FAILSAFE" != "true" -a -e /etc/config/network ] && . /etc/config/network
type=$1 ifdown $1
debug "### ifup $type ###" debug "### ifup $type ###"
type=$1
if_proto=$(nvram get ${type}_proto) if_proto=$(nvram get ${type}_proto)
if=$(nvram get ${type}_ifname) if=$(nvram get ${type}_ifname)
[ "${if%%[0-9]}" = "ppp" ] && if=$(nvram get ${if_proto}_ifname)
if_valid $if || [ "$if_proto" = "pptp" ] || exit case "$if_proto" in
mac=$(nvram get ${type}_hwaddr) pppoa) hotplug_dev register atm0; exit 0 ;;
$DEBUG ifconfig $if down 2>&- pppoe)
[ "$(nvram get pppoe_atm)" = 1 ] && {
hotplug_dev register atm0
exit
}
;;
esac
if [ "${if%%[0-9]}" = "br" ]; then if [ "${if%%[0-9]}" = "br" ]; then
stp=$(nvram get ${type}_stp)
$DEBUG brctl delbr $if 2>&-
$DEBUG brctl addbr $if
$DEBUG brctl setfd $if 0
$DEBUG brctl stp $if ${stp:-0}
for sif in $(nvram get ${type}_ifnames); do for sif in $(nvram get ${type}_ifnames); do
if_valid $sif || continue hotplug_dev register "$sif"
${mac:+$DEBUG ifconfig $sif down hw ether $mac}
$DEBUG ifconfig $sif 0.0.0.0 up
$DEBUG brctl addif $if $sif
done done
else else
${mac:+$DEBUG ifconfig $if down hw ether $mac} hotplug_dev register "$if"
fi fi
do_ifup $if_proto $type

View file

@ -63,8 +63,8 @@ $(IPKG_LINUX_ATM):
$(IPKG_BR2684CTL): $(IPKG_BR2684CTL):
install -d -m0755 $(IDIR_BR2684CTL)/usr/sbin install -d -m0755 $(IDIR_BR2684CTL)/usr/sbin
cp -fpR $(PKG_INSTALL_DIR)/usr/sbin/br2684ctl $(IDIR_BR2684CTL)/usr/sbin/ cp -fpR $(PKG_INSTALL_DIR)/usr/sbin/br2684ctl $(IDIR_BR2684CTL)/usr/sbin/
install -d -m0755 $(IDIR_BR2684CTL)/etc/init.d install -d -m0755 $(IDIR_BR2684CTL)/etc/hotplug.d/net
install -m0755 ./files/br2684.init $(IDIR_BR2684CTL)/etc/init.d/S30br2684 install -m0644 ./files/br2684.init $(IDIR_BR2684CTL)/etc/hotplug.d/net/30-br2684
$(RSTRIP) $(IDIR_BR2684CTL)/ $(RSTRIP) $(IDIR_BR2684CTL)/
$(IPKG_BUILD) $(IDIR_BR2684CTL) $(PACKAGE_DIR) $(IPKG_BUILD) $(IDIR_BR2684CTL) $(PACKAGE_DIR)

View file

@ -1,22 +1,21 @@
#!/bin/sh [ "${INTERFACE%%[0-9]*}" = "atm" ] && {
. /etc/functions.sh case "$ACTION" in
[ -e /etc/config/network ] && . /etc/config/network register)
killall br2684ctl 2>&- >&-
[ "$(nvram get pppoe_atm)" = 1 ] && { [ "$(nvram get pppoe_atm)" = 1 ] && {
VPI=$(nvram get atm_vpi) VPI=$(nvram get atm_vpi)
VCI=$(nvram get atm_vci) VCI=$(nvram get atm_vci)
case "$(nvram get atm_encaps)" in case "$(nvram get atm_encaps)" in
0|vc) 0|vc) ENCAPS=0 ;;
ENCAPS=0 1|llc) ENCAPS=1 ;;
;; *) ENCAPS=0 ;;
1|llc)
ENCAPS=1
;;
*)
ENCAPS=0
;;
esac esac
insmod br2684 insmod br2684 2>&- >&-
br2684ctl -c0 -e${ENCAPS} -a${VPI:-8}.${VCI:-35} & br2684ctl -c0 -e${ENCAPS} -a${VPI:-8}.${VCI:-35} &
} }
;;
unregister)
killall br2684ctl 2>&- >&-
rmmod br2684
;;
esac
}

View file

@ -14,7 +14,6 @@ for module in slhc ppp_generic pppoatm; do
/sbin/insmod $module 2>&- >&- /sbin/insmod $module 2>&- >&-
done done
while :; do
VPI=$(nvram get atm_vpi) VPI=$(nvram get atm_vpi)
VCI=$(nvram get atm_vci) VCI=$(nvram get atm_vci)
USERNAME=$(nvram get ppp_username) USERNAME=$(nvram get ppp_username)
@ -27,7 +26,7 @@ while :; do
DEMAND=$(nvram get ppp_idletime) DEMAND=$(nvram get ppp_idletime)
DEMAND=${IDLETIME:+demand idle $IDLETIME} DEMAND=${IDLETIME:+demand idle $IDLETIME}
;; ;;
*) DEMAND="";; *) DEMAND="persist";;
esac esac
MTU=$(nvram get ppp_mtu) MTU=$(nvram get ppp_mtu)
MTU=${MTU:-1500} MTU=${MTU:-1500}
@ -43,7 +42,3 @@ while :; do
mtu $MTU mru $MTU \ mtu $MTU mru $MTU \
$DEMAND \ $DEMAND \
$KEEPALIVE $KEEPALIVE
# Read settings again (might have changed)
[ -e /etc/config/network ] && . /etc/config/network
done &

View file

@ -14,7 +14,6 @@ for module in slhc ppp_generic pppox pppoe; do
/sbin/insmod $module 2>&- >&- /sbin/insmod $module 2>&- >&-
done done
while :; do
IFNAME=$(nvram get pppoe_ifname) IFNAME=$(nvram get pppoe_ifname)
USERNAME=$(nvram get ppp_username) USERNAME=$(nvram get ppp_username)
PASSWORD=$(nvram get ppp_passwd) PASSWORD=$(nvram get ppp_passwd)
@ -26,7 +25,7 @@ while :; do
DEMAND=$(nvram get ppp_idletime) DEMAND=$(nvram get ppp_idletime)
DEMAND=${IDLETIME:+demand idle $IDLETIME} DEMAND=${IDLETIME:+demand idle $IDLETIME}
;; ;;
*) DEMAND="";; *) DEMAND="persist";;
esac esac
MTU=$(nvram get ppp_mtu) MTU=$(nvram get ppp_mtu)
MTU=${MTU:-1492} MTU=${MTU:-1492}
@ -46,6 +45,3 @@ while :; do
$KEEPALIVE \ $KEEPALIVE \
nic-$IFNAME nic-$IFNAME
# Read settings again (might have changed)
[ -e /etc/config/network ] && . /etc/config/network
done &

View file

@ -10,7 +10,6 @@ for module in slhc ppp_generic ppp_async ip_gre; do
/sbin/insmod $module 2>&- >&- /sbin/insmod $module 2>&- >&-
done done
while :; do
PPTP_PROTO="$(nvram get pptp_proto)" PPTP_PROTO="$(nvram get pptp_proto)"
[ "$PPTP_PROTO" = "static" ] || PPTP_PROTO="" [ "$PPTP_PROTO" = "static" ] || PPTP_PROTO=""
PPTP_PROTO="${PPTP_PROTO:-dhcp}" PPTP_PROTO="${PPTP_PROTO:-dhcp}"
@ -25,7 +24,7 @@ while :; do
DEMAND=$(nvram get ppp_idletime) DEMAND=$(nvram get ppp_idletime)
DEMAND=${IDLETIME:+demand idle $IDLETIME} DEMAND=${IDLETIME:+demand idle $IDLETIME}
;; ;;
*) DEMAND="";; *) DEMAND="persist";;
esac esac
MTU=$(nvram get ppp_mtu) MTU=$(nvram get ppp_mtu)
MTU=${MTU:-1452} MTU=${MTU:-1452}
@ -51,5 +50,4 @@ while :; do
mtu $MTU mru $MTU \ mtu $MTU mru $MTU \
$DEMAND \ $DEMAND \
$KEEPALIVE $KEEPALIVE
done &