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: \(.*\)<\/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=== |