From 6da3f494f4daaf0696a929746807e6768164122f Mon Sep 17 00:00:00 2001
From: Laurent THOMAS <laurent.thomas@open-cells.com>
Date: Fri, 5 Aug 2016 15:26:36 +0200
Subject: [PATCH] update nettle to new interface, update deadline scheduler
 option (doesnt compile without this), update build/install script to use
 regular nettle and gnutls in ubuntu 16.04 (should also be fine with 14.04
 up-to-date), update init_exmimo2 for ubuntu 16.04)

---
 cmake_targets/tools/build_helper        | 11 ++++++++---
 cmake_targets/tools/init_exmimo2        |  8 --------
 openair2/UTIL/OSA/osa_stream_eea.c      |  2 +-
 openair3/SECU/nas_stream_eea2.c         |  2 +-
 openair3/TEST/test_aes128_ctr_decrypt.c |  2 +-
 targets/RT/USER/lte-enb.c               | 18 ++++++++++--------
 6 files changed, 21 insertions(+), 22 deletions(-)

diff --git a/cmake_targets/tools/build_helper b/cmake_targets/tools/build_helper
index 4738acb7f3c..8dbdd338237 100755
--- a/cmake_targets/tools/build_helper
+++ b/cmake_targets/tools/build_helper
@@ -386,9 +386,14 @@ check_install_oai_software() {
     $SUDO update-alternatives --set liblapack.so /usr/lib/atlas-base/atlas/liblapack.so
     
     # First we remove gnutls/nettle installation and then install from sources
-    $SUDO apt-get remove -y libgnutls-dev nettle-dev nettle-bin
-    install_nettle_from_source
-    install_gnutls_from_source
+    v=$(lsb_release -ris | tr -d '\n')
+    if [ "$v" == Ubuntu16.04 ] ; then
+        $SUDO apt-get install libgnutls-dev nettle-dev nettle-bin
+    else 
+      $SUDO apt-get remove -y libgnutls-dev nettle-dev nettle-bin
+      install_nettle_from_source
+      install_gnutls_from_source
+    fi
 
     install_asn1c_from_source
 }
diff --git a/cmake_targets/tools/init_exmimo2 b/cmake_targets/tools/init_exmimo2
index 66eedf93dd4..363e42ea259 100755
--- a/cmake_targets/tools/init_exmimo2
+++ b/cmake_targets/tools/init_exmimo2
@@ -71,15 +71,7 @@ if [ ! -e /dev/openair0 ]; then
  sudo chmod a+rw /dev/openair0
 fi
 
-DEVICE=`echo $PCI | awk -F\" '{print $(NF-1)}' | awk '{print $2}'`
-DEVICE_SWID=${DEVICE:2:2}
-if [ $DEVICE_SWID == '0a' ]; then
-   echo "Using firware version 10"
    $OPENAIR_DIR/targets/bin/updatefw -s 0x43fffff0 -b -f $OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/sdr_expressmimo2_v10
-else
-   echo 'No corresponding firmware found'
-   return
-fi
 }
 
 main "$@"
diff --git a/openair2/UTIL/OSA/osa_stream_eea.c b/openair2/UTIL/OSA/osa_stream_eea.c
index 8e346631ecb..acd341232e1 100644
--- a/openair2/UTIL/OSA/osa_stream_eea.c
+++ b/openair2/UTIL/OSA/osa_stream_eea.c
@@ -199,7 +199,7 @@ int stream_encrypt_eea2(stream_cipher_t *stream_cipher, uint8_t **out)
   }
 #endif
 
-  nettle_aes128.set_encrypt_key(ctx, stream_cipher->key_length,
+  nettle_aes128.set_encrypt_key(ctx, 
                                 stream_cipher->key);
 
   nettle_ctr_crypt(ctx, nettle_aes128.encrypt,
diff --git a/openair3/SECU/nas_stream_eea2.c b/openair3/SECU/nas_stream_eea2.c
index 25ef340f4e4..799aaaf432d 100644
--- a/openair3/SECU/nas_stream_eea2.c
+++ b/openair3/SECU/nas_stream_eea2.c
@@ -85,7 +85,7 @@ int nas_stream_encrypt_eea2(nas_stream_cipher_t *stream_cipher, uint8_t *out)
   }
 #endif
 
-  nettle_aes128.set_encrypt_key(ctx, stream_cipher->key_length,
+  nettle_aes128.set_encrypt_key(ctx,
                                 stream_cipher->key);
 
   nettle_ctr_crypt(ctx, nettle_aes128.encrypt,
diff --git a/openair3/TEST/test_aes128_ctr_decrypt.c b/openair3/TEST/test_aes128_ctr_decrypt.c
index f3740b48ff0..251f80fa708 100644
--- a/openair3/TEST/test_aes128_ctr_decrypt.c
+++ b/openair3/TEST/test_aes128_ctr_decrypt.c
@@ -48,7 +48,7 @@ void test_uncipher_ctr(const struct nettle_cipher *cipher, const uint8_t *key,
   uint8_t *data = malloc(length);
   uint8_t *ctr = malloc(cipher->block_size);
 
-  cipher->set_encrypt_key(ctx, key_length, key);
+  cipher->set_encrypt_key(ctx,  key);
   memcpy(ctr, ictr, cipher->block_size);
 
   ctr_crypt(ctx, cipher->encrypt,
diff --git a/targets/RT/USER/lte-enb.c b/targets/RT/USER/lte-enb.c
index 7381e37bffd..ae781092f0c 100644
--- a/targets/RT/USER/lte-enb.c
+++ b/targets/RT/USER/lte-enb.c
@@ -157,6 +157,8 @@ static struct {
   volatile uint8_t phy_proc_CC_id;
 } sync_phy_proc;
 
+extern double cpuf;
+
 void exit_fun(const char* s);
 
 void init_eNB(eNB_func_t node_function[], eNB_timing_t node_timing[],int nb_inst,eth_params_t *);
@@ -432,6 +434,10 @@ static void* eNB_thread_rxtx( void* param ) {
 
   MSC_START_USE();
 
+  struct timespec wait;
+
+  wait.tv_sec=0;
+  wait.tv_nsec=5000000L;
 #ifdef DEADLINE_SCHEDULER
   struct sched_attr attr;
 
@@ -462,10 +468,6 @@ static void* eNB_thread_rxtx( void* param ) {
   struct sched_param sparam;
   char cpu_affinity[1024];
   cpu_set_t cpuset;
-  struct timespec wait;
-
-  wait.tv_sec=0;
-  wait.tv_nsec=5000000L;
 
   /* Set affinity mask to include CPUs 1 to MAX_CPUS */
   /* CPU 0 is reserved for UHD threads */
@@ -819,7 +821,7 @@ static void* eNB_thread_asynch_rxtx( void* param ) {
 
   if (sched_setattr(0, &attr, flags) < 0 ) {
     perror("[SCHED] eNB FH sched_setattr failed\n");
-    return &eNB_thread_FH_status;
+    return &eNB_thread_asynch_rxtx_status;
   }
 
   LOG_I( HW, "[SCHED] eNB asynch RX deadline thread (TID %ld) started on CPU %d\n", gettid(), sched_getcpu() );
@@ -1403,7 +1405,7 @@ static void* eNB_thread_FH( void* param ) {
 #ifdef DEADLINE_SCHEDULER
     if (opp_enabled){
       if(softmodem_stats_rxtx_sf.diff_now/(cpuf) > attr.sched_runtime) {
-        VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_RUNTIME_RXTX_ENB, (softmodem_stats_rxtx_sf.diff_now/cpuf - attr.sched_runtime)/1000000.0);
+        VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TS, (softmodem_stats_rxtx_sf.diff_now/cpuf - attr.sched_runtime)/1000000.0);
       }
     }
 #endif // DEADLINE_SCHEDULER  
@@ -1664,8 +1666,8 @@ void init_eNB_proc(int inst) {
 	(eNB->node_function == NGFI_RRU_IF4p5))
       pthread_create( &proc->pthread_asynch_rxtx, &proc->attr_asynch_rxtx, eNB_thread_asynch_rxtx, &eNB->proc );
 #else 
-    pthread_create( &proc_rxtx[0].pthread_rxtx, NULL, eNB_thread_rxtx, &eNB->proc_rxtx[0] );
-    pthread_create( &proc_rxtx[1].pthread_rxtx, NULL, eNB_thread_rxtx, &eNB->proc_rxtx[1] );
+    pthread_create( &proc_rxtx[0].pthread_rxtx, NULL, eNB_thread_rxtx, &proc_rxtx[0] );
+    pthread_create( &proc_rxtx[1].pthread_rxtx, NULL, eNB_thread_rxtx, &proc_rxtx[1] );
     pthread_create( &proc->pthread_FH, NULL, eNB_thread_FH, &eNB->proc );
     pthread_create( &proc->pthread_prach, NULL, eNB_thread_prach, &eNB->proc );
     if (eNB->node_timing == synch_to_other) 
-- 
GitLab