base-files: allow setting device and bridge macs
Add code for setting mac addresses inside board.json and rendering them out to uci. On switches we want to have a unique MAC on each port. With 48 port switches that would require 48 device sections in /etc/config/network. Doing so via board.json is easier. Signed-off-by: John Crispin <john@phrozen.org>
This commit is contained in:
parent
f3926d233d
commit
9290539ca9
2 changed files with 42 additions and 9 deletions
|
@ -9,11 +9,17 @@ CFG=/etc/board.json
|
||||||
|
|
||||||
generate_bridge() {
|
generate_bridge() {
|
||||||
local name=$1
|
local name=$1
|
||||||
|
local macaddr=$2
|
||||||
uci -q batch <<-EOF
|
uci -q batch <<-EOF
|
||||||
set network.$name=device
|
set network.$name=device
|
||||||
set network.$name.name=$name
|
set network.$name.name=$name
|
||||||
set network.$name.type=bridge
|
set network.$name.type=bridge
|
||||||
EOF
|
EOF
|
||||||
|
if [ -n "$macaddr" ]; then
|
||||||
|
uci -q batch <<-EOF
|
||||||
|
set network.$name.macaddr=$macaddr
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
bridge_vlan_id=0
|
bridge_vlan_id=0
|
||||||
|
@ -21,11 +27,11 @@ generate_bridge_vlan() {
|
||||||
local name=$1_vlan
|
local name=$1_vlan
|
||||||
local device=$2
|
local device=$2
|
||||||
local ports="$3"
|
local ports="$3"
|
||||||
bridge_vlan_id=$((bridge_vlan_id + 1))
|
local vlan="$4"
|
||||||
uci -q batch <<-EOF
|
uci -q batch <<-EOF
|
||||||
set network.$name=bridge-vlan
|
set network.$name=bridge-vlan
|
||||||
set network.$name.device='$device'
|
set network.$name.device='$device'
|
||||||
set network.$name.vlan='$bridge_vlan_id'
|
set network.$name.vlan='$vlan'
|
||||||
set network.$name.ports='$ports'
|
set network.$name.ports='$ports'
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
@ -85,12 +91,12 @@ generate_static_network() {
|
||||||
|
|
||||||
addr_offset=2
|
addr_offset=2
|
||||||
generate_network() {
|
generate_network() {
|
||||||
local ifname macaddr protocol type ipaddr netmask
|
local ifname macaddr protocol type ipaddr netmask vlan
|
||||||
local bridge=$2
|
local bridge=$2
|
||||||
|
|
||||||
json_select network
|
json_select network
|
||||||
json_select "$1"
|
json_select "$1"
|
||||||
json_get_vars ifname macaddr protocol ipaddr netmask
|
json_get_vars ifname macaddr protocol ipaddr netmask vlan
|
||||||
json_select ..
|
json_select ..
|
||||||
json_select ..
|
json_select ..
|
||||||
|
|
||||||
|
@ -102,8 +108,12 @@ generate_network() {
|
||||||
esac
|
esac
|
||||||
|
|
||||||
[ -n "$bridge" ] && {
|
[ -n "$bridge" ] && {
|
||||||
generate_bridge_vlan $1 $bridge "$ifname"
|
if [ -z "$vlan" ]; then
|
||||||
ifname=$bridge.$bridge_vlan_id
|
bridge_vlan_id=$((bridge_vlan_id + 1))
|
||||||
|
vlan=$bridge_vlan_id
|
||||||
|
fi
|
||||||
|
generate_bridge_vlan $1 $bridge "$ifname" $vlan
|
||||||
|
ifname=$bridge.$vlan
|
||||||
type=""
|
type=""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -465,14 +475,21 @@ json_load "$(cat ${CFG})"
|
||||||
umask 077
|
umask 077
|
||||||
|
|
||||||
if [ ! -s /etc/config/network ]; then
|
if [ ! -s /etc/config/network ]; then
|
||||||
|
bridge_name=""
|
||||||
touch /etc/config/network
|
touch /etc/config/network
|
||||||
generate_static_network
|
generate_static_network
|
||||||
|
|
||||||
json_get_vars bridge
|
json_get_vars bridge
|
||||||
[ -n "$bridge" ] && generate_bridge $bridge
|
[ -n "$bridge" ] && {
|
||||||
|
json_select bridge
|
||||||
|
json_get_vars name macaddr
|
||||||
|
generate_bridge "$name" "$macaddr"
|
||||||
|
json_select ..
|
||||||
|
bridge_name=$name
|
||||||
|
}
|
||||||
|
|
||||||
json_get_keys keys network
|
json_get_keys keys network
|
||||||
for key in $keys; do generate_network $key $bridge; done
|
for key in $keys; do generate_network $key $bridge_name; done
|
||||||
|
|
||||||
json_get_keys keys switch
|
json_get_keys keys switch
|
||||||
for key in $keys; do generate_switch $key; done
|
for key in $keys; do generate_switch $key; done
|
||||||
|
|
|
@ -91,7 +91,23 @@ ucidef_set_interfaces_lan_wan() {
|
||||||
}
|
}
|
||||||
|
|
||||||
ucidef_set_bridge_device() {
|
ucidef_set_bridge_device() {
|
||||||
json_add_string bridge "${1:switch0}"
|
json_select_object bridge
|
||||||
|
json_add_string name "${1:switch0}"
|
||||||
|
json_select ..
|
||||||
|
}
|
||||||
|
|
||||||
|
ucidef_set_bridge_mac() {
|
||||||
|
json_select_object bridge
|
||||||
|
json_add_string macaddr "${1}"
|
||||||
|
json_select ..
|
||||||
|
}
|
||||||
|
|
||||||
|
ucidef_set_network_device_mac() {
|
||||||
|
json_select_object "network-device"
|
||||||
|
json_select_object "${1}"
|
||||||
|
json_add_string macaddr "${2}"
|
||||||
|
json_select ..
|
||||||
|
json_select ..
|
||||||
}
|
}
|
||||||
|
|
||||||
_ucidef_add_switch_port() {
|
_ucidef_add_switch_port() {
|
||||||
|
|
Loading…
Reference in a new issue