mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-11-03 14:34:27 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			79 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/sh
 | 
						|
# Copyright (C) 2011 OpenWrt.org
 | 
						|
 | 
						|
. /usr/share/libubox/jshn.sh
 | 
						|
 | 
						|
find_config() {
 | 
						|
	local device="$1"
 | 
						|
	for ifobj in `ubus list network.interface.\*`; do
 | 
						|
		interface="${ifobj##network.interface.}"
 | 
						|
		(
 | 
						|
			json_load "$(ifstatus $interface)"
 | 
						|
			json_get_var ifdev device
 | 
						|
			json_get_var ifl3dev l3_device
 | 
						|
			if [[ "$device" = "$ifdev" ]] || [[ "$device" = "$ifl3dev" ]]; then
 | 
						|
				echo "$interface"
 | 
						|
				exit 0
 | 
						|
			else
 | 
						|
				exit 1
 | 
						|
			fi
 | 
						|
		) && return
 | 
						|
	done
 | 
						|
}
 | 
						|
 | 
						|
unbridge() {
 | 
						|
	return
 | 
						|
}
 | 
						|
 | 
						|
ubus_call() {
 | 
						|
	json_init
 | 
						|
	local _data="$(ubus -S call "$1" "$2")"
 | 
						|
	[ -z "$_data" ] && return 1
 | 
						|
	json_load "$_data"
 | 
						|
	return 0
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
fixup_interface() {
 | 
						|
	local config="$1"
 | 
						|
	local ifname type
 | 
						|
 | 
						|
	config_get type "$config" type
 | 
						|
	config_get ifname "$config" ifname
 | 
						|
	config_get device "$config" device "$ifname"
 | 
						|
	[ "bridge" = "$type" ] && ifname="br-$config"
 | 
						|
	config_set "$config" device "$ifname"
 | 
						|
	ubus_call "network.interface.$config" status || return 0
 | 
						|
	json_get_var l3dev l3_device
 | 
						|
	[ -n "$l3dev" ] && ifname="$l3dev"
 | 
						|
	json_init
 | 
						|
	config_set "$config" ifname "$ifname"
 | 
						|
	config_set "$config" device "$device"
 | 
						|
}
 | 
						|
 | 
						|
scan_interfaces() {
 | 
						|
	config_load network
 | 
						|
	config_foreach fixup_interface interface
 | 
						|
}
 | 
						|
 | 
						|
prepare_interface_bridge() {
 | 
						|
	local config="$1"
 | 
						|
 | 
						|
	[ -n "$config" ] || return 0
 | 
						|
	ubus call network.interface."$config" prepare
 | 
						|
}
 | 
						|
 | 
						|
setup_interface() {
 | 
						|
	local iface="$1"
 | 
						|
	local config="$2"
 | 
						|
 | 
						|
	[ -n "$config" ] || return 0
 | 
						|
	ubus call network.interface."$config" add_device "{ \"name\": \"$iface\" }"
 | 
						|
}
 | 
						|
 | 
						|
do_sysctl() {
 | 
						|
	[ -n "$2" ] && \
 | 
						|
		sysctl -n -e -w "$1=$2" >/dev/null || \
 | 
						|
		sysctl -n -e "$1"
 | 
						|
}
 |