Merge remote-tracking branch 'origin/develop' into develop-SRS
# Conflicts: # openair1/PHY/LTE_UE_TRANSPORT/pcfich_ue.c
This commit is contained in:
@@ -1,231 +0,0 @@
|
||||
/*
|
||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
||||
* the OAI Public License, Version 1.1 (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.openairinterface.org/?page_id=698
|
||||
*
|
||||
* 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.
|
||||
*-------------------------------------------------------------------------------
|
||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
* contact@openairinterface.org
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <pthread.h>
|
||||
#include <sched.h>
|
||||
|
||||
#include "thread_ipc.h"
|
||||
|
||||
g_thread_ipc_t thread_ipc = {0};
|
||||
|
||||
void loop_buffer_reset(buffer_t *loop_buf)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < BUFFERMAX; i++) {
|
||||
loop_buf[i].subframe_num = -1;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static void loop_buffer_init(loop_buffer_op_t *loop_buffer)
|
||||
{
|
||||
loop_buffer->packet_num = 0;
|
||||
loop_buffer->isfull = 0;
|
||||
loop_buffer->isempty = 1;
|
||||
|
||||
pthread_mutex_init(&loop_buffer->buffer_mutex, NULL);
|
||||
|
||||
pthread_cond_init(&loop_buffer->full_cond, NULL);
|
||||
pthread_cond_init(&loop_buffer->empty_cond, NULL);
|
||||
|
||||
loop_buffer_reset(loop_buffer->loop_buf);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static void sync_buffer_init(sync_buffer_t *sync_buffer)
|
||||
{
|
||||
sync_buffer->decoding_subframe_num = 0;
|
||||
pthread_mutex_init(&sync_buffer->buffer_mutex, NULL);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
int thread_ipc_init(void)
|
||||
{
|
||||
//printf("recv %d\n", thread_ipc.sync_buffer.decoding_subframe_num);
|
||||
thread_ipc.ue_sync_state = 0;
|
||||
thread_ipc.rx_timestamp = 0;
|
||||
thread_ipc.tx_timestamp = 0;
|
||||
thread_ipc.current_subframe = 0;
|
||||
|
||||
pthread_mutex_init(&thread_ipc.dl_decode_mutex, NULL);
|
||||
pthread_mutex_lock(&thread_ipc.dl_decode_mutex);
|
||||
|
||||
pthread_mutex_init(&thread_ipc.ul_send_mutex, NULL);
|
||||
pthread_mutex_lock(&thread_ipc.ul_send_mutex);
|
||||
|
||||
pthread_mutex_init(&thread_ipc.sync_mutex, NULL);
|
||||
pthread_mutex_lock(&thread_ipc.sync_mutex);
|
||||
|
||||
loop_buffer_init(&thread_ipc.loop_buffer);
|
||||
sync_buffer_init(&thread_ipc.sync_buffer);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int thread_ipc_deinit(void)
|
||||
{
|
||||
pthread_mutex_destroy(&thread_ipc.ul_send_mutex);
|
||||
pthread_mutex_destroy(&thread_ipc.sync_mutex);
|
||||
pthread_mutex_destroy(&thread_ipc.dl_decode_mutex);
|
||||
|
||||
pthread_mutex_destroy(&thread_ipc.loop_buffer.buffer_mutex);
|
||||
pthread_cond_destroy(&thread_ipc.loop_buffer.full_cond);
|
||||
pthread_cond_destroy(&thread_ipc.loop_buffer.empty_cond);
|
||||
|
||||
pthread_mutex_destroy(&thread_ipc.sync_buffer.buffer_mutex);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int set_thread_attr(pthread_attr_t *attr, int policy, int priority, int cpuid)
|
||||
{
|
||||
struct sched_param param;
|
||||
cpu_set_t cpu_info;
|
||||
|
||||
pthread_attr_init(attr);
|
||||
|
||||
if (pthread_attr_setschedpolicy(attr, policy) != 0) {
|
||||
perror("pthread_attr_setschedpolicy");
|
||||
return -1;
|
||||
}
|
||||
|
||||
param.sched_priority = priority;
|
||||
|
||||
if (pthread_attr_setschedparam(attr, ¶m) != 0) {
|
||||
perror("pthread_attr_setschedparam");
|
||||
return -1;
|
||||
}
|
||||
|
||||
CPU_ZERO(&cpu_info);
|
||||
CPU_SET(cpuid, &cpu_info);
|
||||
|
||||
if (pthread_attr_setaffinity_np(attr,sizeof(cpu_set_t),&cpu_info)) {
|
||||
perror("pthread_attr_setaffinity_np");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (pthread_attr_setinheritsched(attr, PTHREAD_EXPLICIT_SCHED) != 0) {
|
||||
perror("pthread_attr_setinheritsched");
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int find_subframe_num(unsigned long long current_subframe_num, buffer_t *buf, int *flag)
|
||||
{
|
||||
long long tmp;
|
||||
int i;
|
||||
|
||||
tmp = current_subframe_num;
|
||||
|
||||
for ( i = 0; i < HIGHBUFFER + 1; i++) {
|
||||
if(tmp == buf[i].subframe_num) {
|
||||
return i;
|
||||
} else if (tmp < buf[i].subframe_num) {
|
||||
*flag = 1;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
int ue_unsync_thread_ipc_reset(void)
|
||||
{
|
||||
thread_ipc.ue_sync_state = 0;
|
||||
|
||||
pthread_mutex_lock(&thread_ipc.loop_buffer.buffer_mutex);
|
||||
|
||||
if (thread_ipc.loop_buffer.isempty) {
|
||||
pthread_cond_signal(&thread_ipc.loop_buffer.empty_cond);
|
||||
}
|
||||
|
||||
if (thread_ipc.loop_buffer.isfull) {
|
||||
pthread_cond_signal(&thread_ipc.loop_buffer.full_cond);
|
||||
}
|
||||
|
||||
thread_ipc.loop_buffer.packet_num = 0;
|
||||
thread_ipc.loop_buffer.isfull = 0;
|
||||
thread_ipc.loop_buffer.isempty = 1;
|
||||
|
||||
loop_buffer_reset(thread_ipc.loop_buffer.loop_buf);
|
||||
pthread_mutex_unlock(&thread_ipc.loop_buffer.buffer_mutex);
|
||||
|
||||
thread_ipc.current_subframe = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
void bind_thread2kernel(int cpu_id)
|
||||
{
|
||||
cpu_set_t mask;
|
||||
cpu_set_t get;
|
||||
int i;
|
||||
int num = sysconf(_SC_NPROCESSORS_CONF);
|
||||
//printf("system has %d processor(s) by super\n", num);
|
||||
CPU_ZERO(&mask);
|
||||
CPU_SET(cpu_id, &mask);
|
||||
|
||||
if (pthread_setaffinity_np(pthread_self(), sizeof(mask), &mask) < 0) {
|
||||
fprintf(stderr, "set thread affinity failed\n");
|
||||
}
|
||||
|
||||
/*CPU_ZERO(&get);
|
||||
if (pthread_getaffinity_np(pthread_self(), sizeof(get), &get) < 0) {
|
||||
fprintf(stderr, "get thread affinity failed\n");
|
||||
}
|
||||
for (i = 0; i < num; i++) {
|
||||
if (CPU_ISSET(i, &get)) {
|
||||
printf("thread %d is running in processor %d\n", (int)pthread_self(), i);
|
||||
}
|
||||
}
|
||||
if (CPU_ISSET(cpu_id, &get)) {
|
||||
printf("thread %d is running in processor %d by super\n", (int)pthread_self(), cpu_id);
|
||||
}*/
|
||||
}
|
||||
void get_thread2kernel(void)
|
||||
{
|
||||
cpu_set_t get;
|
||||
int i;
|
||||
int num = sysconf(_SC_NPROCESSORS_CONF);
|
||||
printf("system has %d processor(s) by super\n", num);
|
||||
CPU_ZERO(&get);
|
||||
|
||||
if (pthread_getaffinity_np(pthread_self(), sizeof(get), &get) < 0) {
|
||||
fprintf(stderr, "get thread affinity failed\n");
|
||||
}
|
||||
|
||||
for (i = 0; i < num; i++) {
|
||||
if (CPU_ISSET(i, &get)) {
|
||||
printf("The thread %d is running in processor %d by super\n", (int)pthread_self(), i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,8 +48,6 @@
|
||||
|
||||
#undef MALLOC //there are two conflicting definitions, so we better make sure we don't use it at all
|
||||
|
||||
#include "rt_wrapper.h"
|
||||
|
||||
#include "assertions.h"
|
||||
|
||||
|
||||
@@ -101,7 +99,6 @@ extern RAN_CONTEXT_t RC;
|
||||
//#define USRP_DEBUG 1
|
||||
struct timing_info_t {
|
||||
//unsigned int frame, hw_slot, last_slot, next_slot;
|
||||
RTIME time_min, time_max, time_avg, time_last, time_now;
|
||||
//unsigned int mbox0, mbox1, mbox2, mbox_target;
|
||||
unsigned int n_samples;
|
||||
} timing_info;
|
||||
|
||||
@@ -44,7 +44,6 @@
|
||||
#include <execinfo.h>
|
||||
#include <getopt.h>
|
||||
#include <sys/sysinfo.h>
|
||||
#include "rt_wrapper.h"
|
||||
|
||||
#undef MALLOC //there are two conflicting definitions, so we better make sure we don't use it at all
|
||||
|
||||
|
||||
@@ -34,7 +34,6 @@
|
||||
#define _GNU_SOURCE /* See feature_test_macros(7) */
|
||||
#include <sched.h>
|
||||
|
||||
#include "rt_wrapper.h"
|
||||
#include <common/utils/msc/msc.h>
|
||||
|
||||
|
||||
@@ -518,13 +517,6 @@ static void wait_nfapi_init(char *thread_name) {
|
||||
|
||||
int main ( int argc, char **argv )
|
||||
{
|
||||
set_priority(79);
|
||||
if (mlockall(MCL_CURRENT | MCL_FUTURE) == -1)
|
||||
{
|
||||
fprintf(stderr, "mlockall: %s\n", strerror(errno));
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
int i;
|
||||
int CC_id = 0;
|
||||
int ru_id;
|
||||
@@ -537,8 +529,8 @@ int main ( int argc, char **argv )
|
||||
}
|
||||
|
||||
mode = normal_txrx;
|
||||
set_latency_target();
|
||||
logInit();
|
||||
set_latency_target();
|
||||
printf("Reading in command-line options\n");
|
||||
get_options ();
|
||||
|
||||
@@ -573,13 +565,10 @@ int main ( int argc, char **argv )
|
||||
init_opt();
|
||||
// to make a graceful exit when ctrl-c is pressed
|
||||
set_softmodem_sighandler();
|
||||
check_clock();
|
||||
#ifndef PACKAGE_VERSION
|
||||
# define PACKAGE_VERSION "UNKNOWN-EXPERIMENTAL"
|
||||
#endif
|
||||
LOG_I(HW, "Version: %s\n", PACKAGE_VERSION);
|
||||
printf("Runtime table\n");
|
||||
fill_modeled_runtime_table(runtime_phy_rx,runtime_phy_tx);
|
||||
|
||||
/* Read configuration */
|
||||
if (RC.nb_inst > 0) {
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
#include <fcntl.h>
|
||||
#include <getopt.h>
|
||||
#include <linux/sched.h>
|
||||
#include "rt_wrapper.h"
|
||||
#include <sched.h>
|
||||
#include <signal.h>
|
||||
#include <stdint.h>
|
||||
@@ -21,7 +20,6 @@
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
#include "threads_t.h"
|
||||
#include "rt_wrapper.h"
|
||||
#include "../../ARCH/COMMON/common_lib.h"
|
||||
//#undef MALLOC
|
||||
#include "assertions.h"
|
||||
|
||||
@@ -31,7 +31,6 @@
|
||||
*/
|
||||
#include "lte-softmodem.h"
|
||||
|
||||
#include "rt_wrapper.h"
|
||||
#include "system.h"
|
||||
|
||||
#include "LAYER2/MAC/mac.h"
|
||||
|
||||
@@ -34,9 +34,6 @@
|
||||
#define _GNU_SOURCE /* See feature_test_macros(7) */
|
||||
#include <sched.h>
|
||||
|
||||
#include "rt_wrapper.h"
|
||||
|
||||
|
||||
#undef MALLOC //there are two conflicting definitions, so we better make sure we don't use it at all
|
||||
|
||||
#include "assertions.h"
|
||||
@@ -542,12 +539,6 @@ AssertFatal(false,"");
|
||||
}
|
||||
|
||||
int main( int argc, char **argv ) {
|
||||
set_priority(79);
|
||||
if (mlockall(MCL_CURRENT | MCL_FUTURE) == -1)
|
||||
{
|
||||
fprintf(stderr, "mlockall: %s\n", strerror(errno));
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
int CC_id;
|
||||
uint8_t abstraction_flag=0;
|
||||
@@ -565,8 +556,8 @@ int main( int argc, char **argv ) {
|
||||
|
||||
mode = normal_txrx;
|
||||
memset(&openair0_cfg[0],0,sizeof(openair0_config_t)*MAX_CARDS);
|
||||
set_latency_target();
|
||||
logInit();
|
||||
set_latency_target();
|
||||
printf("Reading in command-line options\n");
|
||||
|
||||
for (int i=0; i<MAX_NUM_CCs; i++) tx_max_power[i]=23;
|
||||
@@ -629,7 +620,6 @@ int main( int argc, char **argv ) {
|
||||
pdcp_pc5_socket_init();
|
||||
// to make a graceful exit when ctrl-c is pressed
|
||||
set_softmodem_sighandler();
|
||||
check_clock();
|
||||
#ifndef PACKAGE_VERSION
|
||||
# define PACKAGE_VERSION "UNKNOWN-EXPERIMENTAL"
|
||||
#endif
|
||||
@@ -663,52 +653,6 @@ int main( int argc, char **argv ) {
|
||||
|
||||
cpuf=get_cpu_freq_GHz();
|
||||
|
||||
|
||||
#if 0 // #ifndef DEADLINE_SCHEDULER
|
||||
|
||||
printf("NO deadline scheduler\n");
|
||||
/* Currently we set affinity for UHD to CPU 0 for eNB/UE and only if number of CPUS >2 */
|
||||
cpu_set_t cpuset;
|
||||
int s;
|
||||
char cpu_affinity[1024];
|
||||
CPU_ZERO(&cpuset);
|
||||
#ifdef CPU_AFFINITY
|
||||
int j;
|
||||
if (get_nprocs() > 2) {
|
||||
for (j = 2; j < get_nprocs(); j++)
|
||||
CPU_SET(j, &cpuset);
|
||||
|
||||
s = pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
|
||||
|
||||
if (s != 0) {
|
||||
perror( "pthread_setaffinity_np");
|
||||
exit_fun("Error setting processor affinity");
|
||||
}
|
||||
LOG_I(HW, "Setting the affinity of main function to all CPUs, for device library to use CPU 0 only!\n");
|
||||
}
|
||||
|
||||
#endif
|
||||
/* Check the actual affinity mask assigned to the thread */
|
||||
s = pthread_getaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
|
||||
|
||||
if (s != 0) {
|
||||
perror( "pthread_getaffinity_np");
|
||||
exit_fun("Error getting processor affinity ");
|
||||
}
|
||||
|
||||
memset(cpu_affinity, 0, sizeof(cpu_affinity));
|
||||
|
||||
for (int j = 0; j < CPU_SETSIZE; j++) {
|
||||
if (CPU_ISSET(j, &cpuset)) {
|
||||
char temp[1024];
|
||||
sprintf(temp, " CPU_%d ", j);
|
||||
strcat(cpu_affinity, temp);
|
||||
}
|
||||
}
|
||||
|
||||
LOG_I(HW, "CPU Affinity of main() function is... %s\n", cpu_affinity);
|
||||
#endif
|
||||
|
||||
if (create_tasks_ue(NB_UE_INST) < 0) {
|
||||
printf("cannot create ITTI tasks\n");
|
||||
exit(-1); // need a softer mode
|
||||
|
||||
@@ -1,383 +0,0 @@
|
||||
/*
|
||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
||||
* the OAI Public License, Version 1.1 (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.openairinterface.org/?page_id=698
|
||||
*
|
||||
* 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.
|
||||
*-------------------------------------------------------------------------------
|
||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
* contact@openairinterface.org
|
||||
*/
|
||||
|
||||
/*! \file rt_wrapper.h
|
||||
* \brief provides a wrapper for the timing function, runtime calculations for real-time opeartions depending on weather RTAI or DEADLINE_SCHEDULER kernels are used or not
|
||||
* \author F. Kaltenberger and Navid Nikaein
|
||||
* \date 2013
|
||||
* \version 0.1
|
||||
* \company Eurecom
|
||||
* \email: florian.kaltenberger@eurecom.fr, navid.nikaein@eurecom.fr
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
#define _GNU_SOURCE
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sched.h>
|
||||
#include <linux/sched.h>
|
||||
#include <signal.h>
|
||||
#include <execinfo.h>
|
||||
#include <getopt.h>
|
||||
#include <sys/sysinfo.h>
|
||||
#include "rt_wrapper.h"
|
||||
#include "system.h"
|
||||
#include <errno.h>
|
||||
#include <common/utils/msc/msc.h>
|
||||
|
||||
#include "openair1/PHY/defs_common.h"
|
||||
|
||||
static int latency_target_fd = -1;
|
||||
static int32_t latency_target_value = 0;
|
||||
/* Latency trick - taken from cyclictest.c
|
||||
* if the file /dev/cpu_dma_latency exists,
|
||||
* open it and write a zero into it. This will tell
|
||||
* the power management system not to transition to
|
||||
* a high cstate (in fact, the system acts like idle=poll)
|
||||
* When the fd to /dev/cpu_dma_latency is closed, the behavior
|
||||
* goes back to the system default.
|
||||
*
|
||||
* Documentation/power/pm_qos_interface.txt
|
||||
*/
|
||||
void set_latency_target(void) {
|
||||
struct stat s;
|
||||
int ret;
|
||||
|
||||
if (stat("/dev/cpu_dma_latency", &s) == 0) {
|
||||
latency_target_fd = open("/dev/cpu_dma_latency", O_RDWR);
|
||||
|
||||
if (latency_target_fd == -1)
|
||||
return;
|
||||
|
||||
ret = write(latency_target_fd, &latency_target_value, 4);
|
||||
|
||||
if (ret == 0) {
|
||||
printf("# error setting cpu_dma_latency to %d!: %s\n", latency_target_value, strerror(errno));
|
||||
close(latency_target_fd);
|
||||
return;
|
||||
}
|
||||
|
||||
printf("# /dev/cpu_dma_latency set to %dus\n", latency_target_value);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
struct timespec interval, next, now, res;
|
||||
clockid_t clock_id = CLOCK_MONOTONIC; //other options are CLOCK_MONOTONIC, CLOCK_REALTIME, CLOCK_PROCESS_CPUTIME_ID, CLOCK_THREAD_CPUTIME_ID
|
||||
RTIME rt_get_time_ns (void)
|
||||
{
|
||||
clock_gettime(clock_id, &now);
|
||||
return(now.tv_sec*1e9+now.tv_nsec);
|
||||
}
|
||||
|
||||
int rt_sleep_ns (RTIME x)
|
||||
{
|
||||
int ret;
|
||||
clock_gettime(clock_id, &now);
|
||||
interval.tv_sec = x/((RTIME)1000000000);
|
||||
interval.tv_nsec = x%((RTIME)1000000000);
|
||||
//rt_printk("sleeping for %d sec and %d ns\n",interval.tv_sec,interval.tv_nsec);
|
||||
next = now;
|
||||
next.tv_sec += interval.tv_sec;
|
||||
next.tv_nsec += interval.tv_nsec;
|
||||
|
||||
if (next.tv_nsec>=1000000000) {
|
||||
next.tv_nsec -= 1000000000;
|
||||
next.tv_sec++;
|
||||
}
|
||||
|
||||
ret = clock_nanosleep(clock_id, TIMER_ABSTIME, &next, NULL);
|
||||
|
||||
/*
|
||||
if (ret==EFAULT)
|
||||
rt_printk("rt_sleep_ns returned EFAULT (%d), reqested %d sec and %d ns\n",ret,next.tv_sec,next.tv_nsec);
|
||||
if (ret==EINVAL)
|
||||
rt_printk("rt_sleep_ns returned EINVAL (%d), reqested %d sec and %d ns\n",ret,next.tv_sec,next.tv_nsec);
|
||||
if (ret==EINTR)
|
||||
rt_printk("rt_sleep_ns returned EINTR (%d), reqested %d sec and %d ns\n",ret,next.tv_sec,next.tv_nsec);
|
||||
*/
|
||||
|
||||
return(ret);
|
||||
}
|
||||
|
||||
void check_clock(void)
|
||||
{
|
||||
if (clock_getres(clock_id, &res)) {
|
||||
printf("clock_getres failed");
|
||||
} else {
|
||||
printf("reported resolution = %lld ns\n", (long long int) ((int) 1e9 * res.tv_sec) + (long long int) res.tv_nsec);
|
||||
}
|
||||
}
|
||||
|
||||
uint16_t cell_processing_dl[6]={10,15,24,42,80,112};
|
||||
uint16_t platform_processing_dl=20; // upperbound for GPP, LXC, DOCKER and KVM
|
||||
uint16_t user_processing_dl_a[6]={2,4,5,7,10,12};
|
||||
uint16_t user_processing_dl_b[6]={10, 15, 25, 70, 110, 150};
|
||||
uint16_t user_processing_dl_err[6]={20, 40, 60, 90, 120, 160};
|
||||
uint16_t protocol_processing_dl[6]={150, 250, 350, 450, 650, 800}; // assumption: max MCS 27 --> gives an upper bound for the transport block size : to be measured
|
||||
|
||||
uint16_t cell_processing_ul[6]={10,15,24,42,80,112};
|
||||
uint16_t platform_processing_ul=30; // upperbound for GPP, LXC, DOCKER and KVM
|
||||
uint16_t user_processing_ul_a[6]={5, 9, 12, 24, 33, 42};
|
||||
uint16_t user_processing_ul_b[6]={20, 30, 40, 76, 140, 200};
|
||||
uint16_t user_processing_ul_err[6]={15, 25, 32, 60, 80, 95};
|
||||
uint16_t protocol_processing_ul[6]={100, 200, 300, 400, 550, 700}; // assumption: max MCS 16 --> gives an upper bound for the transport block size
|
||||
|
||||
int fill_modeled_runtime_table(uint16_t runtime_phy_rx[29][6],
|
||||
uint16_t runtime_phy_tx[29][6]){
|
||||
//double cpu_freq;
|
||||
//cpu_freq = get_cpu_freq_GHz();
|
||||
// target_dl_mcs
|
||||
// target_ul_mcs
|
||||
// frame_parms[0]->N_RB_DL
|
||||
int i,j;
|
||||
memset(runtime_phy_rx,0,sizeof(uint16_t)*29*6);
|
||||
memset(runtime_phy_tx,0,sizeof(uint16_t)*29*6);
|
||||
/* only the BBU/PHY procesing time */
|
||||
for (i=0;i<29;i++){
|
||||
for (j=0;j<6;j++){
|
||||
runtime_phy_rx[i][j] = cell_processing_ul[j] + platform_processing_ul + user_processing_ul_err[j] + user_processing_ul_a[j]*i+ user_processing_ul_b[j];
|
||||
runtime_phy_tx[i][j] = cell_processing_dl[j] + platform_processing_dl + user_processing_dl_err[j] + user_processing_dl_a[j]*i+ user_processing_dl_b[j];
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
// int runtime_upper_layers[6]; // values for different RBs
|
||||
// int runtime_phy_rx[29][6]; // SISO [MCS 0-28][RBs 0-5 : 6, 15, 25, 50, 75, 100]
|
||||
// int runtime_phy_tx[29][6]; // SISO [MCS 0-28][RBs 0-5 : 6, 15, 25, 50, 75, 100]
|
||||
|
||||
// target_dl_mcs
|
||||
// target_ul_mcs
|
||||
// frame_parms[0]->N_RB_DL
|
||||
//runtime_upper_layers[6]; // values for different RBs
|
||||
// int runtime_phy_rx[29][6]; // SISO [MCS 0-28][RBs 0-5 : 6, 15, 25, 50, 75, 100]
|
||||
// int runtime_phy_tx[29][6]
|
||||
|
||||
double get_runtime_tx(int tx_subframe, uint16_t runtime_phy_tx[29][6], uint32_t mcs, int N_RB_DL,double cpuf,int nb_tx_antenna){
|
||||
int i;
|
||||
double runtime;
|
||||
//printf("cpuf =%lf \n",cpuf);
|
||||
switch(N_RB_DL){
|
||||
case 6:
|
||||
i = 0;
|
||||
break;
|
||||
case 15:
|
||||
i = 1;
|
||||
break;
|
||||
case 25:
|
||||
i = 2;
|
||||
break;
|
||||
case 50:
|
||||
i = 3;
|
||||
break;
|
||||
case 75:
|
||||
i = 4;
|
||||
break;
|
||||
case 100:
|
||||
i = 5;
|
||||
break;
|
||||
default:
|
||||
i = 3;
|
||||
break;
|
||||
}
|
||||
|
||||
runtime = ( (3.2/cpuf)*(double)runtime_phy_tx[mcs][i] + (3.2/cpuf)*(double)protocol_processing_dl[i])/1000 ;
|
||||
printf("Setting tx %d runtime value (ms) = %lf\n",tx_subframe,runtime);
|
||||
|
||||
return runtime;
|
||||
}
|
||||
|
||||
double get_runtime_rx(int rx_subframe, uint16_t runtime_phy_rx[29][6], uint32_t mcs, int N_RB_DL,double cpuf,int nb_rx_antenna){
|
||||
int i;
|
||||
double runtime;
|
||||
|
||||
//printf("N_RB_DL=%d cpuf =%lf \n",N_RB_DL, cpuf);
|
||||
switch(N_RB_DL){
|
||||
case 6:
|
||||
i = 0;
|
||||
break;
|
||||
case 15:
|
||||
i = 1;
|
||||
break;
|
||||
case 25:
|
||||
i = 2;
|
||||
break;
|
||||
case 50:
|
||||
i = 3;
|
||||
break;
|
||||
case 75:
|
||||
i = 4;
|
||||
break;
|
||||
case 100:
|
||||
i = 5;
|
||||
break;
|
||||
default:
|
||||
i = 3;
|
||||
break;
|
||||
}
|
||||
|
||||
runtime = ((3.2/cpuf)*(double)runtime_phy_rx[mcs][i] + (3.2/cpuf)*(double)protocol_processing_ul[i])/1000 ;
|
||||
printf("Setting rx %d runtime value (ms) = %lf \n",rx_subframe, runtime);
|
||||
|
||||
return runtime;
|
||||
}
|
||||
|
||||
#ifdef DEADLINE_SCHEDULER
|
||||
int sched_setattr(pid_t pid, const struct sched_attr *attr, unsigned int flags)
|
||||
{
|
||||
|
||||
return syscall(__NR_sched_setattr, pid, attr, flags);
|
||||
}
|
||||
|
||||
|
||||
int sched_getattr(pid_t pid,struct sched_attr *attr,unsigned int size, unsigned int flags)
|
||||
{
|
||||
|
||||
return syscall(__NR_sched_getattr, pid, attr, size, flags);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
void thread_top_init(char *thread_name,
|
||||
int affinity,
|
||||
uint64_t runtime,
|
||||
uint64_t deadline,
|
||||
uint64_t period) {
|
||||
|
||||
MSC_START_USE();
|
||||
|
||||
#ifdef DEADLINE_SCHEDULER
|
||||
struct sched_attr attr;
|
||||
|
||||
unsigned int flags = 0;
|
||||
|
||||
attr.size = sizeof(attr);
|
||||
attr.sched_flags = 0;
|
||||
attr.sched_nice = 0;
|
||||
attr.sched_priority = 0;
|
||||
|
||||
attr.sched_policy = SCHED_DEADLINE;
|
||||
attr.sched_runtime = runtime;
|
||||
attr.sched_deadline = deadline;
|
||||
attr.sched_period = period;
|
||||
|
||||
if (sched_setattr(0, &attr, flags) < 0 ) {
|
||||
perror("[SCHED] eNB tx thread: sched_setattr failed\n");
|
||||
fprintf(stderr,"sched_setattr Error = %s",strerror(errno));
|
||||
exit(1);
|
||||
}
|
||||
|
||||
#else //LOW_LATENCY
|
||||
int policy, s, j;
|
||||
struct sched_param sparam;
|
||||
char cpu_affinity[1024];
|
||||
cpu_set_t cpuset;
|
||||
int settingPriority = 1;
|
||||
|
||||
/* Set affinity mask to include CPUs 2 to MAX_CPUS */
|
||||
/* CPU 0 is reserved for UHD threads */
|
||||
/* CPU 1 is reserved for all RX_TX threads */
|
||||
/* Enable CPU Affinity only if number of CPUs > 2 */
|
||||
CPU_ZERO(&cpuset);
|
||||
|
||||
#ifdef CPU_AFFINITY
|
||||
if (affinity == 0) {
|
||||
LOG_W(HW,"thread_top_init() called with affinity==0, but overruled by #ifdef CPU_AFFINITY\n");
|
||||
}
|
||||
else if (get_nprocs() > 2)
|
||||
{
|
||||
for (j = 2; j < get_nprocs(); j++)
|
||||
CPU_SET(j, &cpuset);
|
||||
s = pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
|
||||
if (s != 0)
|
||||
{
|
||||
perror( "pthread_setaffinity_np");
|
||||
exit_fun("Error setting processor affinity");
|
||||
}
|
||||
}
|
||||
#else //CPU_AFFINITY
|
||||
if (affinity) {
|
||||
LOG_W(HW,"thread_top_init() called with affinity>0, but overruled by #ifndef CPU_AFFINITY.\n");
|
||||
}
|
||||
#endif //CPU_AFFINITY
|
||||
|
||||
/* Check the actual affinity mask assigned to the thread */
|
||||
s = pthread_getaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
|
||||
if (s != 0)
|
||||
{
|
||||
perror( "pthread_getaffinity_np");
|
||||
exit_fun("Error getting processor affinity ");
|
||||
}
|
||||
memset(cpu_affinity,0,sizeof(cpu_affinity));
|
||||
for (j = 0; j < 1024; j++)
|
||||
{
|
||||
if (CPU_ISSET(j, &cpuset))
|
||||
{
|
||||
char temp[1024];
|
||||
sprintf (temp, " CPU_%d", j);
|
||||
strcat(cpu_affinity, temp);
|
||||
}
|
||||
}
|
||||
|
||||
if (checkIfFedoraDistribution())
|
||||
if (checkIfGenericKernelOnFedora())
|
||||
if (checkIfInsideContainer())
|
||||
settingPriority = 0;
|
||||
|
||||
if (settingPriority) {
|
||||
memset(&sparam, 0, sizeof(sparam));
|
||||
sparam.sched_priority = sched_get_priority_max(SCHED_FIFO);
|
||||
policy = SCHED_FIFO;
|
||||
|
||||
s = pthread_setschedparam(pthread_self(), policy, &sparam);
|
||||
if (s != 0) {
|
||||
perror("pthread_setschedparam : ");
|
||||
exit_fun("Error setting thread priority");
|
||||
}
|
||||
|
||||
s = pthread_getschedparam(pthread_self(), &policy, &sparam);
|
||||
if (s != 0) {
|
||||
perror("pthread_getschedparam : ");
|
||||
exit_fun("Error getting thread priority");
|
||||
}
|
||||
|
||||
pthread_setname_np(pthread_self(), thread_name);
|
||||
|
||||
LOG_I(HW, "[SCHED][eNB] %s started on CPU %d, sched_policy = %s , priority = %d, CPU Affinity=%s \n",thread_name,sched_getcpu(),
|
||||
(policy == SCHED_FIFO) ? "SCHED_FIFO" :
|
||||
(policy == SCHED_RR) ? "SCHED_RR" :
|
||||
(policy == SCHED_OTHER) ? "SCHED_OTHER" :
|
||||
"???",
|
||||
sparam.sched_priority, cpu_affinity );
|
||||
}
|
||||
|
||||
#endif //LOW_LATENCY
|
||||
|
||||
mlockall(MCL_CURRENT | MCL_FUTURE);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -1,132 +0,0 @@
|
||||
/*
|
||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
||||
* the OAI Public License, Version 1.1 (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.openairinterface.org/?page_id=698
|
||||
*
|
||||
* 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.
|
||||
*-------------------------------------------------------------------------------
|
||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
* contact@openairinterface.org
|
||||
*/
|
||||
|
||||
/*! \file rt_wrapper.h
|
||||
* \brief provides a wrapper for the timing function for real-time opeartions. It also implements an API for the SCHED_DEADLINE kernel scheduler.
|
||||
* \author F. Kaltenberger and Navid Nikaein
|
||||
* \date 2013
|
||||
* \version 0.1
|
||||
* \company Eurecom
|
||||
* \email: florian.kaltenberger@eurecom.fr, navid.nikaein@eurecom.fr
|
||||
* \note
|
||||
* \warning This code will be removed when a legacy libc API becomes available.
|
||||
*/
|
||||
|
||||
#ifndef _RT_WRAPPER_H_
|
||||
#define _RT_WRAPPER_H_
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <time.h>
|
||||
#include <errno.h>
|
||||
#include <stdint.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <pthread.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/types.h>
|
||||
#include <syscall.h>
|
||||
#include <math.h>
|
||||
#include <sched.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sched.h>
|
||||
#include <linux/sched.h>
|
||||
#include <signal.h>
|
||||
#include <execinfo.h>
|
||||
#include <getopt.h>
|
||||
#include <sys/sysinfo.h>
|
||||
|
||||
#include "common/utils/LOG/log_extern.h"
|
||||
#include "msc.h"
|
||||
|
||||
#define RTIME long long int
|
||||
|
||||
#define rt_printk printf
|
||||
|
||||
void set_latency_target(void);
|
||||
|
||||
RTIME rt_get_time_ns (void);
|
||||
|
||||
int rt_sleep_ns (RTIME x);
|
||||
|
||||
void check_clock(void);
|
||||
|
||||
int fill_modeled_runtime_table(uint16_t runtime_phy_rx[29][6],uint16_t runtime_phy_tx[29][6]);
|
||||
|
||||
double get_runtime_tx(int tx_subframe, uint16_t runtime_phy_tx[29][6],uint32_t mcs, int N_RB_DL,double cpuf,int nb_tx_antenna);
|
||||
|
||||
double get_runtime_rx(int rx_subframe, uint16_t runtime_phy_rx[29][6], uint32_t mcs, int N_RB_DL,double cpuf,int nb_rx_antenna);
|
||||
/**
|
||||
* see https://www.kernel.org/doc/Documentation/scheduler/sched-deadline.txt or
|
||||
* http://www.blaess.fr/christophe/2014/04/05/utiliser-un-appel-systeme-inconnu-de-la-libc/
|
||||
*/
|
||||
#ifdef DEADLINE_SCHEDULER
|
||||
|
||||
#define gettid() syscall(__NR_gettid)
|
||||
|
||||
#define SCHED_DEADLINE 6
|
||||
|
||||
/* XXX use the proper syscall numbers */
|
||||
#ifdef __x86_64__
|
||||
#define __NR_sched_setattr 314
|
||||
#define __NR_sched_getattr 315
|
||||
#endif
|
||||
|
||||
#ifdef __i386__
|
||||
#define __NR_sched_setattr 351
|
||||
#define __NR_sched_getattr 352
|
||||
#endif
|
||||
|
||||
struct sched_attr {
|
||||
__u32 size;
|
||||
|
||||
__u32 sched_policy;
|
||||
__u64 sched_flags;
|
||||
|
||||
/* SCHED_NORMAL, SCHED_BATCH */
|
||||
__s32 sched_nice;
|
||||
|
||||
/* SCHED_FIFO, SCHED_RR */
|
||||
__u32 sched_priority;
|
||||
|
||||
/* SCHED_DEADLINE (nsec) */
|
||||
__u64 sched_runtime;
|
||||
__u64 sched_deadline;
|
||||
__u64 sched_period;
|
||||
};
|
||||
|
||||
int sched_setattr(pid_t pid, const struct sched_attr *attr, unsigned int flags);
|
||||
|
||||
int sched_getattr(pid_t pid,struct sched_attr *attr,unsigned int size, unsigned int flags);
|
||||
|
||||
#endif
|
||||
|
||||
#define gettid() syscall(__NR_gettid) // for gettid
|
||||
|
||||
|
||||
void thread_top_init(char *thread_name,
|
||||
int affinity,
|
||||
uint64_t runtime,
|
||||
uint64_t deadline,
|
||||
uint64_t period);
|
||||
|
||||
#endif
|
||||
@@ -42,7 +42,6 @@
|
||||
#include <execinfo.h>
|
||||
#include <getopt.h>
|
||||
#include <sys/sysinfo.h>
|
||||
#include "rt_wrapper.h"
|
||||
|
||||
#undef MALLOC //there are two conflicting definitions, so we better make sure we don't use it at all
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,840 +0,0 @@
|
||||
#/*
|
||||
# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
# * contributor license agreements. See the NOTICE file distributed with
|
||||
# * this work for additional information regarding copyright ownership.
|
||||
# * The OpenAirInterface Software Alliance licenses this file to You under
|
||||
# * the OAI Public License, Version 1.1 (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.openairinterface.org/?page_id=698
|
||||
# *
|
||||
# * 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.
|
||||
# *-------------------------------------------------------------------------------
|
||||
# * For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
# * contact@openairinterface.org
|
||||
# */
|
||||
################################################################################
|
||||
# file build_oai.bash
|
||||
# brief OAI automated build tool that can be used to install, compile, run OAI.
|
||||
# author Navid Nikaein, Lionel GAUTHIER
|
||||
# company Eurecom
|
||||
# email: navid.nikaein@eurecom.fr, lionel.gauthier@eurecom.fr
|
||||
#
|
||||
|
||||
#!/bin/bash
|
||||
################################
|
||||
# include helper functions
|
||||
################################
|
||||
THIS_SCRIPT_PATH=$(dirname $(readlink -f $0))
|
||||
. $THIS_SCRIPT_PATH/build_helper.bash
|
||||
|
||||
check_for_root_rights
|
||||
|
||||
#######################################
|
||||
# Default PARAMETERS
|
||||
######################################
|
||||
declare OAI_DB_ADMIN_USER_NAME="root"
|
||||
declare OAI_DB_ADMIN_USER_PASSWORD="linux"
|
||||
|
||||
#only one could be set at the time
|
||||
declare BUILD_LTE="NONE" # ENB, EPC, HSS
|
||||
|
||||
declare HW="EXMIMO" # EXMIMO, USRP, ETHERNET, NONE
|
||||
declare TARGET="ALL" # ALL, SOFTMODEM, OAISIM, UNISIM, NONE
|
||||
declare ENB_S1=1
|
||||
declare REL="REL8" # REL8, REL10
|
||||
declare RT="NONE" # RTAI, RT_PREMPT, NONE
|
||||
declare DEBUG=0
|
||||
declare CONFIG_FILE=" "
|
||||
declare CONFIG_FILE_ACCESS_OK=0
|
||||
declare EXE_ARGUMENTS=" "
|
||||
declare RUN_GDB=0
|
||||
declare RUN=0
|
||||
declare DISABLE_CHECK_INSTALLED_SOFTWARE=0
|
||||
declare OAI_CLEAN=0
|
||||
declare CLEAN_IPTABLES=0
|
||||
declare CLEAN_HSS=0
|
||||
|
||||
declare OAI_TEST=0
|
||||
declare XFORMS=0
|
||||
|
||||
# script is not currently handling these params
|
||||
declare EPC=0 # flag to build EPC
|
||||
|
||||
declare ITTI_ANALYZER=0
|
||||
declare VCD_TIMING=0
|
||||
declare WIRESHARK=0
|
||||
declare TIME_MEAS=0
|
||||
declare DOXYGEN=0
|
||||
declare DEV=0
|
||||
|
||||
#EMULATION_DEV_INTERFACE="eth0"
|
||||
#EMULATION_MULTICAST_GROUP=1
|
||||
#EMULATION_DEV_ADDRESS=`ifconfig $EMULATION_DEV_INTERFACE | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'`
|
||||
|
||||
############## script params #####################
|
||||
|
||||
if [ -f ./.lock_oaibuild ]; then
|
||||
OAI_CLEAN=0
|
||||
else
|
||||
OAI_CLEAN=1
|
||||
fi
|
||||
|
||||
#for i in "$@"
|
||||
#do
|
||||
# echo "i is : $i"
|
||||
# case $i in
|
||||
|
||||
|
||||
until [ -z "$1" ]
|
||||
do
|
||||
case "$1" in
|
||||
-a | --doxygen)
|
||||
DOXYGEN=1
|
||||
echo "setting doxygen flag to: $DOXYGEN"
|
||||
shift;
|
||||
;;
|
||||
-b | --disable-s1)
|
||||
ENB_S1=0
|
||||
echo "disable eNB S1 flag"
|
||||
shift;
|
||||
;;
|
||||
-c | --clean)
|
||||
rm -rf ./.lock_oaibuild
|
||||
OAI_CLEAN=1
|
||||
CLEAN_HSS=1
|
||||
echo "setting clean flag to: $OAI_CLEAN"
|
||||
echo "may check package installation, and recompile OAI"
|
||||
shift;
|
||||
;;
|
||||
--clean-iptables)
|
||||
CLEAN_IPTABLES=1;
|
||||
shift;
|
||||
;;
|
||||
-C | --config-file)
|
||||
CONFIG_FILE=$2
|
||||
# may be relative path
|
||||
if [ -f $(dirname $(readlink -f $0))/$CONFIG_FILE ]; then
|
||||
CONFIG_FILE=$(dirname $(readlink -f $0))/$CONFIG_FILE
|
||||
echo "setting config file to: $CONFIG_FILE"
|
||||
CONFIG_FILE_ACCESS_OK=1
|
||||
else
|
||||
# may be absolute path
|
||||
if [ -f $CONFIG_FILE ]; then
|
||||
echo "setting config file to: $CONFIG_FILE"
|
||||
CONFIG_FILE_ACCESS_OK=1
|
||||
else
|
||||
echo "config file not found"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
EXE_ARGUMENTS="$EXE_ARGUMENTS -O $CONFIG_FILE"
|
||||
shift 2;
|
||||
;;
|
||||
-d | --debug)
|
||||
DEBUG=1
|
||||
echo "setting debug flag to: $DEBUG"
|
||||
shift;
|
||||
;;
|
||||
-D | --disable-check-installed-software)
|
||||
DISABLE_CHECK_INSTALLED_SOFTWARE=1
|
||||
echo "disable check installed software"
|
||||
shift;
|
||||
;;
|
||||
-e | --realtime)
|
||||
RT=$2
|
||||
echo "setting realtime flag to: $RT"
|
||||
shift 2 ;
|
||||
;;
|
||||
-g | --run-with-gdb)
|
||||
DEBUG=1
|
||||
RUN=1
|
||||
RUN_GDB=1
|
||||
echo "Running with gdb"
|
||||
shift;
|
||||
;;
|
||||
-K | --itti-dump-file)
|
||||
ITTI_ANALYZER=1
|
||||
ITTI_DUMP_FILE=$2
|
||||
echo "setting ITTI dump file to: $ITTI_DUMP_FILE"
|
||||
EXE_ARGUMENTS="$EXE_ARGUMENTS -K $ITTI_DUMP_FILE"
|
||||
shift 2;
|
||||
;;
|
||||
-l | --build-target)
|
||||
BUILD_LTE=$2
|
||||
echo "setting top-level build target to: $2"
|
||||
shift 2;
|
||||
;;
|
||||
-h | --help)
|
||||
print_help
|
||||
exit -1
|
||||
;;
|
||||
-m | --build-from-makefile)
|
||||
BUILD_FROM_MAKEFILE=1
|
||||
set_build_from_makefile $BUILD_FROM_MAKEFILE
|
||||
echo "setting a flag to build from makefile to: $BUILD_FROM_MAKEFILE"
|
||||
shift;
|
||||
;;
|
||||
-r | --3gpp-release)
|
||||
REL=$2
|
||||
echo "setting release to: $REL"
|
||||
shift 2 ;
|
||||
;;
|
||||
-R | --run)
|
||||
RUN=1
|
||||
echo "setting run to $RUN"
|
||||
shift;
|
||||
;;
|
||||
-s | --check)
|
||||
OAI_TEST=1
|
||||
echo "setting sanity check to: $OAI_TEST"
|
||||
shift;
|
||||
;;
|
||||
-t | --enb-build-target)
|
||||
TARGET=$2
|
||||
echo "setting enb build target to: $TARGET"
|
||||
shift 2;
|
||||
;;
|
||||
-V | --vcd)
|
||||
echo "setting gtk-wave output"
|
||||
VCD_TIMING=1
|
||||
EXE_ARGUMENTS="$EXE_ARGUMENTS -V"
|
||||
shift ;
|
||||
;;
|
||||
-w | --hardware)
|
||||
HW="$2" #"${i#*=}"
|
||||
echo "setting hardware to: $HW"
|
||||
shift 2 ;
|
||||
;;
|
||||
-x | --xforms)
|
||||
XFORMS=1
|
||||
EXE_ARGUMENTS="$EXE_ARGUMENTS -d"
|
||||
echo "setting xforms to: $XFORMS"
|
||||
shift;
|
||||
;;
|
||||
-p | --wireshark)
|
||||
WIRESHARK=1
|
||||
echo "enabling Wireshark interface to $WIRESHARK"
|
||||
shift;
|
||||
;;
|
||||
-z | --defaults)
|
||||
echo "setting all parameters to: default"
|
||||
rm -rf ./.lock_oaibuild
|
||||
OAI_CLEAN=1
|
||||
HW="EXMIMO"
|
||||
TARGET="ALL"
|
||||
ENB_S1=1
|
||||
REL="REL8"
|
||||
RT="NONE"
|
||||
DEBUG=0
|
||||
ENB_CONFIG_FILE=$OPENAIR_TARGETS/"PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.conf"
|
||||
OAI_TEST=0
|
||||
shift ;
|
||||
;;
|
||||
*)
|
||||
echo "Unknown option $1"
|
||||
break ;
|
||||
# unknown option
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
#####################
|
||||
# create a bin dir
|
||||
#####################
|
||||
echo_info "1. Creating the bin dir ..."
|
||||
mkdir -m 777 bin
|
||||
|
||||
build_date=`date +%Y_%m_%d`
|
||||
oai_build_date="oai_built_${build_date}"
|
||||
touch bin/${oai_build_date}
|
||||
chmod -f 777 bin/${oai_build_date}
|
||||
|
||||
touch bin/install_log.txt
|
||||
chmod -f 777 bin/install_log.txt
|
||||
################################
|
||||
# cleanup first
|
||||
################################
|
||||
#echo_info "3. Cleaning ..."
|
||||
|
||||
#$SUDO kill -9 `ps -ef | grep oaisim | awk '{print $2}'` 2>&1
|
||||
#$SUDO kill -9 `ps -ef | grep lte-softmodem | awk '{print $2}'` 2>&1
|
||||
#$SUDO kill -9 `ps -ef | grep dlsim | awk '{print $2}'` 2>&1
|
||||
#$SUDO kill -9 `ps -ef | grep ulsim | awk '{print $2}'` 2>&1
|
||||
|
||||
if [ $CLEAN_IPTABLES -eq 1 ]; then
|
||||
echo_info "Flushing iptables..."
|
||||
$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"
|
||||
fi
|
||||
############################################
|
||||
# setting and printing OAI envs, we should check here
|
||||
############################################
|
||||
|
||||
echo_info "2. Setting the OAI PATHS ..."
|
||||
|
||||
set_openair_env
|
||||
cecho "OPENAIR_HOME = $OPENAIR_HOME" $green
|
||||
cecho "OPENAIR1_DIR = $OPENAIR1_DIR" $green
|
||||
cecho "OPENAIR2_DIR = $OPENAIR2_DIR" $green
|
||||
cecho "OPENAIR3_DIR = $OPENAIR3_DIR" $green
|
||||
cecho "OPENAIR3_DIR = $OPENAIR3_DIR" $green
|
||||
cecho "OPENAIR_TARGETS = $OPENAIR_TARGETS" $green
|
||||
|
||||
|
||||
echo "OPENAIR_HOME = $OPENAIR_HOME" >> bin/${oai_build_date}
|
||||
echo "OPENAIR1_DIR = $OPENAIR1_DIR" >> bin/${oai_build_date}
|
||||
echo "OPENAIR2_DIR = $OPENAIR2_DIR" >> bin/${oai_build_date}
|
||||
echo "OPENAIR3_DIR = $OPENAIR3_DIR" >> bin/${oai_build_date}
|
||||
echo "OPENAIR3_DIR = $OPENAIR3_DIR" >> bin/${oai_build_date}
|
||||
echo "OPENAIR_TARGETS = $OPENAIR_TARGETS" >> bin/${oai_build_date}
|
||||
|
||||
|
||||
build_enb(){
|
||||
|
||||
##########################################
|
||||
# process parameters
|
||||
#########################################
|
||||
|
||||
echo_info "4. Process the parameters"
|
||||
|
||||
echo_info "User-defined Parameters : HW=$HW, TARGET=$TARGET, ENB_S1=$ENB_S1, REL=$REL, RT=$RT, DEBUG=$DEBUG XFORMS=$XFORMS"
|
||||
|
||||
echo "User-defined Parameters : HW=$HW, TARGET=$TARGET, ENB_S1=$ENB_S1, REL=$REL, RT=$RT, DEBUG=$DEBUG XFORMS=$XFORMS" >> bin/${oai_build_date}
|
||||
|
||||
|
||||
############################################
|
||||
# compilation directives
|
||||
############################################
|
||||
|
||||
echo_info "5. building the compilation directives ..."
|
||||
|
||||
|
||||
SOFTMODEM_DIRECTIVES="DEBUG=$DEBUG XFORMS=$XFORMS "
|
||||
OAISIM_DIRECTIVES="DEBUG=$DEBUG XFORMS=$XFORMS "
|
||||
|
||||
if [ $ENB_S1 -eq 1 ]; then
|
||||
SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES USE_MME=R10 ENABLE_ITTI=1 LINK_ENB_PDCP_TO_GTPV1U=1 SECU=1 "
|
||||
#OAISIM_DIRECTIVES="$OAISIM_DIRECTIVES USE_MME=R10 ENABLE_ITTI=1 LINK_ENB_PDCP_TO_GTPV1U=1 SECU=1 "
|
||||
OAISIM_DIRECTIVES="$OAISIM_DIRECTIVES ENABLE_ITTI=1 LINK_ENB_PDCP_TO_GTPV1U=1 SECU=1 "
|
||||
fi
|
||||
|
||||
if [ $DEBUG -eq 0 ]; then
|
||||
SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES DISABLE_XER_PRINT=1 "
|
||||
OAISIM_DIRECTIVES="$OAISIM_DIRECTIVES DISABLE_XER_PRINT=1 "
|
||||
fi
|
||||
|
||||
if [ $HW = "USRP" ]; then
|
||||
SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES USRP=1 "
|
||||
fi
|
||||
|
||||
if [ $HW = "ADRV9371_ZC706" ]; then
|
||||
SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES ADRV9371_ZC706=1 "
|
||||
fi
|
||||
|
||||
if [ $HW = "EXMIMO" ]; then
|
||||
SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES EXMIMO=1 "
|
||||
fi
|
||||
|
||||
if [ $HW = "ETHERNET" ]; then
|
||||
SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES ETHERNET=1 "
|
||||
fi
|
||||
|
||||
if [ $ENB_S1 -eq 0 ]; then
|
||||
SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES NAS=1 "
|
||||
OAISIM_DIRECTIVES="$OAISIM_DIRECTIVES NAS=1 "
|
||||
fi
|
||||
|
||||
if [ $REL = "REL8" ]; then
|
||||
SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES Rel8=1 "
|
||||
OAISIM_DIRECTIVES="$OAISIM_DIRECTIVES Rel8=1 "
|
||||
else
|
||||
SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES Rel10=1 "
|
||||
OAISIM_DIRECTIVES="$OAISIM_DIRECTIVES Rel10=1 "
|
||||
fi
|
||||
|
||||
if [ $RT = "RTAI" ]; then
|
||||
if [ ! -f /usr/realtime/modules/rtai_hal.ko ]; then
|
||||
echo_warning "RTAI doesn't seem to be installed"
|
||||
RT="NONE"
|
||||
SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES RTAI=0 "
|
||||
else
|
||||
SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES HARD_RT=1 "
|
||||
fi
|
||||
else
|
||||
SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES RTAI=0 "
|
||||
RT="NONE"
|
||||
fi
|
||||
|
||||
if [ $TARGET != "ALL" ]; then
|
||||
if [ $TARGET != "SOFTMODEM" ]; then
|
||||
HW="NONE"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ $UBUNTU_REL = "12.04" ]; then
|
||||
output=$(check_for_machine_type 2>&1)
|
||||
MACHINE_ARCH=$?
|
||||
if [ $MACHINE_ARCH -eq 64 ]; then
|
||||
SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES LIBCONFIG_LONG=1 "
|
||||
OAISIM_DIRECTIVES="$OASIM_DIRECTIVES LIBCONFIG_LONG=1 "
|
||||
fi
|
||||
fi
|
||||
|
||||
echo_success "SOFTMODEM Compilation directives: $SOFTMODEM_DIRECTIVES"
|
||||
echo_success "OAISIM Compilation directives: $OAISIM_DIRECTIVES"
|
||||
|
||||
echo "SOFTMODEM Compilation directives: $SOFTMODEM_DIRECTIVES" >> bin/${oai_build_date}
|
||||
echo "OAISIM Compilation directive: $OAISIM_DIRECTIVES" >> bin/${oai_build_date}
|
||||
|
||||
|
||||
############################################
|
||||
# check the installation
|
||||
############################################
|
||||
if [ $DISABLE_CHECK_INSTALLED_SOFTWARE -eq 0 ]; then
|
||||
echo_info "6. Checking the the required softwares/packages ..."
|
||||
|
||||
check_install_oai_software
|
||||
if [ $HW = "USRP" ]; then
|
||||
check_install_usrp_uhd_driver
|
||||
fi
|
||||
check_install_asn1c
|
||||
check_install_nettle
|
||||
else
|
||||
echo_info "6. Not checking the required softwares/packages ..."
|
||||
touch ./.lock_oaibuild
|
||||
fi
|
||||
|
||||
############################################
|
||||
# compile
|
||||
############################################
|
||||
|
||||
echo_info "7. compiling and installing the OAI binaries ..."
|
||||
|
||||
softmodem_compiled=1
|
||||
oaisim_compiled=1
|
||||
unisim_compiled=1
|
||||
|
||||
if [ $TARGET = "ALL" ]; then
|
||||
echo "############# compile_ltesoftmodem #############" >> bin/install_log.txt
|
||||
output=$(compile_ltesoftmodem >> bin/install_log.txt 2>&1 )
|
||||
softmodem_compiled=$?
|
||||
check_for_ltesoftmodem_executable
|
||||
echo_info "7.1 finished ltesoftmodem target : check the installation log file bin/install_log.txt"
|
||||
|
||||
echo "################ compile_oaisim #################" >> bin/install_log.txt
|
||||
output=$(compile_oaisim >> bin/install_log.txt 2>&1 )
|
||||
oaisim_compiled=$?
|
||||
check_for_oaisim_executable
|
||||
echo_info "7.2 finished oaisim target : check the installation log file bin/install_log.txt"
|
||||
|
||||
echo "################## compile_unisim ##################" >> bin/install_log.txt
|
||||
output=$(compile_unisim >> bin/install_log.txt 2>&1 )
|
||||
unisim_compiled=$?
|
||||
check_for_dlsim_executable
|
||||
check_for_ulsim_executable
|
||||
check_for_pucchsim_executable
|
||||
check_for_prachsim_executable
|
||||
check_for_pdcchsim_executable
|
||||
check_for_pbchsim_executable
|
||||
check_for_mbmssim_executable
|
||||
echo_info "7.3 finished unisim target : check the installation log file bin/install_log.txt"
|
||||
|
||||
|
||||
else
|
||||
if [ $TARGET == "SOFTMODEM" ]; then
|
||||
echo "############# compile_ltesoftmodem #############" >> bin/install_log.txt
|
||||
output=$(compile_ltesoftmodem >> bin/install_log.txt 2>&1 )
|
||||
softmodem_compiled=$?
|
||||
check_for_ltesoftmodem_executable
|
||||
echo_info "7.1 finished ltesoftmodem target: check the installation log file bin/install_log.txt"
|
||||
|
||||
if [ $HW == "EXMIMO" ]; then
|
||||
output=$(compile_exmimo2_driver >> bin/install_log.txt 2>&1)
|
||||
fi
|
||||
fi
|
||||
if [ $TARGET = "OAISIM" ]; then
|
||||
echo "################ compile_oaisim #################" >> bin/install_log.txt
|
||||
output=$(compile_oaisim >> bin/install_log.txt 2>&1 )
|
||||
oaisim_compiled=$?
|
||||
check_for_oaisim_executable
|
||||
echo_info "7.2 finished oaisim target: check the installation log file bin/install_log.txt"
|
||||
|
||||
if [ $ENB_S1 -eq 1 ]; then
|
||||
compile_nas_tools 2>&1
|
||||
nas_tools_compiled=$?
|
||||
check_for_nas_tools_executable
|
||||
echo_info "7.2.1 finished nas ue target: check the installation log file bin/install_log.txt"
|
||||
fi
|
||||
fi
|
||||
if [ $TARGET = "UNISIM" ]; then
|
||||
echo "################## compile_unisim ##################" >> bin/install_log.txt
|
||||
output=$(compile_unisim >> bin/install_log.txt 2>&1 )
|
||||
unisim_compiled=$?
|
||||
check_for_dlsim_executable
|
||||
check_for_ulsim_executable
|
||||
check_for_pucchsim_executable
|
||||
check_for_prachsim_executable
|
||||
check_for_pdcchsim_executable
|
||||
check_for_pbchsim_executable
|
||||
check_for_mbmssim_executable
|
||||
echo_info "7.3 finished unisim target: check the installation log file bin/install_log.txt"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
############################################
|
||||
# install
|
||||
############################################
|
||||
|
||||
echo_info "8. Installing ..."
|
||||
|
||||
if [ $softmodem_compiled -eq 0 ]; then
|
||||
echo_success "target lte-softmodem built and installed in the bin directory"
|
||||
echo "target lte-softmodem built and installed in the bin directory" >> bin/${oai_build_date}
|
||||
output=$(install_ltesoftmodem $RT $HW $ENB_S1 )
|
||||
fi
|
||||
if [ $oaisim_compiled -eq 0 ]; then
|
||||
echo_success "target oaisim built and installed in the bin directory"
|
||||
echo "target oaisim built and installed in the bin directory" >> bin/${oai_build_date}
|
||||
output=$(install_oaisim $ENB_S1 )
|
||||
fi
|
||||
if [ $unisim_compiled -eq 0 ]; then
|
||||
echo_success "target unisim built and installed in the bin directory"
|
||||
echo "target unisim built and installed in the bin directory" >> bin/${oai_build_date}
|
||||
fi
|
||||
|
||||
echo_info "build terminated, binaries are located in bin/"
|
||||
echo_info "build terminated, logs are located in bin/${oai_build_date} and bin/install_log.txt"
|
||||
|
||||
|
||||
|
||||
}
|
||||
build_epc(){
|
||||
|
||||
epc_compiled=1
|
||||
|
||||
echo_info "Note: this scripts tested only on Ubuntu 14.04x64"
|
||||
|
||||
######################################
|
||||
# CHECK MISC SOFTWARES AND LIBS #
|
||||
######################################
|
||||
if [ $DISABLE_CHECK_INSTALLED_SOFTWARE -eq 0 ]; then
|
||||
echo_info "4. Checking the the required softwares/packages for EPC..."
|
||||
|
||||
check_install_epc_software
|
||||
check_install_asn1c
|
||||
if [ $OAI_CLEAN -eq 1 ]; then
|
||||
check_install_freediamter
|
||||
else
|
||||
if [ ! -d /usr/local/etc/freeDiameter ]; then
|
||||
check_install_freediamter
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo_info "4. Not checking the required softwares/packages for EPC"
|
||||
fi
|
||||
|
||||
###########################################
|
||||
# configure and compile
|
||||
##########################################
|
||||
|
||||
echo_info "5. configure and compile epc"
|
||||
|
||||
output=$(compile_epc $OAI_CLEAN >> $OPENAIR_TARGETS/bin/install_log.txt 2>&1 )
|
||||
epc_compiled=$?
|
||||
if [ $epc_compiled -ne 0 ]; then
|
||||
echo_error "EPC compilation failed : check the installation log file bin/install_log.txt"
|
||||
exit 1
|
||||
fi
|
||||
check_for_epc_executable
|
||||
echo_info "finished epc target: check the installation log file bin/install_log.txt"
|
||||
|
||||
if [ $CONFIG_FILE_ACCESS_OK -eq 0 ]; then
|
||||
echo_error "You have to provide a EPC config file"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
TEMP_FILE=`tempfile`
|
||||
VARIABLES=" S6A_CONF\|\
|
||||
HSS_HOSTNAME\|\
|
||||
REALM"
|
||||
|
||||
VARIABLES=$(echo $VARIABLES | sed -e 's/\\r//g')
|
||||
VARIABLES=$(echo $VARIABLES | tr -d ' ')
|
||||
cat $CONFIG_FILE | grep -w "$VARIABLES"| tr -d " " | tr -d ";" > $TEMP_FILE
|
||||
source $TEMP_FILE
|
||||
rm -f $TEMP_FILE
|
||||
|
||||
if [ x"$REALM" == "x" ]; then
|
||||
echo_error "Your config file do not contain a REALM for S6A configuration"
|
||||
exit 1
|
||||
fi
|
||||
if [ x"$S6A_CONF" != "x./epc_s6a.conf" ]; then
|
||||
echo_error "Your config file do not contain the good path for the S6A config file,"
|
||||
echo_error "accordingly to what is done in this script, it should be set to epc_s6a.conf"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
check_epc_s6a_certificate $REALM
|
||||
|
||||
###########################################
|
||||
# install the binary in bin
|
||||
##########################################
|
||||
|
||||
echo_info "6. install the binary file"
|
||||
|
||||
if [ $epc_compiled -eq 0 ]; then
|
||||
echo_success "target epc built and installed in the bin directory"
|
||||
echo "target epc built and installed in the bin directory" >> bin/${oai_build_date}
|
||||
cp -f $CONFIG_FILE $OPENAIR_TARGETS/bin
|
||||
cp -f $OPENAIR3_DIR/objs/UTILS/CONF/s6a.conf $OPENAIR_TARGETS/bin/epc_s6a.conf
|
||||
fi
|
||||
}
|
||||
|
||||
build_hss(){
|
||||
echo_info "Note: this script tested only for Ubuntu 12.04 x64 -> 14.04 x64"
|
||||
|
||||
######################################
|
||||
# CHECK MISC SOFTWARES AND LIBS #
|
||||
######################################
|
||||
if [ $DISABLE_CHECK_INSTALLED_SOFTWARE -eq 0 ]; then
|
||||
echo_info "4. check the required packages for HSS"
|
||||
check_install_hss_software
|
||||
if [ $OAI_CLEAN -eq 1 ]; then
|
||||
check_install_freediamter
|
||||
else
|
||||
if [ ! -d /usr/local/etc/freeDiameter ]; then
|
||||
check_install_freediamter
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo_info "4. Not checking the required packages for HSS"
|
||||
fi
|
||||
|
||||
|
||||
######################################
|
||||
# compile HSS #
|
||||
######################################
|
||||
echo_info "5. compile HSS"
|
||||
|
||||
# Bad behaviour of $OAI_CLEAN with ./.lock_oaibuild ...
|
||||
compile_hss $CLEAN_HSS
|
||||
hss_compiled=$?
|
||||
check_for_hss_executable
|
||||
echo_info "finished hss target"
|
||||
|
||||
######################################
|
||||
# Check certificates #
|
||||
######################################
|
||||
|
||||
TEMP_FILE=`tempfile`
|
||||
cat $OPENAIR3_DIR/OPENAIRHSS/conf/hss_fd.conf | grep -w "Identity" | tr -d " " | tr -d ";" > $TEMP_FILE
|
||||
cat $OPENAIR3_DIR/OPENAIRHSS/conf/hss.conf | grep -w "MYSQL_user" | tr -d " " | tr -d ";" >> $TEMP_FILE
|
||||
cat $OPENAIR3_DIR/OPENAIRHSS/conf/hss.conf | grep -w "MYSQL_pass" | tr -d " " | tr -d ";" >> $TEMP_FILE
|
||||
cat $OPENAIR3_DIR/OPENAIRHSS/conf/hss.conf | grep -w "MYSQL_db" | tr -d " " | tr -d ";" >> $TEMP_FILE
|
||||
source $TEMP_FILE
|
||||
rm -f $TEMP_FILE
|
||||
|
||||
if [ x"$Identity" == "x" ]; then
|
||||
echo_error "Your config file do not contain a host identity for S6A configuration"
|
||||
exit 1
|
||||
fi
|
||||
HSS_REALM=$(echo $Identity | sed 's/.*\.//')
|
||||
HSS_HOSTNAME=${Identity%.$HSS_REALM}
|
||||
NEW_HOSTNAME=`hostname -s`
|
||||
if [ "x$HSS_HOSTNAME" != "x$NEW_HOSTNAME" ]; then
|
||||
echo_warning "Changing identity of HSS from <$HSS_HOSTNAME.$HSS_REALM> to <$NEW_HOSTNAME.$HSS_REALM>"
|
||||
sed -ibak "s/$HSS_HOSTNAME/$NEW_HOSTNAME/" $OPENAIR3_DIR/OPENAIRHSS/conf/hss_fd.conf
|
||||
fi
|
||||
check_hss_s6a_certificate $HSS_REALM
|
||||
|
||||
######################################
|
||||
# fill the HSS DB
|
||||
######################################
|
||||
echo_info "6. create HSS database (for EURECOM SIM CARDS)"
|
||||
hss_db_created=1
|
||||
create_hss_database $OAI_DB_ADMIN_USER_NAME $OAI_DB_ADMIN_USER_PASSWORD $MYSQL_user $MYSQL_pass $MYSQL_db
|
||||
if [ $? -eq 1 ]; then
|
||||
echo_fatal "hss DB not created"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
echo_info "3. set the top-level build target"
|
||||
case "$BUILD_LTE" in
|
||||
'ENB')
|
||||
echo_success "build LTE eNB"
|
||||
build_enb
|
||||
;;
|
||||
'EPC')
|
||||
echo_success "build EPC(MME and xGW)"
|
||||
build_epc
|
||||
;;
|
||||
'HSS')
|
||||
echo_success "build HSS"
|
||||
build_hss
|
||||
;;
|
||||
'NONE')
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
|
||||
# Additional operation
|
||||
|
||||
############################################
|
||||
# Generate doxygen documentation
|
||||
############################################
|
||||
|
||||
if [ $DOXYGEN = 1 ]; then
|
||||
echo_info "9. Generate doxygen documentation ..."
|
||||
doxygen $OPENAIR_TARGETS/DOCS/Doxyfile
|
||||
echo_info "9.1 use your navigator to open $OPENAIR_TARGETS/DOCS/html/index.html "
|
||||
else
|
||||
echo_info "9. Bypassing doxygen documentation ..."
|
||||
fi
|
||||
|
||||
|
||||
############################################
|
||||
# testing
|
||||
############################################
|
||||
|
||||
if [ $OAI_TEST -eq 1 ]; then
|
||||
echo_info "10. Running OAI pre commit tests (pre-ci) ..."
|
||||
python $OPENAIR_TARGETS/TEST/OAI/test01.py -l
|
||||
else
|
||||
echo_info "10. Bypassing the Tests ..."
|
||||
fi
|
||||
|
||||
############################################
|
||||
# run
|
||||
############################################
|
||||
|
||||
if [ $RUN -ne 0 ]; then
|
||||
echo_info "11. Running ..."
|
||||
cd $OPENAIR_TARGETS/bin
|
||||
case "$BUILD_LTE" in
|
||||
'ENB')
|
||||
if [ $TARGET == "SOFTMODEM" ]; then
|
||||
if [ $HW == "EXMIMO" ]; then
|
||||
$SUDO chmod 777 $OPENAIR_TARGETS/RT/USER/init_exmimo2.sh
|
||||
$SUDO $OPENAIR_TARGETS/RT/USER/init_exmimo2.sh
|
||||
fi
|
||||
if [ $WIRESHARK -eq 1 ]; then
|
||||
EXE_ARGUMENTS="$EXE_ARGUMENTS -W"
|
||||
fi
|
||||
echo "############# running ltesoftmodem #############"
|
||||
if [ $RUN_GDB -eq 0 ]; then
|
||||
$SUDO $OPENAIR_TARGETS/bin/lte-softmodem `echo $EXE_ARGUMENTS`
|
||||
else
|
||||
$SUDO setenv MALLOC_CHECK_ 2
|
||||
$SUDO touch ~/.gdb_lte_softmodem
|
||||
$SUDO echo "file $OPENAIR_TARGETS/bin/lte-softmodem" > ~/.gdb_lte_softmodem
|
||||
$SUDO echo "set args $EXE_ARGUMENTS" >> ~/.gdb_lte_softmodem
|
||||
$SUDO echo "run" >> ~/.gdb_lte_softmodem
|
||||
$SUDO gdb -nh -x ~/.gdb_lte_softmodem 2>&1
|
||||
fi
|
||||
|
||||
elif [ $TARGET == "OAISIM" ]; then
|
||||
|
||||
if [ $ENB_S1 -eq 0 ]; then
|
||||
install_nasmesh
|
||||
else
|
||||
# prepare NAS for UE
|
||||
if [ ! -f .ue.nvram0 ]; then
|
||||
echo_success "generate .ue_emm.nvram0 .ue.nvram0"
|
||||
$OPENAIR3_DIR/NAS/EURECOM-NAS/bin/ue_data --gen
|
||||
fi
|
||||
|
||||
if [ ! -f .usim.nvram0 ]; then
|
||||
echo_success "generate .usim.nvram0"
|
||||
$OPENAIR3_DIR/NAS/EURECOM-NAS/bin/usim_data --gen
|
||||
fi
|
||||
$OPENAIR3_DIR/NAS/EURECOM-NAS/bin/ue_data --print
|
||||
$OPENAIR3_DIR/NAS/EURECOM-NAS/bin/usim_data --print
|
||||
|
||||
insmod $OPENAIR2_DIR/NETWORK_DRIVER/UE_IP/ue_ip.ko
|
||||
|
||||
fi
|
||||
if [ $WIRESHARK -eq 1 ]; then
|
||||
EXE_ARGUMENTS="$EXE_ARGUMENTS -P wireshark"
|
||||
fi
|
||||
if [ $RUN_GDB -eq 0 ]; then
|
||||
$SUDO exec $OPENAIR_TARGETS/bin/oaisim `echo $EXE_ARGUMENTS`
|
||||
else
|
||||
$SUDO setenv MALLOC_CHECK_ 2
|
||||
$SUDO touch ~/.gdb_oaisim
|
||||
$SUDO echo "file $OPENAIR_TARGETS/bin/lte-oaisim" > ~/.gdb_oaisim
|
||||
$SUDO echo "set args $EXE_ARGUMENTS" >> ~/.gdb_oaisim
|
||||
$SUDO echo "run" >> ~/.gdb_oaisim
|
||||
$SUDO gdb -nh -x ~/.gdb_oaisim 2>&1
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
|
||||
|
||||
'EPC')
|
||||
echo "############# running EPC #############"
|
||||
test_is_host_reachable $HSS_HOSTNAME.$REALM HSS
|
||||
if [ $RUN_GDB -eq 0 ]; then
|
||||
$SUDO $OPENAIR_TARGETS/bin/oai_epc `echo $EXE_ARGUMENTS`
|
||||
else
|
||||
touch ~/.gdb_epc
|
||||
chmod 777 ~/.gdb_epc
|
||||
echo "file $OPENAIR_TARGETS/bin/oai_epc" > ~/.gdb_epc
|
||||
echo "set args $EXE_ARGUMENTS" >> ~/.gdb_epc
|
||||
echo "run" >> ~/.gdb_epc
|
||||
$SUDO gdb -nh -x ~/.gdb_epc 2>&1
|
||||
fi
|
||||
;;
|
||||
|
||||
|
||||
'HSS')
|
||||
echo "############# running HSS #############"
|
||||
cd $OPENAIR3_DIR/OPENAIRHSS/objs
|
||||
if [ $RUN_GDB -eq 0 ]; then
|
||||
$SUDO exec ./openair-hss -c ./conf/hss.conf
|
||||
else
|
||||
touch ~/.gdb_hss
|
||||
chmod 777 ~/.gdb_hss
|
||||
echo "file ./openair-hss" > ~/.gdb_hss
|
||||
echo "set args -c ./conf/hss.conf" >> ~/.gdb_hss
|
||||
echo "run" >> ~/.gdb_hss
|
||||
$SUDO gdb -nh -x ~/.gdb_hss 2>&1
|
||||
fi
|
||||
;;
|
||||
|
||||
|
||||
'NONE')
|
||||
;;
|
||||
|
||||
|
||||
*)
|
||||
echo_error "Unknown option $BUILD_LTE: do not execute"
|
||||
;;
|
||||
esac
|
||||
else
|
||||
echo_info "11. No run requested, end of script"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
|
||||
Reference in New Issue
Block a user