ASR_BASE

Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/external/management/net/freeswitch/files/freeswitch.hotplug b/external/management/net/freeswitch/files/freeswitch.hotplug
new file mode 100644
index 0000000..93b5a20
--- /dev/null
+++ b/external/management/net/freeswitch/files/freeswitch.hotplug
@@ -0,0 +1,142 @@
+#!/bin/sh
+
+NAME=freeswitch
+COMMAND=/etc/init.d/$NAME
+
+LOGGER="/usr/bin/logger -t $NAME-hotplug"
+LOG_ERR="$LOGGER -p daemon.err --"
+LOG_INFO="$LOGGER -p daemon.info --"
+LOG_WARN="$LOGGER -p daemon.warn --"
+
+[ "$ACTION" = ifup ] || exit 0
+
+. /lib/functions.sh
+config_load $NAME
+
+config_get interface hotplug interface
+
+[ "$INTERFACE" = "$interface" ] || exit 0
+
+pidof $NAME &> /dev/null
+if [ $? -eq 0 ]; then
+  $LOG_INFO stopping $NAME
+  $COMMAND stop &> /dev/null
+fi
+
+config_get timeout hotplug timeout 60
+
+[ "$timeout" -gt 0 ] 2> /dev/null || unset timeout
+timeout="${timeout:-60}"
+
+config_get mount_point hotplug mount_point
+
+# Mount condition, idea lifted from OpenWrt Wiki
+[ -n "$mount_point" ] && {
+
+  if ! [ -d "$mount_point" ]; then
+    $LOG_ERR "$mount_point" not a valid mount point
+    exit 1
+  fi
+
+  mnt="$mount_point"
+  notReady=start
+  tmp_timeout=$timeout
+
+  while [ -n "$notReady" -a $tmp_timeout -gt 0 ]; do
+    if [ "$notReady" != start ]; then
+      $LOG_INFO "$mnt" not yet mounted, timeout in $tmp_timeout s
+      sleep 5
+      tmp_timeout=$(($tmp_timeout-5))
+    fi
+
+    notReady=
+
+    result=$(cat /proc/mounts | awk '{print $2}' | grep "^$mnt\$")
+    if [ -z "$result" ]; then
+      notReady="$mnt not ready yet"
+    fi
+  done
+
+  if [ -n "$notReady" ]; then
+    $LOG_ERR "$mnt" still not mounted
+    $LOG_ERR not starting $NAME
+    exit 1
+  else
+    $LOG_INFO "$mnt" mounted
+  fi
+
+}
+
+config_get_bool ntpd hotplug ntpd 0
+
+# ntpd condition
+[ $ntpd -eq 1 ] && {
+
+  type ntpq &> /dev/null
+  [ $? -eq 0 ] || {
+    $LOG_ERR ntpq utility not found
+    exit 1
+  }
+
+  pidof ntpd &> /dev/null || {
+    $LOG_ERR ntpd not running
+    exit 1
+  }
+
+  notReady=start
+  tmp_timeout=$timeout
+
+  while [ -n "$notReady" -a $tmp_timeout -gt 0 ]; do
+    if [ "$notReady" != start ]; then
+      $LOG_INFO system time not in sync yet, timeout in $tmp_timeout s
+      sleep 5
+      tmp_timeout=$(($tmp_timeout-5))
+    fi
+
+    notReady=
+
+    result=$(ntpq -c 'timeout 300' -c 'rv 0 stratum' 2> /dev/null | \
+                    awk -F '=' '{print $2}' | grep -o -E '^[0-9]+')
+    if [ -z $result ]; then
+      $LOG_WARN failed to extract stratum from ntpd
+      notReady="unable to extract stratum"
+    else
+      $LOG_INFO ntpd stratum $result
+      if [ $result -lt 16 ] 2> /dev/null; then
+        result=$(ntpq -c 'timeout 300' -c 'rv 0 offset' 2> /dev/null \
+                 | awk -F '=' '{print $2}' | grep -o -E '^[-+]?[0-9]+')
+        if [ -z $result ]; then
+          $LOG_WARN failed to extract offset from ntpd
+          notReady="unable to extract offset"
+        else
+          # "-0" looks stupid, so remove "-"
+          result=$(echo $result | grep -o '[0-9]*')
+          $LOG_INFO ntpd to system time offset \+\/\- $result ms
+          # If offset < 100 ms consider system time in sync
+          [ $result -lt 100 ] || notReady="system time not in sync yet"
+        fi
+      else
+        notReady="ntpd not in sync yet"
+      fi
+    fi
+  done
+
+  if [ -n "$notReady" ]; then
+    $LOG_ERR system time still not in sync
+    $LOG_ERR not starting $NAME
+    exit 1
+  else
+    $LOG_INFO system time in sync
+  fi
+
+}
+
+$COMMAND start &> /dev/null
+sleep 1
+pidof $NAME &>/dev/null
+if [ $? -eq 0 ]; then
+  $LOG_INFO started $NAME due to \"ifup "$INTERFACE"\" event
+else
+  $LOG_ERR start of $NAME due to \"ifup "$INTERFACE"\" event failed
+  exit 1
+fi