Files
openairinterface5g/cmake_targets/tools/build_epc
T
Lionel Gauthier 919842b5ea minor
git-svn-id: http://svn.eurecom.fr/openair4G/trunk@7584 818b1a75-f10b-46b9-bf7c-635c3b92a50f
2015-06-17 14:32:39 +00:00

303 lines
10 KiB
Bash
Executable File

#!/bin/bash
################################################################################
# OpenAirInterface
# Copyright(c) 1999 - 2014 Eurecom
#
# OpenAirInterface is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) anylater version.
#
#
# OpenAirInterface is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with OpenAirInterface.The full GNU General Public License is
# included in this distribution in the file called "COPYING". If not,
# see <http://www.gnu.org/licenses/>.
#
# Contact Information
# OpenAirInterface Admin: openair_admin@eurecom.fr
# OpenAirInterface Tech : openair_tech@eurecom.fr
# OpenAirInterface Dev : openair4g-devel@eurecom.fr
#
# Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
#
################################################################################
# file build_epc
# brief
# author Lionel Gauthier
# company Eurecom
# email: lionel.gauthier@eurecom.fr
#
################################
# include helper functions
################################
THIS_SCRIPT_PATH=$(dirname $(readlink -f $0))
source $THIS_SCRIPT_PATH/build_helper
function help()
{
echo_error " "
echo_error "Usage: build_epc [OPTION]..."
echo_error "Build the EPC executable."
echo_error " "
echo_error "Options:"
echo_error "Mandatory arguments to long options are mandatory for short options too."
echo_error " -c, --clean Clean the build generated files (build from scratch)"
echo_error " -C, --conf-files-only Generate only EPC configuration files (no build)"
echo_error " -d, --debug Compile with debug informations."
echo_error " -h, --help Print this help."
echo_error " -g, --gtpu-easy-module Used for debugging GTPU (kernel module can be easily removed, for dev and debug purpose only)"
echo_error " -G, --gtpu-full-speed Best GTPU throughput performance, but cannot be removed (default)."
echo_error " -H, --hss hostname HSS hostname (with FQDN), default is this host (`hostname --fqdn`)."
echo_error " -i, --check-installed-software Check installed software packages necessary to build and run EPC (support Ubuntu 14.04)."
l_realm=`hostname --fqdn`
l_realm=${l_realm#*.}
echo_error " -r, --realm realm Realm of the MME (if not specified, is extracted from this host FQDN ($l_realm))."
echo_error " -s, --transport-sctp-only Diameter use SCTP only (TCP disabled)."
echo_error " -S, --s6a-server MME act as a server on s6a interface (useful when HSS and MME/EPC run on the same host)."
echo_error " -t, --transport-tcp-only Diameter use TCP only (SCTP disabled)."
echo_error " -T, --transport-prefer-tcp Diameter prefer TCP."
echo_error " -v, --verbose Build process verbose."
echo_error " "
echo_error "Examples:"
echo_error " "
echo_error "Case 1 - EPC run on same HSS host"
echo_error "build_epc -d -S -t -T"
echo_error " "
echo_error "Case 2 - EPC and HSS do not run on same host"
echo_error "build_epc -d -s -H my_hss_fqdn"
}
function main()
{
local -i clean=0
local -i conf_files_only=0
local -i verbose=0
local -i s6a_server=0
local cmake_args=" "
local make_args="-j $NUM_CPU"
local realm=""
local gtpu_cmake_arg="-DFLAG_GTPV1U_KERNEL_THREAD_SOCK_NO_WAIT=False"
local hss_fqdn=""
local hss_hostname=""
local hss_ip=""
local REL="Rel10"
until [ -z "$1" ]
do
case "$1" in
-c | --clean)
clean=1
echo "Clean the build generated files (build from scratch)"
shift;
;;
-C | --conf-files-only)
conf_files_only=1
echo "Generate only conf files (no build)"
shift;
;;
-d | --debug)
cmake_args="$cmake_args -DDEBUG=1"
echo "Compile with debug informations"
shift;
;;
-g | --gtpu-easy-module)
gtpu_cmake_arg="-DFLAG_GTPV1U_KERNEL_THREAD_SOCK_NO_WAIT=True"
echo "Compile with not optimized GTPU kernel module option (but kernel module easy to remove)"
shift;
;;
-G | --gtpu-full-speed)
echo "Compile with best performance GTPU kernel module option"
shift;
;;
-h | --help)
help
shift;
exit 0
;;
-H | --hss)
hss_fqdn=$2
cmake_args="$cmake_args -DHSS_FQDN=$hss_fqdn"
shift 2;
;;
-i | --check-installed-software)
echo "Check installed software packages necessary to build and run EPC (support Ubuntu 14.04):"
set_openair_env
check_install_oai_software
check_install_additional_tools
exit 0
;;
-r | --realm)
echo "Realm: $2"
realm=$2
cmake_args="$cmake_args -DREALM=$realm"
shift 2;
;;
-s | --transport-sctp-only)
echo "Diameter use SCTP (TCP disabled), this is the default option."
cmake_args="$cmake_args -DTRANSPORT_option=No_TCP"
shift;
;;
-S | --s6a-server)
echo "MME act as a server on s6a"
s6a_server=1
cmake_args="$cmake_args -DMME_S6A_IS_SERVER=1"
shift 1;
;;
-t | --transport-tcp-only)
echo "Diameter use TCP (SCTP disabled)."
cmake_args="$cmake_args -DTRANSPORT_option=No_SCTP"
shift;
;;
-T | --transport-prefer-tcp)
echo "Diameter prefer TCP (TCP, SCTP enabled)."
cmake_args="$cmake_args -DTRANSPORT_PREFER_TCP_option=Prefer_TCP"
shift;
;;
-v | --verbose)
echo "Make build process verbose"
cmake_args="$cmake_args -DCMAKE_VERBOSE_MAKEFILE=ON"
make_args="VERBOSE=1 $make_args"
verbose=1
shift;
;;
*)
echo "Unknown option $1"
help
exit 1
;;
esac
done
cmake_args="$cmake_args $gtpu_cmake_arg"
# extra arguments processing
if [[ z$hss_fqdn = z ]]; then
hss_fqdn=`hostname --fqdn`
cmake_args="$cmake_args -DHSS_FQDN=$hss_fqdn"
if [[ z$realm = z ]]; then
realm=$hss_fqdn
realm=${realm#*.}
cmake_args="$cmake_args -DREALM=$realm"
fi
else
if [[ z$realm = z ]]; then
realm=${hss_fqdn#*.}
cmake_args="$cmake_args -DREALM=$realm"
fi
fi
hss_hostname=${hss_fqdn%%.*}
cmake_args="$cmake_args -DHSS_HOSTNAME=$hss_hostname"
hss_ip=`resolveip --silent $hss_hostname`
if [[ z$hss_ip = z ]]; then
hss_ip=`resolveip --silent $hss_fqdn`
fi
if [[ z$hss_ip = z ]]; then
echo_abort "Unable to get HSS IP addr of $hss_fqdn"
fi
cmake_args="$cmake_args -DHSS_IP=$hss_ip"
set_openair_env
if [[ $verbose -eq 1 ]]; then
cecho "OPENAIR_DIR = $OPENAIR_DIR" $green
fi
# for conf files copy in this bash script
if [ -d /usr/lib/freeDiameter ]; then
export FREEDIAMETER_PREFIX=/usr
else
if [ -d /usr/local/lib/freeDiameter ]; then
export FREEDIAMETER_PREFIX=/usr/local
else
echo_fatal "FreeDiameter prefix not found, install freeDiameter if EPC, HSS"
fi
fi
local dbin=$OPENAIR_DIR/targets/bin
local dlog=$OPENAIR_DIR/cmake_targets/log
local dconf=$OPENAIR_DIR/targets/bin
mkdir -m 777 -p $dbin $dlog
##############################################################################
# Compile userspace executable
##############################################################################
cd $OPENAIR_DIR/cmake_targets/epc_build_oai
if [ $clean -ne 0 ]; then
if [[ $verbose -eq 1 ]]; then
echo "Cleaning EPC: certificates, generated configuration files, obj files, mme_gw executable, GTP kernel module"
fi
rm -f $OPENAIR_DIR/targets/bin/mme_gw
rm -Rf build 2>&1
$SUDO rm -Rf $OPENAIR_TARGETS/CMAKE/EPC/MME_GW/build 2>&1
$SUDO rm -f /usr/local/etc/freeDiameter/mme* 2>&1
$SUDO rm -f /usr/local/etc/freeDiameter/epc* 2>&1
$SUDO rm -f /usr/etc/freeDiameter/mme* 2>&1
$SUDO rm -f /usr/etc/freeDiameter/epc* 2>&1
$SUDO rm -f $OPENAIR_DIR/targets/bin/xt_GTPU*.ko 2>&1
(cd $OPENAIRCN_DIR/GTPV1-U/GTPUAH && $SUDO make clean)
$SUDO rm -f $OPENAIRCN_DIR/GTPV1-U/GTPUAH/Bin/* 2>&1
$SUDO rm -f /lib/xtables/libxt_GTPU*.so 2>&1
mkdir -m 777 -p -v build
fi
##############################################################################
# Compile EPC
##############################################################################
cd $OPENAIR_DIR/cmake_targets/epc_build_oai
#cd $OPENAIR_TARGETS/CMAKE/EPC/MME_GW
if [ ! -d ./build ]; then
mkdir -m 777 -p -v build
fi
cmake_file=./CMakeLists.txt
cp $OPENAIR_DIR/cmake_targets/epc_build_oai/CMakeLists.template $cmake_file
echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file
cd ./build
cmake $cmake_args ..
#make $make_args -j $NUM_CPU
if [ $conf_files_only -eq 0 ]; then
compilations \
epc_build_oai mme_gw \
mme_gw $dbin/mme_gw.$REL
# Only integrated mme+sgw+pgw is operational today
compilations \
epc_build_oai xt_GTPUAH_lib \
libxt_GTPUAH_lib.so $dbin
compilations \
epc_build_oai xt_GTPUAH \
CMakeFiles/xt_GTPUAH/xt_GTPUAH.ko $dbin
echo_info "Copying iptables libraries into system directory: /lib/xtables"
if [ -f $dbin/libxt_GTPUAH_lib.so ] ; then
$SUDO rm -f /lib/xtables/libxt_GTPUAH.so
$SUDO ln -s $dbin/libxt_GTPUAH_lib.so /lib/xtables/libxt_GTPUAH.so
else
echo_fatal "not installed GTP-U iptables: binaries not found"
fi
fi
# Do EPC
if [ -f $OPENAIR_DIR/cmake_targets/epc_build_oai/build/mme_fd.conf ] ; then
cp -uv $OPENAIR_DIR/cmake_targets/epc_build_oai/build/epc*.conf $dconf
$SUDO cp -uv $OPENAIR_DIR/cmake_targets/epc_build_oai/build/mme_fd.conf $FREEDIAMETER_PREFIX/etc/freeDiameter
else
echo_fatal "not installed EPC config files: not found"
fi
}
main "$@"