openwrt/target/linux/brcm47xx/base-files/etc/init.d/netconfig
Hauke Mehrtens 7a3b3b9d73 brcm47xx: don't create named switch_vlan sections
It doesn't seem to be used anywhere, it's incompatible with other
targets and can be confusing. People may think they need to update
section name every time they change VLAN ID (well, even I was doing
that).

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>

SVN-Revision: 41835
2014-07-26 12:33:48 +00:00

239 lines
6.6 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 "$vlan2ports" ] && {
cfg=`ucidef_add_switch_vlan "$switchname" 2 "$vlan2ports"`
}
}
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
}