Diff for /badi/public_scripts/switchgate/switchgate between versions 1.3 and 1.5

version 1.3, 2009/12/17 11:44:47 version 1.5, 2010/01/09 04:25:42
Line 36  ALIVE_ANSWER="is alive" Line 36  ALIVE_ANSWER="is alive"
 # set to an empty string to avoid debug output  # set to an empty string to avoid debug output
 # to "low" for a few output and to anything else  # to "low" for a few output and to anything else
 # for verbose output  # for verbose output
 DEBUG=  DEBUG=low
   
   
 # -------- Do not edit below this line --------  # -------- Do not edit below this line --------
Line 47  PINGARGS="-A -p25 -t100" Line 47  PINGARGS="-A -p25 -t100"
 ## Function declarations  ## Function declarations
 #  #
   
   # parse commandline switches
   function parse_commandline {
           
           # check rest
           while [ "$#" -gt 0 ]; do
   
              case "$1" in
   
              -d|--debug)
                   # debug switch (another hidden feature)
                   shift
                   if [ "$1" != "low" ]; then
                           DEBUG="choke"
                           echo "Debug mode on."
                   else
                           #echo "Info mode on."
                           DEBUG="low"
                           shift
                   fi
                   ;;
   
              -C)
                   # Parse writeable dir request (hidden feature)
                   echo "$DHCP_TMP_DIR"
                   exit 0
                   ;;
   
              -q|--query)
                   # Parse query for current gw  (yet another hidden feature)
                   shift
                   parse_commandline "$@"
                   getcurrentgw
                   echo "$CURRENTGW"
                   exit 0
                   ;;
   
              -s|--set)
                   # Set gateway to number n (yet another hidden feature)
                   shift
                   set_to_gw="$1"
                   shift
                   parse_commandline "$@"
                   set_gw
                   exit 0
                   ;;
   
              *)
                   echo "Invalid argument \"$1\"."
                   exit 1
                   ;;
   
              esac
           done
   }
   
 # Read gateways from file  # Read gateways from file
 function readgwlist {  function readgwlist {
         if [ -f "$GATEWAYS_FILE" ]; then          if [ -f "$GATEWAYS_FILE" ]; then
Line 141  function checkgw { Line 196  function checkgw {
    fi     fi
 }  }
   
   # Get the current default gateway (or set it, if there was none set) 
 function getcurrentgw {  function getcurrentgw {
    iproute_default_gw_txt="$(ip route show scope global)"     iproute_default_gw_txt="$(ip route show scope global)"
    if [ `echo $iproute_default_gw_txt | grep -c default` -gt 1 ]; then     if [ `echo $iproute_default_gw_txt | grep -c default` -gt 1 ]; then
Line 153  function getcurrentgw { Line 209  function getcurrentgw {
       # no default gateway currently set, set to the highest index, to land on GW0        # no default gateway currently set, set to the highest index, to land on GW0
       CURRENTGW_ID=0        CURRENTGW_ID=0
       CURRENTGW=${GW[$CURRENTGW_ID]}        CURRENTGW=${GW[$CURRENTGW_ID]}
       CURRENTGW_DEV="unknown"  
       echo "No default gateway currently set. Setting it now to $CURRENTGW."        echo "No default gateway currently set. Setting it now to $CURRENTGW."
       ip route add default via $CURRENTGW        ip route add default via $CURRENTGW
         if [ $? -eq 2 ]; then
           echo "Not able to switch default gateway. Is your interface up?"
           exit 1
         fi
    else     else
       CURRENTGW=`echo $iproute_default_gw_txt | sed "s/^default via \(\([0-9]\+\.\?\)\{4\}\).*\$/\1/"`        CURRENTGW=`echo $iproute_default_gw_txt | sed "s/^default via \(\([0-9]\+\.\?\)\{4\}\).*\$/\1/"`
       CURRENTGW_DEV=`echo $iproute_default_gw_txt | sed "s/^default via .* dev \(eth[0-9]\+\).*\$/\1/"`  
    fi     fi
      CURRENTGW_DEV=`echo $iproute_default_gw_txt | sed "s/^default via .* dev \(eth[0-9]\+\).*\$/\1/"`
   
    # get index of current gateway     # get index of current gateway
    index=-1     index=-1
Line 201  function getnextgw { Line 260  function getnextgw {
 function getnewgw {  function getnewgw {
    getnextgw     getnextgw
    # Check wheter all gateways are already tested and failed     # Check wheter all gateways are already tested and failed
    if [ "$NEWGW_ID" -eq "$CURRENTGW_ID" ]; then     if [[ "$NEWGW_ID" -eq "$CURRENTGW_ID" &&  -z $set_to_gw ]]; then
       if [ -n "$DEBUG" ]; then        if [ -n "$DEBUG" ]; then
          echo "All gateways tried."           echo "All gateways tried."
       fi        fi
Line 227  function getnewgw { Line 286  function getnewgw {
    fi     fi
 }  }
   
   # Switch the gateway to a desired gateway
   function set_gw {
   
      # get name of gateway
      if [[ ! "$set_to_gw" =~ ^[0-9]{1,}$ ]]; then
           echo "Only positive numbers allowed. Invalid value \"$set_to_gw\"."
           exit 1   
      fi
      
      NEWGW=${GW[$set_to_gw]}
      if [ -z "$NEWGW" ]; then
         echo "The gateway number $set_to_gw is not in the list of available gateways."
         echo "Valid gateways are:"
         for ((gw=0; gw<${#GW[*]}; gw++)); do
             echo -e "\t$gw (${GW[$gw]})"
         done 
         exit 1
      fi
      if [ -n "$DEBUG" -a "$DEBUG" != "low" ]; then
         echo "Default gateway desired: $NEWGW ($set_to_gw)"
      fi
      
      getcurrentgw
      NEWGW_ID=$[ $set_to_gw - 1 ]
      switchgw
   }
   
 function switchgw {  function switchgw {
    getnewgw     getnewgw
    if [ -n "$NEWGW" ]; then     if [ -n "$NEWGW" ]; then
Line 274  function switchgw { Line 360  function switchgw {
 ## MAIN  ## MAIN
 #  #
   
 # Parse writeable dir request (hidden feature)  
 if [ "$1" = "-C" ]; then  
         echo "$DHCP_TMP_DIR"  
         exit 0  
 fi  
   
 # Parse debug switch (another hidden feature)  
 if [ "$1" = "-d" ]; then  
         if [ "$2" != "low" ]; then  
                 echo "Debug mode on."  
                 DEBUG="choke"  
         else  
                 #echo "Info mode on."  
                 DEBUG="low"  
         fi   
 fi  
   
 # Check fping existence  # Check fping existence
 if [ ! -x "$PING" ]; then  if [ ! -x "$PING" ]; then
Line 300  fi Line 370  fi
 # Get all gateways, we can forward traffic  # Get all gateways, we can forward traffic
 readgwlist  readgwlist
   
 # Parse query for current gw  (yet another hidden feature)  # parse commandline switches
 if [ "$1" = "-q" ]; then  parse_commandline "$@"
         DEBUG=  
         getcurrentgw  
         echo "$CURRENTGW"  
         exit 0  
 fi  
   
 # get current gw  # get current gw
 getcurrentgw  getcurrentgw
Line 353  fi Line 418  fi
   
 # send an eMail if the connection is down or limited  # send an eMail if the connection is down or limited
 if [ -z "$UP" ]; then  if [ -z "$UP" ]; then
         EMAIL_BODY="Switchgate on $(hostname -f) reports: No connection!\n\n\nTime:\t\t$(date)\nGateway:\t$CURRENTGW ($CURRENTGW_ID)"          EMAIL_BODY="Switchgate on $(hostname -f) reports: No connection!\n\nTime:\t\t$(date)\nGateway:\t$CURRENTGW ($CURRENTGW_ID)"
         EMAIL_SUBJECT="Attention: $(hostname -f) has no connection!"          EMAIL_SUBJECT="Attention: $(hostname -f) has no connection!"
         echo -e "$EMAIL_BODY" | mail -s "$EMAIL_SUBJECT" "$ALERT_EMAIL"          echo -e "$EMAIL_BODY" | mail -s "$EMAIL_SUBJECT" "$ALERT_EMAIL"
         if [[ -n "$DEBUG" && "$DEBUG" != "low" ]]; then          if [[ -n "$DEBUG" && "$DEBUG" != "low" ]]; then
                 echo "Alert message sent to $ALERT_EMAIL."                  echo "Alert message sent to $ALERT_EMAIL."
         fi          fi
 elif [ "$CURRENTGW_ID" != 0 ]; then  elif [ "$CURRENTGW_ID" != 0 ]; then
         EMAIL_BODY="Switchgate on $(hostname -f) reports: Not operating on standard default gateway!\n\n\nTime:\t\t$(date)\nGateway:\t$CURRENTGW ($CURRENTGW_ID)"          EMAIL_BODY="Switchgate on $(hostname -f) reports: Not operating on standard default gateway!\n\nTime:\t\t$(date)\nGateway:\t$CURRENTGW ($CURRENTGW_ID)"
         EMAIL_SUBJECT="Attention: $(hostname -f) Not operating on standard default gateway!"          EMAIL_SUBJECT="Attention: $(hostname -f) not operating on standard default gateway!"
         echo -e "$EMAIL_BODY" | mail -s "$EMAIL_SUBJECT" "$ALERT_EMAIL"          echo -e "$EMAIL_BODY" | mail -s "$EMAIL_SUBJECT" "$ALERT_EMAIL"
         if [[ -n "$DEBUG" && "$DEBUG" != "low" ]]; then          if [[ -n "$DEBUG" && "$DEBUG" != "low" ]]; then
                 echo "Alert message sent to $ALERT_EMAIL."                  echo "Alert message sent to $ALERT_EMAIL."

Removed from v.1.3  
changed lines
  Added in v.1.5


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>