VOL-2934: ONL In Band Management support
- Makefile changes to build Integrated ONL image with
BAL, Openolt agent and Inband startup scripts.
- Inband startup scripts enable single Inband channel, creates
inband tagged interfaces, allocates IP to them then start
dev_mgmt_daemon and Openolt services.
- Openolt gRPC server will be listening on inband interface IP.
- Readme file update with Inband ONL build procedure.
Change-Id: Ia441151d13fd55c331f74d2e8794b44d299549fd
diff --git a/agent/inband/scripts/validate_onl_installation.sh b/agent/inband/scripts/validate_onl_installation.sh
new file mode 100644
index 0000000..8cbccbc
--- /dev/null
+++ b/agent/inband/scripts/validate_onl_installation.sh
@@ -0,0 +1,338 @@
+#!/bin/bash
+
+#Copyright 2018-present Open Networking Foundation
+#
+#Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+#
+#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.
+
+### BEGIN INIT INFO
+# Provides: validate_onl_installation.sh
+# Required-Start: $all
+# Required-Stop: $network $local_fs $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: This script validates ONL installation by checking if expected interfaces and
+# services are UP and RUNNING.
+# Description:
+# Following are the interafces and services considered for validation:
+# 1. Based on the device type(asfvolt16/asgvolt64) this script validates whether
+# eth2.<VLAN_ID>/eth1.<VLAN_ID> is up and running
+# 3. Validate system services
+# a. openolt driver
+# b. dev_mgmt_daemon
+# c. onlp
+# d. sshd
+# e. dhclient
+# returns the current status if service is up or not.
+### END INIT INFO
+
+#------------------------------------------------------------------------------
+# GLOBAL VARIABLES
+#------------------------------------------------------------------------------
+
+# Time interval in seconds to execute each function call for validation.
+TIME_INTERVAL=2
+
+# Total time required to validate all services.
+TOTAL_VALIDATION_TIME=20
+
+# Root path where required bal directories are located
+BRCM_DIR='/broadcom'
+
+# Path to vlan config file
+VLAN_CONFIG_FILE="${BRCM_DIR}/vlan.config"
+
+# vlan id for asfvolt16
+ASFVOLT16_VLAN_ID_ETH2=
+
+# vlan id for asgvolt64
+ASGVOLT64_VLAN_ID_ETH1=
+
+OLT_MODEL=$(cat /sys/devices/virtual/dmi/id/board_name)
+ASF16_MODEL="ASXvOLT16"
+# interfaces
+ETH1=eth1
+ETH2=eth2
+
+#------------------------------------------------------------------------------
+# Function Name: does_logger_exist
+# Description:
+# This function check if logger exist and executable.
+#
+# Globals:
+# None
+#
+# Arguments:
+# None
+#
+# Returns:
+# returns 0 if exist and executable else 1
+#------------------------------------------------------------------------------
+does_logger_exist()
+{
+cmd=/usr/bin/logger
+if [ -x ${cmd} ]; then
+ return 0
+ else
+ return 1
+ fi
+}
+
+#------------------------------------------------------------------------------
+# Function Name: info_message
+# Description:
+# This function print the info message information to the console
+#
+# Globals:
+# None
+#
+# Arguments:
+# string message
+#
+# Returns:
+# None
+#------------------------------------------------------------------------------
+info_message()
+{
+ echo "INFO: $1"
+ logger -p user.info "$1"
+}
+
+#------------------------------------------------------------------------------
+# Function Name: error_message
+# Description:
+# This function print the error message information to the console
+#
+# Globals:
+# None
+#
+# Arguments:
+# string message
+#
+# Returns:
+# returns 1
+#------------------------------------------------------------------------------
+error_message()
+{
+ echo "ERROR: $1"
+ logger -p user.err "$1"
+ return 1
+}
+
+#------------------------------------------------------------------------------
+# Function Name: is_interface_up_running
+# Description:
+# This function validate the interface whether it is UP and RUNNING or DOWN.
+#
+# Globals:
+# None
+#
+# Arguments:
+# interface name
+#
+# Returns:
+# returns 0 if interface is up and running and returns 1 if interface is down
+#------------------------------------------------------------------------------
+is_interface_up_running()
+{
+ info_message "Validating interface - $1"
+ interface_name=$1
+ ifconfig ${interface_name} | grep -q "UP BROADCAST RUNNING MULTICAST"
+ if [ $? -eq 0 ]; then
+ info_message "${interface_name} UP & RUNNING"
+ echo "---------------------------------------------------------------------"
+ return 0
+ else
+ error_message "${interface_name} is DOWN"
+ echo "---------------------------------------------------------------------"
+ return 1
+ fi
+}
+
+#------------------------------------------------------------------------------
+# Function Name : validate_interfaces
+# Description:
+# This function validate interfaces ${ETH2}.${ASFVOLT16_VLAN_ID_ETH2} and
+# ${ETH3}.${ASFVOLT16_VLAN_ID_ETH3} or ${ETH1}.${ASGVOLT64_VLAN_ID_ETH1} and
+# ${ETH2}.${ASGVOLT64_VLAN_ID_ETH2} based on OLT model.
+# Basically it validates if these interfaces are UP and RUNNING or not
+#
+# Globals:
+# ASFVOLT16_VLAN_ID_ETH2, ASFVOLT16_VLAN_ID_ETH3, ASGVOLT64_VLAN_ID_ETH1,
+# ASGVOLT64_VLAN_ID_ETH2, ETH1, ETH2, ETH3
+#
+#
+# Arguments:
+# None
+#
+# Returns:
+# return 1 if interface are down else returns 0
+#------------------------------------------------------------------------------
+validate_interfaces()
+{
+ # Validating interfaces whether they are UP and RUNNING or not
+ if [ "${OLT_MODEL}" = ${ASF16_MODEL} ]; then
+ is_interface_up_running ${ETH2}.${ASFVOLT16_VLAN_ID_ETH2}
+ if [ $? -eq 0 ]; then
+ return 0
+ else
+ return 1
+ fi
+ else
+ is_interface_up_running ${ETH1}.${ASGVOLT64_VLAN_ID_ETH1}
+ if [ $? -eq 0 ]; then
+ return 0
+ else
+ return 1
+ fi
+ fi
+}
+
+#------------------------------------------------------------------------------
+# Function Name: validate_system_services
+# Description:
+# This function checks if the below services/processes are running or not.
+# 1. dev_mgmt_daemon
+# 2. openolt
+# 3. onlp
+# 4. sshd
+# 5. dhclient
+# Globals:
+# ASFVOLT16_VLAN_ID_ETH2, ASFVOLT16_VLAN_ID_ETH3, ASGVOLT64_VLAN_ID_ETH1,
+# ASGVOLT64_VLAN_ID_ETH2, ETH1, ETH2, ETH3
+#
+#
+# Arguments:
+# None
+#
+# Returns:
+# returns 0
+#------------------------------------------------------------------------------
+validate_system_services()
+{
+ echo "---------------------------------------------------------------------"
+ echo "Validating Services"
+ echo "---------------------------------------------------------------------"
+
+ dhclient_interface dhclient_val1
+ for service_name in dev_mgmt_daemon openolt onlpd ssh ${dhclient_val1}
+ do
+ echo "---------------------------------------------------------------------"
+ ps -ef | grep -v grep | grep ${service_name}
+ #service ${service_name} status
+ if [ $? -eq 0 ]; then
+ info_message "${service_name} service is running"
+ else
+ error_message "${service_name} is not running"
+ return 1
+ fi
+ echo "---------------------------------------------------------------------"
+ done
+ return 0
+}
+
+#------------------------------------------------------------------------------
+# Function Name: dhclient_interface
+# Description:
+# This function sets values to which tagged interface dhclient service need
+# to be tested based on the OLT model package.
+#
+# Globals:
+# ASFVOLT16_VLAN_ID_ETH2, ASFVOLT16
+# ASGVOLT64_VLAN_ID_ETH1, ETH1, ETH2
+#
+# Arguments:
+# None
+#
+# Returns:
+# None
+#------------------------------------------------------------------------------
+dhclient_interface()
+{
+ local value1=$1
+ if [ "${OLT_MODEL}" = ${ASF16_MODEL} ]; then
+ dhclient1=dhclient.${ETH2}.${ASFVOLT16_VLAN_ID_ETH2}
+ eval $value1="'$dhclient1'"
+ else
+ dhclient2=dhclient.${ETH1}.${ASGVOLT64_VLAN_ID_ETH1}
+ eval $value1="'$dhclient2'"
+ fi
+
+}
+
+#------------------------------------------------------------------------------
+# Function Name: check_services
+# Description:
+# This function checks if the expected services like onlp, sshd, dev_mgmt_daemon, dhclient
+# and also checks that physical and vlan interfaces are up.
+# This script times out and returns an error code of 1 if all vaildations don't turn out to be successful
+# in counter a number is equal to 20
+#
+# Globals:
+# VLAN_CONFIG_FILE, ASFVOLT16_VLAN_ID_ETH2, ASGVOLT64_VLAN_ID_ETH1,
+# TIME_INTERVAL, ASFVOLT16
+#
+# Arguments:
+# None
+#
+# Returns:
+# None
+#------------------------------------------------------------------------------
+check_services()
+{
+ if [ -f ${VLAN_CONFIG_FILE} ]; then
+ ASFVOLT16_VLAN_ID_ETH2=$(awk '/asfvolt16_vlan_id_eth2/{print $0}' ${VLAN_CONFIG_FILE} | awk -F "=" '{print $2}')
+ ASGVOLT64_VLAN_ID_ETH1=$(awk '/asgvolt64_vlan_id_eth1/{print $0}' ${VLAN_CONFIG_FILE} | awk -F "=" '{print $2}')
+ if [ "${OLT_MODEL}" = ${ASF16_MODEL} ]; then
+ if [ ${ASFVOLT16_VLAN_ID_ETH2} -gt 4094 ] || [ ${ASFVOLT16_VLAN_ID_ETH2} -lt 1 ]; then
+ error_message "vlan ids not in range"
+ exit 1
+ fi
+ else
+ if [ ${ASGVOLT64_VLAN_ID_ETH1} -gt 4094 ] || [ ${ASGVOLT64_VLAN_ID_ETH1} -lt 1 ]; then
+ error_message "vlan ids not in range"
+ exit 1
+ fi
+ fi
+ else
+ error_message "${VLAN_CONFIG_FILE} does not exist"
+ exit 1
+ fi
+ echo "*********************************************************************"
+ info_message "Validating ONL Installation"
+ echo "*********************************************************************"
+ for func_name in validate_interfaces validate_system_services
+ do
+ counter=0
+ while true; do
+ sleep ${TIME_INTERVAL}
+ $func_name
+ if [ $? -eq 0 ]; then
+ break
+ fi
+ if [ $counter -eq $TOTAL_VALIDATION_TIME ]; then
+ error_message "Time out ,vlan interfaces or all services may not be up"
+ return 1
+ fi
+ counter=$((counter+${TIME_INTERVAL}))
+ done
+ done
+ return 0
+}
+
+does_logger_exist
+if [ $? -eq 0 ]; then
+ check_services
+else
+ error_message "logger does not exist"
+ exit 1
+fi