Basically when skiping an unknown extension, asn1c did read 24 bits per 24 bits and later on failed if the remaining bits (up to 23) were superior to 8. The patch reads 1 bit per 1 bit. git-svn-id: http://svn.eurecom.fr/openair4G/trunk@7704 818b1a75-f10b-46b9-bf7c-635c3b92a50f
480 lines
14 KiB
Plaintext
Executable File
480 lines
14 KiB
Plaintext
Executable File
################################################################################
|
|
# 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) any later 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_helper
|
|
# brief
|
|
# author Laurent Thomas
|
|
#
|
|
#######################################
|
|
SUDO=sudo
|
|
|
|
###############################
|
|
## echo and family
|
|
###############################
|
|
black='\E[30m'
|
|
red='\E[31m'
|
|
green='\E[32m'
|
|
yellow='\E[33m'
|
|
blue='\E[1;34m'
|
|
magenta='\E[35m'
|
|
cyan='\E[36m'
|
|
white='\E[37m'
|
|
reset_color='\E[00m'
|
|
COLORIZE=1
|
|
|
|
cecho() {
|
|
# Color-echo
|
|
# arg1 = message
|
|
# arg2 = color
|
|
local default_msg="No Message."
|
|
message=${1:-$default_msg}
|
|
color=${2:-$green}
|
|
[ "$COLORIZE" = "1" ] && message="$color$message$reset_color"
|
|
echo -e "$message"
|
|
return
|
|
}
|
|
|
|
echo_error() { cecho "$*" $red ;}
|
|
echo_fatal() { cecho "$*" $red; exit -1 ;}
|
|
echo_warning() { cecho "$*" $yellow ;}
|
|
echo_success() { cecho "$*" $green ;}
|
|
echo_info() { cecho "$*" $blue ;}
|
|
|
|
|
|
|
|
###########################
|
|
# Cleaners
|
|
###########################
|
|
|
|
clean_kernel() {
|
|
$SUDO modprobe ip_tables
|
|
$SUDO modprobe x_tables
|
|
$SUDO iptables -P INPUT ACCEPT
|
|
$SUDO iptables -F INPUT
|
|
$SUDO iptables -P OUTPUT ACCEPT
|
|
$SUDO iptables -F OUTPUT
|
|
$SUDO iptables -P FORWARD ACCEPT
|
|
$SUDO iptables -F FORWARD
|
|
$SUDO iptables -t nat -F
|
|
$SUDO iptables -t mangle -F
|
|
$SUDO iptables -t filter -F
|
|
$SUDO iptables -t raw -F
|
|
echo_info "Flushed iptables"
|
|
$SUDO rmmod nasmesh > /dev/null 2>&1
|
|
$SUDO rmmod oai_nw_drv > /dev/null 2>&1
|
|
$SUDO rmmod openair_rf > /dev/null 2>&1
|
|
$SUDO rmmod ue_ip > /dev/null 2>&1
|
|
echo_info "removed drivers from kernel"
|
|
}
|
|
|
|
clean_all_files() {
|
|
set_openair_env
|
|
dir=$OPENAIR_DIR/cmake_targets
|
|
rm -rf $dir/log $OPENAIR_DIR/targets/bin/*
|
|
rm -rf $dir/lte_build_oai $dir/lte-simulators/build
|
|
rm -rf $dir/epc_build_oai/build $dir/epc_build_oai/CMakeLists.txt
|
|
rm -rf $dir/oaisim_build_oai/build $dir/oaisim_build_oai/CMakeLists.txt
|
|
rm -rf $dir/oaisim_mme_build_oai/build $dir/oaisim_mme_build_oai/CMakeLists.txt
|
|
rm -rf $dir/hss_build/build
|
|
rm -rf $dir/autotests/bin $dir/autotests/log $dir/autotests/*/build
|
|
}
|
|
|
|
###################################
|
|
# Compilers
|
|
###################################
|
|
|
|
compilations() {
|
|
cd $OPENAIR_DIR/cmake_targets/$1/build
|
|
{
|
|
rm -f $3
|
|
make -j4 $2
|
|
} > $dlog/$2.$REL.txt 2>&1
|
|
if [ -s $3 ] ; then
|
|
cp $3 $4
|
|
echo_success "$2 compiled"
|
|
else
|
|
echo_error "$2 compilation failed"
|
|
fi
|
|
}
|
|
|
|
|
|
##########################################
|
|
# X.509 certificates
|
|
##########################################
|
|
|
|
make_one_cert() {
|
|
fqdn=$1
|
|
name=$2
|
|
$SUDO openssl genrsa -out $name.key.pem 1024
|
|
$SUDO openssl req -new -batch -out $name.csr.pem -key $name.key.pem -subj /CN=$name.$fqdn/C=FR/ST=PACA/L=Aix/O=Eurecom/OU=CM
|
|
$SUDO openssl ca -cert cacert.pem -keyfile cakey.pem -in $name.csr.pem -out $name.cert.pem -outdir . -batch
|
|
}
|
|
|
|
make_certs(){
|
|
|
|
fqdn=$1
|
|
certs_dir=$FREEDIAMETER_PREFIX/freeDiameter
|
|
# certificates are stored in diameter config directory
|
|
if [ ! -d $certs_dir ]; then
|
|
echo "Creating non existing directory: $certs_dir"
|
|
$SUDO mkdir -p $certs_dir || echo_error "can't create: $certs_dir"
|
|
fi
|
|
|
|
cd $certs_dir
|
|
echo "creating the CA certificate"
|
|
echo_warning "erase all existing certificates as long as the CA is regenerated"
|
|
$SUDO rm -f $certs_dir/*.pem
|
|
$SUDO mkdir -p $certs_dir/demoCA/
|
|
$SUDO touch $certs_dir/demoCA/index.txt
|
|
$SUDO sh -c "echo 01 > $certs_dir/demoCA/serial"
|
|
|
|
# CA self certificate
|
|
$SUDO openssl req -new -batch -x509 -days 3650 -nodes -newkey rsa:1024 -out cacert.pem -keyout cakey.pem -subj /CN=$fqdn/C=FR/ST=PACA/L=Aix/O=Eurecom/OU=CM
|
|
|
|
# generate hss certificate and sign it
|
|
make_one_cert eur hss
|
|
make_one_cert eur mme
|
|
|
|
# legacy config is using a certificate named 'user'
|
|
make_one_cert eur user
|
|
|
|
}
|
|
|
|
|
|
############################################
|
|
# External packages installers
|
|
############################################
|
|
|
|
install_nettle_from_source() {
|
|
cd /tmp
|
|
echo "Downloading nettle archive"
|
|
rm -rf /tmp/nettle-2.5.tar.gz* /tmp/nettle-2.5
|
|
wget ftp://ftp.lysator.liu.se/pub/security/lsh/nettle-2.5.tar.gz
|
|
tar -xzf nettle-2.5.tar.gz
|
|
cd nettle-2.5/
|
|
./configure --disable-openssl --enable-shared --prefix=/usr
|
|
echo "Compiling nettle"
|
|
make -j4
|
|
make check
|
|
$SUDO make install
|
|
rm -rf /tmp/nettle-2.5.tar.gz /tmp/nettle-2.5
|
|
}
|
|
|
|
install_gnutls_from_source(){
|
|
cd /tmp
|
|
echo "Downloading gnutls archive"
|
|
rm -rf /tmp/gnutls-3.1.23.tar.xz* /tmp/gnutls-3.1.23
|
|
wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.1/gnutls-3.1.23.tar.xz
|
|
tar -xzf gnutls-3.1.23.tar.xz
|
|
cd gnutls-3.1.23/
|
|
./configure --prefix=/usr
|
|
echo "Compiling gnutls"
|
|
make -j4
|
|
$SUDO make install
|
|
rm -rf /tmp/gnutls-3.1.23.tar.xz /tmp/gnutls-3.1.23
|
|
}
|
|
|
|
install_1.1.5_freediameter_from_source() {
|
|
cd /tmp
|
|
echo "Downloading 1.1.5 freeDiameter archive"
|
|
rm -rf /tmp/1.1.5.tar.gz* /tmp/freeDiameter-1.1.5
|
|
wget http://www.freediameter.net/hg/freeDiameter/archive/1.1.5.tar.gz
|
|
tar xzf 1.1.5.tar.gz
|
|
cd freeDiameter-1.1.5
|
|
patch -p1 < $OPENAIR_DIR/openair-cn/S6A/freediameter/freediameter-1.1.5.patch
|
|
mkdir build
|
|
cd build
|
|
cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ../
|
|
echo "Compiling freeDiameter"
|
|
make -j4
|
|
#make test
|
|
$SUDO make install
|
|
rm -rf /tmp/1.1.5.tar.gz /tmp/freeDiameter-1.1.5
|
|
}
|
|
|
|
install_freediameter_from_source() {
|
|
cd /tmp
|
|
echo "Downloading 1.2.0 freeDiameter archive"
|
|
rm -rf /tmp/1.2.0.tar.gz* /tmp/freeDiameter-1.2.0
|
|
wget http://www.freediameter.net/hg/freeDiameter/archive/1.2.0.tar.gz
|
|
tar xzf 1.2.0.tar.gz
|
|
cd freeDiameter-1.2.0
|
|
patch -p1 < $OPENAIR_DIR/openair-cn/S6A/freediameter/freediameter-1.2.0.patch
|
|
mkdir build
|
|
cd build
|
|
cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ../
|
|
echo "Compiling freeDiameter"
|
|
make -j4
|
|
#make test
|
|
$SUDO make install
|
|
rm -rf /tmp/1.2.0.tar.gz /tmp/freeDiameter-1.2.0
|
|
}
|
|
|
|
install_latest_freediameter_from_source() {
|
|
cd /tmp
|
|
rm -rf /tmp/freeDiameter
|
|
echo "Downloading latest freeDiameter trunk (may be unstable)"
|
|
git clone https://github.com/Metaswitch/freeDiameter.git
|
|
cd freeDiameter
|
|
patch -p1 < $OPENAIR_DIR/openair-cn/S6A/freediameter/freediameter-1.2.0.patch
|
|
mkdir build
|
|
cd build
|
|
cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ../
|
|
echo "Compiling freeDiameter"
|
|
make -j4
|
|
#make test
|
|
$SUDO make install
|
|
rm -rf /tmp/freeDiameter
|
|
}
|
|
|
|
|
|
check_install_usrp_uhd_driver(){
|
|
v=$(lsb_release -cs)
|
|
$SUDO apt-add-repository "deb http://files.ettus.com/binaries/uhd/repo/uhd/ubuntu/$v $v main"
|
|
$SUDO apt-get update
|
|
$SUDO apt-get -y install python python-tk libboost-all-dev libusb-1.0-0-dev
|
|
$SUDO apt-get -y install -t `lsb_release -cs` uhd --force-yes
|
|
}
|
|
check_install_bladerf_driver(){
|
|
$SUDO add-apt-repository -y ppa:bladerf/bladerf
|
|
$SUDO apt-get update
|
|
$SUDO apt-get install -y bladerf libbladerf-dev
|
|
$SUDO apt-get install bladerf-firmware-fx3
|
|
$SUDO apt-get install bladerf-fpga-hostedx40
|
|
bladeRF-cli --flash-firmware /usr/share/Nuand/bladeRF/bladeRF_fw.img
|
|
}
|
|
|
|
check_install_additional_tools (){
|
|
$SUDO apt-get update
|
|
$SUDO apt-get install -y \
|
|
check \
|
|
dialog \
|
|
dkms \
|
|
gawk \
|
|
libboost-all-dev \
|
|
libpthread-stubs0-dev \
|
|
openvpn \
|
|
phpmyadmin \
|
|
pkg-config \
|
|
python-dev \
|
|
python-pexpect \
|
|
sshfs \
|
|
swig \
|
|
tshark \
|
|
uml-utilities \
|
|
unzip \
|
|
valgrind \
|
|
vlan \
|
|
ctags
|
|
}
|
|
|
|
check_install_oai_software() {
|
|
|
|
$SUDO apt-get update
|
|
$SUDO apt-get install -y \
|
|
autoconf \
|
|
automake \
|
|
bison \
|
|
build-essential \
|
|
cmake \
|
|
cmake-curses-gui \
|
|
doxygen \
|
|
doxygen-gui\
|
|
texlive-latex-base\
|
|
ethtool \
|
|
flex \
|
|
gccxml \
|
|
gdb \
|
|
git \
|
|
graphviz \
|
|
gtkwave \
|
|
guile-2.0-dev \
|
|
iperf \
|
|
iproute \
|
|
iptables \
|
|
iptables-dev \
|
|
libatlas-base-dev \
|
|
libatlas-dev \
|
|
libblas3gf \
|
|
libblas-dev \
|
|
libconfig8-dev \
|
|
libforms-bin \
|
|
libforms-dev \
|
|
libgcrypt11-dev \
|
|
libgmp-dev \
|
|
libgtk-3-dev \
|
|
libidn2-0-dev \
|
|
libidn11-dev \
|
|
libmysqlclient-dev \
|
|
liboctave-dev \
|
|
libpgm-5.1 \
|
|
libpgm-dev \
|
|
libsctp1 \
|
|
libsctp-dev \
|
|
libssl-dev \
|
|
libtasn1-3-dev \
|
|
libtool \
|
|
libusb-1.0-0-dev \
|
|
libxml2 \
|
|
libxml2-dev \
|
|
linux-headers-`uname -r` \
|
|
mscgen \
|
|
mysql-client \
|
|
mysql-server \
|
|
octave \
|
|
octave-signal \
|
|
openssh-client \
|
|
openssh-server \
|
|
openssl \
|
|
python \
|
|
subversion
|
|
$SUDO update-alternatives --set liblapack.so /usr/lib/atlas-base/atlas/liblapack.so
|
|
if [ `lsb_release -rs` = '12.04' ] ; then
|
|
install_nettle_from_source
|
|
install_gnutls_from_source
|
|
else
|
|
$SUDO apt-get install -y libgnutls-dev nettle-dev nettle-bin
|
|
fi
|
|
install_freediameter_from_source
|
|
install_asn1c_from_source
|
|
}
|
|
|
|
install_asn1c_from_source(){
|
|
mkdir -p /tmp/asn1c-r1516
|
|
cd /tmp/asn1c-r1516
|
|
rm -rf /tmp/asn1c-r1516/*
|
|
svn co https://github.com/vlm/asn1c/trunk /tmp/asn1c-r1516 -r 1516 > /tmp/log_compile_asn1c
|
|
patch -p0 < $OPENAIR_DIR/openair-cn/S1AP/MESSAGES/ASN1/asn1cpatch.p0 >> /tmp/log_compile_asn1c
|
|
patch -p0 < $OPENAIR_DIR/openair-cn/S1AP/MESSAGES/ASN1/asn1cpatch_2.p0 >> /tmp/log_compile_asn1c
|
|
patch -p0 < $OPENAIR_DIR/openair2/RRC/LITE/MESSAGES/asn1c/asn1cpatch.p0 >> /tmp/log_compile_asn1c
|
|
./configure
|
|
make > /tmp/log_compile_asn1c 2>&1
|
|
$SUDO make install
|
|
}
|
|
|
|
#################################################
|
|
# 2. compile
|
|
################################################
|
|
|
|
install_nas_tools() {
|
|
cd $1
|
|
if [ ! -f .ue.nvram ]; then
|
|
echo_success "generate .ue_emm.nvram .ue.nvram"
|
|
./nvram --gen
|
|
else
|
|
[ ./nvram -nt .ue.nvram -o ./nvram -nt .ue_emm.nvram ] && ./nvram --gen
|
|
fi
|
|
|
|
if [ ! -f .usim.nvram ]; then
|
|
echo_success "generate .usim.nvram"
|
|
./usim --gen
|
|
else
|
|
[ ./usim -nt .usim.nvram ] && ./usim --gen
|
|
fi
|
|
|
|
}
|
|
|
|
##################################
|
|
# create HSS DB
|
|
################################
|
|
|
|
# arg 1 is mysql admin (ex: root)
|
|
# arg 2 is mysql password (ex: linux)
|
|
# arg 3 is hss username (ex: hssadmin)
|
|
# arg 4 is hss password (ex: admin)
|
|
# arg 5 is database name (ex: oai_db)
|
|
create_hss_database(){
|
|
EXPECTED_ARGS=5
|
|
if [ $# -ne $EXPECTED_ARGS ]
|
|
then
|
|
echo_error "Usage: $0 dbadmin dbpass hssuser hsspass databasename"
|
|
return 1
|
|
fi
|
|
local mysql_admin=$1
|
|
local mysql_password=$2
|
|
local hss_username=$3
|
|
local hss_password=$4
|
|
local database_name=$5
|
|
|
|
Q1="GRANT ALL PRIVILEGES ON *.* TO '$hss_username'@'localhost' IDENTIFIED BY '$hss_password' WITH GRANT OPTION;"
|
|
Q2="FLUSH PRIVILEGES;"
|
|
mysql -u $mysql_admin --password=$mysql_password -e "${Q1}${Q2}"
|
|
if [ $? -ne 0 ]; then
|
|
echo_error "HSS: $hss_username permissions creation failed"
|
|
echo_error "verify root password for mysql is linux: mysql -u root --password=linux"
|
|
echo_error "if not, reset it to "linux" with sudo dpkg-reconfigure mysql-server-5.5"
|
|
return 1
|
|
else
|
|
echo_success "HSS: $hss_username permissions creation succeeded"
|
|
fi
|
|
|
|
Q3="CREATE DATABASE IF NOT EXISTS $database_name;"
|
|
mysql -u $hss_username --password=$hss_password -e "${Q3}"
|
|
if [ $? -ne 0 ]; then
|
|
echo_error "HSS: $database_name creation failed"
|
|
return 1
|
|
else
|
|
echo_success "HSS: $database_name creation succeeded"
|
|
fi
|
|
|
|
|
|
# test if tables have been created
|
|
mysql -u $hss_username --password=$hss_password -e "desc $database_name.users" > /dev/null 2>&1
|
|
if [ $? -eq 1 ]; then
|
|
mysql -u $hss_username --password=$hss_password $database_name < $OPENAIR_DIR/openair-cn/OPENAIRHSS/db/$database_name.sql
|
|
if [ $? -ne 0 ]; then
|
|
echo_error "HSS: $database_name tables creation failed"
|
|
return 1
|
|
else
|
|
echo_success "HSS: $database_name tables creation succeeded"
|
|
fi
|
|
else
|
|
echo_success "HSS: $database_name tables already created, nothing done"
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
################################
|
|
# set_openair_env
|
|
###############################
|
|
set_openair_env(){
|
|
fullpath=`readlink -f $BASH_SOURCE`
|
|
[ -f "/.$fullpath" ] || fullpath=`readlink -f $PWD/$fullpath`
|
|
openair_path=${fullpath%/cmake_targets/*}
|
|
openair_path=${openair_path%/targets/*}
|
|
openair_path=${openair_path%/openair-cn/*}
|
|
openair_path=${openair_path%/openair[123]/*}
|
|
export OPENAIR_DIR=$openair_path
|
|
export OPENAIR1_DIR=$openair_path/openair1
|
|
export OPENAIR2_DIR=$openair_path/openair2
|
|
export OPENAIR3_DIR=$openair_path/openair3
|
|
export OPENAIRCN_DIR=$openair_path/openair-cn
|
|
export OPENAIR_TARGETS=$openair_path/targets
|
|
}
|
|
|