X-Git-Url: https://git.archive.openwrt.org/?a=blobdiff_plain;f=package%2Fbase-files%2Ffiles%2Flib%2Ffunctions.sh;h=e05108c76598750d552a4a2511e74b87aeb1073e;hb=3489fabdc6eeea2a276a2a1fb05b9baf4d8de275;hp=a488f4dc01af370a74979f2a253d328ac9e7b7f6;hpb=ce72a70117e7c04466dd5ddde008d9c718c5f09c;p=openwrt.git diff --git a/package/base-files/files/lib/functions.sh b/package/base-files/files/lib/functions.sh index a488f4dc01..e05108c765 100755 --- a/package/base-files/files/lib/functions.sh +++ b/package/base-files/files/lib/functions.sh @@ -1,6 +1,7 @@ #!/bin/sh -# Copyright (C) 2006-2011 OpenWrt.org +# Copyright (C) 2006-2013 OpenWrt.org # Copyright (C) 2006 Fokus Fraunhofer +# Copyright (C) 2010 Vertical Communications debug () { @@ -202,7 +203,7 @@ config_list_foreach() { done } -load_modules() { +insert_modules() { [ -d /etc/modules.d ] && { cd /etc/modules.d sed 's/^[^#]/insmod &/' $* | ash 2>&- || : @@ -247,17 +248,36 @@ mtd_get_mac_ascii() local part local mac_dirty - . /lib/functions.sh - 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') + mac_dirty=$(strings "$part" | sed -n 's/^'"$key"'=//p') + # "canonicalize" mac - printf "%02x:%02x:%02x:%02x:%02x:%02x" 0x${mac_dirty//:/ 0x} + [ -n "$mac_dirty" ] && macaddr_canonicalize "$mac_dirty" +} + +mtd_get_blob() +{ + local mtdname="$1" + local offset="$2" + local count="$3" + local firmware="$4" + local part + + part=$(find_mtd_part "$mtdname") + if [ -z "$part" ]; then + echo "mtd_get_blob: partition $mtdname not found!" >&2 + return 1 + fi + + dd if=$part of=$firmware bs=1 skip=$offset count=$count 2>/dev/null || { + echo "mtd_get_blob: failed to extract $firmware from $part" >&2 + return 1 + } } mtd_get_mac_binary() { @@ -274,6 +294,18 @@ mtd_get_mac_binary() { 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 @@ -298,6 +330,39 @@ macaddr_2bin() echo -ne \\x${mac//:/\\x} } +macaddr_canonicalize() +{ + local mac="$1" + local canon="" + + [ ${#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 +} + strtok() { # { [] ... } local tmp local val="$1" @@ -406,10 +471,6 @@ pi_include() { return 0 } -#!/bin/sh -# Copyright (C) 2006-2010 OpenWrt.org -# Copyright (C) 2010 Vertical Communications - boot_hook_splice_start() { export -n PI_HOOK_SPLICE=1 } @@ -472,74 +533,25 @@ boot_run_hook() { done } -jffs2_ready () { - mtdpart="$(find_mtd_part rootfs_data)" - [ -z "$mtdpart" ] && return 1 - magic=$(hexdump $mtdpart -n 4 -e '4/1 "%02x"') - [ "$magic" != "deadc0de" ] -} - -dupe() { # - cd $1 - echo -n "creating directories... " - { - cd $2 - find . -xdev -type d - echo "./dev ./overlay ./mnt ./proc ./tmp" - # xdev skips mounted directories - cd $1 - } | xargs mkdir -p - echo "done" - - echo -n "setting up symlinks... " - for file in $(cd $2; find . -xdev -type f;); do - case "$file" in - ./rom/note) ;; #nothing - ./etc/config*|\ - ./usr/lib/opkg/info/*) cp -af $2/$file $file;; - *) ln -sf /rom/${file#./*} $file;; - esac - done - for file in $(cd $2; find . -xdev -type l;); do - cp -af $2/${file#./*} $file - done - echo "done" -} - pivot() { # - mount -o noatime,move /proc $1/proc && \ + /bin/mount -o noatime,move /proc $1/proc && \ pivot_root $1 $1$2 && { - mount -o noatime,move $2/dev /dev - mount -o noatime,move $2/tmp /tmp - mount -o noatime,move $2/sys /sys 2>&- - mount -o noatime,move $2/overlay /overlay 2>&- + /bin/mount -o noatime,move $2/dev /dev + /bin/mount -o noatime,move $2/tmp /tmp + /bin/mount -o noatime,move $2/sys /sys 2>&- + /bin/mount -o noatime,move $2/overlay /overlay 2>&- return 0 } } fopivot() { # - root=$1 - { - if grep -q overlay /proc/filesystems; then - mount -o noatime,lowerdir=/,upperdir=$1 -t overlayfs "overlayfs:$1" /mnt && root=/mnt - elif grep -q mini_fo /proc/filesystems; then - mount -t mini_fo -o noatime,base=/,sto=$1 "mini_fo:$1" /mnt 2>&- && root=/mnt - else - mount --bind -o noatime / /mnt - mount --bind -o noatime,union "$1" /mnt && root=/mnt - fi - } || { - [ "$3" = "1" ] && { - mount | grep "on $1 type" 2>&- 1>&- || mount -o noatime,bind $1 $1 - dupe $1 $rom - } - } - pivot $root $2 + /bin/mount -o noatime,lowerdir=/,upperdir=$1 -t overlayfs "overlayfs:$1" /mnt + pivot /mnt $2 } ramoverlay() { mkdir -p /tmp/root - mount -t tmpfs -o noatime,mode=0755 root /tmp/root + /bin/mount -t tmpfs -o noatime,mode=0755 root /tmp/root fopivot /tmp/root /rom 1 }