1
0
mirror of git://projects.qi-hardware.com/openwrt-xburst.git synced 2024-12-25 11:55:30 +02:00

hotplug-based network script rewrite

git-svn-id: svn://svn.openwrt.org/openwrt/trunk/openwrt@2531 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
nbd 2005-11-19 03:17:20 +00:00
parent 9a0bc232a3
commit 2af90479fb
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/tmp
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
alias debug=${DEBUG:-:}
@ -7,74 +7,11 @@ alias debug=${DEBUG:-:}
if_valid () (
ifconfig "$1" >&- 2>&- ||
[ "${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; }
)
do_ifup() {
if_proto=$(nvram get ${2}_proto)
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
hotplug_dev() {
env -i ACTION=$1 INTERFACE=$2 /sbin/hotplug net
}
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
}
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/log
touch /var/log/wtmp
touch /var/log/lastlog
[ "$FAILSAFE" = "true" ] && touch /tmp/.failsafe
sed 's/^[^#]/insmod &/' /etc/modules /etc/modules.d/* 2>&-|ash
@ -20,13 +32,4 @@ ifconfig eth0 promisc
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
case "$1" in
start|restart)
ifup lan
ifup wan
ifup wifi
wifi up
# ifup lan
# ifup wan
# ifup wifi
# wifi up
for route in $(nvram get static_route); do {
eval "set $(echo $route | sed 's/:/ /g')"

View File

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

View File

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

View File

@ -4,16 +4,26 @@
. /etc/network.overrides
[ "$FAILSAFE" != "true" -a -e /etc/config/network ] && . /etc/config/network
type=$1
debug "### ifdown $type ###"
type=$1
if_proto=$(nvram get ${type}_proto)
if=$(nvram get ${type}_ifname)
proto=$(nvram get ${type}_proto)
if_valid $if && $DEBUG ifconfig $if down
kill $(cat /var/run/${if}.pid 2>&-) 2>&-
killall ifup.$proto >&- 2>&-
case "$proto" in
pptp|pppoe) killall pppd >&- 2>&- ;;
static) env -i ACTION="ifdown" INTERFACE="$if" PROTO=static /sbin/hotplug "iface" ;;
case "$if_proto" in
pppoa) hotplug_dev unregister atm0; exit 0 ;;
pppoe)
[ "$(nvram get pppoe_atm)" = 1 ] && {
hotplug_dev unregister atm0
exit
}
;;
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; }
. /etc/functions.sh
. /etc/network.overrides
[ "$FAILSAFE" != "true" -a -e /etc/config/network ] && . /etc/config/network
type=$1
ifdown $1
debug "### ifup $type ###"
type=$1
if_proto=$(nvram get ${type}_proto)
if=$(nvram get ${type}_ifname)
[ "${if%%[0-9]}" = "ppp" ] && if=$(nvram get ${if_proto}_ifname)
if_valid $if || [ "$if_proto" = "pptp" ] || exit
mac=$(nvram get ${type}_hwaddr)
$DEBUG ifconfig $if down 2>&-
case "$if_proto" in
pppoa) hotplug_dev register atm0; exit 0 ;;
pppoe)
[ "$(nvram get pppoe_atm)" = 1 ] && {
hotplug_dev register atm0
exit
}
;;
esac
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
if_valid $sif || continue
${mac:+$DEBUG ifconfig $sif down hw ether $mac}
$DEBUG ifconfig $sif 0.0.0.0 up
$DEBUG brctl addif $if $sif
hotplug_dev register "$sif"
done
else
${mac:+$DEBUG ifconfig $if down hw ether $mac}
hotplug_dev register "$if"
fi
do_ifup $if_proto $type

View File

@ -63,8 +63,8 @@ $(IPKG_LINUX_ATM):
$(IPKG_BR2684CTL):
install -d -m0755 $(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 -m0755 ./files/br2684.init $(IDIR_BR2684CTL)/etc/init.d/S30br2684
install -d -m0755 $(IDIR_BR2684CTL)/etc/hotplug.d/net
install -m0644 ./files/br2684.init $(IDIR_BR2684CTL)/etc/hotplug.d/net/30-br2684
$(RSTRIP) $(IDIR_BR2684CTL)/
$(IPKG_BUILD) $(IDIR_BR2684CTL) $(PACKAGE_DIR)

View File

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

View File

@ -14,25 +14,24 @@ for module in slhc ppp_generic pppoatm; do
/sbin/insmod $module 2>&- >&-
done
while :; do
VPI=$(nvram get atm_vpi)
VCI=$(nvram get atm_vci)
USERNAME=$(nvram get ppp_username)
PASSWORD=$(nvram get ppp_passwd)
KEEPALIVE=$(nvram get ppp_redialperiod)
KEEPALIVE=${KEEPALIVE:+lcp-echo-interval 10 lcp-echo-failure $KEEPALIVE}
DEMAND=$(nvram get ppp_demand)
case "$DEMAND" in
VPI=$(nvram get atm_vpi)
VCI=$(nvram get atm_vci)
USERNAME=$(nvram get ppp_username)
PASSWORD=$(nvram get ppp_passwd)
KEEPALIVE=$(nvram get ppp_redialperiod)
KEEPALIVE=${KEEPALIVE:+lcp-echo-interval 10 lcp-echo-failure $KEEPALIVE}
DEMAND=$(nvram get ppp_demand)
case "$DEMAND" in
on|1|enabled)
DEMAND=$(nvram get ppp_idletime)
DEMAND=${IDLETIME:+demand idle $IDLETIME}
;;
*) DEMAND="";;
esac
MTU=$(nvram get ppp_mtu)
MTU=${MTU:-1500}
*) DEMAND="persist";;
esac
MTU=$(nvram get ppp_mtu)
MTU=${MTU:-1500}
/usr/sbin/pppd nodetach \
/usr/sbin/pppd nodetach \
plugin pppoatm.so ${VPI:-8}.${VCI:-35} \
usepeerdns \
defaultroute \
@ -43,7 +42,3 @@ while :; do
mtu $MTU mru $MTU \
$DEMAND \
$KEEPALIVE
# Read settings again (might have changed)
[ -e /etc/config/network ] && . /etc/config/network
done &

View File

@ -14,25 +14,24 @@ for module in slhc ppp_generic pppox pppoe; do
/sbin/insmod $module 2>&- >&-
done
while :; do
IFNAME=$(nvram get pppoe_ifname)
USERNAME=$(nvram get ppp_username)
PASSWORD=$(nvram get ppp_passwd)
KEEPALIVE=$(nvram get ppp_redialperiod)
KEEPALIVE=${KEEPALIVE:+lcp-echo-interval 10 lcp-echo-failure $KEEPALIVE}
DEMAND=$(nvram get ppp_demand)
case "$DEMAND" in
IFNAME=$(nvram get pppoe_ifname)
USERNAME=$(nvram get ppp_username)
PASSWORD=$(nvram get ppp_passwd)
KEEPALIVE=$(nvram get ppp_redialperiod)
KEEPALIVE=${KEEPALIVE:+lcp-echo-interval 10 lcp-echo-failure $KEEPALIVE}
DEMAND=$(nvram get ppp_demand)
case "$DEMAND" in
on|1|enabled)
DEMAND=$(nvram get ppp_idletime)
DEMAND=${IDLETIME:+demand idle $IDLETIME}
;;
*) DEMAND="";;
esac
MTU=$(nvram get ppp_mtu)
MTU=${MTU:-1492}
*) DEMAND="persist";;
esac
MTU=$(nvram get ppp_mtu)
MTU=${MTU:-1492}
ifconfig $IFNAME up
/usr/sbin/pppd nodetach \
ifconfig $IFNAME up
/usr/sbin/pppd nodetach \
plugin rp-pppoe.so \
connect /bin/true \
usepeerdns \
@ -46,6 +45,3 @@ while :; do
$KEEPALIVE \
nic-$IFNAME
# Read settings again (might have changed)
[ -e /etc/config/network ] && . /etc/config/network
done &

View File

@ -10,34 +10,33 @@ for module in slhc ppp_generic ppp_async ip_gre; do
/sbin/insmod $module 2>&- >&-
done
while :; do
PPTP_PROTO="$(nvram get pptp_proto)"
[ "$PPTP_PROTO" = "static" ] || PPTP_PROTO=""
PPTP_PROTO="${PPTP_PROTO:-dhcp}"
IP=$(nvram get pptp_server_ip)
USERNAME=$(nvram get ppp_username)
PASSWORD=$(nvram get ppp_passwd)
KEEPALIVE=$(nvram get ppp_redialperiod)
KEEPALIVE=${KEEPALIVE:+lcp-echo-interval 10 lcp-echo-failure $KEEPALIVE}
DEMAND=$(nvram get ppp_demand)
case "$DEMAND" in
PPTP_PROTO="$(nvram get pptp_proto)"
[ "$PPTP_PROTO" = "static" ] || PPTP_PROTO=""
PPTP_PROTO="${PPTP_PROTO:-dhcp}"
IP=$(nvram get pptp_server_ip)
USERNAME=$(nvram get ppp_username)
PASSWORD=$(nvram get ppp_passwd)
KEEPALIVE=$(nvram get ppp_redialperiod)
KEEPALIVE=${KEEPALIVE:+lcp-echo-interval 10 lcp-echo-failure $KEEPALIVE}
DEMAND=$(nvram get ppp_demand)
case "$DEMAND" in
on|1|enabled)
DEMAND=$(nvram get ppp_idletime)
DEMAND=${IDLETIME:+demand idle $IDLETIME}
;;
*) DEMAND="";;
esac
MTU=$(nvram get ppp_mtu)
MTU=${MTU:-1452}
*) DEMAND="persist";;
esac
MTU=$(nvram get ppp_mtu)
MTU=${MTU:-1452}
do_ifup $PPTP_PROTO $type
do_ifup $PPTP_PROTO $type
# hack for some buggy ISPs
NETMASK=$(nvram get ${type}_netmask)
IFNAME=$(nvram get pptp_ifname)
[ -z "$NETMASK" -o -z "$IFNAME" ] || ifconfig $IFNAME netmask $NETMASK
# hack for some buggy ISPs
NETMASK=$(nvram get ${type}_netmask)
IFNAME=$(nvram get pptp_ifname)
[ -z "$NETMASK" -o -z "$IFNAME" ] || ifconfig $IFNAME netmask $NETMASK
/usr/sbin/pppd nodetach \
/usr/sbin/pppd nodetach \
pty "/usr/sbin/pptp $IP --loglevel 0 --nolaunchpppd" \
file /etc/ppp/options.pptp \
connect /bin/true \
@ -51,5 +50,4 @@ while :; do
mtu $MTU mru $MTU \
$DEMAND \
$KEEPALIVE
done &