X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=package%2Fbase-files%2Fdefault%2Fetc%2Ffunctions.sh;h=fbb5a160c45ff5678f3c4c8995f518db39c1f4c7;hb=4f09c2f1f6c0d603d93c61b9f977156599862302;hp=9cfc8023579b38ba20438bab70d2ed443ba5808e;hpb=0bb68e81eca839c8eed0c629b403ac558ea662e6;p=openwrt.git diff --git a/package/base-files/default/etc/functions.sh b/package/base-files/default/etc/functions.sh index 9cfc802357..fbb5a160c4 100755 --- a/package/base-files/default/etc/functions.sh +++ b/package/base-files/default/etc/functions.sh @@ -1,102 +1,78 @@ -#!/bin/ash -. /etc/nvram.sh - +#!/bin/sh alias debug=${DEBUG:-:} +# newline +N=" +" + # valid interface? if_valid () ( ifconfig "$1" >&- 2>&- || [ "${1%%[0-9]}" = "br" ] || - { - [ "${1%%[0-9]}" = "vlan" ] && ( - i=${1#vlan} - hwname=$(nvram get vlan${i}hwname) - hwaddr=$(nvram get ${hwname}macaddr) - [ -z "$hwaddr" ] && return 1 - - vif=$(ifconfig -a | awk '/^eth.*'$hwaddr'/ {print $1; exit}' IGNORECASE=1) - debug "# vlan$i => $vif" - - $DEBUG ifconfig $vif up - $DEBUG vconfig add $vif $i 2>&- - ) - } || { debug "# missing interface '$1' ignored"; false; } ) -do_ifup() { - if_proto=$(nvram get ${2}_proto) - if=$(nvram get ${2}_ifname) - [ "${if%%[0-9]}" = "ppp" ] && if=$(nvram get ${if_proto}_ifname) - - pidfile=/var/run/${if}.pid - [ -f $pidfile ] && $DEBUG kill $(cat $pidfile) +hotplug_dev() { + env -i ACTION=$1 INTERFACE=$2 /sbin/hotplug net +} - case "$1" in - static) - ip=$(nvram get ${2}_ipaddr) - netmask=$(nvram get ${2}_netmask) - gateway=$(nvram get ${2}_gateway) +append() { + local var="$1" + local value="$2" + local sep="${3:- }" + eval "export ${var}=\"\${${var}:+\${${var}}${value:+$sep}}$value\"" +} - $DEBUG ifconfig $if $ip ${netmask:+netmask $netmask} broadcast + up - ${gateway:+$DEBUG route add default gw $gateway} +config_cb() { + return 0 +} +option_cb() { + return 0 +} - [ -f /etc/resolv.conf ] || { - debug "# --- creating /etc/resolv.conf ---" - for dns in $(nvram get ${2}_dns); do - echo "nameserver $dns" >> /etc/resolv.conf - done - } - - env -i ACTION="ifup" INTERFACE="${2}" PROTO=static /sbin/hotplug "iface" & - ;; - dhcp) - DHCP_IP=$(nvram get ${2}_ipaddr) - DHCP_NETMASK=$(nvram get ${2}_netmask) - $DEBUG ifconfig $if $ip ${netmask:+netmask $netmask} broadcast + up +config () { + config_cb "$@" + _C=$((${_C:-0} + 1)) + export CONFIG_SECTION="${2:-cfg${_C}}" + export CONFIG_${CONFIG_SECTION}_TYPE="$1" +} - DHCP_ARGS="-i $if ${DHCP_IP:+-r $DHCP_IP} -b -p $pidfile" - DHCP_HOSTNAME=$(nvram get ${2}_hostname) - DHCP_HOSTNAME=${DHCP_HOSTNAME%%.*} - [ -z $DHCP_HOSTNAME ] || DHCP_ARGS="$DHCP_ARGS -H $DHCP_HOSTNAME" - [ "$if_proto" = "pptp" ] && DHCP_ARGS="$DHCP_ARGS -n -q" || DHCP_ARGS="$DHCP_ARGS -R &" - oldpid=$(cat $pidfile) - ${DEBUG:-eval} "udhcpc $DHCP_ARGS" - pidof udhcpc | grep "$oldpid" >&- 2>&- && { - sleep 1 - kill -9 $oldpid - } - # hotplug events are handled by /usr/share/udhcpc/default.script - ;; - none|"") - ;; - *) - [ -x "/sbin/ifup.$1" ] && { $DEBUG /sbin/ifup.$1 ${2}; exit; } - echo "### ifup ${2}: ignored ${2}_proto=\"$1\" (not supported)" - ;; - esac +option () { + local varname="$1" ; shift + export CONFIG_${CONFIG_SECTION}_${varname}="$*" + option_cb "$varname" "$*" } -bitcount () { - local c=$1 - echo $(( - c=((c>> 1)&0x55555555)+(c&0x55555555), - c=((c>> 2)&0x33333333)+(c&0x33333333), - c=((c>> 4)&0x0f0f0f0f)+(c&0x0f0f0f0f), - c=((c>> 8)&0x00ff00ff)+(c&0x00ff00ff), - c=((c>>16)&0x0000ffff)+(c&0x0000ffff) - )) +config_clear() { + [ -z "$CONFIG_SECTION" ] && return + for oldsetting in `set | grep ^CONFIG_${CONFIG_SECTION}_ | \ + sed -e 's/\(.*\)=.*$/\1/'` ; do + unset $oldsetting + done + unset CONFIG_SECTION } -valid_netmask () { - return $((-($1)&~$1)) +config_load() { + local CD="" + if [ \! -e "$1" -a -e "/etc/config/$1" ]; then + cd /etc/config && local CD=1 + fi + [ -e "$1" ] && . $1 + ${CD:+cd - >/dev/null} + ${CONFIG_SECTION:+config_cb} } -ip2int () ( - set $(echo $1 | tr '\.' ' ') - echo $(($1<<24|$2<<16|$3<<8|$4)) -) +config_get() { + case "$3" in + "") eval "echo \${CONFIG_${1}_${2}}";; + *) eval "$1=\"\${CONFIG_${2}_${3}}\"";; + esac +} + +config_set() { + export CONFIG_${1}_${2}="${3}" +} -int2ip () { - echo $(($1>>24&255)).$(($1>>16&255)).$(($1>>8&255)).$(($1&255)) +load_modules() { + sed 's/^[^#]/insmod &/' $* | ash 2>&- || : }