diff --git a/ci-scripts/conf_files/lte-fdd-mbms-basic-sim.conf b/ci-scripts/conf_files/lte-fdd-mbms-basic-sim.conf
new file mode 100644
index 0000000000..53261ec32d
--- /dev/null
+++ b/ci-scripts/conf_files/lte-fdd-mbms-basic-sim.conf
@@ -0,0 +1,418 @@
+Active_eNBs = ( "eNB-Eurecom-LTEBox");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+eNBs =
+(
+ {
+ ////////// Identification parameters:
+ eNB_ID = 0xe00;
+
+ cell_type = "CELL_MACRO_ENB";
+
+ eNB_name = "eNB-Eurecom-LTEBox";
+
+ // Tracking area code, 0x0000 and 0xfffe are reserved values
+ tracking_area_code = 1;
+ plmn_list = ( { mcc = 208; mnc = 93; mnc_length = 2; } );
+
+ tr_s_preference = "local_mac"
+
+ ////////// Physical parameters:
+
+ component_carriers = (
+ {
+ node_function = "3GPP_eNODEB";
+ node_timing = "synch_to_ext_device";
+ node_synch_ref = 0;
+ frame_type = "FDD";
+ tdd_config = 3;
+ tdd_config_s = 0;
+ prefix_type = "NORMAL";
+ eutra_band = 7;
+ downlink_frequency = 2680000000L;
+ uplink_frequency_offset = -120000000;
+ Nid_cell = 0;
+ N_RB_DL = 25;
+ Nid_cell_mbsfn = 0;
+ nb_antenna_ports = 1;
+ nb_antennas_tx = 1;
+ nb_antennas_rx = 1;
+ tx_gain = 90;
+ rx_gain = 125;
+ pbch_repetition = "FALSE";
+ prach_root = 0;
+ prach_config_index = 0;
+ prach_high_speed = "DISABLE";
+ prach_zero_correlation = 1;
+ prach_freq_offset = 2;
+ pucch_delta_shift = 1;
+ pucch_nRB_CQI = 0;
+ pucch_nCS_AN = 0;
+ pucch_n1_AN = 0;
+ pdsch_referenceSignalPower = -27;
+ pdsch_p_b = 0;
+ pusch_n_SB = 1;
+ pusch_enable64QAM = "DISABLE";
+ pusch_hoppingMode = "interSubFrame";
+ pusch_hoppingOffset = 0;
+ pusch_groupHoppingEnabled = "ENABLE";
+ pusch_groupAssignment = 0;
+ pusch_sequenceHoppingEnabled = "DISABLE";
+ pusch_nDMRS1 = 1;
+ phich_duration = "NORMAL";
+ phich_resource = "ONESIXTH";
+ srs_enable = "DISABLE";
+ /* srs_BandwidthConfig =;
+ srs_SubframeConfig =;
+ srs_ackNackST =;
+ srs_MaxUpPts =;*/
+
+ pusch_p0_Nominal = -96;
+ pusch_alpha = "AL1";
+ pucch_p0_Nominal = -104;
+ msg3_delta_Preamble = 6;
+ pucch_deltaF_Format1 = "deltaF2";
+ pucch_deltaF_Format1b = "deltaF3";
+ pucch_deltaF_Format2 = "deltaF0";
+ pucch_deltaF_Format2a = "deltaF0";
+ pucch_deltaF_Format2b = "deltaF0";
+
+ rach_numberOfRA_Preambles = 64;
+ rach_preamblesGroupAConfig = "DISABLE";
+ /*
+ rach_sizeOfRA_PreamblesGroupA = ;
+ rach_messageSizeGroupA = ;
+ rach_messagePowerOffsetGroupB = ;
+ */
+ rach_powerRampingStep = 4;
+ rach_preambleInitialReceivedTargetPower = -108;
+ rach_preambleTransMax = 10;
+ rach_raResponseWindowSize = 10;
+ rach_macContentionResolutionTimer = 48;
+ rach_maxHARQ_Msg3Tx = 4;
+
+ pcch_default_PagingCycle = 128;
+ pcch_nB = "oneT";
+ bcch_modificationPeriodCoeff = 2;
+ ue_TimersAndConstants_t300 = 1000;
+ ue_TimersAndConstants_t301 = 1000;
+ ue_TimersAndConstants_t310 = 1000;
+ ue_TimersAndConstants_t311 = 10000;
+ ue_TimersAndConstants_n310 = 20;
+ ue_TimersAndConstants_n311 = 1;
+ ue_TransmissionMode = 1;
+
+ //Parameters for SIB18
+ rxPool_sc_CP_Len = "normal";
+ rxPool_sc_Period = "sf40";
+ rxPool_data_CP_Len = "normal";
+ rxPool_ResourceConfig_prb_Num = 20;
+ rxPool_ResourceConfig_prb_Start = 5;
+ rxPool_ResourceConfig_prb_End = 44;
+ rxPool_ResourceConfig_offsetIndicator_present = "prSmall";
+ rxPool_ResourceConfig_offsetIndicator_choice = 0;
+ rxPool_ResourceConfig_subframeBitmap_present = "prBs40";
+ rxPool_ResourceConfig_subframeBitmap_choice_bs_buf = "00000000000000000000";
+ rxPool_ResourceConfig_subframeBitmap_choice_bs_size = 5;
+ rxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused = 0;
+/* rxPool_dataHoppingConfig_hoppingParameter = 0;
+ rxPool_dataHoppingConfig_numSubbands = "ns1";
+ rxPool_dataHoppingConfig_rbOffset = 0;
+ rxPool_commTxResourceUC-ReqAllowed = "TRUE";
+*/
+ // Parameters for SIB19
+ discRxPool_cp_Len = "normal"
+ discRxPool_discPeriod = "rf32"
+ discRxPool_numRetx = 1;
+ discRxPool_numRepetition = 2;
+ discRxPool_ResourceConfig_prb_Num = 5;
+ discRxPool_ResourceConfig_prb_Start = 3;
+ discRxPool_ResourceConfig_prb_End = 21;
+ discRxPool_ResourceConfig_offsetIndicator_present = "prSmall";
+ discRxPool_ResourceConfig_offsetIndicator_choice = 0;
+ discRxPool_ResourceConfig_subframeBitmap_present = "prBs40";
+ discRxPool_ResourceConfig_subframeBitmap_choice_bs_buf = "f0ffffffff";
+ discRxPool_ResourceConfig_subframeBitmap_choice_bs_size = 5;
+ discRxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused = 0;
+
+ }
+ );
+
+
+ srb1_parameters :
+ {
+ # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
+ timer_poll_retransmit = 80;
+
+ # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
+ timer_reordering = 35;
+
+ # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
+ timer_status_prohibit = 0;
+
+ # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
+ poll_pdu = 4;
+
+ # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
+ poll_byte = 99999;
+
+ # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
+ max_retx_threshold = 4;
+ }
+
+ # ------- SCTP definitions
+ SCTP :
+ {
+ # Number of streams to use in input/output
+ SCTP_INSTREAMS = 2;
+ SCTP_OUTSTREAMS = 2;
+ };
+
+
+ ////////// MME parameters:
+ mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
+ ipv6 = "192:168:30::17";
+ active = "yes";
+ preference = "ipv4";
+ }
+ );
+
+ enable_measurement_reports = "no";
+
+ ///X2
+ enable_x2 = "no";
+ t_reloc_prep = 1000; /* unit: millisecond */
+ tx2_reloc_overall = 2000; /* unit: millisecond */
+
+ ////////// MCE parameters:
+ target_mce_m2_ip_address = ( { ipv4 = "127.0.0.7";
+ ipv6 = "192:168:30::17";
+ active = "yes";
+ preference = "ipv4";
+ }
+ );
+
+ ///M2
+ enable_enb_m2 = "yes";
+
+
+ mbms_configuration_data_list = (
+ {
+ mbsfn_sync_area = 0x0001;
+ mbms_service_area_list=(
+ {
+ mbms_service_area=0x0001;
+ }
+ );
+ }
+
+ );
+
+
+
+ NETWORK_INTERFACES :
+ {
+
+ ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
+ ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR";
+ ENB_INTERFACE_NAME_FOR_S1U = "eth0";
+ ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR";
+ ENB_PORT_FOR_S1U = 2152; # Spec 2152
+ ENB_IPV4_ADDRESS_FOR_X2C = "CI_ENB_IP_ADDR";
+ ENB_PORT_FOR_X2C = 36422; # Spec 36422
+
+ ENB_IPV4_ADDRESS_FOR_M2C = "127.0.0.2/24";
+ ENB_PORT_FOR_M2C = 36443; # Spec 36443
+ };
+ }
+);
+
+MACRLCs = (
+ {
+ num_cc = 1;
+ tr_s_preference = "local_L1";
+ tr_n_preference = "local_RRC";
+ phy_test_mode = 0;
+ puSch10xSnr = 200;
+ puCch10xSnr = 200;
+ }
+);
+
+L1s = (
+ {
+ num_cc = 1;
+ tr_n_preference = "local_mac";
+ }
+);
+
+MCEs = (
+ {
+ MCE_ID = 0xe00;
+
+ MCE_name = "MCE-Vicomtech-LTEBox";
+
+ //M2
+ enable_mce_m2 = "yes";
+
+ //M3
+ enable_mce_m3 = "yes";
+
+ target_mme_m3_ip_address = ( { ipv4 = "127.0.0.18";
+ ipv6 = "192:168:30::17";
+ active = "yes";
+ preference = "ipv4";
+ }
+ );
+
+
+
+ NETWORK_INTERFACES :
+ {
+ MCE_INTERFACE_NAME_FOR_M2_ENB = "lo";
+ MCE_IPV4_ADDRESS_FOR_M2C = "127.0.0.7/24";
+ MCE_PORT_FOR_M2C = 36443; # Spec 36443
+
+ MCE_INTERFACE_NAME_FOR_M3_MME = "lo";
+ MCE_IPV4_ADDRESS_FOR_M3C = "127.0.0.3/24";
+ MCE_PORT_FOR_M3C = 36444; # Spec 36444
+ };
+
+ plnm:
+ {
+ mcc = 208;
+ mnc = 93;
+ mnc_length = 2;
+ };
+
+ mbms_sched_info :
+ {
+ mcch_update_time = 10;
+ mbms_area_config_list = (
+ {
+ common_sf_allocation_period = 1; #rf4(0) rf8(1) rf16(2) rf32(3) rf64(4) rf128(5) rf256(6)
+ mbms_area_id = 0;
+ pmch_config_list = (
+ {
+ allocated_sf_end=32;
+ data_mcs=14;
+ mch_scheduling_period = 0; #rf8(0)
+ mbms_session_list = (
+ {
+ #plnm + service_id ->tmgi
+ plnm:
+ {
+ mcc = 208;
+ mnc = 93;
+ mnc_length = 2;
+ }
+ service_id=0; #keep this allways as 0 (workaround for TUN if)
+ lcid=5; #this must be properly defined lcid:6+service:0 -> rab_id:5 //with new RLC set lcid either 4 or 5
+ }
+ );
+ }
+ );
+
+ mbms_sf_config_list = (
+ {
+ radioframe_allocation_period=0; #n1(0) n2(1) n4(2) n8(3) n16(4) n32(5)
+ radioframe_alloocation_offset=0;
+ num_frame="oneFrame";
+ subframe_allocation=57; #xx111001
+ //num_frame="fourFrame";
+ //subframe_allocation=14548987; #
+ }
+ );
+
+ }
+ );
+ };
+
+
+ mcch_config_per_mbsfn_area = (
+ {
+ mbsfn_area = 0;
+ pdcch_length = 1; #s1(0), s2(1)
+ repetition_period = 0; #rf32(0), rf64(1), rf128(2), rf256(3)
+ offset = 0;
+ modification_period = 0; #rf512(0; rf1024(1)
+ subframe_allocation_info = 32; #BITSTRING (6bits -> one frame) xx100000
+ mcs = 1; #n2(0), n7(1), n13(2), n19(3)
+ }
+ );
+
+ #); #end mbms_scheduling_info
+
+ }
+);
+
+MMEs = (
+ {
+ MME_ID = 0xe00;
+
+ MME_name = "MME-MBMS-Vicomtech-LTEBox";
+
+ //M3
+ enable_mme_m3 = "yes";
+ NETWORK_INTERFACES :
+ {
+ MME_INTERFACE_NAME_FOR_M3_MCE = "lo";
+ MME_IPV4_ADDRESS_FOR_M3C = "127.0.0.18/24";
+ MME_PORT_FOR_M3C = 36444; # Spec 36444
+
+ };
+ }
+);
+
+
+RUs = (
+ {
+ local_rf = "yes"
+ nb_tx = 1
+ nb_rx = 1
+ att_tx = 0
+ att_rx = 0;
+ bands = [7];
+ max_pdschReferenceSignalPower = -27;
+ max_rxgain = 125;
+ eNB_instances = [0];
+
+ }
+);
+
+THREAD_STRUCT = (
+ {
+ #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
+ parallel_config = "PARALLEL_SINGLE_THREAD";
+ #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
+ worker_config = "WORKER_ENABLE";
+ }
+);
+
+NETWORK_CONTROLLER :
+{
+ FLEXRAN_ENABLED = "no";
+ FLEXRAN_INTERFACE_NAME = "ens3";
+ FLEXRAN_IPV4_ADDRESS = "CI_FLEXRAN_CTL_IP_ADDR";
+ FLEXRAN_PORT = 2210;
+ FLEXRAN_CACHE = "/mnt/oai_agent_cache";
+ FLEXRAN_AWAIT_RECONF = "no";
+};
+
+ log_config :
+ {
+ global_log_level ="info";
+ global_log_verbosity ="medium";
+ hw_log_level ="info";
+ hw_log_verbosity ="medium";
+ phy_log_level ="info";
+ phy_log_verbosity ="medium";
+ mac_log_level ="info";
+ mac_log_verbosity ="high";
+ rlc_log_level ="info";
+ rlc_log_verbosity ="medium";
+ pdcp_log_level ="info";
+ pdcp_log_verbosity ="medium";
+ rrc_log_level ="info";
+ rrc_log_verbosity ="medium";
+ };
diff --git a/ci-scripts/reportTestLocally.sh b/ci-scripts/reportTestLocally.sh
index ff92460e35..cd1e4e9546 100755
--- a/ci-scripts/reportTestLocally.sh
+++ b/ci-scripts/reportTestLocally.sh
@@ -253,7 +253,7 @@ function report_test {
ARCHIVES_LOC=archives/basic_sim/test
if [ -d $ARCHIVES_LOC ]
then
- echo "
Basic Simulator Check " >> ./test_simulator_results.html
+ echo " 4G LTE Basic Simulator Check " >> ./test_simulator_results.html
if [ -f $ARCHIVES_LOC/test_final_status.log ]
then
@@ -373,7 +373,7 @@ function report_test {
if [ -e $JENKINS_WKSP/flexran/flexran_build_complete.txt ]
then
- echo " Basic Simulator + FlexRan Controller Check " >> ./test_simulator_results.html
+ echo " 4G LTE Basic Simulator + FlexRan Controller Check " >> ./test_simulator_results.html
echo " " >> ./test_simulator_results.html
echo " TEST was SUCCESSFUL " >> ./test_simulator_results.html
echo "
" >> ./test_simulator_results.html
@@ -403,11 +403,11 @@ function report_test {
ARCHIVES_LOC=archives/rf_sim/test
if [ -d $ARCHIVES_LOC ]
then
- echo " 5G NR RF Simulator Check " >> ./test_simulator_results.html
+ echo " 4G LTE RF Simulator Check " >> ./test_simulator_results.html
if [ -f $ARCHIVES_LOC/test_final_status.log ]
then
- if [ `grep -c TEST_OK $ARCHIVES_LOC/test_final_status.log` -eq 1 ]
+ if [ `egrep -c "LTE: TEST_OK" $ARCHIVES_LOC/test_final_status.log` -eq 1 ]
then
echo " " >> ./test_simulator_results.html
echo " TEST was SUCCESSFUL " >> ./test_simulator_results.html
@@ -423,8 +423,228 @@ function report_test {
echo "
" >> ./test_simulator_results.html
fi
- echo " More details on 5G RF Simulator test results " >> ./test_simulator_results.html
- echo " " >> ./test_simulator_results.html
+ echo "
More details on 4G LTE RF Simulator test results " >> ./test_simulator_results.html
+ echo "
" >> ./test_simulator_results.html
+ echo "
" >> ./test_simulator_results.html
+ echo " " >> ./test_simulator_results.html
+ echo " Log File Name " >> ./test_simulator_results.html
+ echo " Command " >> ./test_simulator_results.html
+ echo " Status " >> ./test_simulator_results.html
+ echo " Statistics " >> ./test_simulator_results.html
+ echo " " >> ./test_simulator_results.html
+
+ EPC_CONFIGS=("wS1 noS1")
+ TRANS_MODES=("fdd")
+ BW_CASES=(05)
+ for CN_CONFIG in ${EPC_CONFIGS[@]}
+ do
+ for TMODE in ${TRANS_MODES[@]}
+ do
+ for BW in ${BW_CASES[@]}
+ do
+ echo " " >> ./test_simulator_results.html
+ if [[ $CN_CONFIG =~ .*wS1.* ]]
+ then
+ echo " Test with EPC (aka withS1): ${TMODE} -- ${BW}MHz " >> ./test_simulator_results.html
+ else
+ echo " Test without EPC (aka noS1): ${TMODE} -- ${BW}MHz " >> ./test_simulator_results.html
+ fi
+ echo " " >> ./test_simulator_results.html
+ ENB_LOG=$ARCHIVES_LOC/${TMODE}_${BW}MHz_${CN_CONFIG}_enb.log
+ UE_LOG=`echo $ENB_LOG | sed -e "s#enb#ue#"`
+ if [ -f $ENB_LOG ] && [ -f $UE_LOG ]
+ then
+ NAME_ENB=`echo $ENB_LOG | sed -e "s#$ARCHIVES_LOC/##"`
+ NAME_UE=`echo $UE_LOG | sed -e "s#$ARCHIVES_LOC/##"`
+ echo " " >> ./test_simulator_results.html
+ echo " $NAME_ENB --- $NAME_UE " >> ./test_simulator_results.html
+ echo " N/A " >> ./test_simulator_results.html
+ NB_ENB_GOT_SYNC=`egrep -c "got sync" $ENB_LOG`
+ if [[ $CN_CONFIG =~ .*noS1.* ]]
+ then
+ NB_ENB_TUNNEL_UP=`egrep -c "Interface oaitun_enb1 successfully configured" $ENB_LOG`
+ fi
+ NB_UE_GOT_SYNC=`egrep -c "rfsimulator: Success" $UE_LOG`
+ NB_ENB_SYNCED_WITH_UE=`egrep -c "Generating RRCConnectionReconfigurationComplete" $UE_LOG`
+ if [[ $CN_CONFIG =~ .*noS1.* ]]
+ then
+ NB_UE_TUNNEL_UP=`egrep -c "Interface oaitun_ue1 successfully configured" $UE_LOG`
+ else
+ NB_UE_TUNNEL_UP=`egrep -c "executing ifconfig oaitun_ue1" $UE_LOG`
+ fi
+ if [ $NB_ENB_GOT_SYNC -gt 0 ] && [ $NB_UE_GOT_SYNC -gt 0 ] && [ $NB_ENB_SYNCED_WITH_UE -gt 0 ]
+ then
+ echo " OK " >> ./test_simulator_results.html
+ else
+ echo " KO " >> ./test_simulator_results.html
+ fi
+ echo " " >> ./test_simulator_results.html
+ if [ $NB_ENB_GOT_SYNC -gt 0 ]
+ then
+ echo "- eNB --> got sync " >> ./test_simulator_results.html
+ else
+ echo "- eNB NEVER got sync " >> ./test_simulator_results.html
+ fi
+ if [[ $CN_CONFIG =~ .*noS1.* ]]
+ then
+ if [ $NB_ENB_TUNNEL_UP -gt 0 ]
+ then
+ echo "- eNB mounted oaitun_enb1 interface " >> ./test_simulator_results.html
+ else
+ echo "- eNB NEVER mounted oaitun_enb1 interface " >> ./test_simulator_results.html
+ fi
+ fi
+ if [ $NB_UE_GOT_SYNC -gt 0 ]
+ then
+ echo "- LTE UE --> got sync " >> ./test_simulator_results.html
+ else
+ echo "- LTE UE NEVER got sync " >> ./test_simulator_results.html
+ fi
+ if [ $NB_ENB_SYNCED_WITH_UE -gt 0 ]
+ then
+ echo "- LTE UE attached to eNB " >> ./test_simulator_results.html
+ else
+ echo "- LTE UE NEVER attached to eNB " >> ./test_simulator_results.html
+ fi
+ if [ $NB_UE_TUNNEL_UP -gt 0 ]
+ then
+ echo "- LTE UE mounted oaitun_ue1 interface " >> ./test_simulator_results.html
+ else
+ echo "- LTE UE NEVER mounted oaitun_ue1 interface " >> ./test_simulator_results.html
+ fi
+ echo " " >> ./test_simulator_results.html
+ echo " " >> ./test_simulator_results.html
+ fi
+ PING_LOGS=`ls $ARCHIVES_LOC/${TMODE}_${BW}MHz_${CN_CONFIG}_ping*.log 2> /dev/null`
+ analyzePingFiles
+
+ IPERF_TESTS=`ls $ARCHIVES_LOC/${TMODE}_${BW}MHz_${CN_CONFIG}_iperf_dl*client*txt | grep -v mbms 2> /dev/null`
+ analyzeIperfFiles
+
+ IPERF_TESTS=`ls $ARCHIVES_LOC/${TMODE}_${BW}MHz_${CN_CONFIG}_iperf_ul*client*txt | grep -v mbms 2> /dev/null`
+ analyzeIperfFiles
+ done
+ done
+ done
+
+ # MBMS Case
+ CN_CONFIG="noS1"
+ TMODE="fdd"
+ BW_CASES=(05)
+ for BW in ${BW_CASES[@]}
+ do
+ echo " " >> ./test_simulator_results.html
+ echo " Test MBMS without EPC (aka noS1): ${TMODE} -- ${BW}MHz " >> ./test_simulator_results.html
+ echo " " >> ./test_simulator_results.html
+ ENB_LOG=$ARCHIVES_LOC/${TMODE}_${BW}MHz_${CN_CONFIG}_enb_mbms.log
+ UE_LOG=`echo $ENB_LOG | sed -e "s#enb#ue#"`
+ if [ -f $ENB_LOG ] && [ -f $UE_LOG ]
+ then
+ NAME_ENB=`echo $ENB_LOG | sed -e "s#$ARCHIVES_LOC/##"`
+ NAME_UE=`echo $UE_LOG | sed -e "s#$ARCHIVES_LOC/##"`
+ echo " " >> ./test_simulator_results.html
+ echo " $NAME_ENB --- $NAME_UE " >> ./test_simulator_results.html
+ echo " N/A " >> ./test_simulator_results.html
+ NB_ENB_GOT_SYNC=`egrep -c "got sync" $ENB_LOG`
+ NB_ENB_TUNNEL_UP=`egrep -c "Interface oaitun_enb1 successfully configured" $ENB_LOG`
+ NB_ENB_MTUNNEL_UP=`egrep -c "Interface oaitun_enm1 successfully configured" $ENB_LOG`
+ NB_UE_GOT_SYNC=`egrep -c "rfsimulator: Success" $UE_LOG`
+ NB_ENB_SYNCED_WITH_UE=`egrep -c "Generating RRCConnectionReconfigurationComplete" $UE_LOG`
+ NB_UE_TUNNEL_UP=`egrep -c "Interface oaitun_ue1 successfully configured" $UE_LOG`
+ NB_UE_MTUNNEL_UP=`egrep -c "Interface oaitun_uem1 successfully configured" $UE_LOG`
+ NB_UE_MBMS_PUSH_MSG=`egrep -c "TRIED TO PUSH MBMS DATA TO" $UE_LOG`
+ if [ $NB_ENB_GOT_SYNC -gt 0 ] && [ $NB_UE_GOT_SYNC -gt 0 ] && [ $NB_ENB_SYNCED_WITH_UE -gt 0 ] && [ $NB_UE_MBMS_PUSH_MSG -gt 0 ]
+ then
+ echo " OK " >> ./test_simulator_results.html
+ else
+ echo " KO " >> ./test_simulator_results.html
+ fi
+ echo " " >> ./test_simulator_results.html
+ if [ $NB_ENB_GOT_SYNC -gt 0 ]
+ then
+ echo "- eNB --> got sync " >> ./test_simulator_results.html
+ else
+ echo "- eNB NEVER got sync " >> ./test_simulator_results.html
+ fi
+ if [ $NB_ENB_TUNNEL_UP -gt 0 ]
+ then
+ echo "- eNB mounted oaitun_enb1 interface " >> ./test_simulator_results.html
+ else
+ echo "- eNB NEVER mounted oaitun_enb1 interface " >> ./test_simulator_results.html
+ fi
+ if [ $NB_ENB_MTUNNEL_UP -gt 0 ]
+ then
+ echo "- eNB mounted oaitun_enm1 interface " >> ./test_simulator_results.html
+ else
+ echo "- eNB NEVER mounted oaitun_enm1 interface " >> ./test_simulator_results.html
+ fi
+ if [ $NB_UE_GOT_SYNC -gt 0 ]
+ then
+ echo "- LTE UE --> got sync " >> ./test_simulator_results.html
+ else
+ echo "- LTE UE NEVER got sync " >> ./test_simulator_results.html
+ fi
+ if [ $NB_ENB_SYNCED_WITH_UE -gt 0 ]
+ then
+ echo "- LTE UE attached to eNB " >> ./test_simulator_results.html
+ else
+ echo "- LTE UE NEVER attached to eNB " >> ./test_simulator_results.html
+ fi
+ if [ $NB_UE_TUNNEL_UP -gt 0 ]
+ then
+ echo "- LTE UE mounted oaitun_ue1 interface " >> ./test_simulator_results.html
+ else
+ echo "- LTE UE NEVER mounted oaitun_ue1 interface " >> ./test_simulator_results.html
+ fi
+ if [ $NB_UE_MTUNNEL_UP -gt 0 ]
+ then
+ echo "- LTE UE mounted oaitun_uem1 interface " >> ./test_simulator_results.html
+ else
+ echo "- LTE UE NEVER mounted oaitun_uem1 interface " >> ./test_simulator_results.html
+ fi
+ if [ $NB_UE_MBMS_PUSH_MSG -gt 0 ]
+ then
+ echo "- LTE UE tried to push ${NB_UE_MBMS_PUSH_MSG} MBMS DATA " >> ./test_simulator_results.html
+ else
+ echo "- LTE UE NEVER pushed MBMS DATA " >> ./test_simulator_results.html
+ fi
+ echo " " >> ./test_simulator_results.html
+ echo " " >> ./test_simulator_results.html
+ fi
+ #PING_LOGS=`ls $ARCHIVES_LOC/${TMODE}_${BW}MHz_${CN_CONFIG}_ping*.log 2> /dev/null`
+ #analyzePingFiles
+
+ #IPERF_TESTS=`ls $ARCHIVES_LOC/${TMODE}_${BW}MHz_${CN_CONFIG}_iperf_dl*client*txt | grep -v mbms 2> /dev/null`
+ #analyzeIperfFiles
+
+ #IPERF_TESTS=`ls $ARCHIVES_LOC/${TMODE}_${BW}MHz_${CN_CONFIG}_iperf_ul*client*txt | grep -v mbms 2> /dev/null`
+ #analyzeIperfFiles
+ done
+ echo "
" >> ./test_simulator_results.html
+ echo "
" >> ./test_simulator_results.html
+
+ echo "
5G NR RF Simulator Check " >> ./test_simulator_results.html
+
+ if [ -f $ARCHIVES_LOC/test_final_status.log ]
+ then
+ if [ `egrep -c "5G-NR: TEST_OK" $ARCHIVES_LOC/test_final_status.log` -eq 1 ]
+ then
+ echo "
" >> ./test_simulator_results.html
+ echo " TEST was SUCCESSFUL " >> ./test_simulator_results.html
+ echo "
" >> ./test_simulator_results.html
+ else
+ echo "
" >> ./test_simulator_results.html
+ echo " TEST was a FAILURE! " >> ./test_simulator_results.html
+ echo "
" >> ./test_simulator_results.html
+ fi
+ else
+ echo "
" >> ./test_simulator_results.html
+ echo " COULD NOT DETERMINE TEST FINAL STATUS! " >> ./test_simulator_results.html
+ echo "
" >> ./test_simulator_results.html
+ fi
+
+ echo "
More details on 5G NR RF Simulator test results " >> ./test_simulator_results.html
+ echo "
" >> ./test_simulator_results.html
echo "
" >> ./test_simulator_results.html
echo " " >> ./test_simulator_results.html
echo " Log File Name " >> ./test_simulator_results.html
@@ -523,7 +743,7 @@ function report_test {
ARCHIVES_LOC=archives/l2_sim/test
if [ -d $ARCHIVES_LOC ]
then
- echo " L2-NFAPI Simulator Check " >> ./test_simulator_results.html
+ echo " 4G LTE L2-NFAPI Simulator Check " >> ./test_simulator_results.html
if [ -f $ARCHIVES_LOC/test_final_status.log ]
then
diff --git a/ci-scripts/runTestOnVM.sh b/ci-scripts/runTestOnVM.sh
index 1f9d945a63..289f4500e6 100755
--- a/ci-scripts/runTestOnVM.sh
+++ b/ci-scripts/runTestOnVM.sh
@@ -169,6 +169,14 @@ function get_ue_ip_addr {
rm $1
}
+function get_ue_mbms_ip_addr {
+ local LOC_IF_ID=$3
+ echo "ifconfig oaitun_uem${LOC_IF_ID} | egrep \"inet addr\" | sed -e 's#^.*inet addr:##' -e 's# P-t-P:.*\$##'" > $1
+ UE_IP_ADDR=`ssh -T -o StrictHostKeyChecking=no ubuntu@$2 < $1`
+ echo "Test UE${LOC_IF_ID} MBMS IP Address is : $UE_IP_ADDR"
+ rm $1
+}
+
function get_enb_noS1_ip_addr {
echo "ifconfig oaitun_enb1 | egrep \"inet addr\" | sed -e 's#^.*inet addr:##' -e 's# P-t-P:.*\$##'" > $1
ENB_IP_ADDR=`ssh -T -o StrictHostKeyChecking=no ubuntu@$2 < $1`
@@ -176,6 +184,13 @@ function get_enb_noS1_ip_addr {
rm $1
}
+function get_enb_mbms_noS1_ip_addr {
+ echo "ifconfig oaitun_enm1 | egrep \"inet addr\" | sed -e 's#^.*inet addr:##' -e 's# P-t-P:.*\$##'" > $1
+ ENB_IP_ADDR=`ssh -T -o StrictHostKeyChecking=no ubuntu@$2 < $1`
+ echo "Test eNB MBMS IP Address is : $ENB_IP_ADDR"
+ rm $1
+}
+
function ping_ue_ip_addr {
local LOC_FG_OR_BG=$5
echo "echo \"COMMAND IS: ping -c 20 $3\" > $4" > $1
@@ -957,9 +972,9 @@ function start_rf_sim_enb {
echo "cd /home/ubuntu/tmp/cmake_targets/ran_build/build/" >> $1
if [ $LOC_S1_CONFIGURATION -eq 0 ]
then
- echo "echo \"ulimit -c unlimited && ./lte-softmodem -O /home/ubuntu/tmp/ci-scripts/conf_files/ci-$LOC_CONF_FILE --rfsim --log_config.global_log_options level,nocolor --noS1\" > ./my-lte-softmodem-run.sh " >> $1
+ echo "echo \"ulimit -c unlimited && ./lte-softmodem -O /home/ubuntu/tmp/ci-scripts/conf_files/ci-$LOC_CONF_FILE --rfsim --log_config.global_log_options level,nocolor --noS1 --eNBs.[0].rrc_inactivity_threshold 0\" > ./my-lte-softmodem-run.sh " >> $1
else
- echo "echo \"ulimit -c unlimited && ./lte-softmodem -O /home/ubuntu/tmp/ci-scripts/conf_files/ci-$LOC_CONF_FILE --rfsim --log_config.global_log_options level,nocolor \" > ./my-lte-softmodem-run.sh " >> $1
+ echo "echo \"ulimit -c unlimited && ./lte-softmodem -O /home/ubuntu/tmp/ci-scripts/conf_files/ci-$LOC_CONF_FILE --rfsim --log_config.global_log_options level,nocolor --eNBs.[0].rrc_inactivity_threshold 0 --eNBs.[0].plmn_list.[0].mnc 93\" > ./my-lte-softmodem-run.sh " >> $1
fi
echo "chmod 775 ./my-lte-softmodem-run.sh" >> $1
echo "cat ./my-lte-softmodem-run.sh" >> $1
@@ -1015,6 +1030,31 @@ function start_rf_sim_enb {
else
echo "RF-SIM eNB oaitun_enb1 is UP and CONFIGURED"
fi
+ if [[ $LOC_CONF_FILE =~ .*mbms.* ]]
+ then
+ echo "ifconfig oaitun_enm1 | egrep -c \"inet addr\"" > $1
+ # Checking oaitun_enm1 interface has now an IP address
+ i="0"
+ while [ $i -lt 10 ]
+ do
+ CONNECTED=`ssh -T -o StrictHostKeyChecking=no ubuntu@$LOC_ENB_VM_IP_ADDR < $1`
+ if [ $CONNECTED -eq 1 ]
+ then
+ i="100"
+ else
+ i=$[$i+1]
+ sleep 5
+ fi
+ done
+ rm $1
+ if [ $i -lt 50 ]
+ then
+ ENB_SYNC=0
+ echo "RF-SIM eNB oaitun_enm1 is DOWN or NOT CONFIGURED"
+ else
+ echo "RF-SIM eNB oaitun_enm1 is UP and CONFIGURED"
+ fi
+ fi
fi
sleep 10
}
@@ -1027,6 +1067,7 @@ function start_rf_sim_ue {
local LOC_FREQUENCY=$6
# 1 is with S1 and 0 without S1 aka noS1
local LOC_S1_CONFIGURATION=$7
+ local LOC_MBMS_CONFIGURATION=$8
echo "echo \"sudo apt-get --yes --quiet install daemon \"" > $1
echo "sudo apt-get --yes install daemon >> /home/ubuntu/tmp/cmake_targets/log/daemon-install.txt 2>&1" >> $1
echo "echo \"export RFSIMULATOR=${LOC_ENB_VM_IP_ADDR}\"" >> $1
@@ -1036,9 +1077,9 @@ function start_rf_sim_ue {
echo "cd /home/ubuntu/tmp/cmake_targets/ran_build/build/" >> $1
if [ $LOC_S1_CONFIGURATION -eq 0 ]
then
- echo "echo \"ulimit -c unlimited && ./lte-uesoftmodem -C ${LOC_FREQUENCY}000000 -r $LOC_PRB --nokrnmod 1 --rfsim --log_config.global_log_options level,nocolor --noS1\" > ./my-lte-softmodem-run.sh " >> $1
+ echo "echo \"ulimit -c unlimited && ./lte-uesoftmodem -C ${LOC_FREQUENCY}000000 -r $LOC_PRB --ue-rxgain 140 --ue-txgain 120 --nokrnmod 1 --rfsim --log_config.global_log_options level,nocolor --noS1\" > ./my-lte-softmodem-run.sh " >> $1
else
- echo "echo \"ulimit -c unlimited && ./lte-uesoftmodem -C ${LOC_FREQUENCY}000000 -r $LOC_PRB --nokrnmod 1 --rfsim --log_config.global_log_options level,nocolor\" > ./my-lte-softmodem-run.sh " >> $1
+ echo "echo \"ulimit -c unlimited && ./lte-uesoftmodem -C ${LOC_FREQUENCY}000000 -r $LOC_PRB --ue-rxgain 140 --ue-txgain 120 --nokrnmod 1 --rfsim --log_config.global_log_options level,nocolor\" > ./my-lte-softmodem-run.sh " >> $1
fi
echo "chmod 775 ./my-lte-softmodem-run.sh" >> $1
echo "cat ./my-lte-softmodem-run.sh" >> $1
@@ -1093,6 +1134,31 @@ function start_rf_sim_ue {
else
echo "RF-SIM UE oaitun_ue1 is UP and CONFIGURED"
fi
+ if [ $LOC_MBMS_CONFIGURATION -eq 1 ]
+ then
+ # Checking oaitun_uem1 interface has now an IP address
+ i="0"
+ echo "ifconfig oaitun_uem1 | egrep -c \"inet addr\"" > $1
+ while [ $i -lt 10 ]
+ do
+ sleep 5
+ CONNECTED=`ssh -T -o StrictHostKeyChecking=no ubuntu@$LOC_UE_VM_IP_ADDR < $1`
+ if [ $CONNECTED -eq 1 ]
+ then
+ i="100"
+ else
+ i=$[$i+1]
+ fi
+ done
+ rm $1
+ if [ $i -lt 50 ]
+ then
+ UE_SYNC=0
+ echo "RF-SIM UE oaitun_uem1 is DOWN or NOT CONFIGURED"
+ else
+ echo "RF-SIM UE oaitun_uem1 is UP and CONFIGURED"
+ fi
+ fi
sleep 10
}
@@ -1668,7 +1734,7 @@ function run_test_on_vm {
fi
fi
- if [[ "$RUN_OPTIONS" == "complex" ]] && [[ $VM_NAME =~ .*-ru-sim.* ]]
+ if [[ "$RUN_OPTIONS" == "complex" ]] && [[ $VM_NAME =~ .*-rf-sim.* ]]
then
PING_STATUS=0
IPERF_STATUS=0
@@ -1686,11 +1752,10 @@ function run_test_on_vm {
install_epc_on_vm $EPC_VM_NAME $EPC_VM_CMDS
EPC_VM_IP_ADDR=`uvt-kvm ip $EPC_VM_NAME`
fi
- # withS1 configuration is not working
#EPC_CONFIGS=("wS1" "noS1")
#TRANS_MODES=("fdd" "tdd")
#BW_CASES=(05 10 20)
- EPC_CONFIGS=("noS1" "wS1")
+ EPC_CONFIGS=("wS1" "noS1")
TRANS_MODES=("fdd")
BW_CASES=(05)
for CN_CONFIG in ${EPC_CONFIGS[@]}
@@ -1754,7 +1819,7 @@ function run_test_on_vm {
echo "${CN_CONFIG} : Starting the UE"
echo "############################################################"
CURRENT_UE_LOG_FILE=${TMODE}_${BW}MHz_${CN_CONFIG}_ue.log
- start_rf_sim_ue $UE_VM_CMDS $UE_VM_IP_ADDR $ENB_VM_IP_ADDR $CURRENT_UE_LOG_FILE $PRB $FREQUENCY $S1_NOS1_CFG
+ start_rf_sim_ue $UE_VM_CMDS $UE_VM_IP_ADDR $ENB_VM_IP_ADDR $CURRENT_UE_LOG_FILE $PRB $FREQUENCY $S1_NOS1_CFG 0
if [ $UE_SYNC -eq 0 ]
then
echo "Problem w/ eNB and UE not syncing"
@@ -1762,13 +1827,13 @@ function run_test_on_vm {
terminate_enb_ue_basic_sim $UE_VM_CMDS $UE_VM_IP_ADDR 2
scp -o StrictHostKeyChecking=no ubuntu@$ENB_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_ENB_LOG_FILE $ARCHIVES_LOC
scp -o StrictHostKeyChecking=no ubuntu@$UE_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_UE_LOG_FILE $ARCHIVES_LOC
- if [ $S1_NOS1_CFG -eq 1 ]
- then
- terminate_epc $EPC_VM_CMDS $EPC_VM_IP_ADDR
- fi
- echo "TEST_KO" > $ARCHIVES_LOC/test_final_status.log
+ #if [ $S1_NOS1_CFG -eq 1 ]
+ #then
+ # terminate_epc $EPC_VM_CMDS $EPC_VM_IP_ADDR
+ #fi
+ # Now we keep running
STATUS=-1
- return
+ break
fi
if [ $S1_NOS1_CFG -eq 1 ]
@@ -1814,15 +1879,37 @@ function run_test_on_vm {
check_ping_result $ARCHIVES_LOC/$PING_LOG_FILE 20
fi
- if [ $S1_NOS1_CFG -eq 0 ]
+ if [ $S1_NOS1_CFG -eq 1 ]
then
- get_enb_noS1_ip_addr $ENB_VM_CMDS $ENB_VM_IP_ADDR
echo "############################################################"
- echo "${CN_CONFIG} : iperf DL -- UE is server and eNB is client"
+ echo "${CN_CONFIG} : iperf DL -- UE is server and EPC is client"
echo "############################################################"
IPERF_LOG_FILE=${TMODE}_${BW}MHz_${CN_CONFIG}_iperf_dl
get_ue_ip_addr $UE_VM_CMDS $UE_VM_IP_ADDR 1
- THROUGHPUT=4
+ THROUGHPUT=10
+ generic_iperf $UE_VM_CMDS $UE_VM_IP_ADDR $UE_IP_ADDR $EPC_VM_CMDS $EPC_VM_IP_ADDR $REAL_EPC_IP_ADDR $THROUGHPUT $IPERF_LOG_FILE 1 0
+ scp -o StrictHostKeyChecking=no ubuntu@$UE_VM_IP_ADDR:/home/ubuntu/${IPERF_LOG_FILE}_server.txt $ARCHIVES_LOC
+ scp -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu/${IPERF_LOG_FILE}_client.txt $ARCHIVES_LOC
+ check_iperf $ARCHIVES_LOC/$IPERF_LOG_FILE $THROUGHPUT
+
+ echo "############################################################"
+ echo "${CN_CONFIG} : iperf UL -- EPC is server and UE is client"
+ echo "############################################################"
+ IPERF_LOG_FILE=${TMODE}_${BW}MHz_${CN_CONFIG}_iperf_ul
+ THROUGHPUT=2
+ get_ue_ip_addr $UE_VM_CMDS $UE_VM_IP_ADDR 1
+ generic_iperf $EPC_VM_CMDS $EPC_VM_IP_ADDR $REAL_EPC_IP_ADDR $UE_VM_CMDS $UE_VM_IP_ADDR $UE_IP_ADDR $THROUGHPUT $IPERF_LOG_FILE 1 0
+ scp -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu/${IPERF_LOG_FILE}_server.txt $ARCHIVES_LOC
+ scp -o StrictHostKeyChecking=no ubuntu@$UE_VM_IP_ADDR:/home/ubuntu/${IPERF_LOG_FILE}_client.txt $ARCHIVES_LOC
+ check_iperf $ARCHIVES_LOC/$IPERF_LOG_FILE $THROUGHPUT
+ else
+ echo "############################################################"
+ echo "${CN_CONFIG} : iperf DL -- UE is server and eNB is client"
+ echo "############################################################"
+ get_enb_noS1_ip_addr $ENB_VM_CMDS $ENB_VM_IP_ADDR
+ IPERF_LOG_FILE=${TMODE}_${BW}MHz_${CN_CONFIG}_iperf_dl
+ get_ue_ip_addr $UE_VM_CMDS $UE_VM_IP_ADDR 1
+ THROUGHPUT=10
generic_iperf $UE_VM_CMDS $UE_VM_IP_ADDR $UE_IP_ADDR $ENB_VM_CMDS $ENB_VM_IP_ADDR $ENB_IP_ADDR $THROUGHPUT $IPERF_LOG_FILE 1 0
scp -o StrictHostKeyChecking=no ubuntu@$UE_VM_IP_ADDR:/home/ubuntu/${IPERF_LOG_FILE}_server.txt $ARCHIVES_LOC
scp -o StrictHostKeyChecking=no ubuntu@$ENB_VM_IP_ADDR:/home/ubuntu/${IPERF_LOG_FILE}_client.txt $ARCHIVES_LOC
@@ -1852,6 +1939,67 @@ function run_test_on_vm {
done
done
+ ####################
+ ## MSMS CASE noS1 ##
+ ####################
+ CONF_FILE=lte-fdd-mbms-basic-sim.conf
+ CN_CONFIG="noS1"
+ S1_NOS1_CFG=0
+ LTEBOX=0
+ TMODE="fdd"
+ FREQUENCY=2680
+ BW_CASES=(05)
+
+ for BW in ${BW_CASES[@]}
+ do
+ if [[ $BW =~ .*05.* ]]; then PRB=25; fi
+ if [[ $BW =~ .*10.* ]]; then PRB=50; fi
+ if [[ $BW =~ .*20.* ]]; then PRB=100; fi
+
+ echo "############################################################"
+ echo "${CN_CONFIG} : Starting the eNB with MSMS in ${TMODE}-${BW}MHz mode"
+ echo "############################################################"
+ CURRENT_ENB_LOG_FILE=${TMODE}_${BW}MHz_${CN_CONFIG}_enb_mbms.log
+ start_rf_sim_enb $ENB_VM_CMDS "$ENB_VM_IP_ADDR" "$EPC_VM_IP_ADDR" $CURRENT_ENB_LOG_FILE $PRB $CONF_FILE $S1_NOS1_CFG
+
+ echo "############################################################"
+ echo "${CN_CONFIG} : Starting the UE"
+ echo "############################################################"
+ CURRENT_UE_LOG_FILE=${TMODE}_${BW}MHz_${CN_CONFIG}_ue_mbms.log
+ start_rf_sim_ue $UE_VM_CMDS $UE_VM_IP_ADDR $ENB_VM_IP_ADDR $CURRENT_UE_LOG_FILE $PRB $FREQUENCY $S1_NOS1_CFG 1
+ if [ $UE_SYNC -eq 0 ]
+ then
+ echo "Problem w/ eNB and UE not syncing"
+ terminate_enb_ue_basic_sim $ENB_VM_CMDS $ENB_VM_IP_ADDR 1
+ terminate_enb_ue_basic_sim $UE_VM_CMDS $UE_VM_IP_ADDR 2
+ scp -o StrictHostKeyChecking=no ubuntu@$ENB_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_ENB_LOG_FILE $ARCHIVES_LOC
+ scp -o StrictHostKeyChecking=no ubuntu@$UE_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_UE_LOG_FILE $ARCHIVES_LOC
+ STATUS=-1
+ break
+ fi
+
+ echo "############################################################"
+ echo "${CN_CONFIG} : iperf DL -- UE is server and eNB is client"
+ echo "############################################################"
+ get_enb_mbms_noS1_ip_addr $ENB_VM_CMDS $ENB_VM_IP_ADDR
+ IPERF_LOG_FILE=${TMODE}_${BW}MHz_${CN_CONFIG}_iperf_dl_mbms
+ get_ue_mbms_ip_addr $UE_VM_CMDS $UE_VM_IP_ADDR 1
+ THROUGHPUT=2
+ generic_iperf $UE_VM_CMDS $UE_VM_IP_ADDR $UE_IP_ADDR $ENB_VM_CMDS $ENB_VM_IP_ADDR $ENB_IP_ADDR $THROUGHPUT $IPERF_LOG_FILE 1 0
+ scp -o StrictHostKeyChecking=no ubuntu@$UE_VM_IP_ADDR:/home/ubuntu/${IPERF_LOG_FILE}_server.txt $ARCHIVES_LOC
+ scp -o StrictHostKeyChecking=no ubuntu@$ENB_VM_IP_ADDR:/home/ubuntu/${IPERF_LOG_FILE}_client.txt $ARCHIVES_LOC
+ #check_iperf $ARCHIVES_LOC/$IPERF_LOG_FILE $THROUGHPUT
+
+ echo "############################################################"
+ echo "${CN_CONFIG} : Terminate enb/ue simulators"
+ echo "############################################################"
+ terminate_enb_ue_basic_sim $ENB_VM_CMDS $ENB_VM_IP_ADDR 1
+ terminate_enb_ue_basic_sim $UE_VM_CMDS $UE_VM_IP_ADDR 2
+ scp -o StrictHostKeyChecking=no ubuntu@$ENB_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_ENB_LOG_FILE $ARCHIVES_LOC
+ scp -o StrictHostKeyChecking=no ubuntu@$UE_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_UE_LOG_FILE $ARCHIVES_LOC
+
+ done
+
full_l2_sim_destroy
echo "############################################################"
@@ -1862,21 +2010,19 @@ function run_test_on_vm {
if [ $IPERF_STATUS -ne 0 ]; then STATUS=-1; fi
if [ $STATUS -eq 0 ]
then
- echo "TEST_OK" > $ARCHIVES_LOC/test_final_status.log
+ echo "LTE RFSIM seems OK"
+ echo "LTE: TEST_OK" > $ARCHIVES_LOC/test_final_status.log
else
- echo "TEST_KO" > $ARCHIVES_LOC/test_final_status.log
+ echo "LTE RFSIM seems to FAIL"
+ echo "LTE: TEST_KO" > $ARCHIVES_LOC/test_final_status.log
fi
fi
if [[ "$RUN_OPTIONS" == "complex" ]] && [[ $VM_NAME =~ .*-rf-sim.* ]]
then
+ NR_STATUS=0
PING_STATUS=0
IPERF_STATUS=0
- if [ -d $ARCHIVES_LOC ]
- then
- rm -Rf $ARCHIVES_LOC
- fi
- mkdir --parents $ARCHIVES_LOC
CN_CONFIG="noS1"
CONF_FILE=gnb.band78.tm1.106PRB.usrpn300.conf
@@ -1904,7 +2050,8 @@ function run_test_on_vm {
terminate_enb_ue_basic_sim $GNB_VM_CMDS $GNB_VM_IP_ADDR 1
scp -o StrictHostKeyChecking=no ubuntu@$GNB_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_GNB_LOG_FILE $ARCHIVES_LOC
scp -o StrictHostKeyChecking=no ubuntu@$NR_UE_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_NR_UE_LOG_FILE $ARCHIVES_LOC
- echo "TEST_KO" > $ARCHIVES_LOC/test_final_status.log
+ echo "5G-NR RFSIM seems to FAIL"
+ echo "5G-NR: TEST_KO" >> $ARCHIVES_LOC/test_final_status.log
STATUS=-1
return
fi
@@ -1936,13 +2083,16 @@ function run_test_on_vm {
echo "Checking run status"
echo "############################################################"
- if [ $PING_STATUS -ne 0 ]; then STATUS=-1; fi
- if [ $IPERF_STATUS -ne 0 ]; then STATUS=-1; fi
- if [ $STATUS -eq 0 ]
+ if [ $PING_STATUS -ne 0 ]; then NR_STATUS=-1; fi
+ if [ $IPERF_STATUS -ne 0 ]; then NR_STATUS=-1; fi
+ if [ $NR_STATUS -eq 0 ]
then
- echo "TEST_OK" > $ARCHIVES_LOC/test_final_status.log
+ echo "5G-NR RFSIM seems OK"
+ echo "5G-NR: TEST_OK" >> $ARCHIVES_LOC/test_final_status.log
else
- echo "TEST_KO" > $ARCHIVES_LOC/test_final_status.log
+ echo "5G-NR RFSIM seems to FAIL"
+ echo "5G-NR: TEST_KO" >> $ARCHIVES_LOC/test_final_status.log
+ STATUS=-1
fi
fi
diff --git a/cmake_targets/autotests/test_case_list.xml b/cmake_targets/autotests/test_case_list.xml
index 6795f2d1fa..c4f15c3a16 100644
--- a/cmake_targets/autotests/test_case_list.xml
+++ b/cmake_targets/autotests/test_case_list.xml
@@ -1045,7 +1045,7 @@
$OPENAIR_DIR/targets/bin/polartest.Rel15
-q -s-10 -f0
-q -s-10 -f0 -m1
- polartest.test1
+ polartest.test1 polartest.test2
BLER= 0.000000
segmentation fault|assertion|exiting|fatal
3
@@ -1107,8 +1107,7 @@
-n100 -R217 -a80
-n100 -R217 -a110 -b100
-n100 -e28
- nr_dlsim.test1 nr_dlsim.test2 nr_dlsim.test3 nr_dlsim.test4 nr_dlsim.test5 nr_dlsim.test6 nr_dlsim.test7
- nr_dlsim.test8 nr_dlsim.test9 nr_dlsim.test10 nr_dlsim.test11
+ nr_dlsim.test1 nr_dlsim.test2 nr_dlsim.test3 nr_dlsim.test4 nr_dlsim.test5 nr_dlsim.test6 nr_dlsim.test7 nr_dlsim.test8 nr_dlsim.test9 nr_dlsim.test10 nr_dlsim.test11
PDSCH test OK
segmentation fault|assertion|exiting|fatal
3
diff --git a/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c
index 412cd3fbef..2fd84f563c 100644
--- a/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c
+++ b/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c
@@ -547,10 +547,10 @@ int rx_pdsch(PHY_VARS_UE *ue,
pdsch_vars[eNB_id]->log2_maxh,
measurements); // log2_maxh+I0_shift
- if (symbol == 5) {
- LOG_M("rxF_comp_d.m","rxF_c_d",&pdsch_vars[eNB_id]->rxdataF_comp0[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);
- }
-
+// if (symbol == 5) {
+// LOG_M("rxF_comp_d.m","rxF_c_d",&pdsch_vars[eNB_id]->rxdataF_comp0[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);
+// }
+//
if ((rx_type==rx_IC_single_stream) &&
(eNB_id_in_connected_eNB)) {
dlsch_channel_compensation(pdsch_vars[eNB_id_i]->rxdataF_ext,
diff --git a/openair2/LAYER2/MAC/eNB_scheduler.c b/openair2/LAYER2/MAC/eNB_scheduler.c
index ae3f57bd8a..8d497c80d3 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler.c
@@ -897,10 +897,12 @@ eNB_dlsch_ulsch_scheduler(module_id_t module_idP,
} // end for loop on UE_id
#if (!defined(PRE_SCD_THREAD))
- PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, module_idP, ENB_FLAG_YES, NOT_A_RNTI, frameP, subframeP, module_idP);
- pdcp_run(&ctxt);
- pdcp_mbms_run(&ctxt);
- rrc_rx_tx(&ctxt, CC_id);
+ if (!NODE_IS_DU(RC.rrc[module_idP]->node_type)) {
+ PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, module_idP, ENB_FLAG_YES, NOT_A_RNTI, frameP, subframeP, module_idP);
+ pdcp_run(&ctxt);
+ pdcp_mbms_run(&ctxt);
+ rrc_rx_tx(&ctxt, CC_id);
+ }
#endif
for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_mch.c b/openair2/LAYER2/MAC/eNB_scheduler_mch.c
index 2d308430a5..e351b69bb0 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_mch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_mch.c
@@ -48,11 +48,11 @@
#include "pdcp.h"
#include "assertions.h"
-#if defined(ENABLE_ITTI)
- #include "intertask_interface.h"
-#endif
-
-#include "SIMULATION/TOOLS/sim.h" // for taus
+//#if defined(ENABLE_ITTI)
+//#include "intertask_interface.h"
+//#endif
+//
+#include "SIMULATION/TOOLS/sim.h" // for taus
#define ENABLE_MAC_PAYLOAD_DEBUG
#define DEBUG_eNB_SCHEDULER 1
@@ -60,37 +60,38 @@
extern RAN_CONTEXT_t RC;
-
-int8_t get_mbsfn_sf_alloction(module_id_t module_idP, uint8_t CC_id, uint8_t mbsfn_sync_area) {
- // currently there is one-to-one mapping between sf allocation pattern and sync area
- if (mbsfn_sync_area >= MAX_MBSFN_AREA) {
- LOG_W(MAC,
- "[eNB %d] CC_id %d MBSFN synchronization area %d out of range\n ",
- module_idP, CC_id, mbsfn_sync_area);
- return -1;
- } else if (RC.mac[module_idP]->
- common_channels[CC_id].mbsfn_SubframeConfig[mbsfn_sync_area]
- != NULL) {
- return mbsfn_sync_area;
- } else {
- LOG_W(MAC,
- "[eNB %d] CC_id %d MBSFN Subframe Config pattern %d not found \n ",
- module_idP, CC_id, mbsfn_sync_area);
- return -1;
- }
+int8_t
+get_mbsfn_sf_alloction(module_id_t module_idP, uint8_t CC_id,
+ uint8_t mbsfn_sync_area)
+{
+ // currently there is one-to-one mapping between sf allocation pattern and sync area
+ if (mbsfn_sync_area > MAX_MBSFN_AREA) {
+ LOG_W(MAC,
+ "[eNB %d] CC_id %d MBSFN synchronization area %d out of range\n ",
+ module_idP, CC_id, mbsfn_sync_area);
+ return -1;
+ } else if (RC.mac[module_idP]->
+ common_channels[CC_id].mbsfn_SubframeConfig[mbsfn_sync_area]
+ != NULL) {
+ return mbsfn_sync_area;
+ } else {
+ LOG_W(MAC,
+ "[eNB %d] CC_id %d MBSFN Subframe Config pattern %d not found \n ",
+ module_idP, CC_id, mbsfn_sync_area);
+ return -1;
+ }
}
static uint32_t bytes_in_buffer=0;
-static uint8_t msi_pmch_stop=0;
+static uint32_t msi_pmch_stop=0;
//static uint8_t msi_active=0;
//static uint8_t msi_pmch_stop2=0;
uint16_t mbms_rab_id = 2047;
-static uint8_t msi_sfs=0;
+static uint32_t msi_sfs=0;
//MSI_ELEMENT * ptr =NULL;
-
int
schedule_MBMS_NFAPI(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
sub_frame_t subframeP)
@@ -121,8 +122,9 @@ schedule_MBMS_NFAPI(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
int mcch_mcs = -1;
uint16_t TBS, j = -1, padding = 0, post_padding = 0;
mac_rlc_status_resp_t rlc_status;
+ //mac_rlc_status_resp_t rlc_status2;
int num_mtch;
- int msi_length, i, k;
+ int msi_length=0, i, k;
//uint8_t l =0;
unsigned char sdu_lcids[11], num_sdus = 0, offset = 0;
uint16_t sdu_lengths[11], sdu_length_total = 0;
@@ -511,9 +513,11 @@ schedule_MBMS_NFAPI(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
// 2nd: Create MSI, get MCCH from RRC and MTCHs from RLC
// there is MSI (MCH Scheduling Info)
+ uint16_t msi_control_element[29], *msi_ptr;
+ char *buffer_pointer=NULL;
if (msi_flag == 1) {
// Create MSI here
- uint16_t msi_control_element[29], *msi_ptr;
+ //uint16_t msi_control_element[29], *msi_ptr;
msi_ptr = &msi_control_element[0];
//((MSI_ELEMENT *) msi_ptr)->lcid = MCCH_LCHANID; //MCCH
@@ -543,9 +547,11 @@ schedule_MBMS_NFAPI(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
msi_pmch_stop = msi_sfs-1;
else
msi_pmch_stop = msi_sfs;
+
+ msi_pmch_stop = msi_sfs;
- if( msi_pmch_stop > cc->pmch_Config[0]->sf_AllocEnd_r9)
- LOG_W(MAC,"e-MBMS Buffer Overflow\n");
+ //if( msi_pmch_stop > cc->pmch_Config[0]->sf_AllocEnd_r9)
+ //LOG_W(MAC,"e-MBMS Buffer Overflow\n");
if(msi_pmch_stop>=num_sf_alloc /*&& msi_pmch_stop <=cc->pmch_Config[0]->sf_AllocEnd_r9*/) {
((MSI_ELEMENT *) msi_ptr)->stop_sf_MSB = 0; // last subframeP of this mtch (only one mtch now) & stop_sf limited to 256
@@ -584,6 +590,8 @@ schedule_MBMS_NFAPI(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
memcpy((char *) &mch_buffer[sdu_length_total],
msi_control_element, msi_length);
+ buffer_pointer = (char *) &mch_buffer[sdu_length_total];
+
sdu_lcids[num_sdus] = MCH_SCHDL_INFO;
sdu_lengths[num_sdus] = msi_length;
sdu_length_total += sdu_lengths[num_sdus];
@@ -594,12 +602,26 @@ schedule_MBMS_NFAPI(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
}
// there is MCCH
if (mcch_flag == 1) {
+
+ //LOG_E(MAC,
+ //"[eNB %d] CC_id %d Frame %d Subframe %d: Schedule MCCH MESSAGE COUNTING (mod %d)\n",module_idP, CC_id, frameP, subframeP,frameP%2==0);
+ if(1/*frameP%2==0*/){
LOG_D(MAC,
"[eNB %d] CC_id %d Frame %d Subframe %d: Schedule MCCH MESSAGE (area %d, sfAlloc %d)\n",
module_idP, CC_id, frameP, subframeP, i, j);
- mcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, MCCH, 0xFFFC, 1, &cc->MCCH_pdu.payload[0],
+ mcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, MCCH, 0xFFFC, 1, &cc->MCCH_pdu.payload[0],
i); // this is the mbsfn sync area index
+ }
+ else{
+ LOG_E(MAC,
+ "[eNB %d] CC_id %d Frame %d Subframe %d: Schedule MCCH MESSAGE COUNTING (area %d, sfAlloc %d)\n",
+ module_idP, CC_id, frameP, subframeP, i, j);
+
+//
+// mcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, MCCH_COUNTING, 0xFFFC, 1, &cc->MCCH_pdu.payload[0],
+// i); // this is the mbsfn sync area index
+ }
mcch_sdu_length+=1; //RLC ?
@@ -629,6 +651,15 @@ schedule_MBMS_NFAPI(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
sdu_lcids[num_sdus] = MCCH_LCHANID;
sdu_lengths[num_sdus] = mcch_sdu_length;
+ // LOG_W(MAC,"MCCH RLC %x:",(unsigned char)mch_buffer[sdu_length_total]);
+ // for (int kk = 7; kk >= 0; kk--)
+ // {
+ // printf("%d",(((unsigned char)mch_buffer[sdu_length_total]) >> kk) & 1 ? '1' : '0');
+ // }
+ // printf("\n");
+ //mch_buffer[sdu_length_total] = (unsigned char)0;
+
+
if (sdu_lengths[num_sdus] > 128) {
header_len_mcch = 3;
}
@@ -641,6 +672,7 @@ schedule_MBMS_NFAPI(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
}
}
+
TBS =
get_TBS_DL(/*cc->pmch_Config[0]->dataMCS_r9*/cc->MCH_pdu.mcs, to_prb(cc->mib->message.dl_Bandwidth));
// do not let mcch and mtch multiplexing when relaying is active
@@ -686,7 +718,7 @@ schedule_MBMS_NFAPI(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
mbms_rab_id = cc->mbms_SessionList[0]->list.array[0]->logicalChannelIdentity_r9;
rlc_status =
- mac_rlc_status_ind(module_idP, 0, frameP, subframeP,
+ mac_rlc_status_ind(module_idP, 0/*0xfffd*/, frameP, subframeP,
module_idP, ENB_FLAG_YES, MBMS_FLAG_YES,
cc->mbms_SessionList[0]->list.array[0]->logicalChannelIdentity_r9,
//MTCH,
@@ -697,36 +729,77 @@ schedule_MBMS_NFAPI(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
bytes_in_buffer = rlc_status.bytes_in_buffer;
- msi_sfs = rlc_status.bytes_in_buffer/TBS+(rlc_status.bytes_in_buffer%TBS?1:0);
+ if( !(mcch_flag==1 || msi_flag==1) )
+ msi_sfs = rlc_status.bytes_in_buffer/(TBS- header_len_mcch - header_len_msi -sdu_length_total - header_len_mtch)+(rlc_status.bytes_in_buffer%(TBS- header_len_mcch - header_len_msi -sdu_length_total - header_len_mtch)?1:0);
+ //uint16_t msi_control_element[29], *msi_ptr;
+ //
+ //
+ uint16_t TBS_MTCH =
+ get_TBS_DL(cc->pmch_Config[0]->dataMCS_r9, to_prb(cc->mib->message.dl_Bandwidth));
+ if(msi_flag==1 && buffer_pointer!=NULL){
+ msi_ptr = &msi_control_element[0];
+
+ //memcpy(buffer_pointer,
+ // msi_control_element, msi_length);
+
+ // msi_pmch_stop = rlc_status.bytes_in_buffer/TBS+(rlc_status.bytes_in_buffer%TBS?1:0);
+ msi_pmch_stop = (rlc_status.bytes_in_buffer - header_len_mcch - header_len_msi -sdu_length_total - header_len_mtch)/(TBS_MTCH/*- header_len_mcch - header_len_msi -sdu_length_total*/ - header_len_mtch)+((rlc_status.bytes_in_buffer-TBS-header_len_mcch - header_len_msi -sdu_length_total)%(TBS_MTCH/*- header_len_mcch - header_len_msi -sdu_length_total*/ - header_len_mtch)?0:0);
+
+ if( msi_pmch_stop > cc->pmch_Config[0]->sf_AllocEnd_r9)
+ LOG_E(MAC,"e-MBMS Buffer Overflow\n");
+ if(msi_pmch_stop>=num_sf_alloc /*&& msi_pmch_stop <=cc->pmch_Config[0]->sf_AllocEnd_r9*/) {
+ ((MSI_ELEMENT *) msi_ptr)->stop_sf_MSB = 0; // last subframeP of this mtch (only one mtch now) & stop_sf limited to 256
+ //((MSI_ELEMENT *) msi_ptr)->stop_sf_LSB = msi_pmch_stop;
+ ((MSI_ELEMENT *) msi_ptr)->stop_sf_LSB = (msi_pmch_stop <=cc->pmch_Config[0]->sf_AllocEnd_r9 ? msi_pmch_stop: cc->pmch_Config[0]->sf_AllocEnd_r9);
+ msi_pmch_stop = (msi_pmch_stop <=cc->pmch_Config[0]->sf_AllocEnd_r9 ? msi_pmch_stop: cc->pmch_Config[0]->sf_AllocEnd_r9);
+ }else{
+ ((MSI_ELEMENT *) msi_ptr)->stop_sf_MSB = 0x7; // last subframeP of this mtch (only one mtch now)
+ ((MSI_ELEMENT *) msi_ptr)->stop_sf_LSB = 0xFF;
+ msi_pmch_stop=0;
+ }
+ LOG_I(MAC,"frameP %d, subframeP %d rlc_status.bytes_in_buffer %d stop_sf_LSB %d\n",frameP,subframeP,rlc_status.bytes_in_buffer,((MSI_ELEMENT *) msi_ptr)->stop_sf_LSB);
+ //LOG_W(MAC,"frameP %d, subframeP %d rlc_status.bytes_in_buffer %d stop_sf_LSB %d msi_calc:%d remainder %d\n",frameP,subframeP,rlc_status.bytes_in_buffer,((MSI_ELEMENT *) msi_ptr)->stop_sf_LSB,rlc_status.bytes_in_buffer/(TBS_MTCH/*- header_len_mcch - header_len_msi -sdu_length_total*/ - header_len_mtch)+((rlc_status.bytes_in_buffer-TBS-header_len_mcch - header_len_msi -sdu_length_total)%(TBS_MTCH/*- header_len_mcch - header_len_msi -sdu_length_total*/ - header_len_mtch)?0:0),((rlc_status.bytes_in_buffer-TBS-header_len_mcch - header_len_msi -sdu_length_total)%(TBS_MTCH/*- header_len_mcch - header_len_msi -sdu_length_total*/ - header_len_mtch)?0:0));
+
+ memcpy(buffer_pointer,
+ msi_control_element, msi_length);
+
+ }
LOG_D(MAC,
- "e-MBMS log channel %u frameP %d, subframeP %d, rlc_status.bytes_in_buffer is %d TBS %d pmch_stop %d msi_sfs %d\n",
- MTCH, frameP, subframeP, rlc_status.bytes_in_buffer,TBS,msi_pmch_stop,msi_sfs);
+ "e-MBMS log channel %u frameP %d, subframeP %d, rlc_status.bytes_in_buffer is %d TBS_MTCH %d pmch_stop %d msi_sfs %d\n",
+ MTCH, frameP, subframeP, rlc_status.bytes_in_buffer,TBS_MTCH,msi_pmch_stop,msi_sfs);
- if (rlc_status.bytes_in_buffer > 0 || msi_pmch_stop > 0 /*msi_pmch_stop>=num_sf_alloc*/ ) {
+ if ((rlc_status.bytes_in_buffer > 0 && msi_pmch_stop > 0) && ((msi_flag!=1 || mcch_flag!=1)) /*|| (rlc_status.bytes_in_buffer > 0 && (msi_flag==1 || mcch_flag==1))*//*|| msi_sfs > cc->pmch_Config[0]->sf_AllocEnd_r9 */ /*msi_pmch_stop>=num_sf_alloc*/ ) {
//if(rlc_status.bytes_in_buffer > 0){
- LOG_I(MAC,
+ LOG_D(MAC,
"[eNB %d][MBMS USER-PLANE], CC_id %d, Frame %d, MTCH->MCH, Requesting %d bytes from RLC (header len mtch %d) rlc_status.bytes_in_buffer %d\n",
module_idP, CC_id, frameP,
TBS - header_len_mcch - header_len_msi -
sdu_length_total - header_len_mtch, header_len_mtch, rlc_status.bytes_in_buffer);
- sdu_lengths[num_sdus] = mac_rlc_data_req(module_idP, 0, module_idP, frameP, ENB_FLAG_YES, MBMS_FLAG_YES,cc->mbms_SessionList[0]->list.array[0]->logicalChannelIdentity_r9, 0, //not used
+ sdu_lengths[num_sdus] = mac_rlc_data_req(module_idP, 0/*0xfffd*/, module_idP, frameP, ENB_FLAG_YES, MBMS_FLAG_YES,cc->mbms_SessionList[0]->list.array[0]->logicalChannelIdentity_r9, 0, //not used
(char *)
&mch_buffer[sdu_length_total]
,0,
0
);
+
+ // LOG_I(MAC,"RLC %x:",(unsigned char)mch_buffer[sdu_length_total]);
+ // for (int kk = 7; kk >= 0; kk--)
+ // {
+ // printf("%d",(((unsigned char)mch_buffer[sdu_length_total]) >> kk) & 1 ? '1' : '0');
+ // }
+ // printf("\n");
//sdu_lengths[num_sdus] = mac_rlc_data_req(module_idP,frameP, MBMS_FLAG_NO, MTCH+(MAX_NUM_RB*(MAX_MOBILES_PER_ENB+1)), (char*)&mch_buffer[sdu_length_total]);
- LOG_I(MAC,
+ LOG_D(MAC,
"[eNB %d][MBMS USER-PLANE] CC_id %d Got %d bytes for MTCH %d msi_pmch_stop %d msi_sfs %d sdu_lengths[num_sdus] %d\n",
module_idP, CC_id, sdu_lengths[num_sdus], MTCH,msi_pmch_stop,msi_sfs, sdu_lengths[num_sdus]);
cc->mtch_active = 1;
sdu_lcids[num_sdus] = cc->mbms_SessionList[0]->list.array[0]->logicalChannelIdentity_r9/*MTCH*/;
sdu_length_total += sdu_lengths[num_sdus];
- if (msi_pmch_stop != 0)
+ if (msi_pmch_stop != 0 && msi_flag !=1)
msi_pmch_stop--;
@@ -833,14 +906,14 @@ schedule_MBMS_NFAPI(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
}
/* Tracing of PDU is done on UE side */
- if (opt_enabled == 1) {
- trace_pdu(DIRECTION_DOWNLINK, (uint8_t *) cc->MCH_pdu.payload, TBS, module_idP, WS_M_RNTI , 0xffff, // M_RNTI = 6 in wirehsark
+ //if (opt_enabled == 1) {
+ trace_pdu(DIRECTION_DOWNLINK, (uint8_t *) cc->MCH_pdu.payload, TBS, module_idP, WS_M_RNTI , 0xfffd, // M_RNTI = 6 in wirehsark
RC.mac[module_idP]->frame,
RC.mac[module_idP]->subframe, 0, 0);
LOG_D(OPT,
"[eNB %d][MCH] CC_id %d Frame %d : MAC PDU with size %d\n",
module_idP, CC_id, frameP, TBS);
- }
+ //}
eNB_MAC_INST *eNB = RC.mac[module_idP];
dl_req = &eNB->DL_req[CC_id].dl_config_request_body;
@@ -1370,7 +1443,7 @@ schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
header_len_msi = 3;
}
- LOG_D(MAC,
+ LOG_W(MAC,
"[eNB %d] CC_id %d Frame %d : MSI->MCH, length of MSI is %d bytes TBS %d, bytes in buffer %d stop_sf_LSB %d msi_sfs %d cc->pmch_Config[0]->sf_AllocEnd_r9 %ld\n",
module_idP, CC_id, frameP, msi_length,TBS, bytes_in_buffer,msi_pmch_stop,msi_sfs,cc->pmch_Config[0]->sf_AllocEnd_r9);
@@ -1485,7 +1558,7 @@ schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
mbms_rab_id = cc->mbms_SessionList[0]->list.array[0]->logicalChannelIdentity_r9;
rlc_status =
- mac_rlc_status_ind(module_idP, 0, frameP, subframeP,
+ mac_rlc_status_ind(module_idP, 0/*0xfffd*/, frameP, subframeP,
module_idP, ENB_FLAG_YES, MBMS_FLAG_YES,
cc->mbms_SessionList[0]->list.array[0]->logicalChannelIdentity_r9,
//MTCH,
@@ -1510,7 +1583,7 @@ schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
TBS - header_len_mcch - header_len_msi -
sdu_length_total - header_len_mtch, header_len_mtch, rlc_status.bytes_in_buffer);
- sdu_lengths[num_sdus] = mac_rlc_data_req(module_idP, 0, module_idP, frameP, ENB_FLAG_YES, MBMS_FLAG_YES,cc->mbms_SessionList[0]->list.array[0]->logicalChannelIdentity_r9, 0, //not used
+ sdu_lengths[num_sdus] = mac_rlc_data_req(module_idP, 0/*0xfffd*/, module_idP, frameP, ENB_FLAG_YES, MBMS_FLAG_YES,cc->mbms_SessionList[0]->list.array[0]->logicalChannelIdentity_r9, 0, //not used
(char *)
&mch_buffer[sdu_length_total]
,0,
@@ -1632,14 +1705,14 @@ schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
}
/* Tracing of PDU is done on UE side */
- if (opt_enabled == 1) {
+ //if (opt_enabled == 1) {
trace_pdu(DIRECTION_DOWNLINK, (uint8_t *) cc->MCH_pdu.payload, TBS, module_idP, WS_M_RNTI , 0xffff, // M_RNTI = 6 in wirehsark
RC.mac[module_idP]->frame,
RC.mac[module_idP]->subframe, 0, 0);
LOG_D(OPT,
"[eNB %d][MCH] CC_id %d Frame %d : MAC PDU with size %d\n",
module_idP, CC_id, frameP, TBS);
- }
+ //}
/*
for (j=0;jMCH_pdu.mcs=0;
- //LOG_D(MAC," MCH_pdu.mcs is %d\n", RC.mac[module_idP]->MCH_pdu.mcs);
- //#warning "MCH pdu should take the CC_id index"
- return (&RC.mac[module_idP]->common_channels[CC_id].MCH_pdu);
+ sub_frame_t subframeP)
+{
+ // RC.mac[module_idP]->MCH_pdu.mcs=0;
+ //LOG_D(MAC," MCH_pdu.mcs is %d\n", RC.mac[module_idP]->MCH_pdu.mcs);
+//#warning "MCH pdu should take the CC_id index"
+ return (&RC.mac[module_idP]->common_channels[CC_id].MCH_pdu);
}
diff --git a/openair2/LAYER2/MAC/ue_procedures.c b/openair2/LAYER2/MAC/ue_procedures.c
index d4277917eb..1244125bb6 100644
--- a/openair2/LAYER2/MAC/ue_procedures.c
+++ b/openair2/LAYER2/MAC/ue_procedures.c
@@ -746,6 +746,9 @@ ue_send_mch_sdu(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
LOG_D(MAC, "[UE %d] parse_mch_header, found %d sdus\n", module_idP,
num_sdu);
+ if(sdu[0]==0 && sdu[1]==0)
+ num_sdu=0;
+
for (i = 0; i < num_sdu; i++) {
if (rx_lcids[i] == MCH_SCHDL_INFO) {
if (rx_lengths[i] & 0x01) {
diff --git a/openair2/RRC/NAS/nas_config.c b/openair2/RRC/NAS/nas_config.c
index c4bb52b1bb..2eb439b9e9 100644
--- a/openair2/RRC/NAS/nas_config.c
+++ b/openair2/RRC/NAS/nas_config.c
@@ -260,7 +260,7 @@ int nas_config_mbms(int interface_id, int thirdOctet, int fourthOctet, char *ifn
bringInterfaceUp(interfaceName, 1);
if(!returnValue)
- LOG_I(OIP,"Interface %s successfuly configured, ip address %s, mask %s broadcast address %s\n",
+ LOG_I(OIP,"Interface %s successfully configured, ip address %s, mask %s broadcast address %s\n",
interfaceName, ipAddress, netMask, broadcastAddress);
else
LOG_E(OIP,"Interface %s couldn't be configured (ip address %s, mask %s broadcast address %s)\n",
@@ -301,7 +301,7 @@ int nas_config_mbms_s1(int interface_id, int thirdOctet, int fourthOctet, char *
printf("returnValue %d\n",returnValue);
if(!returnValue)
- LOG_I(OIP,"Interface %s successfuly configured, ip address %s, mask %s broadcast address %s\n",
+ LOG_I(OIP,"Interface %s successfully configured, ip address %s, mask %s broadcast address %s\n",
interfaceName, ipAddress, "255.255.255.0", broadcastAddress);
else
LOG_E(OIP,"Interface %s couldn't be configured (ip address %s, mask %s broadcast address %s)\n",