7a3b3b9d73
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
238 lines
6.6 KiB
Bash
Executable file
238 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
|
|
}
|