#!/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 . # # 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 ############################################################################## rm -f $OPENAIR_DIR/targets/bin/mme_gw cd $OPENAIR_DIR/cmake_targets/epc_build_oai if [ $clean -ne 0 ]; then if [[ $verbose -eq 1 ]]; then echo "Cleaning EPC" fi 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 oai_sgw \ # oai_sgw $dbin/oai_sgw.$REL 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 "$@"