blob: ab9d06c76e9e5c12e16ff2f33be8a672b7f59dbd [file] [log] [blame]
#!/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 inband config file
INBAND_CONFIG_FILE="${BRCM_DIR}/inband.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:
# INBAND_CONFIG_FILE, ASFVOLT16_VLAN_ID_ETH2, ASGVOLT64_VLAN_ID_ETH1,
# TIME_INTERVAL, ASFVOLT16
#
# Arguments:
# None
#
# Returns:
# None
#------------------------------------------------------------------------------
check_services()
{
if [ -f ${INBAND_CONFIG_FILE} ]; then
ASFVOLT16_VLAN_ID_ETH2=$(awk '/asfvolt16_vlan_id_eth2/{print $0}' ${INBAND_CONFIG_FILE} | awk -F "=" '{print $2}')
ASGVOLT64_VLAN_ID_ETH1=$(awk '/asgvolt64_vlan_id_eth1/{print $0}' ${INBAND_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 "${INBAND_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