mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-30 21:44:27 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			98 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| # Copyright (C) 2009-2010 OpenWrt.org
 | |
| # Copyright (C) 2009 Malte S. Stretz <http://msquadrat.de>
 | |
| #
 | |
| # This is a temporary file, I hope to have some of this stuff merged into
 | |
| # /lib/functions.sh (without the fw_ prefix of course) one day.
 | |
| 
 | |
| fw_config_append() { # <package>
 | |
| 	CONFIG_APPEND=1 config_load "$@"
 | |
| 	unset CONFIG_APPEND
 | |
| }
 | |
| 
 | |
| fw_config_once() { # <function> <type>
 | |
| 	local func=$1
 | |
| 	local type=$2
 | |
| 	shift 2
 | |
| 
 | |
| 	local config=cfg00nil
 | |
| 	fw_config__once() {
 | |
| 		config=$1
 | |
| 	}
 | |
| 	config_foreach fw_config__once "$type"
 | |
| 
 | |
| 	$func $config "$@"
 | |
| }
 | |
| 
 | |
| fw_config_get_section() { # <config> <prefix> <type> <name> <default> ...
 | |
| 	local config=$1
 | |
| 	local prefix=$2
 | |
| 	shift 2
 | |
| 
 | |
| 	[ -n "$config" ] || return 1
 | |
| 	[ -n "$prefix" ] && {
 | |
| 		prefix="${prefix}_"
 | |
| 		export ${NO_EXPORT:+-n} -- "${prefix}NAME"="${config}"
 | |
| 		config_get "${prefix}TYPE" "$config" TYPE
 | |
| 	}
 | |
| 	
 | |
| 	[ "$1" == '{' ] && shift
 | |
| 	while [ $# -ge 3 ]; do
 | |
| 		local type=$1
 | |
| 		local name=$2
 | |
| 		local dflt=$3
 | |
| 		shift 3
 | |
| 		# TODO: Move handling of defaults to /lib/functions.sh
 | |
| 		# and get replace the case block with the following 
 | |
| 		# two lines:
 | |
| 		# type=${type#string}
 | |
| 		# config_get${type:+_${type}} "${prefix}${name}" "$config" "$name" "$dflt" || return
 | |
| 		case "$type" in
 | |
| 			string)
 | |
| 				local tmp
 | |
| 				config_get tmp "$config" "$name" || return
 | |
| 				[ -z "$tmp" ] && tmp=$dflt
 | |
| 				export ${NO_EXPORT:+-n} -- "${prefix}${name}=${tmp}"
 | |
| 				continue
 | |
| 			;;
 | |
| 			boolean)
 | |
| 				type=bool
 | |
| 			;;
 | |
| 		esac;
 | |
| 		
 | |
| 		local cmd=${prefix}config_get_${type}
 | |
| 		type $cmd > /dev/null || {
 | |
| 			cmd=config_get_${type} 
 | |
| 		}
 | |
| 		type $cmd > /dev/null || {
 | |
| 			echo "config type $type (for $name) not supported" >&2
 | |
| 			return 1
 | |
| 		}
 | |
| 		$cmd "${prefix}${name}" "$config" "$name" "$dflt" || return
 | |
| 	done
 | |
| }
 | |
| 
 | |
| config_get_ipaddr() {
 | |
| 	local varn=$1
 | |
| 	local conf=$2
 | |
| 	local name=$3
 | |
| 	local dflt=$4
 | |
| 
 | |
| 	local addr
 | |
| 	config_get addr "$conf" "$name" || return
 | |
| 	[ -n "$addr" ] || addr=$dflt
 | |
| 
 | |
| 	local mask=${addr#*/}
 | |
| 	[ "$mask" != "$addr" ] || mask=
 | |
| 	addr=${addr%/*}
 | |
| 
 | |
| 	local vers=
 | |
| 	case "$addr" in
 | |
| 		*:*) vers=6; mask="${mask:-128}" ;;
 | |
| 		*.*) vers=4; mask="${mask:-32}" ;;
 | |
| 	esac
 | |
| 	
 | |
| 	export ${NO_EXPORT:+-n} -- "${varn}=${addr}"
 | |
| 	export ${NO_EXPORT:+-n} -- "${varn}_prefixlen=${mask}"
 | |
| 	export ${NO_EXPORT:+-n} -- "${varn}_version=${vers}"
 | |
| }
 |