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:
		| @@ -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() { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 John Crispin
					John Crispin