Änderungen

Zur Navigation springen Zur Suche springen
6.102 Bytes hinzugefügt ,  16:47, 11. Dez. 2007
→‎Eigenes IPK automatisch erzeugen lassen: +get_mac_from_random_node.sh
Zeile 142: Zeile 142:     
</pre>
 
</pre>
 +
 +
===get_mac_from_random_node.sh===
 +
<pre>
 +
 +
</pre>#!/bin/sh
 +
 +
fkt_prepare () {
 +
        FFF_NET=10
 +
        FFF_CITY=63
 +
 +
        STATUS_PAGE="/tmp/temp_status_page.txt"
 +
}
 +
 +
fkt_calc_node_from_ip () {              # SENS: calculate nodenumber from IP-address
 +
                                        # ARG1: ip-address
 +
        local IP="$1"
 +
        local OKT3="$(echo $IP | sed 's/[0-9]*\.[0-9]*\.\([0-9]*\)\.[0-9]*/\1/g')"
 +
        local OKT4="$(echo $IP | sed 's/[0-9]*\.[0-9]*\.[0-9]*\.\([0-9]*\)/\1/g')"
 +
 +
        if [ -z "$(echo $IP | sed "/^$FFF_NET\.$FFF_CITY\./!d")" ]; then        # ip is not from mesh e.g. 192.168.1.2
 +
                echo "0"
 +
                return
 +
        fi
 +
 +
          if [ "$OKT4" -gt  "-1" ] && [ "$OKT4" -lt  "64" ]; then echo $OKT3
 +
        elif [ "$OKT4" -gt  "63" ] && [ "$OKT4" -lt "128" ]; then echo $(( $OKT3 + 255))
 +
        elif [ "$OKT4" -gt "127" ] && [ "$OKT4" -lt "192" ]; then echo $(( $OKT3 + 510))
 +
        elif [ "$OKT4" -gt "191" ] && [ "$OKT4" -lt "256" ]; then echo $(( $OKT3 + 765))
 +
        fi
 +
}
 +
 +
fkt_wget () {
 +
        local C=0                                                      # counter (raising) for maximal seconds
 +
        local MAX=15                                                    # maximal running time in seconds
 +
        local URL="$1"
 +
        local PID_WGET=""
 +
        local PID_LINE=""
 +
        local PID_LINE_NOW=""
 +
       
 +
        wget -qO - "$URL" 2>/dev/null &
 +
        PID_WGET="$(pidof wget | sed 's/ /\n/g' | sed '$!d')"          # list of all wget-pid's, insert newlines, print last line
 +
        PID_LINE="$(cat /proc/$PID_WGET/cmdline 2>/dev/null)"          # exact line of ps-output
 +
       
 +
        while [ -e "/proc/$PID_WGET" ]; do                              # wget-process in tasklist?
 +
                sleep 1
 +
                let C+=1
 +
               
 +
                PID_LINE_NOW="$(cat /proc/$PID_WGET/cmdline 2>/dev/null)"
 +
               
 +
                if [ $C -gt $MAX ]; then                                # maximal execution time reached
 +
                        if [ "$PID_LINE" = "$PID_LINE_NOW" ] ; then    # is this really the started process?
 +
                       
 +
                                logger "wgetting \"$URL\" - killing pid $PID_WGET after $C seconds"
 +
                                kill $PID_WGET 2>/dev/null >/dev/null
 +
                                return
 +
                        else                                            # this is another process
 +
                                logger "wgetting \"$URL\" - ready after $C seconds (\"$PID_LINE"\" != \"$PID_LINE_NOW"\")"
 +
                                return
 +
                        fi
 +
                fi
 +
        done
 +
       
 +
        logger "wgetting \"$URL\" - ready after $C seconds"
 +
}
 +
 +
fkt_get_random_node () {
 +
        local OLSR_INFO="wget -qO - http://127.0.0.1:2006"
 +
        local OLSR_TOPO="sed -e '/./{H;$!d;}' -e 'x;/Table: Topology/!d;'"
 +
        local OLSR_NODE="sed -e '/^[0-9]/!d' -e 's/^\([0-9.]*\) *.*/\1/g'"
 +
 +
        local ALL_NODES="$( $OLSR_INFO | sed -e '/./{H;$!d;}' -e 'x;/Table: Topology/!d;' | sed -e '/^[0-9]/!d' -e 's/^\([0-9.]*\) *.*/\1\n/g' | sort | uniq )"
 +
        local COUNT_ALL="$( echo -en "$ALL_NODES" | wc -l )"
 +
 +
        local RAND_SEED="$( dd if=/dev/urandom bs=2 count=1 2>&- | hexdump | if read line; then echo 0x${line#* }; fi )"
 +
        local RAND_NUMB="$(( $RAND_SEED % $COUNT_ALL ))"
 +
       
 +
        RAND_NODE="$( echo -en "$ALL_NODES" | sed "${RAND_NUMB}q;d" )"          # IP-address from random node
 +
        RAND_NODE_ESCAPED="$( echo "$RAND_NODE" | sed 's/\./\\./g' )" 
 +
 +
        test -z "$RAND_NODE" && fkt_get_random_node                            # maybe not necessary
 +
}
 +
 +
fkt_get_status () {
 +
        fkt_wget "http://$IP/cgi-bin-status.html" >$STATUS_PAGE 2>/dev/null
 +
 +
        local MAC="$(sed -e '/^MAC/!d' -e 's/^MAC:&nbsp;\(.*\)<\/TD>/\1/g' $STATUS_PAGE)"
 +
        local TYP="$(sed -e '/^<TD>Boardtype:/!d' -e 's/^<TD>Boardtype: \(.*\), Boardnum: \(.*\)<\/TD>/\1-\2/g' $STATUS_PAGE)"
 +
        local DEF="$(sed -e '/^<TD>default via/!d' -e 's/.*html">\(.*\)<\/A>.*/\1/g' $STATUS_PAGE)"
 +
        local FFF="$(sed '/.*[0-9]\.[0-9]\.[0-9]*<\/TD>/!d;s/.*\([0-9]\.[0-9]\.[0-9]*\)<\/TD>/\1/g;q' $STATUS_PAGE)"
 +
 +
        if [ "$(echo $MAC | sed 's/..:..:..:..:..:../ok/g')" != "ok" ]; then
 +
                if [ "$OLD_MAC" != "00:00:00:00:00:00" ]; then                  # old mac already in database
 +
                        NEW_MAC="$OLD_MAC"
 +
                else
 +
                        NEW_MAC="00:00:00:00:00:00"                            # standard-value
 +
                fi
 +
        else
 +
                NEW_MAC="$MAC"
 +
        fi
 +
       
 +
        if [ -z "$TYP" ]; then
 +
                if [ "$OLD_TYP" != "router" ]; then
 +
                        NEW_TYP="$OLD_TYP"
 +
                else
 +
                        NEW_TYP="router"
 +
                fi
 +
        else
 +
                if [ "$(fkt_calc_node_from_ip "$TYP")" = "0" ] || [ "$(fkt_calc_node_from_ip "$TYP")" = "$(fkt_calc_node_from_ip "$IP")" ]; then
 +
                        NEW_TYP="INTERNET"
 +
                else
 +
                        NEW_TYP="$TYP"
 +
                fi
 +
        fi
 +
                       
 +
        if [ -z "$DEF" ]; then
 +
                if [ "$OLD_DEF" != "gateway" ]; then
 +
                        NEW_DEF="$OLD_DEF"
 +
                else
 +
                        NEW_DEF="gateway"
 +
                fi
 +
        else
 +
                NEW_DEF="$DEF"
 +
        fi
 +
 +
        if [ -z "$FFF" ]; then
 +
                if [ "$OLD_FFF" != "0.1.2" ]; then
 +
                        NEW_FFF="$OLD_FFF"
 +
                else
 +
                        NEW_FFF="0.1.2"
 +
                fi
 +
        else
 +
                NEW_FFF="$FFF"
 +
        fi
 +
 +
        rm $STATUS_PAGE
 +
}
 +
 +
case $1 in
 +
        start)
 +
                fkt_prepare
 +
                fkt_get_random_node
 +
                IP=$RAND_NODE
 +
                fkt_get_status
 +
       
 +
                test -z "$NEW_MAC" && NEW_MAC="00:00:00:00:00:00"     
 +
                echo "$( fkt_calc_node_from_ip $IP) $NEW_MAC"
 +
        ;;
 +
        *)
 +
                echo "Usage: $0 start"
 +
        ;;
 +
esac
    
===NVRAM klaeren und saeubern / aus CFE wiederherstellen ohne Reboot===
 
===NVRAM klaeren und saeubern / aus CFE wiederherstellen ohne Reboot===

Navigationsmenü