diff options
| author | James <> | 2015-11-04 11:49:21 +0000 | 
|---|---|---|
| committer | James <> | 2015-11-04 11:49:21 +0000 | 
| commit | 716ca530e1c4515d8683c9d5be3d56b301758b66 (patch) | |
| tree | 700eb5bcc1a462a5f21dcec15ce7c97ecfefa772 /package/base-files/files/lib/functions/system.sh | |
| download | trunk-47381-master.tar.gz trunk-47381-master.tar.bz2 trunk-47381-master.zip | |
Diffstat (limited to 'package/base-files/files/lib/functions/system.sh')
| -rw-r--r-- | package/base-files/files/lib/functions/system.sh | 112 | 
1 files changed, 112 insertions, 0 deletions
| diff --git a/package/base-files/files/lib/functions/system.sh b/package/base-files/files/lib/functions/system.sh new file mode 100644 index 0000000..8d75a5a --- /dev/null +++ b/package/base-files/files/lib/functions/system.sh @@ -0,0 +1,112 @@ +# Copyright (C) 2006-2013 OpenWrt.org + +find_mtd_chardev() { +	local INDEX=$(find_mtd_index "$1") +	local PREFIX=/dev/mtd + +	[ -d /dev/mtd ] && PREFIX=/dev/mtd/ +	echo "${INDEX:+$PREFIX$INDEX}" +} + +mtd_get_mac_ascii() +{ +	local mtdname="$1" +	local key="$2" +	local part +	local mac_dirty + +	part=$(find_mtd_part "$mtdname") +	if [ -z "$part" ]; then +		echo "mtd_get_mac_ascii: partition $mtdname not found!" >&2 +		return +	fi + +	mac_dirty=$(strings "$part" | sed -n 's/^'"$key"'=//p') + +	# "canonicalize" mac +	[ -n "$mac_dirty" ] && macaddr_canonicalize "$mac_dirty" +} + +mtd_get_mac_binary() { +	local mtdname="$1" +	local offset="$2" +	local part + +	part=$(find_mtd_part "$mtdname") +	if [ -z "$part" ]; then +		echo "mtd_get_mac_binary: partition $mtdname not found!" >&2 +		return +	fi + +	dd bs=1 skip=$offset count=6 if=$part 2>/dev/null | hexdump -v -n 6 -e '5/1 "%02x:" 1/1 "%02x"' +} + +mtd_get_part_size() { +	local part_name=$1 +	local first dev size erasesize name +	while read dev size erasesize name; do +		name=${name#'"'}; name=${name%'"'} +		if [ "$name" = "$part_name" ]; then +			echo $((0x$size)) +			break +		fi +	done < /proc/mtd +} + +macaddr_add() { +	local mac=$1 +	local val=$2 +	local oui=${mac%:*:*:*} +	local nic=${mac#*:*:*:} + +	nic=$(printf "%06x" $((0x${nic//:/} + $val & 0xffffff)) | sed 's/^\(.\{2\}\)\(.\{2\}\)\(.\{2\}\)/\1:\2:\3/') +	echo $oui:$nic +} + +macaddr_setbit_la() +{ +	local mac=$1 + +	printf "%02x:%s" $((0x${mac%%:*} | 0x02)) ${mac#*:} +} + +macaddr_2bin() +{ +	local mac=$1 + +	echo -ne \\x${mac//:/\\x} +} + +macaddr_canonicalize() +{ +	local mac="$1" +	local canon="" + +	mac=$(echo -n $mac | tr -d \") +	[ ${#mac} -gt 17 ] && return +	[ -n "${mac//[a-fA-F0-9\.: -]/}" ] && return + +	for octet in ${mac//[\.:-]/ }; do +		case "${#octet}" in +		1) +			octet="0${octet}" +			;; +		2) +			;; +		4) +			octet="${octet:0:2} ${octet:2:2}" +			;; +		12) +			octet="${octet:0:2} ${octet:2:2} ${octet:4:2} ${octet:6:2} ${octet:8:2} ${octet:10:2}" +			;; +		*) +			return +			;; +		esac +		canon=${canon}${canon:+ }${octet} +	done + +	[ ${#canon} -ne 17 ] && return + +	printf "%02x:%02x:%02x:%02x:%02x:%02x" 0x${canon// / 0x} 2>/dev/null +} | 
