allow other values than 'dhcp' for *_proto so that you can work around the linksys...
[openwrt/svn-archive/archive.git] / openwrt / package / base-files / default / etc / init.d / S05nvram
index debf839b0298d8f5e7576f4fcae55fcdaa10957d..67ed1f27d60137ec230d05bc854a8064eddac0b4 100755 (executable)
@@ -3,7 +3,6 @@
 #
 # This file handles the NVRAM quirks of various hardware.
 
-. /etc/nvram.overrides
 alias debug=${DEBUG:-:}
 
 remap () {
@@ -27,17 +26,23 @@ nvram_set() { # for the linksys fixup part
        }
 }
 
+fixup_lan() { # fix for wrong lan_ifnames default
+       lan_ifnames="$(nvram get lan_ifnames)"
+       [ "${lan_ifnames%% *}" = "$1" ] || \
+               nvram set lan_ifnames="$2"
+}
+
 # work around braindead CFE defaults in linksys routers
 boardtype=$(nvram get boardtype)
+boardnum=$(nvram get boardnum)
 boardflags=$(($(nvram get boardflags)))
-[ "$boardtype" = "bcm4710dev" ] && boardtype="0xdeadbeef"
 adm_switch="$(( ($boardflags & 0x80) >> 7 ))"
+
 case "$(( $boardtype ))" in
-       "$((0x708))")
+       "1800") #0x708
                if [ "$adm_switch" = 0 ]; then
                        nvram_set sdram_init "$(printf 0x%04x $(( $(/usr/sbin/nvram get sdram_init) | 0x0100 )))"
                        [ "$COMMIT" = 1 ] && {
-                               nvram_set sdram_config 0x0062
                                nvram_set clkfreq 216
                                nvram_set sdram_ncdl 0x0
                                nvram_set pa0itssit 62
@@ -48,10 +53,9 @@ case "$(( $boardtype ))" in
                        }
                fi
        ;;
-       "$((0x467))")
+       "1127") #0x467
                nvram_set sdram_init "$(printf 0x%04x $(( $(/usr/sbin/nvram get sdram_init) | 0x0100 )))"
                [ "$COMMIT" = 1 ] && {
-                       nvram_set sdram_config 0x0062
                        nvram_set sdram_ncdl 0x0
                        nvram_set pa0itssit 62
                        nvram_set pa0b0 0x168b
@@ -63,28 +67,29 @@ case "$(( $boardtype ))" in
 esac
 [ "$COMMIT" = "1" ] && nvram commit
 
-
-# linksys bug; remove when not using static configuration for lan
-nvram set lan_proto="static"
+# linksys bug; use 'dhcpclient' or similar as lan_proto if you want to use dhcp
+[ "$(nvram get lan_proto)" = "dhcp" ] && nvram set lan_proto="static"
 
 # hacks for wrt54g 1.x hardware
-[  "$(nvram get boardnum)"  = "42" \
--a "$(nvram get boardtype)" = "bcm94710dev" ] && {
+[  "$boardnum"  = "42" \
+-a "$boardtype" = "bcm94710dev" ] && {
        debug "### wrt54g 1.x hack ###"
-       nvram set vlan1hwname="et0"
-       nvram set vlan2hwname="et0"
        remap eth0 vlan2
        remap eth1 vlan1
+       nvram_default vlan1hwname "et0"
+       nvram_default vlan2hwname "et0"
+       nvram_default lan_ifnames "vlan2 eth2"
 }
 
 # hacks for asus wl-500g deluxe
-[  "$(nvram get boardtype)" = "bcm95365r" \
--a "$(nvram get boardnum)" = "45" ] && {
+[  "$boardnum"  = "45" \
+-a "$boardtype" = "bcm95365r" ] && {
        debug "### wl-500g deluxe hacks ###"
-       nvram set vlan0hwname="et0"
-       nvram set vlan1hwname="et0"
        remap eth0.1 vlan0
        remap eth0 vlan1
+       nvram_default vlan0hwname "et0"
+       nvram_default vlan1hwname "et0"
+       nvram_default lan_ifnames "vlan0 eth1"
 
        # set up the vlan*ports variables for the asus wl-500g deluxe
        # if they don't already exist 
@@ -93,33 +98,48 @@ nvram set lan_proto="static"
 }
 
 # hacks for asus
-case "$(nvram get productid)" in 
-       WL300g)
-               debug "### wl-300g hacks ###"
-               nvram set lan_ifnames="eth0 eth2"
-               nvram set wan_ifname="none"
-       ;;
-       WLHDD)
-               debug "### wl-hdd hacks ###"
-               nvram set lan_ifnames="eth1 eth2"
-               nvram set wan_ifname="none"
-       ;;
-esac
+[ "$boardnum" = "asusX" ] && {
+       debug "### asus hacks ###"
+       case "$(($(nvram get et1phyaddr)))" in
+               1) # WL-HDD
+                       lan=eth1
+                       wan=none
+               ;;
+               *)
+                       lan=eth0
+                       [ "$boardtype" = "bcm94710dev" ] && wan=eth1 || wan=none
+               ;;
+       esac
+
+       fixup_lan "$lan" "$lan eth2"
+       nvram_default wan_ifname "$wan"
+}
 
 # hacks for wap54g hardware
-[  "$(nvram get boardnum)" = "2" \
--o "$(nvram get boardnum)" = "1024" ] && {
+[  "$boardnum" = "2" \
+-o "$boardnum" = "1024" ] && {
        debug "### wap54g hack ###"
-       nvram set wan_ifname="none"
+       nvram_default wan_ifname "none"
+       nvram_default lan_ifnames "eth0 eth1"
 }
 
 # hacks for buffalo wla2-g54l
-[  "$(nvram get boardnum)" = "00" \
--a "$(nvram get product_name)" = "Product_name" \
--o "$(nvram get product_name)" = "WLA2-G54L" ] && {
+[  "$boardnum" = "00" \
+-a "$product_name" = "Product_name" \
+-o "$product_name" = "WLA2-G54L" ] && {
        debug "### wla2-g54l hacks ###"
-       nvram set wan_ifname="none"
-       nvram set lan_ifnames="vlan0"
+       nvram_default wan_ifname "none"
+       fixup_lan "vlan0" "vlan0 eth1"
+}
+
+# wrtsl54gs vlan defaults
+[  "$boardtype" = "0x042f" \
+-a "$boardnum" = "42" \
+-a "$boardflags" = "24" ] && {
+       nvram_default vlan0hwname "et0"
+       nvram_default vlan0ports "0 1 2 3 5u"
+       nvram_default vlan1hwname "et0"
+       nvram_default vlan1ports "4 5"
 }
 
 # needed at least for wrt54gs v1.1 and wrt54g v2.0, v2.2
@@ -127,21 +147,15 @@ esac
        nvram_default wl0id 0x4320
 }
 
-WAN_PROTO="$(nvram get wan_proto)"
-[  "$WAN_PROTO" = "pptp" \
--o "$WAN_PROTO" = "pppoe" ] && {
-       WAN_IFNAME="$(nvram get wan_ifname)"
-       [ "${WAN_IFNAME%%[0-9]*}" = "ppp" ] || {
-               nvram set wan_ifname=ppp0
-               nvram set ${WAN_PROTO}_ifname="$WAN_IFNAME"
-       }
-}
+# hack for some motorola routers
+nvram unset wl0gpio0
 
-# defaults
+# defaults, can be overridden by hardware-specific nvram_default commands
 nvram_default lan_ifname "br0"
-nvram_default lan_ifnames "$FAILSAFE_ifnames"
+nvram_default lan_ifnames "vlan0 eth1 eth2"
 
 nvram_default wan_ifname "vlan1"
+nvram_default wan_device "vlan1"
 nvram_default wan_proto "dhcp"
 
 nvram_default wl0_ssid OpenWrt
@@ -149,9 +163,15 @@ nvram_default wl0_mode ap
 nvram_default wl0_infra 1
 nvram_default wl0_radio 1
 
+WAN_PROTO="$(nvram get wan_proto)"
+WAN_IFNAME="$(nvram get wan_ifname)"
+case "$WAN_PROTO" in
+       pp*) [ "${WAN_IFNAME%%[0-9]*}" = "ppp" ] || nvram set wan_ifname=ppp0;;
+       *) [ "${WAN_IFNAME%%[0-9]*}" = "ppp" ] && nvram set wan_ifname="$(nvram get wan_device)";;
+esac
+
 [ "$(nvram get il0macaddr)" = "00:90:4c:5f:00:2a" ] && {
        # if default wifi mac, set two higher than the lan mac
        nvram set il0macaddr=$(nvram get et0macaddr|
        awk '{OFS=FS=":";for(x=7,y=2;--x;){$x=sprintf("%02x",(y+="0x"$x)%256);y/=256}print}')
 }
-