#!/bin/sh # Netmon Configurator (C) 2010-2012 Freifunk Oldenburg # Lizenz: GPL v3 test -f /tmp/started || exit #Get the configuration from the uci configuration file #If it does not exists, then get it from a normal bash file with variables. if [ -f /etc/config/configurator ];then API_IPV4_ADRESS=`uci get configurator.@api[0].ipv4_address` API_IPV6_ADRESS=`uci get configurator.@api[0].ipv6_address` API_IPV6_INTERFACE=`uci get configurator.@api[0].ipv6_interface` API_TIMEOUT=`uci get configurator.@api[0].timeout` API_RETRY=`uci get configurator.@api[0].retry` SCRIPT_ERROR_LEVEL=`uci get configurator.@script[0].error_level` SCRIPT_LOGFILE=`uci get configurator.@script[0].logfile` CRAWL_METHOD=`uci get configurator.@crawl[0].method` CRAWL_ROUTER_ID=`uci get configurator.@crawl[0].router_id` CRAWL_UPDATE_HASH=`uci get configurator.@crawl[0].update_hash` CRAWL_NICKNAME=`uci get configurator.@crawl[0].nickname` CRAWL_PASSWORD=`uci get configurator.@crawl[0].password` AUTOADD_IPV6_ADDRESS=`uci get configurator.@netmon[0].autoadd_ipv6_address` else . `dirname $0`/configurator_config fi API_RETRY=$(($API_RETRY - 1)) if [ "$API_IPV4_ADRESS" != "1" ]; then netmon_api=$API_IPV4_ADRESS else netmon_api="[$API_IPV6_ADRESS"%"$API_IPV6_INTERFACE]" fi if [ "$SCRIPT_ERROR_LEVEL" -gt "1" ]; then err() { echo "$(date) [configurator]: $1" >> $SCRIPT_LOGFILE } else err() { : } fi assign_router() { hostname=`cat /proc/sys/kernel/hostname` #Choose right login String #Here maybe a ; to much at the end..?? login_strings=$(awk '{ mac=toupper($1); gsub(":", "", mac); printf mac ";" }' /sys/class/net/br-mesh/address /sys/class/net/eth0/address /sys/class/net/ath0/address 2> /dev/null) ergebnis=$(wget -T $API_TIMEOUT -q -O - "http://$netmon_api/api_csv_configurator.php?section=test_login_strings&login_strings=$login_strings") router_auto_assign_login_string=${ergebnis#*;} ergebnis=${ergebnis%;*} if [ "$ergebnis" = "error" ]; then router_auto_assign_login_string=${login_strings%%;*} err "A router with this login string does not exist: $login_strings" err "Using $router_auto_assign_login_string as login string" fi #Try to assign Router with choosen login string ergebnis=$(wget -T $API_TIMEOUT -q -O - "http://$netmon_api/api_csv_configurator.php?section=router_auto_assign&router_auto_assign_login_string=$router_auto_assign_login_string&hostname=$hostname") ret=${ergebnis%%;*} errstr=${ergebnis#*;} errstr=${errstr%%;*} if [ "$ret" != "success" ]; then err "The router has not been assigned to a router in Netmon" err "Failure on router_auto_assign: $errstr. Exiting" exit 0 elif [ "$ret" = "success" ]; then update_hash=${ergebnis%;*;*} update_hash=${update_hash##*;} api_key=${ergebnis##*;} #write new config uci set configurator.@crawl[0].router_id=$errstr uci set configurator.@crawl[0].update_hash=$update_hash uci set configurator.@api[0].api_key=$api_key #set also new router id for nodewatcher #uci set nodewatcher.@crawl[0].router_id=$errstr err "The router $errstr has been assigned with a router in Netmon" uci commit CRAWL_METHOD=`uci get configurator.@crawl[0].method` CRAWL_ROUTER_ID=$errstr CRAWL_UPDATE_HASH=$update_hash CRAWL_NICKNAME=`uci get configurator.@crawl[0].nickname` CRAWL_PASSWORD=`uci get configurator.@crawl[0].password` fi } autoadd_ipv6_address() { err "Doing IPv6 autoadd" ipv6_link_local_addr=$(ip addr show dev br-mesh scope link | awk '/inet6/{print $2}') ipv6_link_local_netmask=${ipv6_link_local_addr##*/} ipv6_link_local_addr=${ipv6_link_local_addr%%/*} ergebnis=$(wget -T $API_TIMEOUT -q -O - "http://$netmon_api/api_csv_configurator.php?section=autoadd_ipv6_address&authentificationmethod=$CRAWL_METHOD&nickname=$CRAWL_NICKNAME&password=$CRAWL_PASSWORD&router_auto_update_hash=$CRAWL_UPDATE_HASH&router_id=$CRAWL_ROUTER_ID&networkinterface_name=br-mesh&ip=$ipv6_link_local_addr&netmask=$ipv6_link_local_netmask&ipv=6") ret=${ergebnis%%,*} if [ "$ret" = "success" ]; then uci set configurator.@netmon[0].autoadd_ipv6_address='0' uci commit err "The IPv6 address of the router $CRAWL_ROUTER_ID has been added to the router in Netmon" err "IPv6 Autoadd has been disabled cause it is no longer necesarry" else routerid=${ergebnis##*,} if [ "$routerid" = "$CRAWL_ROUTER_ID" ]; then err "The IPv6 address already exists in Netmon on this router. Maybe because of a previos assignment" uci set configurator.@netmon[0].autoadd_ipv6_address='0' uci commit err "IPv6 Autoadd has been disabled cause it is no longer necesarry" else err "The IPv6 address already exists in Netmon on another router $routerid" fi fi } if [ "$CRAWL_METHOD" = "login" ]; then err "Authentification method is: username and passwort" elif [ "$CRAWL_METHOD" = "hash" ]; then err "Authentification method: autoassign and hash" err "Checking if the router is already assigned to a router in Netmon" if [ "$CRAWL_UPDATE_HASH" = "1" ]; then err "The router is not assigned to a router in Netmon" err "Trying to assign the router" assign_router else err "The router is already assigned to a router in Netmon" fi fi if [ "$AUTOADD_IPV6_ADDRESS" = "1" ]; then autoadd_ipv6_address fi