openwrt/target/linux/brcm47xx/base-files/etc/init.d/netconfig
Hauke Mehrtens 6f417d5b4b brcm47xx: fix special board handling for some devices
Some devices were renamed when converted from diag to in kernel board detection and it was not changed in netconfig. Devices not in the
kernel board detection are removed now.

This should close: #17111, #16968, #13202

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>

SVN-Revision: 41663
2014-07-14 22:16:19 +00:00

241 lines
6.7 KiB
Bash
Executable File

#!/bin/sh /etc/rc.common
# Copyright (C) 2006 OpenWrt.org
START=05
start() {
[ -e /etc/config/network ] && {
local batch
config_cb() {
case "$1" in
switch)
option_cb() {
case "$1" in
vlan[0-9]|vlan1[0-5])
local id="${1#vlan}"
local ports="${2%\*}"
append batch "delete network.eth0.${1}${N}"
append batch "set network.eth0_${id}=switch_vlan${N}"
append batch "set network.eth0_${id}.device=eth0${N}"
append batch "set network.eth0_${id}.vlan=${id}${N}"
append batch "set network.eth0_${id}.ports='${ports}'${N}"
;;
esac
}
;;
switch_vlan)
option_cb() { :; }
batch=""
;;
esac
}
config_load network
[ -n "$batch" ] && {
logger -t netconfig "migrating switch config to new format ..."
echo "$batch${N}commit network" | uci batch
}
exit 0
}
mkdir -p /etc/config
local cpuport=5
[ -e /sbin/swconfig ] && cpuport=$(swconfig dev switch0 help 2>/dev/null | sed -ne "s|.*cpu @ \([0-9]*\).*|\1|p")
local switchname=eth0
[ -e /sbin/swconfig ] && switchname=$(swconfig dev switch0 help 2>/dev/null | sed -ne "s|switch0: \([^\\\\(]*\).*|\1|p")
local model=$(awk 'BEGIN{FS="[ \t]+:[ \t]"} /machine/ {print $2}' /proc/cpuinfo)
local network_defs=`(
if grep -E 'mtd0: 000(6|a)0000' /proc/mtd 2>&- >&-; then
# WGT634u
echo boardtype=wgt634u
else
strings "$(find_mtd_part nvram)"
fi
) | awk -v cpuport="$cpuport" -v model="$model" '
function macinc(mac, maca, i, result) {
split(mac, maca, ":")
for (i = 1; i <= 6; i++) maca[i] = "0x" maca[i]
if (++maca[6] > 0xff) {
maca[5]++
maca[6] = 0
}
for (i = 1; i <= 6; i++) {
if (i != 1) result = result ":"
result = result sprintf("%02x", maca[i])
}
return result
}
BEGIN {
FS="="
c["lan_ifname"]="eth0.1"
c["wan_ifname"]="eth0.2"
c["vlan1ports"]="1 2 3 4 5t"
c["vlan2ports"]="0 5t"
for (i = 0; i < 6; i++) {
if (mac_check != "") mac_check = mac_check ":"
mac_check = mac_check "[0-9a-fA-F][0-9a-fA-F]"
}
if (cpuport == "8") {
c["vlan1ports"]="1 2 3 4 8t"
c["vlan2ports"]="0 8t"
}
}
($1 == "boardnum") || ($1 == "boardtype") || ($1 == "boardflags") || ($1 ~ /macaddr/) || \
($1 ~ /^vlan[0-9]{1,2}ports$/) {
nvram[$1] = $2
}
END {
if (((nvram["vlan0ports"] ~ /^0 1 2 3 8/ ) && (nvram["vlan1ports"] ~ /^4 8/ && (cpuport == "8"))) || \
((nvram["vlan1ports"] ~ /^0 1 2 3 8/ ) && (nvram["vlan2ports"] ~ /^4 8/ && (cpuport == "8"))) || \
((nvram["vlan2ports"] ~ /^0 1 2 3 8/ ) && (nvram["vlan1ports"] ~ /^4 8/ && (cpuport == "8")))) {
c["vlan1ports"] = "0 1 2 3 8t"
c["vlan2ports"] = "4 8t"
}
if (((nvram["vlan0ports"] ~ /^0 1 2 3 5/ ) && (nvram["vlan1ports"] ~ /^4 5/ && (cpuport == "5"))) || \
((nvram["vlan1ports"] ~ /^0 1 2 3 5/ ) && (nvram["vlan2ports"] ~ /^4 5/ && (cpuport == "5"))) || \
((nvram["vlan2ports"] ~ /^0 1 2 3 5/ ) && (nvram["vlan1ports"] ~ /^4 5/ && (cpuport == "5")))) {
c["vlan1ports"] = "0 1 2 3 5t"
c["vlan2ports"] = "4 5t"
}
if ((model == "Asus WLHDD") || (model == "Asus WL300G")) {
c["wan_ifname"] = ""
c["lan_ifname"] = "eth1"
}
if (model == "Asus WL330GE") {
c["wan_ifname"] = ""
c["lan_ifname"] = "eth0.1"
c["vlan1ports"] = "4 5t"
c["vlan2ports"] = ""
}
if ((model == "Asus WL500G") || (model == "Microsoft MN-700")) {
c["wan_ifname"] = "eth1"
c["lan_ifname"] = "eth0"
}
if ((model == "Asus WL500GP V2") || (model == "Buffalo WHR-G125")) {
c["vlan1ports"] = "0 1 2 3 5t"
c["vlan2ports"] = "4 5t"
}
if (model == "Dell TrueMobile 2300") {
c["lan_ifname"] = "eth0"
c["wan_ifname"] = "eth1"
c["vlan1ports"] = "0 1 2 3 4 5"
c["vlan2ports"] = ""
}
if (nvram["boardtype"] == "bcm94710r4") {
# Toshiba WRC-1000
c["lan_ifname"] = "eth0"
c["wan_ifname"] = "eth1"
}
if ((nvram["boardtype"] == "wgt634u") || (nvram["boardtype"] == "0x0467")) {
c["vlan1ports"] = "0 1 2 3 5t"
c["vlan2ports"] = "4 5t"
}
if ((nvram["boardtype"] == "0x042f") || (nvram["boardtype"] == "0x0472")) {
if (nvram["boardnum"] == "45") {
# WL-500gP
c["vlan1ports"] = "1 2 3 4 5t"
c["vlan2ports"] = "0 5t"
} else {
# Generic BCM94704
c["vlan1ports"] = "0 1 2 3 4 5"
c["vlan2ports"] = ""
c["lan_ifname"] = "eth0"
c["wan_ifname"] = "eth1"
# MAC addresses on 4704 tend to be screwed up. Add a workaround here
if (nvram["et0macaddr"] ~ mac_check) {
c["lan_macaddr"] = nvram["et0macaddr"]
c["wan_macaddr"] = macinc(c["lan_macaddr"])
}
}
}
# Buffalo WBR-B11 and Buffalo WBR-G54
if (nvram["boardtype"] == "bcm94710ap") {
c["vlan1ports"] = "0 1 2 3 4 5"
c["vlan2ports"] = ""
c["lan_ifname"] = "eth0"
c["wan_ifname"] = "eth1"
}
# WAP54G
if ((nvram["boardnum"] == "2") || \
(nvram["boardnum"] == "1024")) {
c["lan_ifname"]="eth0"
c["wan_ifname"]=""
}
# Sitecom WL-105b
if ((nvram["boardum"] == "2") && \
(nvram["GemtekPmonVer"] == "1")) {
c["lan_ifname"]="eth0"
c["wan_ifname"]=""
}
# ASUS WL-700gE
# These are actually same as defaults above. For some reason this script applies
# Generic BCM94704 settings instead so we revert to proper settings here.
# Hopefully someone will fix this properly soon.
if (model == "Asus WL700") {
c["lan_ifname"]="eth0.1"
c["wan_ifname"]="eth0.2"
c["vlan1ports"]="1 2 3 4 5t"
c["vlan2ports"]="0 5t"
}
if ((model == "Motorola WR850G") || (model == "Siemens SE505 V2")) {
c["vlan1ports"]="0 1 2 3 5t"
c["vlan2ports"]="4 5t"
}
if (model == "Asus WL500W") {
c["lan_ifname"] = "eth0"
c["wan_ifname"] = "eth1"
c["vlan1ports"] = "0 1 2 3 4 5"
c["vlan2ports"] = ""
}
print "local vlan1ports=\"" c["vlan1ports"] "\";"
print "local vlan2ports=\"" c["vlan2ports"] "\";"
print "local lan_ifname=\"" c["lan_ifname"] "\";"
print "local lan_macaddr=\"" c["lan_macaddr"] "\";"
print "local wan_ifname=\"" c["wan_ifname"] "\";"
print "local wan_macaddr=\"" c["wan_macaddr"] "\";"
}'`
. /lib/functions/uci-defaults.sh
touch /etc/config/network
eval "$network_defs"
[ -n "$vlan1ports" -o -n "$vlan2ports" ] && {
local cfg=`ucidef_add_switch "$switchname" 1 1`
[ -n "$cfg" ] && uci rename network.$cfg=eth0
[ -n "$vlan1ports" ] && {
cfg=`ucidef_add_switch_vlan "$switchname" 1 "$vlan1ports"`
[ -n "$cfg" ] && uci rename network.$cfg=eth0_1
}
[ -n "$vlan2ports" ] && {
cfg=`ucidef_add_switch_vlan "$switchname" 2 "$vlan2ports"`
[ -n "$cfg" ] && uci rename network.$cfg=eth0_2
}
}
ucidef_set_interface_loopback
ucidef_set_interface_lan "$lan_ifname"
[ -n "$lan_macaddr" ] && ucidef_set_interface_macaddr lan "$lan_macaddr"
[ -n "$wan_ifname" ] && {
ucidef_set_interface_wan "$wan_ifname"
[ -n "$wan_macaddr" ] && ucidef_set_interface_macaddr wan "$wan_macaddr"
}
uci commit network
}