#!/bin/bash
#/*
# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
# * contributor license agreements.  See the NOTICE file distributed with
# * this work for additional information regarding copyright ownership.
# * The OpenAirInterface Software Alliance licenses this file to You under
# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
# * except in compliance with the License.
# * You may obtain a copy of the License at
# *
# *      http://www.openairinterface.org/?page_id=698
# *
# * Unless required by applicable law or agreed to in writing, software
# * distributed under the License is distributed on an "AS IS" BASIS,
# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# * See the License for the specific language governing permissions and
# * limitations under the License.
# *-------------------------------------------------------------------------------
# * For more information about the OpenAirInterface (OAI) Software Alliance:
# *      contact@openairinterface.org
# */

# \author Navid Nikaein, Rohit Gupta

#arg1 timeout to wait before running the script
#arg2 interface
#arg3 iperf arguments

echo "Start time of script: `date`"

args=($*)
timeout=${args[0]}
iface=${args[1]}
iperf_args=(${args[@]:2})

ip_client=`echo "$iperf_args" | sed -ne 's/.*\-c[ ]*\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\).*/\1/p'`

#array=${1:-1}
echo "args =  ${args[@]}"
echo "timeout = $timeout"
echo "iface = $iface"
echo "iperf_args = ${iperf_args[@]}"
echo "ip_client = $ip_client"



# Test an IP address for validity:
# Usage:
#      valid_ip IP_ADDRESS
#      if [[ $? -eq 0 ]]; then echo good; else echo bad; fi
#   OR
#      if valid_ip IP_ADDRESS; then echo good; else echo bad; fi
#
function valid_ip()
{
    local  ip=$1
    local  stat=1

    if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
        OIFS=$IFS
        IFS='.'
        ip=($ip)
        IFS=$OIFS
        [[ ${ip[0]} -le 255 && ${ip[1]} -le 255 \
            && ${ip[2]} -le 255 && ${ip[3]} -le 255 ]]
        stat=$?
    fi
    return $stat
}

if valid_ip $iface; then 
  echo "$iface is Valid IP Address. Checking for connectivity..."
  ping -c 1 $iface >& /dev/null
  while  [ "$?" != "0" ]; do
     ping -c 1 $iface >& /dev/null
  done
  echo "$iface connectivity achieved at `date`, Seconds = $SECONDS"  

else 

  echo "Waiting for Interface $iface to come up..."
  while true; do var=`ifconfig $iface` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done 
  echo "$iface is now available at `date` , Seconds = $SECONDS"
fi


#if [ -n "$ip_client" ]; then
#echo "Waiting for route to be setup before iperf makes connection..."
#  var=`route -n | grep $ip_client`
#  if ["$var" != "" ] ; then break; fi
#
#fi

echo "Sleeping for additional $timeout seconds"
sleep $timeout

echo "Starting iperf at `date` , Seconds = $SECONDS ...."
iperf ${iperf_args[@]}