Merge branch 'develop_integration_2018_w35' into 'develop'
Develop integration 2018 w35 See merge request oai/openairinterface5g!378
This commit is contained in:
@@ -238,6 +238,7 @@ pipeline {
|
|||||||
sh "./ci-scripts/reportBuildLocally.sh --git-url ${GIT_URL} --job-name ${JOB_NAME} --build-id ${BUILD_ID} --trigger push --branch ${GIT_BRANCH} --commit ${GIT_COMMIT}"
|
sh "./ci-scripts/reportBuildLocally.sh --git-url ${GIT_URL} --job-name ${JOB_NAME} --build-id ${BUILD_ID} --trigger push --branch ${GIT_BRANCH} --commit ${GIT_COMMIT}"
|
||||||
}
|
}
|
||||||
if(fileExists('build_results.html')) {
|
if(fileExists('build_results.html')) {
|
||||||
|
sh "sed -i -e 's#Build-ID: ${BUILD_ID}#Build-ID: <a href=\"{BUILD_URL}\">${BUILD_ID}</a>' build_results.html"
|
||||||
archiveArtifacts artifacts: 'build_results.html'
|
archiveArtifacts artifacts: 'build_results.html'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -329,6 +330,7 @@ pipeline {
|
|||||||
sh "./ci-scripts/reportTestLocally.sh --git-url ${GIT_URL} --job-name ${JOB_NAME} --build-id ${BUILD_ID} --trigger push --branch ${GIT_BRANCH} --commit ${GIT_COMMIT}"
|
sh "./ci-scripts/reportTestLocally.sh --git-url ${GIT_URL} --job-name ${JOB_NAME} --build-id ${BUILD_ID} --trigger push --branch ${GIT_BRANCH} --commit ${GIT_COMMIT}"
|
||||||
}
|
}
|
||||||
if(fileExists('test_simulator_results.html')) {
|
if(fileExists('test_simulator_results.html')) {
|
||||||
|
sh "sed -i -e 's#Build-ID: ${BUILD_ID}#Build-ID: <a href=\"{BUILD_URL}\">${BUILD_ID}</a>' test_simulator_results.html"
|
||||||
archiveArtifacts artifacts: 'test_simulator_results.html'
|
archiveArtifacts artifacts: 'test_simulator_results.html'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -183,12 +183,14 @@ eNBs =
|
|||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
|
|
||||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24";
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24";
|
||||||
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24";
|
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24";
|
||||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.111/24";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -183,12 +183,14 @@ eNBs =
|
|||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
|
|
||||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24";
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24";
|
||||||
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24";
|
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24";
|
||||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.111/24";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -183,12 +183,14 @@ eNBs =
|
|||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
|
|
||||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24";
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24";
|
||||||
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24";
|
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24";
|
||||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.111/24";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -189,6 +189,9 @@ eNBs =
|
|||||||
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR";
|
ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR";
|
||||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "CI_ENB_IP_ADDR";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -511,6 +511,7 @@ then
|
|||||||
echo "sudo -E daemon --inherit --unsafe --name=enb_daemon --chdir=/home/ubuntu/tmp/cmake_targets/basic_simulator/enb -o /home/ubuntu/tmp/cmake_targets/log/enb.log ./my-lte-softmodem-run.sh" >> $VM_CMDS
|
echo "sudo -E daemon --inherit --unsafe --name=enb_daemon --chdir=/home/ubuntu/tmp/cmake_targets/basic_simulator/enb -o /home/ubuntu/tmp/cmake_targets/log/enb.log ./my-lte-softmodem-run.sh" >> $VM_CMDS
|
||||||
|
|
||||||
ssh -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR < $VM_CMDS
|
ssh -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR < $VM_CMDS
|
||||||
|
sleep 60
|
||||||
|
|
||||||
echo "############################################################"
|
echo "############################################################"
|
||||||
echo "Starting the UE"
|
echo "Starting the UE"
|
||||||
|
|||||||
@@ -474,6 +474,16 @@ add_library(X2AP_LIB
|
|||||||
include_directories ("${X2AP_C_DIR}")
|
include_directories ("${X2AP_C_DIR}")
|
||||||
include_directories ("${X2AP_DIR}")
|
include_directories ("${X2AP_DIR}")
|
||||||
|
|
||||||
|
#add_library(X2AP_ENB
|
||||||
|
# ${X2AP_DIR}/x2ap_eNB.c
|
||||||
|
# ${X2AP_DIR}/x2ap_eNB_decoder.c
|
||||||
|
# ${X2AP_DIR}/x2ap_eNB_encoder.c
|
||||||
|
# ${X2AP_DIR}/x2ap_eNB_handler.c
|
||||||
|
# ${X2AP_DIR}/x2ap_eNB_itti_messaging.c
|
||||||
|
# ${X2AP_DIR}/x2ap_eNB_management_procedures.c
|
||||||
|
# ${X2AP_DIR}/x2ap_eNB_generate_messages.c
|
||||||
|
# )
|
||||||
|
|
||||||
# Hardware dependant options
|
# Hardware dependant options
|
||||||
###################################
|
###################################
|
||||||
add_list1_option(NB_ANTENNAS_RX "2" "Number of antennas in reception" "1" "2" "4")
|
add_list1_option(NB_ANTENNAS_RX "2" "Number of antennas in reception" "1" "2" "4")
|
||||||
@@ -882,12 +892,9 @@ add_library(HASHTABLE
|
|||||||
)
|
)
|
||||||
include_directories(${OPENAIR_DIR}/common/utils/hashtable)
|
include_directories(${OPENAIR_DIR}/common/utils/hashtable)
|
||||||
|
|
||||||
if (MESSAGE_CHART_GENERATOR)
|
add_library(msc MODULE ${OPENAIR_DIR}/common/utils/msc/msc.c )
|
||||||
add_library(MSC
|
target_link_libraries (msc LFDS)
|
||||||
${OPENAIR_DIR}/common/utils/msc/msc.c
|
|
||||||
)
|
|
||||||
set(MSC_LIB MSC)
|
|
||||||
endif()
|
|
||||||
include_directories(${OPENAIR_DIR}/common/utils/msc)
|
include_directories(${OPENAIR_DIR}/common/utils/msc)
|
||||||
|
|
||||||
set(UTIL_SRC
|
set(UTIL_SRC
|
||||||
@@ -1382,7 +1389,6 @@ include_directories(${NFAPI_USER_DIR})
|
|||||||
add_library(CN_UTILS
|
add_library(CN_UTILS
|
||||||
${OPENAIR3_DIR}/UTILS/conversions.c
|
${OPENAIR3_DIR}/UTILS/conversions.c
|
||||||
${OPENAIR3_DIR}/UTILS/enum_string.c
|
${OPENAIR3_DIR}/UTILS/enum_string.c
|
||||||
${OPENAIR3_DIR}/UTILS/log.c
|
|
||||||
${OPENAIR3_DIR}/UTILS/mcc_mnc_itu.c
|
${OPENAIR3_DIR}/UTILS/mcc_mnc_itu.c
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -1557,7 +1563,6 @@ set(libnas_ies_OBJS
|
|||||||
set (libnas_utils_OBJS
|
set (libnas_utils_OBJS
|
||||||
${NAS_SRC}COMMON/UTIL/device.c
|
${NAS_SRC}COMMON/UTIL/device.c
|
||||||
${NAS_SRC}COMMON/UTIL/memory.c
|
${NAS_SRC}COMMON/UTIL/memory.c
|
||||||
${NAS_SRC}COMMON/UTIL/nas_log.c
|
|
||||||
${NAS_SRC}COMMON/UTIL/nas_timer.c
|
${NAS_SRC}COMMON/UTIL/nas_timer.c
|
||||||
${NAS_SRC}COMMON/UTIL/socket.c
|
${NAS_SRC}COMMON/UTIL/socket.c
|
||||||
${NAS_SRC}COMMON/UTIL/stty.c
|
${NAS_SRC}COMMON/UTIL/stty.c
|
||||||
@@ -1937,7 +1942,7 @@ add_executable(lte-softmodem
|
|||||||
|
|
||||||
target_link_libraries (lte-softmodem
|
target_link_libraries (lte-softmodem
|
||||||
-Wl,--start-group
|
-Wl,--start-group
|
||||||
RRC_LIB S1AP_LIB S1AP_ENB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB SCHED_RU_LIB PHY_COMMON PHY PHY_RU LFDS L2
|
RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB SCHED_RU_LIB PHY_COMMON PHY PHY_RU LFDS L2
|
||||||
${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} LFDS7
|
${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} LFDS7
|
||||||
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
||||||
-Wl,--end-group z dl)
|
-Wl,--end-group z dl)
|
||||||
@@ -1974,7 +1979,7 @@ add_executable(lte-softmodem-nos1
|
|||||||
)
|
)
|
||||||
target_link_libraries (lte-softmodem-nos1
|
target_link_libraries (lte-softmodem-nos1
|
||||||
-Wl,--start-group
|
-Wl,--start-group
|
||||||
RRC_LIB SECU_CN SECU_OSA UTIL HASHTABLE SCHED_LIB SCHED_RU_LIB PHY_COMMON PHY PHY_RU LFDS L2 ${MSC_LIB} ${RAL_LIB} ${ITTI_LIB}
|
RRC_LIB SECU_CN SECU_OSA UTIL HASHTABLE SCHED_LIB SCHED_RU_LIB PHY_COMMON PHY PHY_RU LFDS L2 ${RAL_LIB} ${ITTI_LIB}
|
||||||
${MIH_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} LFDS7
|
${MIH_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} LFDS7
|
||||||
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
||||||
-Wl,--end-group z dl )
|
-Wl,--end-group z dl )
|
||||||
@@ -2013,7 +2018,7 @@ add_executable(lte-uesoftmodem
|
|||||||
|
|
||||||
target_link_libraries (lte-uesoftmodem
|
target_link_libraries (lte-uesoftmodem
|
||||||
-Wl,--start-group
|
-Wl,--start-group
|
||||||
RRC_LIB S1AP_LIB S1AP_ENB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS L2_UE SIMU
|
RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS L2_UE SIMU
|
||||||
${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7 ${ATLAS_LIBRARIES}
|
${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7 ${ATLAS_LIBRARIES}
|
||||||
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
||||||
-Wl,--end-group z dl)
|
-Wl,--end-group z dl)
|
||||||
@@ -2052,7 +2057,7 @@ add_executable(lte-uesoftmodem-nos1
|
|||||||
|
|
||||||
target_link_libraries (lte-uesoftmodem-nos1
|
target_link_libraries (lte-uesoftmodem-nos1
|
||||||
-Wl,--start-group
|
-Wl,--start-group
|
||||||
RRC_LIB SECU_CN SECU_OSA UTIL HASHTABLE SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS L2_UE SIMU ${MSC_LIB} ${RAL_LIB} ${ITTI_LIB}
|
RRC_LIB SECU_CN SECU_OSA UTIL HASHTABLE SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS L2_UE SIMU ${RAL_LIB} ${ITTI_LIB}
|
||||||
${MIH_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7 ${ATLAS_LIBRARIES}
|
${MIH_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7 ${ATLAS_LIBRARIES}
|
||||||
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
||||||
-Wl,--end-group z dl )
|
-Wl,--end-group z dl )
|
||||||
@@ -2130,7 +2135,7 @@ add_executable(test_epc_generate_scenario
|
|||||||
${OPENAIR3_DIR}/S1AP/s1ap_eNB_defs.h
|
${OPENAIR3_DIR}/S1AP/s1ap_eNB_defs.h
|
||||||
)
|
)
|
||||||
target_link_libraries (test_epc_generate_scenario
|
target_link_libraries (test_epc_generate_scenario
|
||||||
-Wl,--start-group RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB GTPV1U LIB_NAS_UE SECU_CN UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB PHY LFDS ${ITTI_LIB} ${MSC_LIB} L2 -Wl,--end-group pthread m rt crypt sctp ${LIBXML2_LIBRARIES} ${LIBXSLT_LIBRARIES} ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${CONFIG_LIBRARIES}
|
-Wl,--start-group RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB GTPV1U LIB_NAS_UE SECU_CN UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB PHY LFDS ${ITTI_LIB} L2 -Wl,--end-group pthread m rt crypt sctp ${LIBXML2_LIBRARIES} ${LIBXSLT_LIBRARIES} ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${CONFIG_LIBRARIES}
|
||||||
)
|
)
|
||||||
|
|
||||||
add_executable(test_epc_play_scenario
|
add_executable(test_epc_play_scenario
|
||||||
|
|||||||
@@ -146,12 +146,14 @@ eNBs =
|
|||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
|
|
||||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth6";
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth6";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.82/24";
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.82/24";
|
||||||
ENB_INTERFACE_NAME_FOR_S1U = "eth6";
|
ENB_INTERFACE_NAME_FOR_S1U = "eth6";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.82/24";
|
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.82/24";
|
||||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.82/24";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
};
|
};
|
||||||
|
|
||||||
log_config :
|
log_config :
|
||||||
|
|||||||
@@ -146,12 +146,14 @@ eNBs =
|
|||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
|
|
||||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth6";
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth6";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.82/24";
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.82/24";
|
||||||
ENB_INTERFACE_NAME_FOR_S1U = "eth6";
|
ENB_INTERFACE_NAME_FOR_S1U = "eth6";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.82/24";
|
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.82/24";
|
||||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.82/24";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
};
|
};
|
||||||
|
|
||||||
log_config :
|
log_config :
|
||||||
|
|||||||
@@ -146,12 +146,14 @@ eNBs =
|
|||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
|
|
||||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth6";
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth6";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.82/24";
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.82/24";
|
||||||
ENB_INTERFACE_NAME_FOR_S1U = "eth6";
|
ENB_INTERFACE_NAME_FOR_S1U = "eth6";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.82/24";
|
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.82/24";
|
||||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.82/24";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
};
|
};
|
||||||
|
|
||||||
log_config :
|
log_config :
|
||||||
|
|||||||
@@ -146,12 +146,14 @@ eNBs =
|
|||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
|
|
||||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.19/24";
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.19/24";
|
||||||
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.19/24";
|
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.19/24";
|
||||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.19/24";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
};
|
};
|
||||||
|
|
||||||
log_config :
|
log_config :
|
||||||
|
|||||||
@@ -146,12 +146,14 @@ eNBs =
|
|||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
|
|
||||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.19/24";
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.19/24";
|
||||||
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.19/24";
|
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.19/24";
|
||||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.19/24";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
};
|
};
|
||||||
|
|
||||||
log_config :
|
log_config :
|
||||||
|
|||||||
@@ -146,12 +146,14 @@ eNBs =
|
|||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
|
|
||||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.19/24";
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.19/24";
|
||||||
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.19/24";
|
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.19/24";
|
||||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.19/24";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
};
|
};
|
||||||
|
|
||||||
log_config :
|
log_config :
|
||||||
|
|||||||
@@ -146,12 +146,14 @@ eNBs =
|
|||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
|
|
||||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.18/24";
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.18/24";
|
||||||
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.18/24";
|
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.18/24";
|
||||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.18/24";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
};
|
};
|
||||||
|
|
||||||
rrh_gw_config = (
|
rrh_gw_config = (
|
||||||
|
|||||||
@@ -146,12 +146,14 @@ eNBs =
|
|||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
|
|
||||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.18/24";
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.18/24";
|
||||||
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.18/24";
|
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.18/24";
|
||||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.18/24";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
};
|
};
|
||||||
|
|
||||||
rrh_gw_config = (
|
rrh_gw_config = (
|
||||||
|
|||||||
@@ -146,12 +146,14 @@ eNBs =
|
|||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
|
|
||||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.18/24";
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.18/24";
|
||||||
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.18/24";
|
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.18/24";
|
||||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.18/24";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
};
|
};
|
||||||
|
|
||||||
rrh_gw_config = (
|
rrh_gw_config = (
|
||||||
|
|||||||
@@ -148,12 +148,14 @@ eNBs =
|
|||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
|
|
||||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth3";
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth3";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.215/24";
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.215/24";
|
||||||
ENB_INTERFACE_NAME_FOR_S1U = "eth3";
|
ENB_INTERFACE_NAME_FOR_S1U = "eth3";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.215/24";
|
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.215/24";
|
||||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.215/24";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
};
|
};
|
||||||
|
|
||||||
rrh_gw_config = (
|
rrh_gw_config = (
|
||||||
|
|||||||
@@ -148,12 +148,14 @@ eNBs =
|
|||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
|
|
||||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth3";
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth3";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.215/24";
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.215/24";
|
||||||
ENB_INTERFACE_NAME_FOR_S1U = "eth3";
|
ENB_INTERFACE_NAME_FOR_S1U = "eth3";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.215/24";
|
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.215/24";
|
||||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.215/24";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
};
|
};
|
||||||
|
|
||||||
rrh_gw_config = (
|
rrh_gw_config = (
|
||||||
|
|||||||
@@ -148,12 +148,14 @@ eNBs =
|
|||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
|
|
||||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth3";
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth3";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.215/24";
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.215/24";
|
||||||
ENB_INTERFACE_NAME_FOR_S1U = "eth3";
|
ENB_INTERFACE_NAME_FOR_S1U = "eth3";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.215/24";
|
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.215/24";
|
||||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.215/24";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
};
|
};
|
||||||
|
|
||||||
rrh_gw_config = (
|
rrh_gw_config = (
|
||||||
|
|||||||
+18
-1
@@ -40,7 +40,7 @@ set_openair_env
|
|||||||
gen_nvram_path=$OPENAIR_DIR/targets/bin
|
gen_nvram_path=$OPENAIR_DIR/targets/bin
|
||||||
conf_nvram_path=$OPENAIR_DIR/openair3/NAS/TOOLS/ue_eurecom_test_sfr.conf
|
conf_nvram_path=$OPENAIR_DIR/openair3/NAS/TOOLS/ue_eurecom_test_sfr.conf
|
||||||
|
|
||||||
MSC_GEN="False"
|
MSC_GEN=0
|
||||||
XFORMS="True"
|
XFORMS="True"
|
||||||
UE_EXPANSION="False"
|
UE_EXPANSION="False"
|
||||||
PRINT_STATS="False"
|
PRINT_STATS="False"
|
||||||
@@ -155,6 +155,10 @@ Options
|
|||||||
Disable all LOG_* macros
|
Disable all LOG_* macros
|
||||||
--build-eclipse
|
--build-eclipse
|
||||||
Build eclipse project files. Paths are auto corrected by fixprj.sh
|
Build eclipse project files. Paths are auto corrected by fixprj.sh
|
||||||
|
--build-telnet
|
||||||
|
Build telnet server, specify --telnetsrv on command line to start it (eNB only)
|
||||||
|
--build-msc
|
||||||
|
Build MSC tracing utility, specify --msc on command line to start it (eNB and UE)
|
||||||
--usrp-recplay
|
--usrp-recplay
|
||||||
Build for I/Q record-playback modes
|
Build for I/Q record-playback modes
|
||||||
--ue-nas-use-tun
|
--ue-nas-use-tun
|
||||||
@@ -345,6 +349,10 @@ function main() {
|
|||||||
--build-telnetsrv)
|
--build-telnetsrv)
|
||||||
BUILD_TELNETSRV=1
|
BUILD_TELNETSRV=1
|
||||||
echo_info "Build embedded telnet server"
|
echo_info "Build embedded telnet server"
|
||||||
|
shift ;;
|
||||||
|
--build-msc)
|
||||||
|
MSC_GEN=1
|
||||||
|
echo_info "Build MSC tracing utility"
|
||||||
shift ;;
|
shift ;;
|
||||||
--usrp-recplay)
|
--usrp-recplay)
|
||||||
USRP_REC_PLAY="True"
|
USRP_REC_PLAY="True"
|
||||||
@@ -690,6 +698,15 @@ function main() {
|
|||||||
$build_dir telnetsrv \
|
$build_dir telnetsrv \
|
||||||
libtelnetsrv.so $dbin/libtelnetsrv.so
|
libtelnetsrv.so $dbin/libtelnetsrv.so
|
||||||
|
|
||||||
|
fi
|
||||||
|
# Telnet server compilation
|
||||||
|
#####################
|
||||||
|
if [ "$MSC_GEN" = "1" ] ; then
|
||||||
|
build_dir=$lte_build_dir
|
||||||
|
compilations \
|
||||||
|
$build_dir msc \
|
||||||
|
libmsc.so $dbin/libmsc.so
|
||||||
|
|
||||||
fi
|
fi
|
||||||
# build RF device and transport protocol libraries
|
# build RF device and transport protocol libraries
|
||||||
#####################################
|
#####################################
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ set(CONF2UEDATA_LIB_SRC
|
|||||||
${OPENAIR_DIR}/openair3/NAS/UE/API/USIM/usim_api.c
|
${OPENAIR_DIR}/openair3/NAS/UE/API/USIM/usim_api.c
|
||||||
${OPENAIR_DIR}/openair3/NAS/UE/API/USIM/aka_functions.c
|
${OPENAIR_DIR}/openair3/NAS/UE/API/USIM/aka_functions.c
|
||||||
${OPENAIR_DIR}/openair3/NAS/COMMON/UTIL/memory.c
|
${OPENAIR_DIR}/openair3/NAS/COMMON/UTIL/memory.c
|
||||||
${OPENAIR_DIR}/openair3/NAS/COMMON/UTIL/nas_log.c
|
|
||||||
${OPENAIR_DIR}/openair3/NAS/COMMON/UTIL/OctetString.c
|
${OPENAIR_DIR}/openair3/NAS/COMMON/UTIL/OctetString.c
|
||||||
${OPENAIR_DIR}/openair3/NAS/COMMON/UTIL/TLVEncoder.c
|
${OPENAIR_DIR}/openair3/NAS/COMMON/UTIL/TLVEncoder.c
|
||||||
${OPENAIR_DIR}/common/utils/utils.c
|
${OPENAIR_DIR}/common/utils/utils.c
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
#include "config_userapi.h"
|
#include "config_userapi.h"
|
||||||
|
|
||||||
|
|
||||||
void parse_stringlist(paramdef_t *cfgoptions, char *val)
|
int parse_stringlist(paramdef_t *cfgoptions, char *val)
|
||||||
{
|
{
|
||||||
char *atoken;
|
char *atoken;
|
||||||
char *tokctx;
|
char *tokctx;
|
||||||
@@ -63,7 +63,7 @@ int numelt=0;
|
|||||||
printf_params("[LIBCONFIG] %s[%i]: %s\n", cfgoptions->optname,i,cfgoptions->strlistptr[i]);
|
printf_params("[LIBCONFIG] %s[%i]: %s\n", cfgoptions->optname,i,cfgoptions->strlistptr[i]);
|
||||||
atoken=strtok_r(NULL, ",",&tokctx);
|
atoken=strtok_r(NULL, ",",&tokctx);
|
||||||
}
|
}
|
||||||
cfgoptions->numelt=numelt;
|
return (cfgoptions->numelt > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int processoption(paramdef_t *cfgoptions, char *value)
|
int processoption(paramdef_t *cfgoptions, char *value)
|
||||||
@@ -95,7 +95,7 @@ char defbool[2]="1";
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case TYPE_STRINGLIST:
|
case TYPE_STRINGLIST:
|
||||||
parse_stringlist(cfgoptions,tmpval);
|
optisset=parse_stringlist(cfgoptions,tmpval);
|
||||||
break;
|
break;
|
||||||
case TYPE_UINT32:
|
case TYPE_UINT32:
|
||||||
case TYPE_INT32:
|
case TYPE_INT32:
|
||||||
|
|||||||
+138
-101
@@ -54,7 +54,6 @@
|
|||||||
|
|
||||||
mapping log_level_names[] = {
|
mapping log_level_names[] = {
|
||||||
{"error", OAILOG_ERR},
|
{"error", OAILOG_ERR},
|
||||||
{"file", OAILOG_FILE},
|
|
||||||
{"warn", OAILOG_WARNING},
|
{"warn", OAILOG_WARNING},
|
||||||
{"info", OAILOG_INFO},
|
{"info", OAILOG_INFO},
|
||||||
{"debug", OAILOG_DEBUG},
|
{"debug", OAILOG_DEBUG},
|
||||||
@@ -70,18 +69,10 @@ mapping log_options[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
mapping log_maskmap[] = {
|
mapping log_maskmap[] = LOG_MASKMAP_INIT;
|
||||||
{"prach", DEBUG_PRACH},
|
|
||||||
{"RU", DEBUG_RU},
|
|
||||||
{"LTEESTIM", DEBUG_LTEESTIM},
|
|
||||||
{"ctrlsocket", DEBUG_CTRLSOCKET},
|
|
||||||
{"UE_PHYPROC", DEBUG_UE_PHYPROC},
|
|
||||||
{"UE_TIMING", UE_TIMING},
|
|
||||||
{NULL,-1}
|
|
||||||
};
|
|
||||||
|
|
||||||
char *log_level_highlight_start[] = {LOG_RED, LOG_GREEN, LOG_ORANGE, "", LOG_BLUE, LOG_CYBL}; /*!< \brief Optional start-format strings for highlighting */
|
char *log_level_highlight_start[] = {LOG_RED, LOG_ORANGE, "", LOG_BLUE, LOG_CYBL}; /*!< \brief Optional start-format strings for highlighting */
|
||||||
char *log_level_highlight_end[] = {LOG_RESET,LOG_RESET,LOG_RESET,LOG_RESET, LOG_RESET,LOG_RESET}; /*!< \brief Optional end-format strings for highlighting */
|
char *log_level_highlight_end[] = {LOG_RESET,LOG_RESET,LOG_RESET, LOG_RESET,LOG_RESET}; /*!< \brief Optional end-format strings for highlighting */
|
||||||
|
|
||||||
|
|
||||||
int write_file_matlab(const char *fname,const char *vname,void *data,int length,int dec,char format)
|
int write_file_matlab(const char *fname,const char *vname,void *data,int length,int dec,char format)
|
||||||
@@ -243,14 +234,14 @@ int write_file_matlab(const char *fname,const char *vname,void *data,int length,
|
|||||||
/* get log parameters from configuration file */
|
/* get log parameters from configuration file */
|
||||||
void log_getconfig(log_t *g_log) {
|
void log_getconfig(log_t *g_log) {
|
||||||
char *gloglevel = NULL;
|
char *gloglevel = NULL;
|
||||||
int level;
|
int consolelog ;
|
||||||
|
|
||||||
|
|
||||||
paramdef_t logparams_defaults[] = LOG_GLOBALPARAMS_DESC;
|
paramdef_t logparams_defaults[] = LOG_GLOBALPARAMS_DESC;
|
||||||
paramdef_t logparams_level[MAX_LOG_PREDEF_COMPONENTS];
|
paramdef_t logparams_level[MAX_LOG_PREDEF_COMPONENTS];
|
||||||
paramdef_t logparams_logfile[MAX_LOG_PREDEF_COMPONENTS];
|
paramdef_t logparams_logfile[MAX_LOG_PREDEF_COMPONENTS];
|
||||||
paramdef_t logparams_debug[sizeof(log_maskmap)/sizeof(mapping)];
|
paramdef_t logparams_debug[sizeof(log_maskmap)/sizeof(mapping)];
|
||||||
paramdef_t logparams_matlab[sizeof(log_maskmap)/sizeof(mapping)];
|
paramdef_t logparams_dump[sizeof(log_maskmap)/sizeof(mapping)];
|
||||||
|
|
||||||
int ret = config_get( logparams_defaults,sizeof(logparams_defaults)/sizeof(paramdef_t),CONFIG_STRING_LOG_PREFIX);
|
int ret = config_get( logparams_defaults,sizeof(logparams_defaults)/sizeof(paramdef_t),CONFIG_STRING_LOG_PREFIX);
|
||||||
if (ret <0) {
|
if (ret <0) {
|
||||||
@@ -258,6 +249,7 @@ void log_getconfig(log_t *g_log) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* set LOG display options (enable/disable color, thread name, level ) */
|
||||||
for(int i=0; i<logparams_defaults[LOG_OPTIONS_IDX].numelt ; i++) {
|
for(int i=0; i<logparams_defaults[LOG_OPTIONS_IDX].numelt ; i++) {
|
||||||
for(int j=0; log_options[j].name != NULL ; j++) {
|
for(int j=0; log_options[j].name != NULL ; j++) {
|
||||||
if (strcmp(logparams_defaults[LOG_OPTIONS_IDX].strlistptr[i],log_options[j].name) == 0) {
|
if (strcmp(logparams_defaults[LOG_OPTIONS_IDX].strlistptr[i],log_options[j].name) == 0) {
|
||||||
@@ -303,38 +295,40 @@ void log_getconfig(log_t *g_log) {
|
|||||||
config_get( logparams_logfile, MAX_LOG_PREDEF_COMPONENTS,CONFIG_STRING_LOG_PREFIX);
|
config_get( logparams_logfile, MAX_LOG_PREDEF_COMPONENTS,CONFIG_STRING_LOG_PREFIX);
|
||||||
/* now set the log levels and infile option, according to what we read */
|
/* now set the log levels and infile option, according to what we read */
|
||||||
for (int i=MIN_LOG_COMPONENTS; i < MAX_LOG_PREDEF_COMPONENTS; i++) {
|
for (int i=MIN_LOG_COMPONENTS; i < MAX_LOG_PREDEF_COMPONENTS; i++) {
|
||||||
level = map_str_to_int(log_level_names, *(logparams_level[i].strptr));
|
g_log->log_component[i].level = map_str_to_int(log_level_names, *(logparams_level[i].strptr));
|
||||||
set_log(i, level,1);
|
set_log(i, g_log->log_component[i].level);
|
||||||
if (*(logparams_logfile[i].uptr) == 1)
|
if (*(logparams_logfile[i].uptr) == 1)
|
||||||
set_component_filelog(i);
|
set_component_filelog(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* build then read the debug and matlab parameter array */
|
/* build then read the debug and dump parameter array */
|
||||||
for (int i=0;log_maskmap[i].name != NULL ; i++) {
|
for (int i=0;log_maskmap[i].name != NULL ; i++) {
|
||||||
sprintf(logparams_debug[i].optname, LOG_CONFIG_DEBUG_FORMAT, log_maskmap[i].name);
|
sprintf(logparams_debug[i].optname, LOG_CONFIG_DEBUG_FORMAT, log_maskmap[i].name);
|
||||||
sprintf(logparams_matlab[i].optname, LOG_CONFIG_MATLAB_FORMAT, log_maskmap[i].name);
|
sprintf(logparams_dump[i].optname, LOG_CONFIG_DUMP_FORMAT, log_maskmap[i].name);
|
||||||
logparams_debug[i].defuintval = 0;
|
logparams_debug[i].defuintval = 0;
|
||||||
logparams_debug[i].type = TYPE_UINT;
|
logparams_debug[i].type = TYPE_UINT;
|
||||||
logparams_debug[i].paramflags = PARAMFLAG_BOOL;
|
logparams_debug[i].paramflags = PARAMFLAG_BOOL;
|
||||||
logparams_debug[i].uptr = NULL;
|
logparams_debug[i].uptr = NULL;
|
||||||
logparams_debug[i].chkPptr = NULL;
|
logparams_debug[i].chkPptr = NULL;
|
||||||
logparams_debug[i].numelt = 0;
|
logparams_debug[i].numelt = 0;
|
||||||
logparams_matlab[i].defuintval = 0;
|
logparams_dump[i].defuintval = 0;
|
||||||
logparams_matlab[i].type = TYPE_UINT;
|
logparams_dump[i].type = TYPE_UINT;
|
||||||
logparams_matlab[i].paramflags = PARAMFLAG_BOOL;
|
logparams_dump[i].paramflags = PARAMFLAG_BOOL;
|
||||||
logparams_matlab[i].uptr = NULL;
|
logparams_dump[i].uptr = NULL;
|
||||||
logparams_matlab[i].chkPptr = NULL;
|
logparams_dump[i].chkPptr = NULL;
|
||||||
logparams_matlab[i].numelt = 0;
|
logparams_dump[i].numelt = 0;
|
||||||
}
|
}
|
||||||
config_get( logparams_debug,(sizeof(log_maskmap)/sizeof(mapping)) - 1 ,CONFIG_STRING_LOG_PREFIX);
|
config_get( logparams_debug,(sizeof(log_maskmap)/sizeof(mapping)) - 1 ,CONFIG_STRING_LOG_PREFIX);
|
||||||
config_get( logparams_matlab,(sizeof(log_maskmap)/sizeof(mapping)) - 1 ,CONFIG_STRING_LOG_PREFIX);
|
config_get( logparams_dump,(sizeof(log_maskmap)/sizeof(mapping)) - 1 ,CONFIG_STRING_LOG_PREFIX);
|
||||||
/* set the debug mask according to the debug parameters values */
|
/* set the debug mask according to the debug parameters values */
|
||||||
for (int i=0; log_maskmap[i].name != NULL ; i++) {
|
for (int i=0; log_maskmap[i].name != NULL ; i++) {
|
||||||
if (*(logparams_debug[i].uptr) )
|
if (*(logparams_debug[i].uptr) )
|
||||||
g_log->debug_mask = g_log->debug_mask | log_maskmap[i].value;
|
g_log->debug_mask = g_log->debug_mask | log_maskmap[i].value;
|
||||||
if (*(logparams_matlab[i].uptr) )
|
if (*(logparams_dump[i].uptr) )
|
||||||
g_log->matlab_mask = g_log->matlab_mask | log_maskmap[i].value;
|
g_log->dump_mask = g_log->dump_mask | log_maskmap[i].value;
|
||||||
}
|
}
|
||||||
|
/* log globally enabled/disabled */
|
||||||
|
set_glog_onlinelog(consolelog);
|
||||||
}
|
}
|
||||||
|
|
||||||
int register_log_component(char *name, char *fext, int compidx)
|
int register_log_component(char *name, char *fext, int compidx)
|
||||||
@@ -354,11 +348,9 @@ int computed_compidx=compidx;
|
|||||||
}
|
}
|
||||||
if (computed_compidx >= 0 && computed_compidx <MAX_LOG_COMPONENTS) {
|
if (computed_compidx >= 0 && computed_compidx <MAX_LOG_COMPONENTS) {
|
||||||
g_log->log_component[computed_compidx].name = strdup(name);
|
g_log->log_component[computed_compidx].name = strdup(name);
|
||||||
g_log->log_component[computed_compidx].level = LOG_ERR;
|
g_log->log_component[computed_compidx].stream = stdout;
|
||||||
g_log->log_component[computed_compidx].interval = 1;
|
|
||||||
g_log->log_component[computed_compidx].stream = NULL;
|
|
||||||
g_log->log_component[computed_compidx].filelog = 0;
|
g_log->log_component[computed_compidx].filelog = 0;
|
||||||
g_log->log_component[computed_compidx].filelog_name = malloc(strlen(name)+16);/* /tmp/<name>.%s rounded to ^2 */
|
g_log->log_component[computed_compidx].filelog_name = malloc(strlen(name)+16);/* /tmp/<name>.%s */
|
||||||
sprintf(g_log->log_component[computed_compidx].filelog_name,"/tmp/%s.%s",name,fext);
|
sprintf(g_log->log_component[computed_compidx].filelog_name,"/tmp/%s.%s",name,fext);
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr,"{LOG} %s %d Couldn't register componemt %s\n",__FILE__,__LINE__,name);
|
fprintf(stderr,"{LOG} %s %d Couldn't register componemt %s\n",__FILE__,__LINE__,name);
|
||||||
@@ -421,23 +413,16 @@ int logInit (void)
|
|||||||
|
|
||||||
|
|
||||||
register_log_component("SCTP","",SCTP);
|
register_log_component("SCTP","",SCTP);
|
||||||
register_log_component("RRH","",RRH);
|
register_log_component("X2AP","",X2AP);
|
||||||
|
register_log_component("LOADER","log",LOADER);
|
||||||
|
register_log_component("ASN","log",ASN);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
for (int i=0 ; log_level_names[i].name != NULL ; i++)
|
||||||
|
g_log->level2string[i] = toupper(log_level_names[i].name[0]); // uppercased first letter of level name
|
||||||
|
|
||||||
g_log->level2string[OAILOG_ERR] = "E"; // ERROR
|
|
||||||
g_log->level2string[OAILOG_WARNING] = "W"; // WARNING
|
|
||||||
g_log->level2string[OAILOG_INFO] = "I"; //INFO
|
|
||||||
g_log->level2string[OAILOG_DEBUG] = "D"; // DEBUG
|
|
||||||
g_log->level2string[OAILOG_FILE] = "F"; // file
|
|
||||||
g_log->level2string[OAILOG_TRACE] = "T"; // TRACE
|
|
||||||
|
|
||||||
|
|
||||||
g_log->onlinelog = 1; //online log file
|
|
||||||
g_log->filelog = 0;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -446,19 +431,6 @@ int logInit (void)
|
|||||||
log_getconfig(g_log);
|
log_getconfig(g_log);
|
||||||
|
|
||||||
|
|
||||||
// could put a loop here to check for all comps
|
|
||||||
for (i=MIN_LOG_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) {
|
|
||||||
if (g_log->log_component[i].filelog == 1 ) {
|
|
||||||
g_log->log_component[i].stream = fopen(g_log->log_component[i].filelog_name,"w");
|
|
||||||
g_log->log_component[i].fwrite = vfprintf;
|
|
||||||
} else if (g_log->log_component[i].filelog == 1 ) {
|
|
||||||
g_log->log_component[i].stream = fopen(g_log->filelog_name,"w");
|
|
||||||
g_log->log_component[i].fwrite = vfprintf;
|
|
||||||
} else if (g_log->onlinelog == 1 ) {
|
|
||||||
g_log->log_component[i].stream = stdout;
|
|
||||||
g_log->log_component[i].fwrite = vfprintf;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// set all unused component items to 0, they are for non predefined components
|
// set all unused component items to 0, they are for non predefined components
|
||||||
for (i=MAX_LOG_PREDEF_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) {
|
for (i=MAX_LOG_PREDEF_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) {
|
||||||
@@ -470,8 +442,6 @@ int logInit (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
char *log_getthreadname(char *threadname, int bufsize) {
|
char *log_getthreadname(char *threadname, int bufsize) {
|
||||||
|
|
||||||
int rt = pthread_getname_np(pthread_self(), threadname,bufsize) ;
|
int rt = pthread_getname_np(pthread_self(), threadname,bufsize) ;
|
||||||
@@ -483,11 +453,20 @@ int rt = pthread_getname_np(pthread_self(), threadname,bufsize) ;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int inline log_header(char *log_buffer, int buffsize, int comp, int level,const char *format) {
|
||||||
|
char threadname[PR_SET_NAME];
|
||||||
|
return snprintf(log_buffer, buffsize , "%s%s[%s]%c %s %s%s",
|
||||||
|
log_level_highlight_end[level],
|
||||||
|
( (g_log->flag & FLAG_NOCOLOR)?"":log_level_highlight_start[level]),
|
||||||
|
g_log->log_component[comp].name,
|
||||||
|
( (g_log->flag & FLAG_LEVEL)?g_log->level2string[level]:' '),
|
||||||
|
( (g_log->flag & FLAG_THREAD)?log_getthreadname(threadname,PR_SET_NAME+1):""),
|
||||||
|
format,
|
||||||
|
log_level_highlight_end[level]);
|
||||||
|
}
|
||||||
|
|
||||||
void logRecord_mt(const char *file, const char *func, int line, int comp, int level, const char* format, ... )
|
void logRecord_mt(const char *file, const char *func, int line, int comp, int level, const char* format, ... )
|
||||||
{
|
{
|
||||||
|
|
||||||
char threadname[PR_SET_NAME];
|
|
||||||
char log_buffer[MAX_LOG_TOTAL];
|
char log_buffer[MAX_LOG_TOTAL];
|
||||||
va_list args;
|
va_list args;
|
||||||
|
|
||||||
@@ -496,38 +475,63 @@ void logRecord_mt(const char *file, const char *func, int line, int comp, int le
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
log_header(log_buffer,MAX_LOG_TOTAL ,comp, level,format);
|
||||||
|
g_log->log_component[comp].vprint(g_log->log_component[comp].stream,log_buffer, args);
|
||||||
snprintf(log_buffer, MAX_LOG_TOTAL , "%s%s[%s]%s %s %s",
|
|
||||||
log_level_highlight_end[level],
|
|
||||||
( (g_log->flag & FLAG_NOCOLOR)?"":log_level_highlight_start[level]),
|
|
||||||
g_log->log_component[comp].name,
|
|
||||||
( (g_log->flag & FLAG_LEVEL)?g_log->level2string[level]:""),
|
|
||||||
( (g_log->flag & FLAG_THREAD)?log_getthreadname(threadname,PR_SET_NAME+1):""),
|
|
||||||
format);
|
|
||||||
|
|
||||||
g_log->log_component[comp].fwrite(g_log->log_component[comp].stream,log_buffer, args);
|
|
||||||
va_end(args);
|
va_end(args);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void log_dump(int component, void *buffer, int buffsize,int datatype, const char* format, ... ) {
|
||||||
|
va_list args;
|
||||||
|
char *wbuf;
|
||||||
|
|
||||||
|
|
||||||
int set_log(int component, int level, int interval)
|
switch(datatype) {
|
||||||
|
case LOG_DUMP_DOUBLE:
|
||||||
|
wbuf=malloc((buffsize * 10) + 64 + MAX_LOG_TOTAL);
|
||||||
|
break;
|
||||||
|
case LOG_DUMP_CHAR:
|
||||||
|
default:
|
||||||
|
wbuf=malloc((buffsize * 3 ) + 64 + MAX_LOG_TOTAL);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (wbuf != NULL) {
|
||||||
|
va_start(args, format);
|
||||||
|
int pos=log_header(wbuf,MAX_LOG_TOTAL ,component, OAILOG_INFO,"");
|
||||||
|
int pos2=vsprintf(wbuf+pos,format, args);
|
||||||
|
pos=pos+pos2;
|
||||||
|
va_end(args);
|
||||||
|
|
||||||
|
for (int i=0; i<buffsize; i++) {
|
||||||
|
switch(datatype) {
|
||||||
|
case LOG_DUMP_DOUBLE:
|
||||||
|
pos = pos + sprintf(wbuf+pos,"%04.4lf ", (double)((double *)buffer)[i]);
|
||||||
|
break;
|
||||||
|
case LOG_DUMP_CHAR:
|
||||||
|
default:
|
||||||
|
pos = pos + sprintf(wbuf+pos,"%02x ", (unsigned char)((unsigned char *)buffer)[i]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sprintf(wbuf+pos,"\n");
|
||||||
|
g_log->log_component[component].print(g_log->log_component[component].stream,wbuf);
|
||||||
|
free(wbuf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int set_log(int component, int level)
|
||||||
{
|
{
|
||||||
/* Checking parameters */
|
/* Checking parameters */
|
||||||
DevCheck((component >= MIN_LOG_COMPONENTS) && (component < MAX_LOG_COMPONENTS),
|
DevCheck((component >= MIN_LOG_COMPONENTS) && (component < MAX_LOG_COMPONENTS),
|
||||||
component, MIN_LOG_COMPONENTS, MAX_LOG_COMPONENTS);
|
component, MIN_LOG_COMPONENTS, MAX_LOG_COMPONENTS);
|
||||||
DevCheck((level < NUM_LOG_LEVEL) && (level >= OAILOG_ERR), level, NUM_LOG_LEVEL,
|
DevCheck((level < NUM_LOG_LEVEL) && (level >= OAILOG_DISABLE), level, NUM_LOG_LEVEL,
|
||||||
OAILOG_ERR);
|
OAILOG_ERR);
|
||||||
DevCheck((interval >= 0) && (interval <= 0xFF), interval, 0, 0xFF);
|
|
||||||
|
|
||||||
|
if ( g_log->log_component[component].level != OAILOG_DISABLE )
|
||||||
|
g_log->log_component[component].savedlevel = g_log->log_component[component].level;
|
||||||
g_log->log_component[component].level = level;
|
g_log->log_component[component].level = level;
|
||||||
|
|
||||||
|
|
||||||
g_log->log_component[component].interval = interval;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -536,32 +540,67 @@ int set_log(int component, int level, int interval)
|
|||||||
void set_glog(int level)
|
void set_glog(int level)
|
||||||
{
|
{
|
||||||
for (int c=0; c< MAX_LOG_COMPONENTS; c++ ) {
|
for (int c=0; c< MAX_LOG_COMPONENTS; c++ ) {
|
||||||
g_log->log_component[c].level = level;
|
set_log(c, level);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_glog_onlinelog(int enable)
|
void set_glog_onlinelog(int enable)
|
||||||
{
|
{
|
||||||
g_log->onlinelog = enable;
|
for (int c=0; c< MAX_LOG_COMPONENTS; c++ ) {
|
||||||
|
if ( enable ) {
|
||||||
|
g_log->log_component[c].level = g_log->log_component[c].savedlevel;
|
||||||
|
g_log->log_component[c].vprint = vfprintf;
|
||||||
|
g_log->log_component[c].print = fprintf;
|
||||||
|
g_log->log_component[c].stream = stdout;
|
||||||
|
} else {
|
||||||
|
g_log->log_component[c].level = OAILOG_DISABLE;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
void set_glog_filelog(int enable)
|
void set_glog_filelog(int enable)
|
||||||
{
|
{
|
||||||
g_log->filelog = enable;
|
static FILE *fptr;
|
||||||
|
|
||||||
|
if ( enable ) {
|
||||||
|
fptr = fopen(g_log->filelog_name,"w");
|
||||||
|
|
||||||
|
for (int c=0; c< MAX_LOG_COMPONENTS; c++ ) {
|
||||||
|
close_component_filelog(c);
|
||||||
|
g_log->log_component[c].stream = fptr;
|
||||||
|
g_log->log_component[c].filelog = 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int c=0; c< MAX_LOG_COMPONENTS; c++ ) {
|
||||||
|
g_log->log_component[c].filelog = 0;
|
||||||
|
if (fptr != NULL) {
|
||||||
|
fclose(fptr);
|
||||||
|
}
|
||||||
|
g_log->log_component[c].stream = stdout;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_component_filelog(int comp)
|
void set_component_filelog(int comp)
|
||||||
{
|
{
|
||||||
if (g_log->log_component[comp].filelog == 0) {
|
if (g_log->log_component[comp].stream == NULL || g_log->log_component[comp].stream == stdout) {
|
||||||
g_log->log_component[comp].filelog = 1;
|
|
||||||
|
|
||||||
if (g_log->log_component[comp].stream == NULL) {
|
|
||||||
g_log->log_component[comp].stream = fopen(g_log->log_component[comp].filelog_name,"w");
|
g_log->log_component[comp].stream = fopen(g_log->log_component[comp].filelog_name,"w");
|
||||||
}
|
}
|
||||||
}
|
g_log->log_component[comp].vprint = vfprintf;
|
||||||
|
g_log->log_component[comp].print = fprintf;
|
||||||
|
g_log->log_component[comp].filelog = 1;
|
||||||
|
}
|
||||||
|
void close_component_filelog(int comp)
|
||||||
|
{
|
||||||
|
g_log->log_component[comp].filelog = 0;
|
||||||
|
if (g_log->log_component[comp].stream != NULL && g_log->log_component[comp].stream != stdout ) {
|
||||||
|
fclose(g_log->log_component[comp].stream);
|
||||||
|
g_log->log_component[comp].stream = stdout;
|
||||||
|
}
|
||||||
|
g_log->log_component[comp].vprint = vfprintf;
|
||||||
|
g_log->log_component[comp].print = fprintf;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* for the two functions below, the passed array must have a final entry
|
* for the two functions below, the passed array must have a final entry
|
||||||
@@ -616,15 +655,13 @@ int is_newline( char *str, int size)
|
|||||||
void logClean (void)
|
void logClean (void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
LOG_I(PHY,"\n");
|
LOG_UI(PHY,"\n");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
for (i=MIN_LOG_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) {
|
for (i=MIN_LOG_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) {
|
||||||
if (g_log->log_component[i].stream != NULL) {
|
close_component_filelog(i);
|
||||||
fclose(g_log->log_component[i].stream);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -650,8 +687,8 @@ int test_log(void)
|
|||||||
LOG_D(MAC, "1 debug MAC \n");
|
LOG_D(MAC, "1 debug MAC \n");
|
||||||
LOG_W(MAC, "1 warning MAC \n");
|
LOG_W(MAC, "1 warning MAC \n");
|
||||||
|
|
||||||
set_log(EMU, OAILOG_INFO, FLAG_ONLINE);
|
set_log(EMU, OAILOG_INFO);
|
||||||
set_log(MAC, OAILOG_WARNING, 0);
|
set_log(MAC, OAILOG_WARNING);
|
||||||
|
|
||||||
LOG_I(EMU, "2 Starting OAI logs version %s Build date: %s on %s\n",
|
LOG_I(EMU, "2 Starting OAI logs version %s Build date: %s on %s\n",
|
||||||
BUILD_VERSION, BUILD_DATE, BUILD_HOST);
|
BUILD_VERSION, BUILD_DATE, BUILD_HOST);
|
||||||
@@ -661,7 +698,7 @@ int test_log(void)
|
|||||||
LOG_I(MAC, "2 info MAC \n");
|
LOG_I(MAC, "2 info MAC \n");
|
||||||
|
|
||||||
|
|
||||||
set_log(MAC, OAILOG_NOTICE, 1);
|
set_log(MAC, OAILOG_NOTICE);
|
||||||
|
|
||||||
LOG_ENTER(MAC);
|
LOG_ENTER(MAC);
|
||||||
LOG_I(EMU, "3 Starting OAI logs version %s Build date: %s on %s\n",
|
LOG_I(EMU, "3 Starting OAI logs version %s Build date: %s on %s\n",
|
||||||
@@ -670,8 +707,8 @@ int test_log(void)
|
|||||||
LOG_W(MAC, "3 warning MAC \n");
|
LOG_W(MAC, "3 warning MAC \n");
|
||||||
LOG_I(MAC, "3 info MAC \n");
|
LOG_I(MAC, "3 info MAC \n");
|
||||||
|
|
||||||
set_log(MAC, LOG_DEBUG,1);
|
set_log(MAC, LOG_DEBUG);
|
||||||
set_log(EMU, LOG_DEBUG,1);
|
set_log(EMU, LOG_DEBUG);
|
||||||
|
|
||||||
LOG_ENTER(MAC);
|
LOG_ENTER(MAC);
|
||||||
LOG_I(EMU, "4 Starting OAI logs version %s Build date: %s on %s\n",
|
LOG_I(EMU, "4 Starting OAI logs version %s Build date: %s on %s\n",
|
||||||
@@ -681,8 +718,8 @@ int test_log(void)
|
|||||||
LOG_I(MAC, "4 info MAC \n");
|
LOG_I(MAC, "4 info MAC \n");
|
||||||
|
|
||||||
|
|
||||||
set_log(MAC, LOG_DEBUG,0);
|
set_log(MAC, LOG_DEBUG);
|
||||||
set_log(EMU, LOG_DEBUG,0);
|
set_log(EMU, LOG_DEBUG);
|
||||||
|
|
||||||
LOG_I(LOG, "5 Starting OAI logs version %s Build date: %s on %s\n",
|
LOG_I(LOG, "5 Starting OAI logs version %s Build date: %s on %s\n",
|
||||||
BUILD_VERSION, BUILD_DATE, BUILD_HOST);
|
BUILD_VERSION, BUILD_DATE, BUILD_HOST);
|
||||||
@@ -691,8 +728,8 @@ int test_log(void)
|
|||||||
LOG_I(MAC, "5 info MAC \n");
|
LOG_I(MAC, "5 info MAC \n");
|
||||||
|
|
||||||
|
|
||||||
set_log(MAC, LOG_TRACE,0X07F);
|
set_log(MAC, LOG_TRACE);
|
||||||
set_log(EMU, LOG_TRACE,0X07F);
|
set_log(EMU, LOG_TRACE);
|
||||||
|
|
||||||
LOG_ENTER(MAC);
|
LOG_ENTER(MAC);
|
||||||
LOG_I(LOG, "6 Starting OAI logs version %s Build date: %s on %s\n",
|
LOG_I(LOG, "6 Starting OAI logs version %s Build date: %s on %s\n",
|
||||||
|
|||||||
+89
-53
@@ -81,15 +81,14 @@ extern "C" {
|
|||||||
* @ingroup _macro
|
* @ingroup _macro
|
||||||
* @brief LOG defines 9 levels of messages for users. Importance of these levels decrease gradually from 0 to 8
|
* @brief LOG defines 9 levels of messages for users. Importance of these levels decrease gradually from 0 to 8
|
||||||
* @{*/
|
* @{*/
|
||||||
|
# define OAILOG_DISABLE -1 /*!< \brief disable all LOG messages, cannot be used in LOG macros, use only in LOG module */
|
||||||
|
# define OAILOG_ERR 0 /*!< \brief critical error conditions, impact on "must have" fuctinalities */
|
||||||
|
# define OAILOG_WARNING 1 /*!< \brief warning conditions, shouldn't happen but doesn't impact "must have" functionalities */
|
||||||
|
# define OAILOG_INFO 2 /*!< \brief informational messages most people don't need, shouldn't impact real-time behavior */
|
||||||
|
# define OAILOG_DEBUG 3 /*!< \brief first level debug-level messages, for developers , may impact real-time behavior */
|
||||||
|
# define OAILOG_TRACE 4 /*!< \brief second level debug-level messages, for developers ,likely impact real-time behavior*/
|
||||||
|
|
||||||
# define OAILOG_ERR 0 /*!< \brief critical error conditions, impact on "must have" fuctinalities */
|
#define NUM_LOG_LEVEL 5 /*!< \brief the number of message levels users have with LOG (OAILOG_DISABLE is not available to user as a level, so it is not included)*/
|
||||||
# define OAILOG_FILE 1 /*!< \brief important informational messages, but everything OK */
|
|
||||||
# define OAILOG_WARNING 2 /*!< \brief warning conditions, shouldn't happen but doesn't impact "must have" functionalities */
|
|
||||||
# define OAILOG_INFO 3 /*!< \brief informational messages most people don't need, shouldn't impact real-time behavior */
|
|
||||||
# define OAILOG_DEBUG 4 /*!< \brief first level debug-level messages, for developers , may impact real-time behavior */
|
|
||||||
# define OAILOG_TRACE 5 /*!< \brief second level debug-level messages, for developers ,likely impact real-time behavior*/
|
|
||||||
|
|
||||||
#define NUM_LOG_LEVEL 6 /*!< \brief the number of message levels users have with LOG */
|
|
||||||
/* @}*/
|
/* @}*/
|
||||||
|
|
||||||
|
|
||||||
@@ -128,21 +127,53 @@ extern "C" {
|
|||||||
|
|
||||||
/** @defgroup macros to identify a debug entity
|
/** @defgroup macros to identify a debug entity
|
||||||
* @ingroup each macro is a bit mask where the unique bit set identifies an entity to be debugged
|
* @ingroup each macro is a bit mask where the unique bit set identifies an entity to be debugged
|
||||||
* it allows to dynamically activate or not blocks of code
|
* it allows to dynamically activate or not blocks of code. The LOG_MASKMAP_INIT macro
|
||||||
|
* is used to map a character string name to each debug bit, it allows to set or clear
|
||||||
|
* the corresponding bit via the defined name, from the configuration or from the telnet
|
||||||
|
* server.
|
||||||
* @brief
|
* @brief
|
||||||
* @{*/
|
* @{*/
|
||||||
#define DEBUG_PRACH (1<<0)
|
#define DEBUG_PRACH (1<<0)
|
||||||
#define DEBUG_RU (1<<1)
|
#define DEBUG_RU (1<<1)
|
||||||
#define DEBUG_UE_PHYPROC (1<<2)
|
#define DEBUG_UE_PHYPROC (1<<2)
|
||||||
#define DEBUG_LTEESTIM (1<<3)
|
#define DEBUG_LTEESTIM (1<<3)
|
||||||
|
#define DEBUG_DLCELLSPEC (1<<4)
|
||||||
|
#define DEBUG_ULSCH (1<<5)
|
||||||
|
#define DEBUG_RRC (1<<6)
|
||||||
|
#define DEBUG_PDCP (1<<7)
|
||||||
|
#define DEBUG_DFT (1<<8)
|
||||||
|
#define DEBUG_ASN1 (1<<9)
|
||||||
#define DEBUG_CTRLSOCKET (1<<10)
|
#define DEBUG_CTRLSOCKET (1<<10)
|
||||||
|
#define DEBUG_SECURITY (1<<11)
|
||||||
|
#define DEBUG_NAS (1<<12)
|
||||||
#define UE_TIMING (1<<20)
|
#define UE_TIMING (1<<20)
|
||||||
|
|
||||||
#define SET_LOG_DEBUG(O) g_log->debug_mask = (g_log->debug_mask | O)
|
|
||||||
#define CLEAR_LOG_DEBUG(O) g_log->debug_mask = (g_log->debug_mask & (~O))
|
|
||||||
|
|
||||||
#define SET_LOG_MATLAB(O) g_log->matlab_mask = (g_log->matlab_mask | O)
|
#define LOG_MASKMAP_INIT {\
|
||||||
#define CLEAR_LOG_MATLAB(O) g_log->matlab_mask = (g_log->matlab_mask & (~O))
|
{"PRACH", DEBUG_PRACH},\
|
||||||
|
{"RU", DEBUG_RU},\
|
||||||
|
{"UE_PHYPROC", DEBUG_UE_PHYPROC},\
|
||||||
|
{"LTEESTIM", DEBUG_LTEESTIM},\
|
||||||
|
{"DLCELLSPEC", DEBUG_DLCELLSPEC},\
|
||||||
|
{"ULSCH", DEBUG_ULSCH},\
|
||||||
|
{"RRC", DEBUG_RRC},\
|
||||||
|
{"PDCP", DEBUG_PDCP},\
|
||||||
|
{"DFT", DEBUG_DFT},\
|
||||||
|
{"ASN1", DEBUG_ASN1},\
|
||||||
|
{"CTRLSOCKET", DEBUG_CTRLSOCKET},\
|
||||||
|
{"SECURITY", DEBUG_SECURITY},\
|
||||||
|
{"NAS", DEBUG_NAS},\
|
||||||
|
{"UE_TIMING", UE_TIMING},\
|
||||||
|
{NULL,-1}\
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define SET_LOG_DEBUG(B) g_log->debug_mask = (g_log->debug_mask | B)
|
||||||
|
#define CLEAR_LOG_DEBUG(B) g_log->debug_mask = (g_log->debug_mask & (~B))
|
||||||
|
|
||||||
|
#define SET_LOG_DUMP(B) g_log->dump_mask = (g_log->dump_mask | B)
|
||||||
|
#define CLEAR_LOG_DUMP(B) g_log->dump_mask = (g_log->dump_mask & (~B))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -183,9 +214,9 @@ typedef enum {
|
|||||||
TMR,
|
TMR,
|
||||||
USIM,
|
USIM,
|
||||||
LOCALIZE,
|
LOCALIZE,
|
||||||
RRH,
|
|
||||||
X2AP,
|
X2AP,
|
||||||
LOADER,
|
LOADER,
|
||||||
|
ASN,
|
||||||
MAX_LOG_PREDEF_COMPONENTS,
|
MAX_LOG_PREDEF_COMPONENTS,
|
||||||
}
|
}
|
||||||
comp_name_t;
|
comp_name_t;
|
||||||
@@ -199,17 +230,18 @@ typedef struct {
|
|||||||
int value; /*!< \brief integer value of mapping */
|
int value; /*!< \brief integer value of mapping */
|
||||||
} mapping;
|
} mapping;
|
||||||
|
|
||||||
typedef int(*log_write_func_t)(FILE *stream, const char *format, va_list ap );
|
typedef int(*log_vprint_func_t)(FILE *stream, const char *format, va_list ap );
|
||||||
|
typedef int(*log_print_func_t)(FILE *stream, const char *format, ... );
|
||||||
typedef struct {
|
typedef struct {
|
||||||
const char *name;
|
const char *name;
|
||||||
int level;
|
int level;
|
||||||
int flag;
|
int savedlevel;
|
||||||
int interval;
|
int flag;
|
||||||
int filelog;
|
int filelog;
|
||||||
char *filelog_name;
|
char *filelog_name;
|
||||||
FILE *stream;
|
FILE *stream;
|
||||||
log_write_func_t fwrite;
|
log_vprint_func_t vprint;
|
||||||
|
log_print_func_t print;
|
||||||
/* SR: make the log buffer component relative */
|
/* SR: make the log buffer component relative */
|
||||||
char log_buffer[MAX_LOG_TOTAL];
|
char log_buffer[MAX_LOG_TOTAL];
|
||||||
} log_component_t;
|
} log_component_t;
|
||||||
@@ -217,13 +249,11 @@ typedef struct {
|
|||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
log_component_t log_component[MAX_LOG_COMPONENTS];
|
log_component_t log_component[MAX_LOG_COMPONENTS];
|
||||||
char* level2string[NUM_LOG_LEVEL];
|
char level2string[NUM_LOG_LEVEL];
|
||||||
int onlinelog;
|
|
||||||
int flag;
|
int flag;
|
||||||
int filelog;
|
|
||||||
char* filelog_name;
|
char* filelog_name;
|
||||||
uint64_t debug_mask;
|
uint64_t debug_mask;
|
||||||
uint64_t matlab_mask;
|
uint64_t dump_mask;
|
||||||
} log_t;
|
} log_t;
|
||||||
|
|
||||||
|
|
||||||
@@ -254,14 +284,15 @@ extern log_t *g_log;
|
|||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
int logInit (void);
|
int logInit (void);
|
||||||
void logRecord_mt(const char *file, const char *func, int line,int comp, int level, const char *format, ...) __attribute__ ((format (printf, 6, 7)));
|
void logRecord_mt(const char *file, const char *func, int line,int comp, int level, const char *format, ...) __attribute__ ((format (printf, 6, 7)));
|
||||||
|
void log_dump(int component, void *buffer, int buffsize,int datatype, const char* format, ... );
|
||||||
int set_log(int component, int level, int interval);
|
int set_log(int component, int level);
|
||||||
void set_glog(int level);
|
void set_glog(int level);
|
||||||
|
|
||||||
void set_glog_onlinelog(int enable);
|
void set_glog_onlinelog(int enable);
|
||||||
void set_glog_filelog(int enable);
|
void set_glog_filelog(int enable);
|
||||||
void set_component_filelog(int comp);
|
void set_component_filelog(int comp);
|
||||||
|
void close_component_filelog(int comp);
|
||||||
|
void set_component_consolelog(int comp);
|
||||||
int map_str_to_int(mapping *map, const char *str);
|
int map_str_to_int(mapping *map, const char *str);
|
||||||
char *map_int_to_str(mapping *map, int val);
|
char *map_int_to_str(mapping *map, int val);
|
||||||
void logClean (void);
|
void logClean (void);
|
||||||
@@ -293,7 +324,7 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
|
|||||||
#define LOG_CONFIG_LEVEL_FORMAT "%s_log_level"
|
#define LOG_CONFIG_LEVEL_FORMAT "%s_log_level"
|
||||||
#define LOG_CONFIG_LOGFILE_FORMAT "%s_log_infile"
|
#define LOG_CONFIG_LOGFILE_FORMAT "%s_log_infile"
|
||||||
#define LOG_CONFIG_DEBUG_FORMAT "%s_debug"
|
#define LOG_CONFIG_DEBUG_FORMAT "%s_debug"
|
||||||
#define LOG_CONFIG_MATLAB_FORMAT "%s_matlab"
|
#define LOG_CONFIG_DUMP_FORMAT "%s_dump"
|
||||||
|
|
||||||
#define LOG_CONFIG_HELP_OPTIONS " list of comma separated options to enable log module behavior. Available options: \n"\
|
#define LOG_CONFIG_HELP_OPTIONS " list of comma separated options to enable log module behavior. Available options: \n"\
|
||||||
" nocolor: disable color usage in log messages\n"\
|
" nocolor: disable color usage in log messages\n"\
|
||||||
@@ -309,7 +340,7 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
|
|||||||
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
#define LOG_GLOBALPARAMS_DESC { \
|
#define LOG_GLOBALPARAMS_DESC { \
|
||||||
{LOG_CONFIG_STRING_GLOBAL_LOG_LEVEL, "Default log level for all componemts\n", 0, strptr:(char **)&gloglevel, defstrval:log_level_names[2].name, TYPE_STRING, 0}, \
|
{LOG_CONFIG_STRING_GLOBAL_LOG_LEVEL, "Default log level for all componemts\n", 0, strptr:(char **)&gloglevel, defstrval:log_level_names[2].name, TYPE_STRING, 0}, \
|
||||||
{LOG_CONFIG_STRING_GLOBAL_LOG_ONLINE, "Default console output option, for all components\n", 0, iptr:&(g_log->onlinelog), defintval:1, TYPE_INT, 0}, \
|
{LOG_CONFIG_STRING_GLOBAL_LOG_ONLINE, "Default console output option, for all components\n", 0, iptr:&(consolelog), defintval:1, TYPE_INT, 0}, \
|
||||||
{LOG_CONFIG_STRING_GLOBAL_LOG_OPTIONS, LOG_CONFIG_HELP_OPTIONS, 0, strlistptr:NULL, defstrlistval:NULL, TYPE_STRINGLIST,0} \
|
{LOG_CONFIG_STRING_GLOBAL_LOG_OPTIONS, LOG_CONFIG_HELP_OPTIONS, 0, strlistptr:NULL, defstrlistval:NULL, TYPE_STRINGLIST,0} \
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -319,23 +350,25 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
|
|||||||
* @ingroup _macro
|
* @ingroup _macro
|
||||||
* @brief Macro used to call logIt function with different message levels
|
* @brief Macro used to call logIt function with different message levels
|
||||||
* @{*/
|
* @{*/
|
||||||
|
#define LOG_DUMP_CHAR 0
|
||||||
// debugging macros(g_log->log_component[component].interval?logRecord_mt(__FILE__, __FUNCTION__, __LINE__, component, level, format, ##args):(void)0)
|
#define LOG_DUMP_DOUBLE 1
|
||||||
|
// debugging macros
|
||||||
|
#define LOG_F LOG_I /* because LOG_F was originaly to dump a message or buffer but is also used as a regular level...., to dump use LOG_DUMPMSG */
|
||||||
# if T_TRACER
|
# if T_TRACER
|
||||||
/* per component, level dependant macros */
|
/* per component, level dependant macros */
|
||||||
# define LOG_I(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_INFO ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x) ;} else { T(T_LEGACY_ ## c ## _INFO, T_PRINTF(x)) ;}} while (0)
|
|
||||||
# define LOG_W(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_WARNING) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_WARNING, x) ;} else { T(T_LEGACY_ ## c ## _WARNING, T_PRINTF(x)) ;}} while (0)
|
|
||||||
# define LOG_E(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_ERR ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_ERR, x) ;} else { T(T_LEGACY_ ## c ## _ERROR, T_PRINTF(x)) ;}} while (0)
|
# define LOG_E(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_ERR ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_ERR, x) ;} else { T(T_LEGACY_ ## c ## _ERROR, T_PRINTF(x)) ;}} while (0)
|
||||||
|
# define LOG_W(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_WARNING) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_WARNING, x) ;} else { T(T_LEGACY_ ## c ## _WARNING, T_PRINTF(x)) ;}} while (0)
|
||||||
|
# define LOG_I(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_INFO ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x) ;} else { T(T_LEGACY_ ## c ## _INFO, T_PRINTF(x)) ;}} while (0)
|
||||||
# define LOG_D(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_DEBUG ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_DEBUG, x) ;} else { T(T_LEGACY_ ## c ## _DEBUG, T_PRINTF(x)) ;}} while (0)
|
# define LOG_D(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_DEBUG ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_DEBUG, x) ;} else { T(T_LEGACY_ ## c ## _DEBUG, T_PRINTF(x)) ;}} while (0)
|
||||||
# define LOG_T(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_TRACE ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_TRACE, x) ;} else { T(T_LEGACY_ ## c ## _TRACE, T_PRINTF(x)) ;}} while (0)
|
# define LOG_T(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_TRACE ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_TRACE, x) ;} else { T(T_LEGACY_ ## c ## _TRACE, T_PRINTF(x)) ;}} while (0)
|
||||||
# define LOG_F(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_FILE ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_FILE, x) ;}} while (0) /* */
|
/* macro used to dump a buffer or a message as in openair2/RRC/LTE/RRC_eNB.c, replaces LOG_F macro */
|
||||||
|
# define LOG_DUMPMSG(c, f, b, s, x...) do { if(g_log->dump_mask & f) log_dump(c, b, s, LOG_DUMP_CHAR, x) ;} while (0) /* */
|
||||||
# define nfapi_log(FILE, FNC, LN, COMP, LVL, F...) do { if (T_stdout) { logRecord_mt(__FILE__, __FUNCTION__, __LINE__,COMP, LVL, F) ;}} while (0) /* */
|
# define nfapi_log(FILE, FNC, LN, COMP, LVL, F...) do { if (T_stdout) { logRecord_mt(__FILE__, __FUNCTION__, __LINE__,COMP, LVL, F) ;}} while (0) /* */
|
||||||
/* bitmask dependant macros, to isolate debugging code */
|
/* bitmask dependant macros, to isolate debugging code */
|
||||||
# define LOG_DEBUG_BEGIN(D) if (g_log->debug_mask & D) {
|
# define LOG_DEBUGFLAG(D) (g_log->debug_mask & D)
|
||||||
# define LOG_DEBUG_END }
|
|
||||||
/* bitmask dependant macros, to generate matlab files */
|
/* bitmask dependant macros, to generate debug file such as matlab file or message dump */
|
||||||
# define LOG_M_BEGIN(D) if (g_log->matlab_mask & D) {
|
# define LOG_DUMPFLAG(D) (g_log->dump_mask & D)
|
||||||
# define LOG_M_END }
|
|
||||||
# define LOG_M(file, vector, data, len, dec, format) do { write_file_matlab(file, vector, data, len, dec, format);} while(0)/* */
|
# define LOG_M(file, vector, data, len, dec, format) do { write_file_matlab(file, vector, data, len, dec, format);} while(0)/* */
|
||||||
/* define variable only used in LOG macro's */
|
/* define variable only used in LOG macro's */
|
||||||
# define LOG_VAR(A,B) A B
|
# define LOG_VAR(A,B) A B
|
||||||
@@ -345,22 +378,22 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
|
|||||||
# define LOG_E(c, x...) /* */
|
# define LOG_E(c, x...) /* */
|
||||||
# define LOG_D(c, x...) /* */
|
# define LOG_D(c, x...) /* */
|
||||||
# define LOG_T(c, x...) /* */
|
# define LOG_T(c, x...) /* */
|
||||||
# define LOG_F(c, x...) /* */
|
|
||||||
|
# define LOG_DUMPMSG(c, b, s, x...) /* */
|
||||||
# define nfapi_log(FILE, FNC, LN, COMP, LVL, FMT...)
|
# define nfapi_log(FILE, FNC, LN, COMP, LVL, FMT...)
|
||||||
# define LOG_DEBUG_BEGIN(D) if (0) {
|
# define LOG_DEBUGFLAG(D) ( 0 )
|
||||||
# define LOG_DEBUG_END }
|
# define LOG_DUMPFLAG(D) ( 0 )
|
||||||
# define LOG_M_BEGIN(D) if (0) {
|
|
||||||
# define LOG_M_END }
|
|
||||||
# define LOG_M(file, vector, data, len, dec, format)
|
# define LOG_M(file, vector, data, len, dec, format)
|
||||||
# define LOG_VAR(A,B)
|
# define LOG_VAR(A,B)
|
||||||
# endif /* T_TRACER */
|
# endif /* T_TRACER */
|
||||||
/* avoid warnings for variables only used in LOG macro's but set outside debug section */
|
/* avoid warnings for variables only used in LOG macro's but set outside debug section */
|
||||||
#define LOG_USEDINLOG_VAR(A,B) __attribute__((unused)) A B
|
#define GCC_NOTUSED __attribute__((unused))
|
||||||
|
#define LOG_USEDINLOG_VAR(A,B) GCC_NOTUSED A B
|
||||||
|
|
||||||
/* unfiltered macros, usefull for simulators or messages at init time, before log is configured */
|
/* unfiltered macros, usefull for simulators or messages at init time, before log is configured */
|
||||||
#define LOG_UM(file, vector, data, len, dec, format) do { write_file_matlab(file, vector, data, len, dec, format);} while(0)
|
#define LOG_UM(file, vector, data, len, dec, format) do { write_file_matlab(file, vector, data, len, dec, format);} while(0)
|
||||||
|
|
||||||
#define LOG_UI(c, x...) do {logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x) ; } while(0)
|
#define LOG_UI(c, x...) do {logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x) ; } while(0)
|
||||||
|
#define LOG_UDUMPMSG(c, b, s, f, x...) do { log_dump(c, b, s, f, x) ;} while (0) /* */
|
||||||
/* @}*/
|
/* @}*/
|
||||||
|
|
||||||
|
|
||||||
@@ -368,9 +401,12 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
|
|||||||
* @ingroup _macro
|
* @ingroup _macro
|
||||||
* @brief Macro of some useful functions defined by LOG
|
* @brief Macro of some useful functions defined by LOG
|
||||||
* @{*/
|
* @{*/
|
||||||
#define LOG_ENTER(c) do {LOG_T(c, "Entering\n");}while(0) /*!< \brief Macro to log a message with severity DEBUG when entering a function */
|
#define LOG_ENTER(c) do {LOG_T(c, "Entering %s\n",__FUNCTION__);}while(0) /*!< \brief Macro to log a message with severity DEBUG when entering a function */
|
||||||
#define LOG_EXIT(c) do {LOG_T(c,"Exiting\n"); return;}while(0) /*!< \brief Macro to log a message with severity TRACE when exiting a function */
|
#define LOG_END(c) do {LOG_T(c, "End of %s\n",__FUNCTION__);}while(0) /*!< \brief Macro to log a message with severity DEBUG when entering a function */
|
||||||
#define LOG_RETURN(c,x) do {uint32_t __rv;__rv=(unsigned int)(x);LOG_T(c,"Returning %08x\n", __rv);return((typeof(x))__rv);}while(0) /*!< \brief Macro to log a function exit, including integer value, then to return a value to the calling function */
|
#define LOG_EXIT(c) do { LOG_END(c); return;}while(0) /*!< \brief Macro to log a message with severity TRACE when exiting a function */
|
||||||
|
#define LOG_RETURN(c,r) do {LOG_T(c,"Leaving %s (rc = %08lx)\n", __FUNCTION__ , (unsigned long)(r) );return(r);}while(0) /*!< \brief Macro to log a function exit, including integer value, then to return a value to the calling function */
|
||||||
|
|
||||||
|
|
||||||
/* @}*/
|
/* @}*/
|
||||||
|
|
||||||
static __inline__ uint64_t rdtsc(void) {
|
static __inline__ uint64_t rdtsc(void) {
|
||||||
|
|||||||
@@ -750,6 +750,27 @@ ID = LEGACY_OSA_TRACE
|
|||||||
GROUP = ALL:LEGACY_OSA:LEGACY_GROUP_TRACE:LEGACY
|
GROUP = ALL:LEGACY_OSA:LEGACY_GROUP_TRACE:LEGACY
|
||||||
FORMAT = string,log
|
FORMAT = string,log
|
||||||
|
|
||||||
|
ID = LEGACY_ASN_INFO
|
||||||
|
DESC = ASN legacy logs - info level
|
||||||
|
GROUP = ALL:LEGACY_ASN:LEGACY_GROUP_INFO:LEGACY
|
||||||
|
FORMAT = string,log
|
||||||
|
ID = LEGACY_ASN_ERROR
|
||||||
|
DESC = ASN legacy logs - error level
|
||||||
|
GROUP = ALL:LEGACY_ASN:LEGACY_GROUP_ERROR:LEGACY
|
||||||
|
FORMAT = string,log
|
||||||
|
ID = LEGACY_ASN_WARNING
|
||||||
|
DESC = ASN legacy logs - warning level
|
||||||
|
GROUP = ALL:LEGACY_ASN:LEGACY_GROUP_WARNING:LEGACY
|
||||||
|
FORMAT = string,log
|
||||||
|
ID = LEGACY_ASN_DEBUG
|
||||||
|
DESC = ASN legacy logs - debug level
|
||||||
|
GROUP = ALL:LEGACY_ASN:LEGACY_GROUP_DEBUG:LEGACY
|
||||||
|
FORMAT = string,log
|
||||||
|
ID = LEGACY_ASN_TRACE
|
||||||
|
DESC = ASN legacy logs - trace level
|
||||||
|
GROUP = ALL:LEGACY_ASN:LEGACY_GROUP_TRACE:LEGACY
|
||||||
|
FORMAT = string,log
|
||||||
|
|
||||||
ID = LEGACY_SIM_INFO
|
ID = LEGACY_SIM_INFO
|
||||||
DESC = SIM legacy logs - info level
|
DESC = SIM legacy logs - info level
|
||||||
GROUP = ALL:LEGACY_SIM:LEGACY_GROUP_INFO:LEGACY
|
GROUP = ALL:LEGACY_SIM:LEGACY_GROUP_INFO:LEGACY
|
||||||
|
|||||||
@@ -150,7 +150,17 @@ x_image *x_create_image(x_connection *_x, unsigned char *data,
|
|||||||
vs = XGetVisualInfo(x->d, VisualDepthMask | VisualClassMask |
|
vs = XGetVisualInfo(x->d, VisualDepthMask | VisualClassMask |
|
||||||
VisualRedMaskMask | VisualGreenMaskMask | VisualBlueMaskMask |
|
VisualRedMaskMask | VisualGreenMaskMask | VisualBlueMaskMask |
|
||||||
VisualBitsPerRGBMask, &template, &nvs);
|
VisualBitsPerRGBMask, &template, &nvs);
|
||||||
if (vs == NULL || nvs == 0) ERR("no good visual found\n");
|
|
||||||
|
if (vs == NULL) {
|
||||||
|
/* try again with 32 bpp */
|
||||||
|
template.depth = 32;
|
||||||
|
vs = XGetVisualInfo(x->d, VisualDepthMask | VisualClassMask |
|
||||||
|
VisualRedMaskMask | VisualGreenMaskMask | VisualBlueMaskMask |
|
||||||
|
VisualBitsPerRGBMask, &template, &nvs);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (vs == NULL) ERR("no good visual found\n");
|
||||||
|
|
||||||
v = vs[0].visual;
|
v = vs[0].visual;
|
||||||
XFree(vs);
|
XFree(vs);
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,7 @@
|
|||||||
#include "assertions.h"
|
#include "assertions.h"
|
||||||
|
|
||||||
#include "signals.h"
|
#include "signals.h"
|
||||||
#include "log.h"
|
#include "common/utils/LOG/log.h"
|
||||||
|
|
||||||
#if defined (LOG_D) && defined (LOG_E)
|
#if defined (LOG_D) && defined (LOG_E)
|
||||||
# define SIG_DEBUG(x, args...) LOG_D(RRC, x, ##args)
|
# define SIG_DEBUG(x, args...) LOG_D(RRC, x, ##args)
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
#include "assertions.h"
|
#include "assertions.h"
|
||||||
#include "intertask_interface.h"
|
#include "intertask_interface.h"
|
||||||
#include "timer.h"
|
#include "timer.h"
|
||||||
#include "log.h"
|
#include "common/utils/LOG/log.h"
|
||||||
#include "queue.h"
|
#include "queue.h"
|
||||||
|
|
||||||
#if defined (LOG_D) && defined (LOG_E)
|
#if defined (LOG_D) && defined (LOG_E)
|
||||||
|
|||||||
@@ -70,8 +70,8 @@ char *tmpstr;
|
|||||||
char *shlibpath =NULL;
|
char *shlibpath =NULL;
|
||||||
char *shlibversion=NULL;
|
char *shlibversion=NULL;
|
||||||
char *cfgprefix;
|
char *cfgprefix;
|
||||||
paramdef_t LoaderParams[] ={{"shlibpath", NULL, 0, strptr:&shlibpath, defstrval:NULL, TYPE_STRING, 0},
|
paramdef_t LoaderParams[] ={{"shlibpath", NULL, 0, strptr:&shlibpath, defstrval:NULL, TYPE_STRING, 0, NULL},
|
||||||
{"shlibversion", NULL, 0, strptr:&shlibversion, defstrval:"", TYPE_STRING, 0}};
|
{"shlibversion", NULL, 0, strptr:&shlibversion, defstrval:"", TYPE_STRING, 0, NULL}};
|
||||||
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@@ -118,7 +118,7 @@ int ret;
|
|||||||
return tmpstr;
|
return tmpstr;
|
||||||
}
|
}
|
||||||
|
|
||||||
int load_module_shlib(char *modname,loader_shlibfunc_t *farray, int numf)
|
int load_module_shlib(char *modname,loader_shlibfunc_t *farray, int numf, void *autoinit_arg)
|
||||||
{
|
{
|
||||||
void *lib_handle;
|
void *lib_handle;
|
||||||
initfunc_t fpi;
|
initfunc_t fpi;
|
||||||
@@ -155,7 +155,7 @@ int load_module_shlib(char *modname,loader_shlibfunc_t *farray, int numf)
|
|||||||
fpi = dlsym(lib_handle,afname);
|
fpi = dlsym(lib_handle,afname);
|
||||||
|
|
||||||
if (fpi != NULL ) {
|
if (fpi != NULL ) {
|
||||||
fpi();
|
fpi(autoinit_arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (farray != NULL) {
|
if (farray != NULL) {
|
||||||
|
|||||||
@@ -59,7 +59,8 @@ typedef struct {
|
|||||||
|
|
||||||
/* function type of functions which may be implemented by a module */
|
/* function type of functions which may be implemented by a module */
|
||||||
/* 1: init function, called when loading, if found in the shared lib */
|
/* 1: init function, called when loading, if found in the shared lib */
|
||||||
typedef int(*initfunc_t)(void);
|
typedef int(*initfunc_t)(void *);
|
||||||
|
|
||||||
/* 2: version checking function, called when loading, if it returns -1, trigger main exec abort */
|
/* 2: version checking function, called when loading, if it returns -1, trigger main exec abort */
|
||||||
typedef int(*checkverfunc_t)(char * mainexec_version, char ** shlib_version);
|
typedef int(*checkverfunc_t)(char * mainexec_version, char ** shlib_version);
|
||||||
/* 3: get function array function, called when loading when a module doesn't provide */
|
/* 3: get function array function, called when loading when a module doesn't provide */
|
||||||
@@ -72,18 +73,18 @@ typedef int(*getfarrayfunc_t)(loader_shlibfunc_t **funcarray);
|
|||||||
#define DEFAULT_MAXSHLIBS 10
|
#define DEFAULT_MAXSHLIBS 10
|
||||||
loader_data_t loader_data;
|
loader_data_t loader_data;
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
/* LOADER parameters */
|
/* LOADER parameters */
|
||||||
/* optname helpstr paramflags XXXptr defXXXval type numelt */
|
/* optname helpstr paramflags XXXptr defXXXval type numelt check func*/
|
||||||
/*------------------------------------------------------------------------------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
#define LOADER_PARAMS_DESC { \
|
#define LOADER_PARAMS_DESC { \
|
||||||
{"shlibpath", NULL, PARAMFLAG_NOFREE, strptr:(char **)&(loader_data.shlibpath), defstrval:DEFAULT_PATH, TYPE_STRING, 0}, \
|
{"shlibpath", NULL, PARAMFLAG_NOFREE, strptr:(char **)&(loader_data.shlibpath), defstrval:DEFAULT_PATH, TYPE_STRING, 0, NULL},\
|
||||||
{"maxshlibs", NULL, 0, uptr:&(loader_data.maxshlibs), defintval:DEFAULT_MAXSHLIBS, TYPE_UINT32, 0}, \
|
{"maxshlibs", NULL, 0, uptr:&(loader_data.maxshlibs), defintval:DEFAULT_MAXSHLIBS, TYPE_UINT32, 0, NULL}\
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------------------------------------------*/
|
||||||
#else /* LOAD_MODULE_SHLIB_MAIN */
|
#else /* LOAD_MODULE_SHLIB_MAIN */
|
||||||
extern int load_module_shlib(char *modname, loader_shlibfunc_t *farray, int numf);
|
extern int load_module_shlib(char *modname, loader_shlibfunc_t *farray, int numf, void *initfunc_arg);
|
||||||
extern void * get_shlibmodule_fptr(char *modname, char *fname);
|
extern void * get_shlibmodule_fptr(char *modname, char *fname);
|
||||||
extern loader_data_t loader_data;
|
extern loader_data_t loader_data;
|
||||||
#endif /* LOAD_MODULE_SHLIB_MAIN */
|
#endif /* LOAD_MODULE_SHLIB_MAIN */
|
||||||
|
|||||||
+23
-6
@@ -32,11 +32,15 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
|
|
||||||
|
#define MSC_LIBRARY
|
||||||
|
#include "msc.h"
|
||||||
|
|
||||||
#include "liblfds611.h"
|
#include "liblfds611.h"
|
||||||
#include "intertask_interface.h"
|
#include "intertask_interface.h"
|
||||||
#include "timer.h"
|
#include "timer.h"
|
||||||
|
|
||||||
#include "msc.h"
|
|
||||||
|
|
||||||
#include "assertions.h"
|
#include "assertions.h"
|
||||||
|
|
||||||
//-------------------------------
|
//-------------------------------
|
||||||
@@ -67,8 +71,8 @@ void *msc_task(void *args_p)
|
|||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
{
|
{
|
||||||
MessageDef *received_message_p = NULL;
|
MessageDef *received_message_p = NULL;
|
||||||
const char *msg_name = NULL;
|
// const char *msg_name = NULL;
|
||||||
instance_t instance = 0;
|
// instance_t instance = 0;
|
||||||
long timer_id;
|
long timer_id;
|
||||||
|
|
||||||
itti_mark_task_ready(TASK_MSC);
|
itti_mark_task_ready(TASK_MSC);
|
||||||
@@ -88,9 +92,9 @@ void *msc_task(void *args_p)
|
|||||||
itti_receive_msg(TASK_MSC, &received_message_p);
|
itti_receive_msg(TASK_MSC, &received_message_p);
|
||||||
|
|
||||||
if (received_message_p != NULL) {
|
if (received_message_p != NULL) {
|
||||||
msg_name = ITTI_MSG_NAME (received_message_p);
|
// msg_name = ITTI_MSG_NAME (received_message_p);
|
||||||
instance = ITTI_MSG_INSTANCE (received_message_p);
|
// instance = ITTI_MSG_INSTANCE (received_message_p);
|
||||||
|
|
||||||
switch (ITTI_MSG_ID(received_message_p)) {
|
switch (ITTI_MSG_ID(received_message_p)) {
|
||||||
|
|
||||||
case TIMER_HAS_EXPIRED: {
|
case TIMER_HAS_EXPIRED: {
|
||||||
@@ -571,4 +575,17 @@ error_event:
|
|||||||
free(new_item_p);
|
free(new_item_p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// function called when oai loader loads the msc shared lib
|
||||||
|
int msc_autoinit(msc_interface_t *msc_interface)
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
|
||||||
|
msc_interface->msc_init = msc_init;
|
||||||
|
msc_interface->msc_start_use = msc_start_use;
|
||||||
|
msc_interface->msc_end = msc_end;
|
||||||
|
msc_interface->msc_log_event = msc_log_event;
|
||||||
|
msc_interface->msc_log_message = msc_log_message;
|
||||||
|
msc_interface->msc_loaded = 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|||||||
+29
-18
@@ -73,7 +73,23 @@ typedef enum {
|
|||||||
#define MSC_AS_TIME_ARGS(CTXT_Pp) \
|
#define MSC_AS_TIME_ARGS(CTXT_Pp) \
|
||||||
(CTXT_Pp)->frame, \
|
(CTXT_Pp)->frame, \
|
||||||
(CTXT_Pp)->subframe
|
(CTXT_Pp)->subframe
|
||||||
#if defined(MESSAGE_CHART_GENERATOR)
|
|
||||||
|
typedef int(*msc_init_t)(const msc_env_t, const int );
|
||||||
|
typedef void(*msc_start_use_t)(void );
|
||||||
|
typedef void(*msc_end_t)(void);
|
||||||
|
typedef void(*msc_log_event_t)(const msc_proto_t,char *, ...);
|
||||||
|
typedef void(*msc_log_message_t)(const char * const, const msc_proto_t, const msc_proto_t,
|
||||||
|
const uint8_t* const, const unsigned int, char * , ...);
|
||||||
|
typedef struct msc_interface {
|
||||||
|
int msc_loaded;
|
||||||
|
msc_init_t msc_init;
|
||||||
|
msc_start_use_t msc_start_use;
|
||||||
|
msc_end_t msc_end;
|
||||||
|
msc_log_event_t msc_log_event;
|
||||||
|
msc_log_message_t msc_log_message;
|
||||||
|
} msc_interface_t;
|
||||||
|
|
||||||
|
#ifdef MSC_LIBRARY
|
||||||
int msc_init(const msc_env_t envP, const int max_threadsP);
|
int msc_init(const msc_env_t envP, const int max_threadsP);
|
||||||
void msc_start_use(void);
|
void msc_start_use(void);
|
||||||
void msc_flush_messages(void);
|
void msc_flush_messages(void);
|
||||||
@@ -88,22 +104,17 @@ void msc_log_message(
|
|||||||
const unsigned int num_bytes,
|
const unsigned int num_bytes,
|
||||||
char *format, ...);
|
char *format, ...);
|
||||||
|
|
||||||
#define MSC_INIT(arg1,arg2) msc_init(arg1,arg2)
|
|
||||||
#define MSC_START_USE msc_start_use
|
|
||||||
#define MSC_END msc_end
|
|
||||||
#define MSC_LOG_EVENT(mScPaRaMs, fORMAT, aRGS...) msc_log_event(mScPaRaMs, fORMAT, ##aRGS)
|
|
||||||
#define MSC_LOG_RX_MESSAGE(rECEIVER, sENDER, bYTES, nUMbYTES, fORMAT, aRGS...) msc_log_message("<-",rECEIVER, sENDER, bYTES, nUMbYTES, fORMAT, ##aRGS)
|
|
||||||
#define MSC_LOG_RX_DISCARDED_MESSAGE(rECEIVER, sENDER, bYTES, nUMbYTES, fORMAT, aRGS...) msc_log_message("x-",rECEIVER, sENDER, bYTES, nUMbYTES, fORMAT, ##aRGS)
|
|
||||||
#define MSC_LOG_TX_MESSAGE(sENDER, rECEIVER, bYTES, nUMbYTES, fORMAT, aRGS...) msc_log_message("->",sENDER, rECEIVER, bYTES, nUMbYTES, fORMAT, ##aRGS)
|
|
||||||
#define MSC_LOG_TX_MESSAGE_FAILED(sENDER, rECEIVER, bYTES, nUMbYTES, fORMAT, aRGS...) msc_log_message("-x",sENDER, rECEIVER, bYTES, nUMbYTES, fORMAT, ##aRGS)
|
|
||||||
#else
|
#else
|
||||||
#define MSC_INIT(arg1,arg2)
|
|
||||||
#define MSC_START_USE(mScPaRaMs)
|
msc_interface_t msc_interface;
|
||||||
#define MSC_END(mScPaRaMs)
|
#define MSC_INIT(arg1,arg2) if(msc_interface.msc_loaded) msc_interface.msc_init(arg1,arg2)
|
||||||
#define MSC_LOG_EVENT(mScPaRaMs, fORMAT, aRGS...)
|
#define MSC_START_USE if(msc_interface.msc_loaded) msc_interface.msc_start_use
|
||||||
#define MSC_LOG_RX_MESSAGE(mScPaRaMs, fORMAT, aRGS...)
|
#define MSC_END if(msc_interface.msc_loaded) msc_interface.msc_end
|
||||||
#define MSC_LOG_RX_DISCARDED_MESSAGE(mScPaRaMs, fORMAT, aRGS...)
|
#define MSC_LOG_EVENT(mScPaRaMs, fORMAT, aRGS...) if(msc_interface.msc_loaded) msc_interface.msc_log_event(mScPaRaMs, fORMAT, ##aRGS)
|
||||||
#define MSC_LOG_TX_MESSAGE(mScPaRaMs, fORMAT, aRGS...)
|
#define MSC_LOG_RX_MESSAGE(rECEIVER, sENDER, bYTES, nUMbYTES, fORMAT, aRGS...) if(msc_interface.msc_loaded) msc_interface.msc_log_message("<-",rECEIVER, sENDER, (const uint8_t *)bYTES, nUMbYTES, fORMAT, ##aRGS)
|
||||||
#define MSC_LOG_TX_MESSAGE_FAILED(mScPaRaMs, fORMAT, aRGS...)
|
#define MSC_LOG_RX_DISCARDED_MESSAGE(rECEIVER, sENDER, bYTES, nUMbYTES, fORMAT, aRGS...) if(msc_interface.msc_loaded) msc_interface.msc_log_message("x-",rECEIVER, sENDER, (const uint8_t *)bYTES, nUMbYTES, fORMAT, ##aRGS)
|
||||||
#endif
|
#define MSC_LOG_TX_MESSAGE(sENDER, rECEIVER, bYTES, nUMbYTES, fORMAT, aRGS...) if(msc_interface.msc_loaded) msc_interface.msc_log_message("->",sENDER, rECEIVER, (const uint8_t *)bYTES, nUMbYTES, fORMAT, ##aRGS)
|
||||||
|
#define MSC_LOG_TX_MESSAGE_FAILED(sENDER, rECEIVER, bYTES, nUMbYTES, fORMAT, aRGS...) if(msc_interface.msc_loaded) msc_interface.msc_log_message("-x",sENDER, rECEIVER, (const uint8_t *)bYTES, nUMbYTES, fORMAT, ##aRGS)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|||||||
@@ -199,28 +199,29 @@ int proccmd_show(char *buf, int debug, telnet_printfunc_t prnt)
|
|||||||
print_threads(buf,debug,prnt);
|
print_threads(buf,debug,prnt);
|
||||||
}
|
}
|
||||||
if (strcasestr(buf,"loglvl") != NULL) {
|
if (strcasestr(buf,"loglvl") != NULL) {
|
||||||
prnt(" component level enabled\n");
|
prnt("\n component level enabled output\n");
|
||||||
for (int i=MIN_LOG_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) {
|
for (int i=MIN_LOG_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) {
|
||||||
if (g_log->log_component[i].name != NULL) {
|
if (g_log->log_component[i].name != NULL) {
|
||||||
prnt("%02i %17.17s:%10.10s %s\n",i ,g_log->log_component[i].name,
|
prnt("%02i %17.17s:%10.10s %s %s\n",i ,g_log->log_component[i].name,
|
||||||
map_int_to_str(log_level_names,g_log->log_component[i].level),
|
map_int_to_str(log_level_names,(g_log->log_component[i].level>=0)?g_log->log_component[i].level:g_log->log_component[i].savedlevel),
|
||||||
((g_log->log_component[i].interval>0)?"Y":"N") );
|
((g_log->log_component[i].level>=0)?"Y":"N"),
|
||||||
|
((g_log->log_component[i].filelog>0)?g_log->log_component[i].filelog_name:"stdout"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (strcasestr(buf,"logopt") != NULL) {
|
if (strcasestr(buf,"logopt") != NULL) {
|
||||||
prnt(" option enabled\n");
|
prnt("\n option enabled\n");
|
||||||
for (int i=0; log_options[i].name != NULL; i++) {
|
for (int i=0; log_options[i].name != NULL; i++) {
|
||||||
prnt("%02i %17.17s %10.10s \n",i ,log_options[i].name,
|
prnt("%02i %17.17s %10.10s \n",i ,log_options[i].name,
|
||||||
((g_log->flag & log_options[i].value)?"Y":"N") );
|
((g_log->flag & log_options[i].value)?"Y":"N") );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (strcasestr(buf,"dbgopt") != NULL) {
|
if (strcasestr(buf,"dbgopt") != NULL) {
|
||||||
prnt(" option debug matlab\n");
|
prnt("\n module debug dumpfile\n");
|
||||||
for (int i=0; log_maskmap[i].name != NULL ; i++) {
|
for (int i=0; log_maskmap[i].name != NULL ; i++) {
|
||||||
prnt("%02i %17.17s %5.5s %5.5s\n",i ,log_maskmap[i].name,
|
prnt("%02i %17.17s %5.5s %5.5s\n",i ,log_maskmap[i].name,
|
||||||
((g_log->debug_mask & log_maskmap[i].value)?"Y":"N"),
|
((g_log->debug_mask & log_maskmap[i].value)?"Y":"N"),
|
||||||
((g_log->matlab_mask & log_maskmap[i].value)?"Y":"N") );
|
((g_log->dump_mask & log_maskmap[i].value)?"Y":"N") );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (strcasestr(buf,"config") != NULL) {
|
if (strcasestr(buf,"config") != NULL) {
|
||||||
@@ -337,15 +338,15 @@ int s = sscanf(buf,"%ms %i-%i\n",&logsubcmd, &idx1,&idx2);
|
|||||||
prnt("Available log levels: \n ");
|
prnt("Available log levels: \n ");
|
||||||
for (int i=0; log_level_names[i].name != NULL; i++)
|
for (int i=0; log_level_names[i].name != NULL; i++)
|
||||||
prnt("%s ",log_level_names[i].name);
|
prnt("%s ",log_level_names[i].name);
|
||||||
prnt("\n");
|
prnt("\n\n");
|
||||||
prnt("Available display options: \n ");
|
prnt("Available display options: \n ");
|
||||||
for (int i=0; log_options[i].name != NULL; i++)
|
for (int i=0; log_options[i].name != NULL; i++)
|
||||||
prnt("%s ",log_options[i].name);
|
prnt("%s ",log_options[i].name);
|
||||||
prnt("\n");
|
prnt("\n\n");
|
||||||
prnt("Available debug or matlab options: \n ");
|
prnt("Available debug and dump options: \n ");
|
||||||
for (int i=0; log_maskmap[i].name != NULL; i++)
|
for (int i=0; log_maskmap[i].name != NULL; i++)
|
||||||
prnt("%s ",log_maskmap[i].name);
|
prnt("%s ",log_maskmap[i].name);
|
||||||
prnt("\n");
|
prnt("\n\n");
|
||||||
proccmd_show("loglvl",debug,prnt);
|
proccmd_show("loglvl",debug,prnt);
|
||||||
proccmd_show("logopt",debug,prnt);
|
proccmd_show("logopt",debug,prnt);
|
||||||
proccmd_show("dbgopt",debug,prnt);
|
proccmd_show("dbgopt",debug,prnt);
|
||||||
@@ -377,7 +378,7 @@ int s = sscanf(buf,"%ms %i-%i\n",&logsubcmd, &idx1,&idx2);
|
|||||||
else if (l == 2 && strcmp(logparam,"debug") == 0){
|
else if (l == 2 && strcmp(logparam,"debug") == 0){
|
||||||
optbit=map_str_to_int(log_maskmap,opt);
|
optbit=map_str_to_int(log_maskmap,opt);
|
||||||
if (optbit < 0) {
|
if (optbit < 0) {
|
||||||
prnt("debug flag %s unknown\n",opt);
|
prnt("module %s unknown\n",opt);
|
||||||
} else {
|
} else {
|
||||||
if (idx1 > 0)
|
if (idx1 > 0)
|
||||||
SET_LOG_DEBUG(optbit);
|
SET_LOG_DEBUG(optbit);
|
||||||
@@ -386,42 +387,51 @@ int s = sscanf(buf,"%ms %i-%i\n",&logsubcmd, &idx1,&idx2);
|
|||||||
proccmd_show("dbgopt",debug,prnt);
|
proccmd_show("dbgopt",debug,prnt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (l == 2 && strcmp(logparam,"matlab") == 0){
|
else if (l == 2 && strcmp(logparam,"dump") == 0){
|
||||||
optbit=map_str_to_int(log_maskmap,opt);
|
optbit=map_str_to_int(log_maskmap,opt);
|
||||||
if (optbit < 0) {
|
if (optbit < 0) {
|
||||||
prnt("matlab flag %s unknown\n",opt);
|
prnt("module %s unknown\n",opt);
|
||||||
} else {
|
} else {
|
||||||
if (idx1 > 0)
|
if (idx1 > 0)
|
||||||
SET_LOG_MATLAB(optbit);
|
SET_LOG_DUMP(optbit);
|
||||||
else
|
else
|
||||||
CLEAR_LOG_MATLAB(optbit);
|
CLEAR_LOG_DUMP(optbit);
|
||||||
proccmd_show("dbgopt",debug,prnt);
|
proccmd_show("dbgopt",debug,prnt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (logparam != NULL) free(logparam);
|
if (logparam != NULL) free(logparam);
|
||||||
if (opt != NULL) free(opt);
|
if (opt != NULL) free(opt);
|
||||||
} else if ( s == 3 && logsubcmd != NULL) {
|
} else if ( s == 3 && logsubcmd != NULL) {
|
||||||
int level, interval;
|
int level, enable,filelog;
|
||||||
char *tmpstr=NULL;
|
char *tmpstr=NULL;
|
||||||
char *logparam=NULL;
|
char *logparam=NULL;
|
||||||
int l;
|
int l;
|
||||||
|
|
||||||
level = interval = -1;
|
level = OAILOG_DISABLE - 1;
|
||||||
|
filelog = -1;
|
||||||
|
enable=-1;
|
||||||
l=sscanf(logsubcmd,"%m[^'_']_%m[^'_']",&logparam,&tmpstr);
|
l=sscanf(logsubcmd,"%m[^'_']_%m[^'_']",&logparam,&tmpstr);
|
||||||
if (debug > 0)
|
if (debug > 0)
|
||||||
prnt("l=%i, %s %s\n",l,((logparam==NULL)?"\"\"":logparam), ((tmpstr==NULL)?"\"\"":tmpstr));
|
prnt("l=%i, %s %s\n",l,((logparam==NULL)?"\"\"":logparam), ((tmpstr==NULL)?"\"\"":tmpstr));
|
||||||
if (l ==2 ) {
|
if (l ==2 ) {
|
||||||
if (strcmp(logparam,"level") == 0) {
|
if (strcmp(logparam,"level") == 0) {
|
||||||
level=map_str_to_int(log_level_names,tmpstr);
|
level=map_str_to_int(log_level_names,tmpstr);
|
||||||
if (level < 0) prnt("level %s unknown\n",tmpstr);
|
if (level < 0) {
|
||||||
|
prnt("level %s unknown\n",tmpstr);
|
||||||
|
level=OAILOG_DISABLE - 1;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
prnt("%s%s unknown log sub command \n",logparam, tmpstr);
|
prnt("%s%s unknown log sub command \n",logparam, tmpstr);
|
||||||
}
|
}
|
||||||
} else if (l ==1 ) {
|
} else if (l ==1 ) {
|
||||||
if (strcmp(logparam,"enable") == 0) {
|
if (strcmp(logparam,"enable") == 0) {
|
||||||
interval = 1;
|
enable=1;
|
||||||
} else if (strcmp(logparam,"disable") == 0) {
|
} else if (strcmp(logparam,"disable") == 0) {
|
||||||
interval = 0;
|
level=OAILOG_DISABLE;
|
||||||
|
} else if (strcmp(logparam,"file") == 0) {
|
||||||
|
filelog = 1 ;
|
||||||
|
} else if (strcmp(logparam,"nofile") == 0) {
|
||||||
|
filelog = 0 ;
|
||||||
} else {
|
} else {
|
||||||
prnt("%s%s unknown log sub command \n",logparam, tmpstr);
|
prnt("%s%s unknown log sub command \n",logparam, tmpstr);
|
||||||
}
|
}
|
||||||
@@ -431,20 +441,18 @@ int s = sscanf(buf,"%ms %i-%i\n",&logsubcmd, &idx1,&idx2);
|
|||||||
if (logparam != NULL) free(logparam);
|
if (logparam != NULL) free(logparam);
|
||||||
if (tmpstr != NULL) free(tmpstr);
|
if (tmpstr != NULL) free(tmpstr);
|
||||||
for (int i=idx1; i<=idx2 ; i++) {
|
for (int i=idx1; i<=idx2 ; i++) {
|
||||||
if (level < 0) {
|
if (level >= OAILOG_DISABLE)
|
||||||
level=g_log->log_component[i].level;
|
set_log(i, level);
|
||||||
}
|
else if ( enable == 1)
|
||||||
if (interval < 0) {
|
set_log(i,g_log->log_component[i].savedlevel);
|
||||||
interval=g_log->log_component[i].interval;
|
else if ( filelog == 1 ) {
|
||||||
}
|
set_component_filelog(i);
|
||||||
set_log(i, level, interval);
|
} else if ( filelog == 0 ) {
|
||||||
prnt("log level comp %i %s set to %s (%s)\n",
|
close_component_filelog(i);
|
||||||
i,((g_log->log_component[i].name==NULL)?"":g_log->log_component[i].name),
|
}
|
||||||
map_int_to_str(log_level_names,g_log->log_component[i].level),
|
|
||||||
((g_log->log_component[i].interval>0)?"enabled":"disabled"));
|
}
|
||||||
|
proccmd_show("loglvl",debug,prnt);
|
||||||
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
prnt("%s: wrong log command...\n",buf);
|
prnt("%s: wrong log command...\n",buf);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,13 +48,15 @@ telnetshell_vardef_t proc_vardef[] = {
|
|||||||
show: display current log configuration \n\
|
show: display current log configuration \n\
|
||||||
online, noonline: enable or disable console logs \n\
|
online, noonline: enable or disable console logs \n\
|
||||||
enable, disable id1-id2: enable or disable logs for components index id1 to id2 \n\
|
enable, disable id1-id2: enable or disable logs for components index id1 to id2 \n\
|
||||||
|
file, nofile id1-id2: enable or disable redirecting logs to file for components index id1 to id2 \n\
|
||||||
|
logfile name depends on component name and is printed in the show command \n\
|
||||||
level_<level> id1-id2: set log level to <level> for components index id1 to id2 \n\
|
level_<level> id1-id2: set log level to <level> for components index id1 to id2 \n\
|
||||||
use the show command to get the authorized values for <level> and the list of component \
|
use the show command to get the authorized values for \n\
|
||||||
indexes that can be used for id1 and id2 \n\
|
<level> and the list of component indexes that can be used for id1 and id2 \n\
|
||||||
print_<opt> <0|1> disable or enable the \"opt\" log option, use the show command to get \
|
print_<opt> <0|1> disable or enable the \"opt\" log option, use the show command to get \
|
||||||
the available options\n\
|
the available options\n\
|
||||||
matlab_<opt> debug_<func> disable or enable the debug code or matlab file generation \
|
dump_<mod> debug_<mod > disable or enable the debug file generation or debug code\
|
||||||
for \"func\" function. use the show command to get the available options\n"
|
for \"mod\" module. use the show command to get the available modules\n"
|
||||||
|
|
||||||
#define PROCCMD_THREAD_HELP_STRING " thread sub commands: \n\
|
#define PROCCMD_THREAD_HELP_STRING " thread sub commands: \n\
|
||||||
<thread id> aff <core> : set affinity of thread <thread id> to core <core> \n\
|
<thread id> aff <core> : set affinity of thread <thread id> to core <core> \n\
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ int load_codinglib(void) {
|
|||||||
shlib_fdesc[ENCODE_SSE_FPTRIDX].fname= "threegpplte_turbo_encoder_sse";
|
shlib_fdesc[ENCODE_SSE_FPTRIDX].fname= "threegpplte_turbo_encoder_sse";
|
||||||
shlib_fdesc[ENCODE_C_FPTRIDX].fname= "threegpplte_turbo_encoder";
|
shlib_fdesc[ENCODE_C_FPTRIDX].fname= "threegpplte_turbo_encoder";
|
||||||
shlib_fdesc[ENCODE_INIT_SSE_FPTRIDX].fname= "init_encoder_sse";
|
shlib_fdesc[ENCODE_INIT_SSE_FPTRIDX].fname= "init_encoder_sse";
|
||||||
ret=load_module_shlib("coding",shlib_fdesc,DECODE_NUM_FPTR);
|
ret=load_module_shlib("coding",shlib_fdesc,DECODE_NUM_FPTR,NULL);
|
||||||
if (ret < 0) exit_fun("Error loading coding library");
|
if (ret < 0) exit_fun("Error loading coding library");
|
||||||
|
|
||||||
/* execute encoder/decoder init functions */
|
/* execute encoder/decoder init functions */
|
||||||
|
|||||||
@@ -450,11 +450,11 @@ void phy_config_sib2_eNB(uint8_t Mod_id,
|
|||||||
} else if (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.present == MBSFN_SubframeConfig__subframeAllocation_PR_fourFrames) { // 24-bit subframe configuration
|
} else if (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.present == MBSFN_SubframeConfig__subframeAllocation_PR_fourFrames) { // 24-bit subframe configuration
|
||||||
fp->MBSFN_config[i].fourFrames_flag = 1;
|
fp->MBSFN_config[i].fourFrames_flag = 1;
|
||||||
fp->MBSFN_config[i].mbsfn_SubframeConfig =
|
fp->MBSFN_config[i].mbsfn_SubframeConfig =
|
||||||
mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[0]|
|
mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[2]|
|
||||||
(mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[1]<<8)|
|
(mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[1]<<8)|
|
||||||
(mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[2]<<16);
|
(mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[0]<<16);
|
||||||
|
|
||||||
LOG_I(PHY, "[CONFIG] MBSFN_SubframeConfig[%d] pattern is %d\n", i,
|
LOG_I(PHY, "[CONFIG] MBSFN_SubframeConfig[%d] pattern is %x\n", i,
|
||||||
fp->MBSFN_config[i].mbsfn_SubframeConfig);
|
fp->MBSFN_config[i].mbsfn_SubframeConfig);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -165,11 +165,11 @@ void phy_config_sib2_ue(module_id_t Mod_id,int CC_id,
|
|||||||
} else if (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.present == MBSFN_SubframeConfig__subframeAllocation_PR_fourFrames) { // 24-bit subframe configuration
|
} else if (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.present == MBSFN_SubframeConfig__subframeAllocation_PR_fourFrames) { // 24-bit subframe configuration
|
||||||
fp->MBSFN_config[i].fourFrames_flag = 1;
|
fp->MBSFN_config[i].fourFrames_flag = 1;
|
||||||
fp->MBSFN_config[i].mbsfn_SubframeConfig =
|
fp->MBSFN_config[i].mbsfn_SubframeConfig =
|
||||||
mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[0]|
|
mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[2]|
|
||||||
(mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[1]<<8)|
|
(mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[1]<<8)|
|
||||||
(mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[2]<<16);
|
(mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[0]<<16);
|
||||||
|
|
||||||
LOG_I(PHY, "[CONFIG] MBSFN_SubframeConfig[%d] pattern is %d\n", i,
|
LOG_I(PHY, "[CONFIG] MBSFN_SubframeConfig[%d] pattern is %x\n", i,
|
||||||
fp->MBSFN_config[i].mbsfn_SubframeConfig);
|
fp->MBSFN_config[i].mbsfn_SubframeConfig);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "phy_init.h"
|
#include "phy_init.h"
|
||||||
#include "log.h"
|
#include "common/utils/LOG/log.h"
|
||||||
|
|
||||||
uint16_t dl_S_table_normal[10]={3,9,10,11,12,3,9,10,11,6};
|
uint16_t dl_S_table_normal[10]={3,9,10,11,12,3,9,10,11,6};
|
||||||
uint16_t dl_S_table_extended[10]={3,8,9,10,3,8,9,5,0,0};
|
uint16_t dl_S_table_extended[10]={3,8,9,10,3,8,9,5,0,0};
|
||||||
|
|||||||
@@ -61,8 +61,8 @@ void lte_adjust_synch(LTE_DL_FRAME_PARMS *frame_parms,
|
|||||||
temp = 0;
|
temp = 0;
|
||||||
|
|
||||||
for (aa=0; aa<frame_parms->nb_antennas_rx; aa++) {
|
for (aa=0; aa<frame_parms->nb_antennas_rx; aa++) {
|
||||||
Re = ((int16_t*)ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_id][aa])[(i<<2)];
|
Re = ((int16_t*)ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_id][aa])[(i<<1)];
|
||||||
Im = ((int16_t*)ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_id][aa])[1+(i<<2)];
|
Im = ((int16_t*)ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_id][aa])[1+(i<<1)];
|
||||||
temp += (Re*Re/2) + (Im*Im/2);
|
temp += (Re*Re/2) + (Im*Im/2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,7 +81,7 @@ void lte_adjust_synch(LTE_DL_FRAME_PARMS *frame_parms,
|
|||||||
// do not filter to have proactive timing adjustment
|
// do not filter to have proactive timing adjustment
|
||||||
max_pos_fil = max_pos;
|
max_pos_fil = max_pos;
|
||||||
|
|
||||||
if(subframe == 6)
|
if(subframe == 5)
|
||||||
{
|
{
|
||||||
diff = max_pos_fil - (frame_parms->nb_prefix_samples>>3);
|
diff = max_pos_fil - (frame_parms->nb_prefix_samples>>3);
|
||||||
|
|
||||||
|
|||||||
@@ -62,8 +62,8 @@ void lte_adjust_synch(LTE_DL_FRAME_PARMS *frame_parms,
|
|||||||
temp = 0;
|
temp = 0;
|
||||||
|
|
||||||
for (aa=0; aa<frame_parms->nb_antennas_rx; aa++) {
|
for (aa=0; aa<frame_parms->nb_antennas_rx; aa++) {
|
||||||
Re = ((int16_t*)ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_id][aa])[(i<<2)];
|
Re = ((int16_t*)ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_id][aa])[(i<<1)];
|
||||||
Im = ((int16_t*)ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_id][aa])[1+(i<<2)];
|
Im = ((int16_t*)ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_id][aa])[1+(i<<1)];
|
||||||
temp += (Re*Re/2) + (Im*Im/2);
|
temp += (Re*Re/2) + (Im*Im/2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,7 +82,7 @@ void lte_adjust_synch(LTE_DL_FRAME_PARMS *frame_parms,
|
|||||||
// do not filter to have proactive timing adjustment
|
// do not filter to have proactive timing adjustment
|
||||||
max_pos_fil = max_pos;
|
max_pos_fil = max_pos;
|
||||||
|
|
||||||
if(subframe == 6)
|
if(subframe == 5)
|
||||||
{
|
{
|
||||||
diff = max_pos_fil - (frame_parms->nb_prefix_samples>>3);
|
diff = max_pos_fil - (frame_parms->nb_prefix_samples>>3);
|
||||||
|
|
||||||
|
|||||||
@@ -274,11 +274,11 @@ int lte_sync_time_init(LTE_DL_FRAME_PARMS *frame_parms ) // LTE_UE_COMMON *com
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
LOG_M_BEGIN(DEBUG_LTEESTIM);
|
if ( LOG_DUMPFLAG(DEBUG_LTEESTIM)){
|
||||||
LOG_M("primary_sync0.m","psync0",primary_synch0_time,frame_parms->ofdm_symbol_size,1,1);
|
LOG_M("primary_sync0.m","psync0",primary_synch0_time,frame_parms->ofdm_symbol_size,1,1);
|
||||||
LOG_M("primary_sync1.m","psync1",primary_synch1_time,frame_parms->ofdm_symbol_size,1,1);
|
LOG_M("primary_sync1.m","psync1",primary_synch1_time,frame_parms->ofdm_symbol_size,1,1);
|
||||||
LOG_M("primary_sync2.m","psync2",primary_synch2_time,frame_parms->ofdm_symbol_size,1,1);
|
LOG_M("primary_sync2.m","psync2",primary_synch2_time,frame_parms->ofdm_symbol_size,1,1);
|
||||||
LOG_M_END
|
}
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -460,18 +460,18 @@ int lte_sync_time(int **rxdata, ///rx data in time domain
|
|||||||
LOG_I(PHY,"[UE] lte_sync_time: Sync source = %d, Peak found at pos %d, val = %d (%d dB)\n",sync_source,peak_pos,peak_val,dB_fixed(peak_val)/2);
|
LOG_I(PHY,"[UE] lte_sync_time: Sync source = %d, Peak found at pos %d, val = %d (%d dB)\n",sync_source,peak_pos,peak_val,dB_fixed(peak_val)/2);
|
||||||
|
|
||||||
|
|
||||||
LOG_M_BEGIN(DEBUG_LTEESTIM)
|
if ( LOG_DUMPFLAG(DEBUG_LTEESTIM)){
|
||||||
static int debug_cnt;
|
static int debug_cnt;
|
||||||
if (debug_cnt == 0) {
|
if (debug_cnt == 0) {
|
||||||
LOG_M("sync_corr0_ue.m","synccorr0",sync_corr_ue0,2*length,1,2);
|
LOG_M("sync_corr0_ue.m","synccorr0",sync_corr_ue0,2*length,1,2);
|
||||||
LOG_M("sync_corr1_ue.m","synccorr1",sync_corr_ue1,2*length,1,2);
|
LOG_M("sync_corr1_ue.m","synccorr1",sync_corr_ue1,2*length,1,2);
|
||||||
LOG_M("sync_corr2_ue.m","synccorr2",sync_corr_ue2,2*length,1,2);
|
LOG_M("sync_corr2_ue.m","synccorr2",sync_corr_ue2,2*length,1,2);
|
||||||
LOG_M("rxdata0.m","rxd0",rxdata[0],length<<1,1,1);
|
LOG_M("rxdata0.m","rxd0",rxdata[0],length<<1,1,1);
|
||||||
// exit(-1);
|
// exit(-1);
|
||||||
} else {
|
} else {
|
||||||
debug_cnt++;
|
debug_cnt++;
|
||||||
}
|
}
|
||||||
LOG_M_END
|
}
|
||||||
|
|
||||||
|
|
||||||
return(peak_pos);
|
return(peak_pos);
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
#include "PHY/defs_UE.h"
|
#include "PHY/defs_UE.h"
|
||||||
#include "PHY/phy_extern_ue.h"
|
#include "PHY/phy_extern_ue.h"
|
||||||
#include "log.h"
|
#include "common/utils/LOG/log.h"
|
||||||
#include "PHY/sse_intrin.h"
|
#include "PHY/sse_intrin.h"
|
||||||
|
|
||||||
//#define k1 1000
|
//#define k1 1000
|
||||||
|
|||||||
@@ -25,9 +25,9 @@
|
|||||||
#include "PHY/defs_eNB.h"
|
#include "PHY/defs_eNB.h"
|
||||||
#include "PHY/defs_UE.h"
|
#include "PHY/defs_UE.h"
|
||||||
#include "PHY/impl_defs_top.h"
|
#include "PHY/impl_defs_top.h"
|
||||||
|
#include "common/utils/LOG/log.h"
|
||||||
//extern unsigned int lte_gold_table[3][20][2][14];
|
//extern unsigned int lte_gold_table[3][20][2][14];
|
||||||
//#define DEBUG_DL_CELL_SPEC
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -64,7 +64,7 @@ int lte_dl_cell_spec_SS(PHY_VARS_eNB *eNB,
|
|||||||
else if ((p==1) && (l>0))
|
else if ((p==1) && (l>0))
|
||||||
nu = 0;
|
nu = 0;
|
||||||
else {
|
else {
|
||||||
printf("lte_dl_cell_spec: p %d, l %d -> ERROR\n",p,l);
|
LOG_E(PHY,"lte_dl_cell_spec: p %d, l %d -> ERROR\n",p,l);
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -85,19 +85,19 @@ int lte_dl_cell_spec_SS(PHY_VARS_eNB *eNB,
|
|||||||
// this is r_mprime from 3GPP 36-211 6.10.1.2
|
// this is r_mprime from 3GPP 36-211 6.10.1.2
|
||||||
output[k] = qpsk[(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3];
|
output[k] = qpsk[(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3];
|
||||||
//output[k] = (lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3;
|
//output[k] = (lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3;
|
||||||
#ifdef DEBUG_DL_CELL_SPEC
|
if (LOG_DEBUGFLAG(DEBUG_DLCELLSPEC)) {
|
||||||
printf("Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n",
|
LOG_I(PHY,"Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n",
|
||||||
Ns,l,m,mprime_dword,mprime_qpsk_symb);
|
Ns,l,m,mprime_dword,mprime_qpsk_symb);
|
||||||
printf("index = %d (k %d)\n",(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k);
|
LOG_I(PHY,"index = %d (k %d)\n",(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k);
|
||||||
#endif
|
}
|
||||||
|
|
||||||
mprime++;
|
mprime++;
|
||||||
#ifdef DEBUG_DL_CELL_SPEC
|
|
||||||
|
|
||||||
|
if (LOG_DEBUGFLAG(DEBUG_DLCELLSPEC)) {
|
||||||
if (m<4)
|
if (m<4)
|
||||||
printf("Ns %d, l %d output[%d] = (%d,%d)\n",Ns,l,k,((short *)&output[k])[0],((short *)&output[k])[1]);
|
LOG_I(PHY,"Ns %d, l %d output[%d] = (%d,%d)\n",Ns,l,k,((short *)&output[k])[0],((short *)&output[k])[1]);
|
||||||
|
|
||||||
#endif
|
}
|
||||||
k+=6;//b
|
k+=6;//b
|
||||||
|
|
||||||
if (k >= eNB->frame_parms.ofdm_symbol_size) {
|
if (k >= eNB->frame_parms.ofdm_symbol_size) {
|
||||||
@@ -105,7 +105,7 @@ int lte_dl_cell_spec_SS(PHY_VARS_eNB *eNB,
|
|||||||
k-=eNB->frame_parms.ofdm_symbol_size;
|
k-=eNB->frame_parms.ofdm_symbol_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
// printf("** k %d\n",k);
|
// LOG_I(PHY,"** k %d\n",k);
|
||||||
}
|
}
|
||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
@@ -143,7 +143,7 @@ int lte_dl_cell_spec(PHY_VARS_eNB *eNB,
|
|||||||
else if ((p==1) && (l>0))
|
else if ((p==1) && (l>0))
|
||||||
nu = 0;
|
nu = 0;
|
||||||
else {
|
else {
|
||||||
printf("lte_dl_cell_spec: p %d, l %d -> ERROR\n",p,l);
|
LOG_E(PHY,"lte_dl_cell_spec: p %d, l %d -> ERROR\n",p,l);
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -168,27 +168,24 @@ int lte_dl_cell_spec(PHY_VARS_eNB *eNB,
|
|||||||
// this is r_mprime from 3GPP 36-211 6.10.1.2
|
// this is r_mprime from 3GPP 36-211 6.10.1.2
|
||||||
output[k] = qpsk[(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3];
|
output[k] = qpsk[(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3];
|
||||||
//output[k] = (lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3;
|
//output[k] = (lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3;
|
||||||
#ifdef DEBUG_DL_CELL_SPEC
|
if (LOG_DEBUGFLAG(DEBUG_DLCELLSPEC)) {
|
||||||
printf("Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n",
|
LOG_I(PHY,"Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n",
|
||||||
Ns,l,m,mprime_dword,mprime_qpsk_symb);
|
Ns,l,m,mprime_dword,mprime_qpsk_symb);
|
||||||
printf("index = %d (k %d)\n",(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k);
|
LOG_I(PHY,"index = %d (k %d)\n",(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k);
|
||||||
#endif
|
}
|
||||||
|
|
||||||
mprime++;
|
mprime++;
|
||||||
#ifdef DEBUG_DL_CELL_SPEC
|
if (LOG_DEBUGFLAG(DEBUG_DLCELLSPEC)) {
|
||||||
|
if (m<4)
|
||||||
|
LOG_I(PHY,"Ns %d, l %d output[%d] = (%d,%d)\n",Ns,l,k,((short *)&output[k])[0],((short *)&output[k])[1]);
|
||||||
|
}
|
||||||
|
|
||||||
if (m<4)
|
|
||||||
printf("Ns %d, l %d output[%d] = (%d,%d)\n",Ns,l,k,((short *)&output[k])[0],((short *)&output[k])[1]);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
k+=6;
|
k+=6;
|
||||||
|
|
||||||
if (k >= eNB->frame_parms.ofdm_symbol_size) {
|
if (k >= eNB->frame_parms.ofdm_symbol_size) {
|
||||||
k++; // skip DC carrier
|
k++; // skip DC carrier
|
||||||
k-=eNB->frame_parms.ofdm_symbol_size;
|
k-=eNB->frame_parms.ofdm_symbol_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
// printf("** k %d\n",k);
|
// LOG_I(PHY,"** k %d\n",k);
|
||||||
}
|
}
|
||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
@@ -231,21 +228,21 @@ int lte_dl_cell_spec_rx(PHY_VARS_UE *ue,
|
|||||||
|
|
||||||
// this is r_mprime from 3GPP 36-211 6.10.1.2
|
// this is r_mprime from 3GPP 36-211 6.10.1.2
|
||||||
output[k] = qpsk[(ue->lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3];
|
output[k] = qpsk[(ue->lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3];
|
||||||
#ifdef DEBUG_DL_CELL_SPEC
|
if (LOG_DEBUGFLAG(DEBUG_DLCELLSPEC)) {
|
||||||
printf("Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n",
|
LOG_I(PHY,"Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n",
|
||||||
Ns,l,m,mprime_dword,mprime_qpsk_symb);
|
Ns,l,m,mprime_dword,mprime_qpsk_symb);
|
||||||
printf("index = %d (k %d)\n",(ue->lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k);
|
LOG_I(PHY,"index = %d (k %d)\n",(ue->lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k);
|
||||||
#endif
|
}
|
||||||
|
|
||||||
mprime++;
|
mprime++;
|
||||||
#ifdef DEBUG_DL_CELL_SPEC
|
if (LOG_DEBUGFLAG(DEBUG_DLCELLSPEC)) {
|
||||||
|
|
||||||
if (m<4)
|
if (m<4)
|
||||||
printf("Ns %d l %d output[%d] = (%d,%d)\n",Ns,l,k,((short *)&output[k])[0],((short *)&output[k])[1]);
|
LOG_I(PHY,"Ns %d l %d output[%d] = (%d,%d)\n",Ns,l,k,((short *)&output[k])[0],((short *)&output[k])[1]);
|
||||||
|
|
||||||
#endif
|
}
|
||||||
k++;
|
k++;
|
||||||
// printf("** k %d\n",k);
|
// LOG_I(PHY,"** k %d\n",k);
|
||||||
}
|
}
|
||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
|
|||||||
@@ -36,7 +36,7 @@
|
|||||||
#include "lte_refsig.h"
|
#include "lte_refsig.h"
|
||||||
#include "PHY/defs_eNB.h"
|
#include "PHY/defs_eNB.h"
|
||||||
#include "PHY/defs_UE.h"
|
#include "PHY/defs_UE.h"
|
||||||
#include "log.h"
|
#include "common/utils/LOG/log.h"
|
||||||
#include "PHY/impl_defs_top.h"
|
#include "PHY/impl_defs_top.h"
|
||||||
|
|
||||||
//extern unsigned int lte_gold_table[3][20][2][14];
|
//extern unsigned int lte_gold_table[3][20][2][14];
|
||||||
|
|||||||
@@ -54,9 +54,9 @@ void lte_gold_mbsfn(LTE_DL_FRAME_PARMS *frame_parms,uint32_t lte_gold_mbsfn_tabl
|
|||||||
for (l=0; l<3; l++) {
|
for (l=0; l<3; l++) {
|
||||||
|
|
||||||
if (l==0)
|
if (l==0)
|
||||||
x2 = (Nid_mbsfn) + (((1+(Nid_mbsfn<<1))*(1 + 2 + (7*(1+(sfn>>1)))))<<9); //cinit
|
x2 = (Nid_mbsfn) + (((1+(Nid_mbsfn<<1))*(1 + 2 + (7*(1+(sfn<<1)))))<<9); //cinit
|
||||||
else
|
else
|
||||||
x2 = (Nid_mbsfn) + (((1+(Nid_mbsfn<<1))*(1 + ((l-1)<<2) + (7*(2+(sfn>>1)))))<<9); //cinit
|
x2 = (Nid_mbsfn) + (((1+(Nid_mbsfn<<1))*(1 + ((l-1)<<2) + (7*(2+(sfn<<1)))))<<9); //cinit
|
||||||
|
|
||||||
//x2 = frame_parms->Ncp + (Nid_cell<<1) + (1+(Nid_cell<<1))*(1 + (3*l) + (7*(1+ns))); //cinit
|
//x2 = frame_parms->Ncp + (Nid_cell<<1) + (1+(Nid_cell<<1))*(1 + (3*l) + (7*(1+ns))); //cinit
|
||||||
//n = 0
|
//n = 0
|
||||||
|
|||||||
@@ -346,6 +346,13 @@ uint8_t generate_dci_top(uint8_t num_pdcch_symbols,
|
|||||||
y[0] = &yseq0[0];
|
y[0] = &yseq0[0];
|
||||||
y[1] = &yseq1[0];
|
y[1] = &yseq1[0];
|
||||||
|
|
||||||
|
#if BASIC_SIMULATOR
|
||||||
|
/* this should be the normal case
|
||||||
|
* but it has to be validated for all the various cases
|
||||||
|
* so let's just do it for the basic simulator
|
||||||
|
*/
|
||||||
|
memset(e, 2, DCI_BITS_MAX);
|
||||||
|
#else
|
||||||
#if 1
|
#if 1
|
||||||
// reset all bits to <NIL>, here we set <NIL> elements as 2
|
// reset all bits to <NIL>, here we set <NIL> elements as 2
|
||||||
// memset(e, 2, DCI_BITS_MAX);
|
// memset(e, 2, DCI_BITS_MAX);
|
||||||
@@ -358,6 +365,7 @@ uint8_t generate_dci_top(uint8_t num_pdcch_symbols,
|
|||||||
* (not sure about this, to be checked somehow)
|
* (not sure about this, to be checked somehow)
|
||||||
*/
|
*/
|
||||||
//memset(e, 0, DCI_BITS_MAX);
|
//memset(e, 0, DCI_BITS_MAX);
|
||||||
|
#endif /* BASIC_SIMULATOR */
|
||||||
|
|
||||||
e_ptr = e;
|
e_ptr = e;
|
||||||
|
|
||||||
|
|||||||
@@ -220,7 +220,7 @@ void fill_pdcch_order(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,DCI_ALLOC_t *dci_a
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_I(PHY,"%d.%d: DCI 1A: rnti %x, PDCCH order to do PRACH\n",
|
LOG_T(PHY,"%d.%d: DCI 1A: rnti %x, PDCCH order to do PRACH\n",
|
||||||
proc->frame_tx, proc->subframe_tx, rel8->rnti);
|
proc->frame_tx, proc->subframe_tx, rel8->rnti);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1791,7 +1791,7 @@ void fill_dci0(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t *proc,
|
|||||||
|
|
||||||
#ifdef T_TRACER
|
#ifdef T_TRACER
|
||||||
T(T_ENB_PHY_ULSCH_UE_DCI, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe),
|
T(T_ENB_PHY_ULSCH_UE_DCI, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe),
|
||||||
T_INT(pdu->dci_pdu_rel8.rnti), T_INT(((frame*10+subframe+4) % 8) /* TODO: correct harq pid */),
|
T_INT(pdu->dci_pdu_rel8.rnti), T_INT(pdu->dci_pdu_rel8.harq_pid),
|
||||||
T_INT(mcs), T_INT(-1 /* TODO: remove round? */),
|
T_INT(mcs), T_INT(-1 /* TODO: remove round? */),
|
||||||
T_INT(pdu->dci_pdu_rel8.resource_block_start),
|
T_INT(pdu->dci_pdu_rel8.resource_block_start),
|
||||||
T_INT(pdu->dci_pdu_rel8.number_of_resource_block),
|
T_INT(pdu->dci_pdu_rel8.number_of_resource_block),
|
||||||
|
|||||||
@@ -165,10 +165,19 @@ int allocate_REs_in_RB_no_pilots_QPSK_siso(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
uint32_t tti_offset;
|
uint32_t tti_offset;
|
||||||
uint8_t re;
|
uint8_t re;
|
||||||
uint8_t *x0p;
|
uint8_t *x0p;
|
||||||
|
uint8_t first_re,last_re;
|
||||||
|
|
||||||
|
last_re=12;
|
||||||
|
first_re=0;
|
||||||
|
if (skip_half==1)
|
||||||
|
last_re=6;
|
||||||
|
else if (skip_half==2)
|
||||||
|
first_re=6;
|
||||||
|
re=first_re;
|
||||||
|
|
||||||
if (skip_dc == 0) {
|
if (skip_dc == 0) {
|
||||||
for (x0p=&x0[*jj],tti_offset=symbol_offset+re_offset,re=0;
|
for (x0p=&x0[*jj],tti_offset=symbol_offset+re_offset+re;
|
||||||
re<12;
|
re<last_re;
|
||||||
re++,x0p+=2,tti_offset++) {
|
re++,x0p+=2,tti_offset++) {
|
||||||
|
|
||||||
qpsk_table_offset_re=x0p[0];
|
qpsk_table_offset_re=x0p[0];
|
||||||
@@ -199,8 +208,16 @@ int allocate_REs_in_RB_no_pilots_QPSK_siso(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
((int16_t *)&txdataF[0][tti_offset])[1]=qam_table_s0[qpsk_table_offset_im];
|
((int16_t *)&txdataF[0][tti_offset])[1]=qam_table_s0[qpsk_table_offset_im];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*re_allocated = *re_allocated + 12;
|
if(skip_half!=0)
|
||||||
*jj=*jj + 24;
|
{
|
||||||
|
*re_allocated = *re_allocated + 6;
|
||||||
|
*jj=*jj + 12;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*re_allocated = *re_allocated + 12;
|
||||||
|
*jj=*jj + 24;
|
||||||
|
}
|
||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
@@ -238,12 +255,20 @@ int allocate_REs_in_RB_pilots_QPSK_siso(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
uint32_t tti_offset;
|
uint32_t tti_offset;
|
||||||
uint8_t re;
|
uint8_t re;
|
||||||
uint8_t *x0p;
|
uint8_t *x0p;
|
||||||
|
uint8_t first_re,last_re;
|
||||||
|
|
||||||
|
last_re=12;
|
||||||
|
first_re=0;
|
||||||
|
if (skip_half==1)
|
||||||
|
last_re=6;
|
||||||
|
else if (skip_half==2)
|
||||||
|
first_re=6;
|
||||||
|
re=first_re+P1_SHIFT[0];
|
||||||
|
|
||||||
if (skip_dc == 0) {
|
if (skip_dc == 0) {
|
||||||
// printf("pilots: P1_SHIFT[0] %d\n",P1_SHIFT[0]);
|
// printf("pilots: P1_SHIFT[0] %d\n",P1_SHIFT[0]);
|
||||||
for (x0p=&x0[*jj],tti_offset=symbol_offset+re_offset+P1_SHIFT[0],re=P1_SHIFT[0];
|
for (x0p=&x0[*jj],tti_offset=symbol_offset+re_offset+re;
|
||||||
re<12;
|
re<last_re;
|
||||||
x0p+=2) {
|
x0p+=2) {
|
||||||
|
|
||||||
qpsk_table_offset_re=x0p[0];
|
qpsk_table_offset_re=x0p[0];
|
||||||
@@ -260,8 +285,8 @@ int allocate_REs_in_RB_pilots_QPSK_siso(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
re<6;
|
re<6;
|
||||||
x0p+=2) {
|
x0p+=2) {
|
||||||
|
|
||||||
qpsk_table_offset_re+=x0p[0];
|
qpsk_table_offset_re=x0p[0];
|
||||||
qpsk_table_offset_im+=x0p[1];
|
qpsk_table_offset_im=x0p[1];
|
||||||
((int16_t *)&txdataF[0][tti_offset])[0]=qam_table_s0[qpsk_table_offset_re];
|
((int16_t *)&txdataF[0][tti_offset])[0]=qam_table_s0[qpsk_table_offset_re];
|
||||||
((int16_t *)&txdataF[0][tti_offset])[1]=qam_table_s0[qpsk_table_offset_im];
|
((int16_t *)&txdataF[0][tti_offset])[1]=qam_table_s0[qpsk_table_offset_im];
|
||||||
tti_offset+=P1_SHIFT[re+1];
|
tti_offset+=P1_SHIFT[re+1];
|
||||||
@@ -272,16 +297,24 @@ int allocate_REs_in_RB_pilots_QPSK_siso(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
re<12;
|
re<12;
|
||||||
x0p+=2) {
|
x0p+=2) {
|
||||||
|
|
||||||
qpsk_table_offset_re+=x0p[0];
|
qpsk_table_offset_re=x0p[0];
|
||||||
qpsk_table_offset_im+=x0p[1];
|
qpsk_table_offset_im=x0p[1];
|
||||||
((int16_t *)&txdataF[0][tti_offset])[0]=qam_table_s0[qpsk_table_offset_re];
|
((int16_t *)&txdataF[0][tti_offset])[0]=qam_table_s0[qpsk_table_offset_re];
|
||||||
((int16_t *)&txdataF[0][tti_offset])[1]=qam_table_s0[qpsk_table_offset_im];
|
((int16_t *)&txdataF[0][tti_offset])[1]=qam_table_s0[qpsk_table_offset_im];
|
||||||
tti_offset+=P1_SHIFT[re+1];
|
tti_offset+=P1_SHIFT[re+1];
|
||||||
re+=P1_SHIFT[re+1];
|
re+=P1_SHIFT[re+1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*re_allocated = *re_allocated + 10;
|
if(skip_half!=0)
|
||||||
*jj=*jj + 20;
|
{
|
||||||
|
*re_allocated = *re_allocated + 5;
|
||||||
|
*jj=*jj + 10;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*re_allocated = *re_allocated + 10;
|
||||||
|
*jj=*jj + 20;
|
||||||
|
}
|
||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
@@ -317,10 +350,19 @@ int allocate_REs_in_RB_no_pilots_16QAM_siso(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
uint32_t tti_offset;
|
uint32_t tti_offset;
|
||||||
uint8_t re;
|
uint8_t re;
|
||||||
uint8_t *x0p;
|
uint8_t *x0p;
|
||||||
|
uint8_t first_re,last_re;
|
||||||
|
|
||||||
|
last_re=12;
|
||||||
|
first_re=0;
|
||||||
|
if (skip_half==1)
|
||||||
|
last_re=6;
|
||||||
|
else if (skip_half==2)
|
||||||
|
first_re=6;
|
||||||
|
re=first_re;
|
||||||
|
|
||||||
if (skip_dc == 0) {
|
if (skip_dc == 0) {
|
||||||
for (x0p=&x0[*jj],tti_offset=symbol_offset+re_offset,re=0;
|
for (x0p=&x0[*jj],tti_offset=symbol_offset+re_offset+re;
|
||||||
re<12;
|
re<last_re;
|
||||||
re++,x0p+=4,tti_offset++) {
|
re++,x0p+=4,tti_offset++) {
|
||||||
|
|
||||||
qam16_table_offset_re=TWO[x0p[0]];
|
qam16_table_offset_re=TWO[x0p[0]];
|
||||||
@@ -357,8 +399,16 @@ int allocate_REs_in_RB_no_pilots_16QAM_siso(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
((int16_t *)&txdataF[0][tti_offset])[1]=qam_table_s0[qam16_table_offset_im];
|
((int16_t *)&txdataF[0][tti_offset])[1]=qam_table_s0[qam16_table_offset_im];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*re_allocated = *re_allocated + 12;
|
if(skip_half!=0)
|
||||||
*jj=*jj + 48;
|
{
|
||||||
|
*re_allocated = *re_allocated + 6;
|
||||||
|
*jj=*jj + 24;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*re_allocated = *re_allocated + 12;
|
||||||
|
*jj=*jj + 48;
|
||||||
|
}
|
||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
@@ -396,12 +446,21 @@ int allocate_REs_in_RB_pilots_16QAM_siso(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
uint32_t tti_offset;
|
uint32_t tti_offset;
|
||||||
uint8_t re;
|
uint8_t re;
|
||||||
uint8_t *x0p;
|
uint8_t *x0p;
|
||||||
|
uint8_t first_re,last_re;
|
||||||
|
|
||||||
|
last_re=12;
|
||||||
|
first_re=0;
|
||||||
|
if (skip_half==1)
|
||||||
|
last_re=6;
|
||||||
|
else if (skip_half==2)
|
||||||
|
first_re=6;
|
||||||
|
re=first_re+P1_SHIFT[0];
|
||||||
|
|
||||||
|
|
||||||
if (skip_dc == 0) {
|
if (skip_dc == 0) {
|
||||||
// LOG_I(PHY,"pilots: P1_SHIFT[0] %d\n",P1_SHIFT[0]);
|
// LOG_I(PHY,"pilots: P1_SHIFT[0] %d\n",P1_SHIFT[0]);
|
||||||
for (x0p=&x0[*jj],tti_offset=symbol_offset+re_offset+P1_SHIFT[0],re=P1_SHIFT[0];
|
for (x0p=&x0[*jj],tti_offset=symbol_offset+re_offset+re;
|
||||||
re<12;
|
re<last_re;
|
||||||
x0p+=4) {
|
x0p+=4) {
|
||||||
|
|
||||||
qam16_table_offset_re=TWO[x0p[0]];
|
qam16_table_offset_re=TWO[x0p[0]];
|
||||||
@@ -444,8 +503,16 @@ int allocate_REs_in_RB_pilots_16QAM_siso(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
re+=P1_SHIFT[re+1];
|
re+=P1_SHIFT[re+1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*re_allocated = *re_allocated + 10;
|
if(skip_half!=0)
|
||||||
*jj=*jj + 40;
|
{
|
||||||
|
*re_allocated = *re_allocated + 5;
|
||||||
|
*jj=*jj + 20;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*re_allocated = *re_allocated + 10;
|
||||||
|
*jj=*jj + 40;
|
||||||
|
}
|
||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
@@ -482,10 +549,16 @@ int allocate_REs_in_RB_no_pilots_64QAM_siso(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
uint32_t tti_offset;
|
uint32_t tti_offset;
|
||||||
uint8_t re;
|
uint8_t re;
|
||||||
uint8_t *x0p;
|
uint8_t *x0p;
|
||||||
|
uint8_t first_re;
|
||||||
|
|
||||||
|
first_re=0;
|
||||||
|
if (skip_half==2)
|
||||||
|
first_re=6;
|
||||||
|
re=first_re;
|
||||||
|
|
||||||
if (skip_dc == 0) {
|
if (skip_dc == 0) {
|
||||||
|
|
||||||
x0p=&x0[*jj],tti_offset=symbol_offset+re_offset;
|
x0p=&x0[*jj],tti_offset=symbol_offset+re_offset+re;
|
||||||
|
|
||||||
/* for (x0p=&x0[*jj],tti_offset=symbol_offset+re_offset,re=0;
|
/* for (x0p=&x0[*jj],tti_offset=symbol_offset+re_offset,re=0;
|
||||||
re<12;
|
re<12;
|
||||||
@@ -521,36 +594,38 @@ int allocate_REs_in_RB_no_pilots_64QAM_siso(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
((int16_t *)&txdataF[0][tti_offset])[10]=qam_table_s0[qam64_table_offset_re];
|
((int16_t *)&txdataF[0][tti_offset])[10]=qam_table_s0[qam64_table_offset_re];
|
||||||
((int16_t *)&txdataF[0][tti_offset])[11]=qam_table_s0[qam64_table_offset_im];
|
((int16_t *)&txdataF[0][tti_offset])[11]=qam_table_s0[qam64_table_offset_im];
|
||||||
|
|
||||||
qam64_table_offset_re=(x0p[36]<<2)|(x0p[38]<<1)|x0p[40];
|
if(skip_half==0)
|
||||||
qam64_table_offset_im=(x0p[37]<<2)|(x0p[39]<<1)|x0p[41];
|
{
|
||||||
((int16_t *)&txdataF[0][tti_offset])[12]=qam_table_s0[qam64_table_offset_re];
|
qam64_table_offset_re=(x0p[36]<<2)|(x0p[38]<<1)|x0p[40];
|
||||||
((int16_t *)&txdataF[0][tti_offset])[13]=qam_table_s0[qam64_table_offset_im];
|
qam64_table_offset_im=(x0p[37]<<2)|(x0p[39]<<1)|x0p[41];
|
||||||
|
((int16_t *)&txdataF[0][tti_offset])[12]=qam_table_s0[qam64_table_offset_re];
|
||||||
|
((int16_t *)&txdataF[0][tti_offset])[13]=qam_table_s0[qam64_table_offset_im];
|
||||||
|
|
||||||
qam64_table_offset_re=(x0p[42]<<2)|(x0p[44]<<1)|x0p[46];
|
qam64_table_offset_re=(x0p[42]<<2)|(x0p[44]<<1)|x0p[46];
|
||||||
qam64_table_offset_im=(x0p[43]<<2)|(x0p[45]<<1)|x0p[47];
|
qam64_table_offset_im=(x0p[43]<<2)|(x0p[45]<<1)|x0p[47];
|
||||||
((int16_t *)&txdataF[0][tti_offset])[14]=qam_table_s0[qam64_table_offset_re];
|
((int16_t *)&txdataF[0][tti_offset])[14]=qam_table_s0[qam64_table_offset_re];
|
||||||
((int16_t *)&txdataF[0][tti_offset])[15]=qam_table_s0[qam64_table_offset_im];
|
((int16_t *)&txdataF[0][tti_offset])[15]=qam_table_s0[qam64_table_offset_im];
|
||||||
|
|
||||||
qam64_table_offset_re=(x0p[48]<<2)|(x0p[50]<<1)|x0p[52];
|
qam64_table_offset_re=(x0p[48]<<2)|(x0p[50]<<1)|x0p[52];
|
||||||
qam64_table_offset_im=(x0p[49]<<2)|(x0p[51]<<1)|x0p[53];
|
qam64_table_offset_im=(x0p[49]<<2)|(x0p[51]<<1)|x0p[53];
|
||||||
((int16_t *)&txdataF[0][tti_offset])[16]=qam_table_s0[qam64_table_offset_re];
|
((int16_t *)&txdataF[0][tti_offset])[16]=qam_table_s0[qam64_table_offset_re];
|
||||||
((int16_t *)&txdataF[0][tti_offset])[17]=qam_table_s0[qam64_table_offset_im];
|
((int16_t *)&txdataF[0][tti_offset])[17]=qam_table_s0[qam64_table_offset_im];
|
||||||
|
|
||||||
qam64_table_offset_re=(x0p[54]<<2)|(x0p[56]<<1)|x0p[58];
|
qam64_table_offset_re=(x0p[54]<<2)|(x0p[56]<<1)|x0p[58];
|
||||||
qam64_table_offset_im=(x0p[55]<<2)|(x0p[57]<<1)|x0p[59];
|
qam64_table_offset_im=(x0p[55]<<2)|(x0p[57]<<1)|x0p[59];
|
||||||
((int16_t *)&txdataF[0][tti_offset])[18]=qam_table_s0[qam64_table_offset_re];
|
((int16_t *)&txdataF[0][tti_offset])[18]=qam_table_s0[qam64_table_offset_re];
|
||||||
((int16_t *)&txdataF[0][tti_offset])[19]=qam_table_s0[qam64_table_offset_im];
|
((int16_t *)&txdataF[0][tti_offset])[19]=qam_table_s0[qam64_table_offset_im];
|
||||||
|
|
||||||
qam64_table_offset_re=(x0p[60]<<2)|(x0p[62]<<1)|x0p[64];
|
qam64_table_offset_re=(x0p[60]<<2)|(x0p[62]<<1)|x0p[64];
|
||||||
qam64_table_offset_im=(x0p[61]<<2)|(x0p[63]<<1)|x0p[65];
|
qam64_table_offset_im=(x0p[61]<<2)|(x0p[63]<<1)|x0p[65];
|
||||||
((int16_t *)&txdataF[0][tti_offset])[20]=qam_table_s0[qam64_table_offset_re];
|
((int16_t *)&txdataF[0][tti_offset])[20]=qam_table_s0[qam64_table_offset_re];
|
||||||
((int16_t *)&txdataF[0][tti_offset])[21]=qam_table_s0[qam64_table_offset_im];
|
((int16_t *)&txdataF[0][tti_offset])[21]=qam_table_s0[qam64_table_offset_im];
|
||||||
|
|
||||||
qam64_table_offset_re=(x0p[66]<<2)|(x0p[68]<<1)|x0p[70];
|
|
||||||
qam64_table_offset_im=(x0p[67]<<2)|(x0p[69]<<1)|x0p[71];
|
|
||||||
((int16_t *)&txdataF[0][tti_offset])[22]=qam_table_s0[qam64_table_offset_re];
|
|
||||||
((int16_t *)&txdataF[0][tti_offset])[23]=qam_table_s0[qam64_table_offset_im];
|
|
||||||
|
|
||||||
|
qam64_table_offset_re=(x0p[66]<<2)|(x0p[68]<<1)|x0p[70];
|
||||||
|
qam64_table_offset_im=(x0p[67]<<2)|(x0p[69]<<1)|x0p[71];
|
||||||
|
((int16_t *)&txdataF[0][tti_offset])[22]=qam_table_s0[qam64_table_offset_re];
|
||||||
|
((int16_t *)&txdataF[0][tti_offset])[23]=qam_table_s0[qam64_table_offset_im];
|
||||||
|
}
|
||||||
|
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
@@ -584,8 +659,16 @@ int allocate_REs_in_RB_no_pilots_64QAM_siso(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
*re_allocated = *re_allocated + 12;
|
if(skip_half!=0)
|
||||||
*jj=*jj + 72;
|
{
|
||||||
|
*re_allocated = *re_allocated + 6;
|
||||||
|
*jj=*jj + 36;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*re_allocated = *re_allocated + 12;
|
||||||
|
*jj=*jj + 72;
|
||||||
|
}
|
||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
@@ -623,12 +706,21 @@ int allocate_REs_in_RB_pilots_64QAM_siso(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
uint32_t tti_offset;
|
uint32_t tti_offset;
|
||||||
uint8_t re;
|
uint8_t re;
|
||||||
uint8_t *x0p;
|
uint8_t *x0p;
|
||||||
|
uint8_t first_re,last_re;
|
||||||
|
|
||||||
|
last_re=12;
|
||||||
|
first_re=0;
|
||||||
|
if (skip_half==1)
|
||||||
|
last_re=6;
|
||||||
|
else if (skip_half==2)
|
||||||
|
first_re=6;
|
||||||
|
re=first_re+P1_SHIFT[0];
|
||||||
|
|
||||||
|
|
||||||
if (skip_dc == 0) {
|
if (skip_dc == 0) {
|
||||||
// LOG_I(PHY,"pilots: P1_SHIFT[0] %d\n",P1_SHIFT[0]);
|
// LOG_I(PHY,"pilots: P1_SHIFT[0] %d\n",P1_SHIFT[0]);
|
||||||
for (x0p=&x0[*jj],tti_offset=symbol_offset+re_offset+P1_SHIFT[0],re=P1_SHIFT[0];
|
for (x0p=&x0[*jj],tti_offset=symbol_offset+re_offset+re;
|
||||||
re<12;
|
re<last_re;
|
||||||
x0p+=6) {
|
x0p+=6) {
|
||||||
|
|
||||||
qam64_table_offset_re=FOUR[x0p[0]];
|
qam64_table_offset_re=FOUR[x0p[0]];
|
||||||
@@ -677,8 +769,16 @@ int allocate_REs_in_RB_pilots_64QAM_siso(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
re+=P1_SHIFT[re+1];
|
re+=P1_SHIFT[re+1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*re_allocated = *re_allocated + 10;
|
if(skip_half!=0)
|
||||||
*jj=*jj + 60;
|
{
|
||||||
|
*re_allocated = *re_allocated + 5;
|
||||||
|
*jj=*jj + 30;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*re_allocated = *re_allocated + 10;
|
||||||
|
*jj=*jj + 60;
|
||||||
|
}
|
||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
@@ -2423,7 +2523,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
* with above code that needs to be analyzed and fixed. In the
|
* with above code that needs to be analyzed and fixed. In the
|
||||||
* meantime, let's use the generic function.
|
* meantime, let's use the generic function.
|
||||||
*/
|
*/
|
||||||
allocate_REs = allocate_REs_in_RB;
|
//allocate_REs = allocate_REs_in_RB;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -2432,7 +2532,8 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
* previous version. Some more work/validation is needed before
|
* previous version. Some more work/validation is needed before
|
||||||
* we switch to the new version.
|
* we switch to the new version.
|
||||||
*/
|
*/
|
||||||
allocate_REs = allocate_REs_in_RB;
|
//if (frame_parms->N_RB_DL==25)
|
||||||
|
//allocate_REs = allocate_REs_in_RB;
|
||||||
|
|
||||||
switch (mod_order1) {
|
switch (mod_order1) {
|
||||||
case 2:
|
case 2:
|
||||||
@@ -2486,8 +2587,6 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
skip_half = check_skiphalf(rb,subframe_offset,frame_parms,l,nsymb);
|
skip_half = check_skiphalf(rb,subframe_offset,frame_parms,l,nsymb);
|
||||||
skip_dc = check_skip_dc(rb,frame_parms);
|
skip_dc = check_skip_dc(rb,frame_parms);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (dlsch0) {
|
if (dlsch0) {
|
||||||
if (dlsch0_harq->Nlayers>1) {
|
if (dlsch0_harq->Nlayers>1) {
|
||||||
LOG_E(PHY,"Nlayers %d: re_offset %d, symbol %d offset %d\n",dlsch0_harq->Nlayers,re_offset,l,symbol_offset);
|
LOG_E(PHY,"Nlayers %d: re_offset %d, symbol %d offset %d\n",dlsch0_harq->Nlayers,re_offset,l,symbol_offset);
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ int is_pmch_subframe(uint32_t frame, int subframe, LTE_DL_FRAME_PARMS *frame_par
|
|||||||
|
|
||||||
uint32_t period;
|
uint32_t period;
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
|
uint8_t j;
|
||||||
|
|
||||||
// LOG_D(PHY,"is_pmch_subframe: frame %d, subframe %d, num_MBSFN_config %d\n",
|
// LOG_D(PHY,"is_pmch_subframe: frame %d, subframe %d, num_MBSFN_config %d\n",
|
||||||
// frame,subframe,frame_parms->num_MBSFN_config);
|
// frame,subframe,frame_parms->num_MBSFN_config);
|
||||||
@@ -34,8 +35,8 @@ int is_pmch_subframe(uint32_t frame, int subframe, LTE_DL_FRAME_PARMS *frame_par
|
|||||||
for (i=0; i<frame_parms->num_MBSFN_config; i++) { // we have at least one MBSFN configuration
|
for (i=0; i<frame_parms->num_MBSFN_config; i++) { // we have at least one MBSFN configuration
|
||||||
period = 1<<frame_parms->MBSFN_config[i].radioframeAllocationPeriod;
|
period = 1<<frame_parms->MBSFN_config[i].radioframeAllocationPeriod;
|
||||||
|
|
||||||
if ((frame % period) == frame_parms->MBSFN_config[i].radioframeAllocationOffset) {
|
if (frame_parms->MBSFN_config[i].fourFrames_flag == 0) {
|
||||||
if (frame_parms->MBSFN_config[i].fourFrames_flag == 0) {
|
if ((frame % period) == frame_parms->MBSFN_config[i].radioframeAllocationOffset) {
|
||||||
if (frame_parms->frame_type == FDD) {
|
if (frame_parms->frame_type == FDD) {
|
||||||
switch (subframe) {
|
switch (subframe) {
|
||||||
|
|
||||||
@@ -108,9 +109,96 @@ int is_pmch_subframe(uint32_t frame, int subframe, LTE_DL_FRAME_PARMS *frame_par
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} else { // handle 4 frames case
|
} else { // handle 4 frames case
|
||||||
|
|
||||||
|
for(j=0;j<4;j++) {
|
||||||
|
if ((frame % period) == (frame_parms->MBSFN_config[i].radioframeAllocationOffset + j)) {
|
||||||
|
if (frame_parms->frame_type == FDD) {
|
||||||
|
switch (subframe) {
|
||||||
|
case 1:
|
||||||
|
if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig) & (0x800000>>(j*6))) > 0) {
|
||||||
|
//LOG_E(PHY,"SubframeConfig<<6(%x),MBSFN_FDD_SF1(%x)\n",frame_parms->MBSFN_config[i].mbsfn_SubframeConfig,0x800000>>(j*6));
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig) & (0x400000>>(j*6))) > 0) {
|
||||||
|
//LOG_E(PHY,"SubframeConfig<<6(%x),MBSFN_FDD_SF1(%x)\n",frame_parms->MBSFN_config[i].mbsfn_SubframeConfig,0x400000>>(j*6));
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig) & (0x200000>>(j*6))) > 0) {
|
||||||
|
//LOG_E(PHY,"SubframeConfig<<6(%x),MBSFN_FDD_SF1(%x)\n",frame_parms->MBSFN_config[i].mbsfn_SubframeConfig,0x200000>>(j*6));
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 6:
|
||||||
|
if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig) & (0x100000>>(j*6))) > 0) {
|
||||||
|
//LOG_E(PHY,"SubframeConfig<<6(%x),MBSFN_FDD_SF1(%x)\n",frame_parms->MBSFN_config[i].mbsfn_SubframeConfig,0x100000>>(j*6));
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 7:
|
||||||
|
if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig) & (0x80000>>(j*6))) > 0) {
|
||||||
|
//LOG_E(PHY,"SubframeConfig<<6(%x),MBSFN_FDD_SF1(%x)\n",frame_parms->MBSFN_config[i].mbsfn_SubframeConfig,0x80000>>(j*6));
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 8:
|
||||||
|
if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig) & (0x40000>>(j*6))) > 0) {
|
||||||
|
//LOG_E(PHY,"SubframeConfig<<6(%x),MBSFN_FDD_SF1(%x)\n",frame_parms->MBSFN_config[i].mbsfn_SubframeConfig,0x40000>>(j*6));
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
switch (subframe) {
|
||||||
|
case 3:
|
||||||
|
if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig>>j*6) & MBSFN_TDD_SF3) > 0)
|
||||||
|
return(1);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 4:
|
||||||
|
if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig>>j*6) & MBSFN_TDD_SF4) > 0)
|
||||||
|
return(1);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 7:
|
||||||
|
if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig>>j*6) & MBSFN_TDD_SF7) > 0)
|
||||||
|
return(1);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 8:
|
||||||
|
if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig>>j*6) & MBSFN_TDD_SF8) > 0)
|
||||||
|
return(1);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 9:
|
||||||
|
if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig>>j*6) & MBSFN_TDD_SF9) > 0)
|
||||||
|
return(1);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+103
-103
@@ -153,25 +153,24 @@ void rx_prach0(PHY_VARS_eNB *eNB,
|
|||||||
subframe = eNB->proc.subframe_prach_br;
|
subframe = eNB->proc.subframe_prach_br;
|
||||||
prachF = eNB->prach_vars_br.prachF;
|
prachF = eNB->prach_vars_br.prachF;
|
||||||
rxsigF = eNB->prach_vars_br.rxsigF[ce_level];
|
rxsigF = eNB->prach_vars_br.rxsigF[ce_level];
|
||||||
LOG_DEBUG_BEGIN(PRACH)
|
if (LOG_DEBUGFLAG(PRACH)){
|
||||||
if (((ru->proc.frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (eNB) : running rx_prach (br_flag %d, ce_level %d) for frame %d subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d, rootSequenceIndex %d, repetition number %d,numRepetitionsPrePreambleAttempt %d\n",
|
if (((ru->proc.frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (eNB) : running rx_prach (br_flag %d, ce_level %d) for frame %d subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d, rootSequenceIndex %d, repetition number %d,numRepetitionsPrePreambleAttempt %d\n",
|
||||||
br_flag,ce_level,ru->proc.frame_prach,subframe,
|
br_flag,ce_level,ru->proc.frame_prach,subframe,
|
||||||
fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[ce_level],
|
fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[ce_level],
|
||||||
prach_ConfigIndex,rootSequenceIndex,
|
prach_ConfigIndex,rootSequenceIndex,
|
||||||
eNB->prach_vars_br.repetition_number[ce_level],
|
eNB->prach_vars_br.repetition_number[ce_level],
|
||||||
fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[ce_level]);
|
fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[ce_level]);
|
||||||
LOG_DEBUG_END
|
}
|
||||||
}
|
} else
|
||||||
else
|
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
prach_ifftp = eNB->prach_vars.prach_ifft[0];
|
prach_ifftp = eNB->prach_vars.prach_ifft[0];
|
||||||
subframe = eNB->proc.subframe_prach;
|
subframe = eNB->proc.subframe_prach;
|
||||||
prachF = eNB->prach_vars.prachF;
|
prachF = eNB->prach_vars.prachF;
|
||||||
rxsigF = eNB->prach_vars.rxsigF[0];
|
rxsigF = eNB->prach_vars.rxsigF[0];
|
||||||
LOG_DEBUG_BEGIN(PRACH)
|
if (LOG_DEBUGFLAG(PRACH)){
|
||||||
if (((ru->proc.frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (eNB) : running rx_prach for subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d , rootSequenceIndex %d\n", subframe,fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset,prach_ConfigIndex,rootSequenceIndex);
|
if (((ru->proc.frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (eNB) : running rx_prach for subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d , rootSequenceIndex %d\n", subframe,fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset,prach_ConfigIndex,rootSequenceIndex);
|
||||||
LOG_DEBUG_END
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -179,20 +178,19 @@ LOG_DEBUG_END
|
|||||||
if (br_flag == 1) {
|
if (br_flag == 1) {
|
||||||
subframe = ru->proc.subframe_prach_br;
|
subframe = ru->proc.subframe_prach_br;
|
||||||
rxsigF = ru->prach_rxsigF_br[ce_level];
|
rxsigF = ru->prach_rxsigF_br[ce_level];
|
||||||
LOG_DEBUG_BEGIN(PRACH)
|
if (LOG_DEBUGFLAG(PRACH)){
|
||||||
if (((ru->proc.frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (RU) : running rx_prach (br_flag %d, ce_level %d) for frame %d subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d\n",
|
if (((ru->proc.frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (RU) : running rx_prach (br_flag %d, ce_level %d) for frame %d subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d\n",
|
||||||
br_flag,ce_level,ru->proc.frame_prach,subframe,fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[ce_level],prach_ConfigIndex);
|
br_flag,ce_level,ru->proc.frame_prach,subframe,fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[ce_level],prach_ConfigIndex);
|
||||||
LOG_DEBUG_END
|
}
|
||||||
}
|
} else
|
||||||
else
|
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
subframe = ru->proc.subframe_prach;
|
subframe = ru->proc.subframe_prach;
|
||||||
rxsigF = ru->prach_rxsigF;
|
rxsigF = ru->prach_rxsigF;
|
||||||
LOG_DEBUG_BEGIN(PRACH)
|
if (LOG_DEBUGFLAG(PRACH)){
|
||||||
if (((ru->proc.frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (RU) : running rx_prach for subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d\n",
|
if (((ru->proc.frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (RU) : running rx_prach for subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d\n",
|
||||||
subframe,fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset,prach_ConfigIndex);
|
subframe,fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset,prach_ConfigIndex);
|
||||||
LOG_DEBUG_END
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -204,27 +202,25 @@ LOG_DEBUG_END
|
|||||||
// DJP - indexing below in subframe zero takes us off the beginning of the array???
|
// DJP - indexing below in subframe zero takes us off the beginning of the array???
|
||||||
prach[aa] = (int16_t*)&ru->common.rxdata[aa][(subframe*fp->samples_per_tti)-ru->N_TA_offset];
|
prach[aa] = (int16_t*)&ru->common.rxdata[aa][(subframe*fp->samples_per_tti)-ru->N_TA_offset];
|
||||||
|
|
||||||
LOG_M_BEGIN(PRACH)
|
if (LOG_DUMPFLAG(PRACH)){
|
||||||
int32_t en0=signal_energy((int32_t*)prach[aa],fp->samples_per_tti);
|
int32_t en0=signal_energy((int32_t*)prach[aa],fp->samples_per_tti);
|
||||||
int8_t dbEn0 = dB_fixed(en0);
|
int8_t dbEn0 = dB_fixed(en0);
|
||||||
int8_t rach_dBm = dbEn0 - ru->rx_total_gain_dB;
|
int8_t rach_dBm = dbEn0 - ru->rx_total_gain_dB;
|
||||||
char buffer[80];
|
char buffer[80];
|
||||||
if (dbEn0>32 && prach[0]!= NULL)
|
if (dbEn0>32 && prach[0]!= NULL) {
|
||||||
{
|
static int counter=0;
|
||||||
static int counter=0;
|
sprintf(buffer, "%s%d", "/tmp/prach_rx",counter);
|
||||||
sprintf(buffer, "%s%d", "/tmp/prach_rx",counter);
|
LOG_M(buffer,"prach_rx",prach[0],fp->samples_per_tti,1,13);
|
||||||
LOG_M(buffer,"prach_rx",prach[0],fp->samples_per_tti,1,13);
|
}
|
||||||
|
if (dB_fixed(en0)>32) {
|
||||||
|
sprintf(buffer, "rach_dBm:%d",rach_dBm);
|
||||||
|
if (prach[0]!= NULL) LOG_M("prach_rx","prach_rx",prach[0],fp->samples_per_tti,1,1);
|
||||||
|
LOG_I(PHY,"RU %d, br_flag %d ce_level %d frame %d subframe %d per_tti:%d prach:%p (energy %d) TA:%d %s rxdata:%p index:%d\n",
|
||||||
|
ru->idx,br_flag,ce_level,ru->proc.frame_prach,subframe,fp->samples_per_tti,
|
||||||
|
prach[aa],dbEn0,ru->N_TA_offset,buffer,ru->common.rxdata[aa],
|
||||||
|
(subframe*fp->samples_per_tti)-ru->N_TA_offset);
|
||||||
}
|
}
|
||||||
if (dB_fixed(en0)>32)
|
}
|
||||||
{
|
|
||||||
sprintf(buffer, "rach_dBm:%d",rach_dBm);
|
|
||||||
if (prach[0]!= NULL) LOG_M("prach_rx","prach_rx",prach[0],fp->samples_per_tti,1,1);
|
|
||||||
LOG_I(PHY,"RU %d, br_flag %d ce_level %d frame %d subframe %d per_tti:%d prach:%p (energy %d) TA:%d %s rxdata:%p index:%d\n",
|
|
||||||
ru->idx,br_flag,ce_level,ru->proc.frame_prach,subframe,fp->samples_per_tti,
|
|
||||||
prach[aa],dbEn0,ru->N_TA_offset,buffer,ru->common.rxdata[aa],
|
|
||||||
(subframe*fp->samples_per_tti)-ru->N_TA_offset);
|
|
||||||
}
|
|
||||||
LOG_M_END
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -306,9 +302,9 @@ LOG_M_END
|
|||||||
if (((eNB!=NULL) && (ru->function != NGFI_RAU_IF4p5))||
|
if (((eNB!=NULL) && (ru->function != NGFI_RAU_IF4p5))||
|
||||||
((eNB==NULL) && (ru->function == NGFI_RRU_IF4p5))) { // compute the DFTs of the PRACH temporal resources
|
((eNB==NULL) && (ru->function == NGFI_RRU_IF4p5))) { // compute the DFTs of the PRACH temporal resources
|
||||||
// Do forward transform
|
// Do forward transform
|
||||||
LOG_DEBUG_BEGIN(PRACH)
|
if (LOG_DEBUGFLAG(PRACH)) {
|
||||||
LOG_D(PHY,"rx_prach: Doing FFT for N_RB_UL %d nb_rx:%d Ncp:%d\n",fp->N_RB_UL, nb_rx, Ncp);
|
LOG_D(PHY,"rx_prach: Doing FFT for N_RB_UL %d nb_rx:%d Ncp:%d\n",fp->N_RB_UL, nb_rx, Ncp);
|
||||||
LOG_DEBUG_END
|
}
|
||||||
for (aa=0; aa<nb_rx; aa++) {
|
for (aa=0; aa<nb_rx; aa++) {
|
||||||
AssertFatal(prach[aa]!=NULL,"prach[%d] is null\n",aa);
|
AssertFatal(prach[aa]!=NULL,"prach[%d] is null\n",aa);
|
||||||
prach2 = prach[aa] + (Ncp<<1);
|
prach2 = prach[aa] + (Ncp<<1);
|
||||||
@@ -439,10 +435,10 @@ LOG_DEBUG_END
|
|||||||
return;
|
return;
|
||||||
} else if (eNB!=NULL) {
|
} else if (eNB!=NULL) {
|
||||||
|
|
||||||
LOG_DEBUG_BEGIN(PRACH)
|
if ( LOG_DEBUGFLAG(PRACH)) {
|
||||||
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
|
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
|
||||||
if ((en > 60)&&(br_flag==1)) LOG_I(PHY,"PRACH (br_flag %d,ce_level %d, n_ra_prb %d, k %d): Frame %d, Subframe %d => %d dB\n",br_flag,ce_level,n_ra_prb,k,eNB->proc.frame_rx,eNB->proc.subframe_rx,en);
|
if ((en > 60)&&(br_flag==1)) LOG_I(PHY,"PRACH (br_flag %d,ce_level %d, n_ra_prb %d, k %d): Frame %d, Subframe %d => %d dB\n",br_flag,ce_level,n_ra_prb,k,eNB->proc.frame_rx,eNB->proc.subframe_rx,en);
|
||||||
LOG_DEBUG_END
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// in case of RAU and prach received rx_thread wakes up prach
|
// in case of RAU and prach received rx_thread wakes up prach
|
||||||
@@ -477,10 +473,10 @@ LOG_DEBUG_END
|
|||||||
*max_preamble_energy=0;
|
*max_preamble_energy=0;
|
||||||
for (preamble_index=0 ; preamble_index<64 ; preamble_index++) {
|
for (preamble_index=0 ; preamble_index<64 ; preamble_index++) {
|
||||||
|
|
||||||
LOG_DEBUG_BEGIN(PRACH)
|
if (LOG_DEBUGFLAG(PRACH)){
|
||||||
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
|
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
|
||||||
if (en>60) LOG_I(PHY,"frame %d, subframe %d : Trying preamble %d (br_flag %d)\n",ru->proc.frame_prach,subframe,preamble_index,br_flag);
|
if (en>60) LOG_I(PHY,"frame %d, subframe %d : Trying preamble %d (br_flag %d)\n",ru->proc.frame_prach,subframe,preamble_index,br_flag);
|
||||||
LOG_DEBUG_END
|
}
|
||||||
if (restricted_set == 0) {
|
if (restricted_set == 0) {
|
||||||
// This is the relative offset in the root sequence table (5.7.2-4 from 36.211) for the given preamble index
|
// This is the relative offset in the root sequence table (5.7.2-4 from 36.211) for the given preamble index
|
||||||
preamble_offset = ((NCS==0)? preamble_index : (preamble_index/(N_ZC/NCS)));
|
preamble_offset = ((NCS==0)? preamble_index : (preamble_index/(N_ZC/NCS)));
|
||||||
@@ -563,11 +559,11 @@ LOG_DEBUG_END
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Compute DFT of RX signal (conjugate input, results in conjugate output) for each new rootSequenceIndex
|
// Compute DFT of RX signal (conjugate input, results in conjugate output) for each new rootSequenceIndex
|
||||||
LOG_DEBUG_BEGIN(PRACH)
|
if (LOG_DEBUGFLAG(PRACH)) {
|
||||||
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
|
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
|
||||||
if (en>60) LOG_I(PHY,"frame %d, subframe %d : preamble index %d: offset %d, preamble shift %d (br_flag %d, en %d)\n",
|
if (en>60) LOG_I(PHY,"frame %d, subframe %d : preamble index %d: offset %d, preamble shift %d (br_flag %d, en %d)\n",
|
||||||
ru->proc.frame_prach,subframe,preamble_index,preamble_offset,preamble_shift,br_flag,en);
|
ru->proc.frame_prach,subframe,preamble_index,preamble_offset,preamble_shift,br_flag,en);
|
||||||
LOG_DEBUG_END
|
}
|
||||||
log2_ifft_size = 10;
|
log2_ifft_size = 10;
|
||||||
fft_size = 6144;
|
fft_size = 6144;
|
||||||
|
|
||||||
@@ -589,13 +585,13 @@ LOG_DEBUG_END
|
|||||||
}
|
}
|
||||||
|
|
||||||
memset(prachF, 0, sizeof(int16_t)*2*1024 );
|
memset(prachF, 0, sizeof(int16_t)*2*1024 );
|
||||||
LOG_M_BEGIN(PRACH)
|
if (LOG_DUMPFLAG(PRACH)) {
|
||||||
if (prach[0]!= NULL) LOG_M("prach_rx0.m","prach_rx0",prach[0],6144+792,1,1);
|
if (prach[0]!= NULL) LOG_M("prach_rx0.m","prach_rx0",prach[0],6144+792,1,1);
|
||||||
LOG_M("prach_rx1.m","prach_rx1",prach[1],6144+792,1,1);
|
LOG_M("prach_rx1.m","prach_rx1",prach[1],6144+792,1,1);
|
||||||
LOG_M("prach_rxF0.m","prach_rxF0",rxsigF[0],24576,1,1);
|
LOG_M("prach_rxF0.m","prach_rxF0",rxsigF[0],24576,1,1);
|
||||||
LOG_M("prach_rxF1.m","prach_rxF1",rxsigF[1],6144,1,1);
|
LOG_M("prach_rxF1.m","prach_rxF1",rxsigF[1],6144,1,1);
|
||||||
LOG_M_END
|
}
|
||||||
|
|
||||||
for (aa=0;aa<nb_rx; aa++) {
|
for (aa=0;aa<nb_rx; aa++) {
|
||||||
// Do componentwise product with Xu* on each antenna
|
// Do componentwise product with Xu* on each antenna
|
||||||
|
|
||||||
@@ -623,10 +619,10 @@ LOG_M_END
|
|||||||
prach_ifft[i] += (prach_ifft_tmp[i<<1]*prach_ifft_tmp[(i<<1)] + prach_ifft_tmp[1+(i<<1)]*prach_ifft_tmp[1+(i<<1)])>>10;
|
prach_ifft[i] += (prach_ifft_tmp[i<<1]*prach_ifft_tmp[(i<<1)] + prach_ifft_tmp[1+(i<<1)]*prach_ifft_tmp[1+(i<<1)])>>10;
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_M_BEGIN(PRACH)
|
if (LOG_DUMPFLAG(PRACH)) {
|
||||||
if (aa==0) LOG_M("prach_rxF_comp0.m","prach_rxF_comp0",prachF,1024,1,1);
|
if (aa==0) LOG_M("prach_rxF_comp0.m","prach_rxF_comp0",prachF,1024,1,1);
|
||||||
if (aa==1) LOG_M("prach_rxF_comp1.m","prach_rxF_comp1",prachF,1024,1,1);
|
if (aa==1) LOG_M("prach_rxF_comp1.m","prach_rxF_comp1",prachF,1024,1,1);
|
||||||
LOG_M_END
|
}
|
||||||
}// antennas_rx
|
}// antennas_rx
|
||||||
} // new dft
|
} // new dft
|
||||||
|
|
||||||
@@ -637,10 +633,10 @@ LOG_M_END
|
|||||||
eNB->frame_parms.prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[ce_level]))
|
eNB->frame_parms.prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[ce_level]))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
LOG_DEBUG_BEGIN(PRACH)
|
if (LOG_DEBUGFLAG(PRACH)){
|
||||||
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
|
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
|
||||||
if (en>60) LOG_I(PHY,"frame %d, subframe %d: Checking for peak in time-domain (br_flag %d, en %d)\n",ru->proc.frame_prach,subframe,br_flag,en);
|
if (en>60) LOG_I(PHY,"frame %d, subframe %d: Checking for peak in time-domain (br_flag %d, en %d)\n",ru->proc.frame_prach,subframe,br_flag,en);
|
||||||
LOG_DEBUG_END
|
}
|
||||||
preamble_shift2 = ((preamble_shift==0) ? 0 : ((preamble_shift<<log2_ifft_size)/N_ZC));
|
preamble_shift2 = ((preamble_shift==0) ? 0 : ((preamble_shift<<log2_ifft_size)/N_ZC));
|
||||||
|
|
||||||
|
|
||||||
@@ -652,44 +648,48 @@ LOG_DEBUG_END
|
|||||||
*max_preamble_energy = levdB;
|
*max_preamble_energy = levdB;
|
||||||
*max_preamble_delay = ((i*fft_size)>>log2_ifft_size)*update_TA/update_TA2;
|
*max_preamble_delay = ((i*fft_size)>>log2_ifft_size)*update_TA/update_TA2;
|
||||||
*max_preamble = preamble_index;
|
*max_preamble = preamble_index;
|
||||||
LOG_DEBUG_BEGIN(PRACH)
|
if (LOG_DEBUGFLAG(PRACH)){
|
||||||
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
|
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
|
||||||
if ((en>60) && (br_flag==1)) LOG_D(PHY,"frame %d, subframe %d : max_preamble_energy %d, max_preamble_delay %d, max_preamble %d (br_flag %d,ce_level %d, levdB %d, lev %d)\n",ru->proc.frame_prach,subframe,*max_preamble_energy,*max_preamble_delay,*max_preamble,br_flag,ce_level,levdB,lev);
|
if ((en>60) && (br_flag==1))
|
||||||
LOG_DEBUG_END
|
LOG_D(PHY,"frame %d, subframe %d : max_preamble_energy %d, max_preamble_delay %d, max_preamble %d (br_flag %d,ce_level %d, levdB %d, lev %d)\n",
|
||||||
|
ru->proc.frame_prach,subframe,
|
||||||
|
*max_preamble_energy,*max_preamble_delay,
|
||||||
|
*max_preamble,br_flag,ce_level,levdB,lev);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}// preamble_index
|
}// preamble_index
|
||||||
|
|
||||||
LOG_M_BEGIN(PRACH)
|
if (LOG_DUMPFLAG(PRACH)) {
|
||||||
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
|
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
|
||||||
if (en>60) {
|
if (en>60) {
|
||||||
k = (12*n_ra_prb) - 6*fp->N_RB_UL;
|
k = (12*n_ra_prb) - 6*fp->N_RB_UL;
|
||||||
|
|
||||||
if (k<0) k+=fp->ofdm_symbol_size;
|
if (k<0) k+=fp->ofdm_symbol_size;
|
||||||
|
|
||||||
k*=12;
|
k*=12;
|
||||||
k+=13;
|
k+=13;
|
||||||
k*=2;
|
k*=2;
|
||||||
|
|
||||||
if (br_flag == 0) {
|
if (br_flag == 0) {
|
||||||
LOG_M("rxsigF.m","prach_rxF",&rxsigF[0][0],12288,1,1);
|
LOG_M("rxsigF.m","prach_rxF",&rxsigF[0][0],12288,1,1);
|
||||||
LOG_M("prach_rxF_comp0.m","prach_rxF_comp0",prachF,1024,1,1);
|
LOG_M("prach_rxF_comp0.m","prach_rxF_comp0",prachF,1024,1,1);
|
||||||
LOG_M("Xu.m","xu",Xu,N_ZC,1,1);
|
LOG_M("Xu.m","xu",Xu,N_ZC,1,1);
|
||||||
LOG_M("prach_ifft0.m","prach_t0",prach_ifft,1024,1,1);
|
LOG_M("prach_ifft0.m","prach_t0",prach_ifft,1024,1,1);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
LOG_E(PHY,"Dumping prach (br_flag %d), k = %d (n_ra_prb %d)\n",br_flag,k,n_ra_prb);
|
LOG_E(PHY,"Dumping prach (br_flag %d), k = %d (n_ra_prb %d)\n",br_flag,k,n_ra_prb);
|
||||||
LOG_M("rxsigF_br.m","prach_rxF_br",&rxsigF[0][0],12288,1,1);
|
LOG_M("rxsigF_br.m","prach_rxF_br",&rxsigF[0][0],12288,1,1);
|
||||||
LOG_M("prach_rxF_comp0_br.m","prach_rxF_comp0_br",prachF,1024,1,1);
|
LOG_M("prach_rxF_comp0_br.m","prach_rxF_comp0_br",prachF,1024,1,1);
|
||||||
LOG_M("Xu_br.m","xu_br",Xu,N_ZC,1,1);
|
LOG_M("Xu_br.m","xu_br",Xu,N_ZC,1,1);
|
||||||
LOG_M("prach_ifft0_br.m","prach_t0_br",prach_ifft,1024,1,1);
|
LOG_M("prach_ifft0_br.m","prach_t0_br",prach_ifft,1024,1,1);
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
LOG_M_END
|
} /* LOG_DUMPFLAG(PRACH) */
|
||||||
if (eNB) stop_meas(&eNB->rx_prach);
|
if (eNB) stop_meas(&eNB->rx_prach);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,6 @@
|
|||||||
#include "PHY/defs_eNB.h"
|
#include "PHY/defs_eNB.h"
|
||||||
#include "PHY/phy_extern.h"
|
#include "PHY/phy_extern.h"
|
||||||
#include "transport_eNB.h"
|
#include "transport_eNB.h"
|
||||||
//#define DEBUG_ULSCH
|
|
||||||
#include "PHY/sse_intrin.h"
|
#include "PHY/sse_intrin.h"
|
||||||
#include "transport_common_proto.h"
|
#include "transport_common_proto.h"
|
||||||
#include "PHY/LTE_ESTIMATION/lte_estimation.h"
|
#include "PHY/LTE_ESTIMATION/lte_estimation.h"
|
||||||
@@ -67,7 +66,7 @@ void lte_idft(LTE_DL_FRAME_PARMS *frame_parms,uint32_t *z, uint16_t Msc_PUSCH)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
// printf("Doing lte_idft for Msc_PUSCH %d\n",Msc_PUSCH);
|
LOG_T(PHY,"Doing lte_idft for Msc_PUSCH %d\n",Msc_PUSCH);
|
||||||
|
|
||||||
if (frame_parms->Ncp == 0) { // Normal prefix
|
if (frame_parms->Ncp == 0) { // Normal prefix
|
||||||
z0 = z;
|
z0 = z;
|
||||||
@@ -388,13 +387,13 @@ void lte_idft(LTE_DL_FRAME_PARMS *frame_parms,uint32_t *z, uint16_t Msc_PUSCH)
|
|||||||
|
|
||||||
for (i=0,ip=0; i<Msc_PUSCH; i++,ip+=4) {
|
for (i=0,ip=0; i<Msc_PUSCH; i++,ip+=4) {
|
||||||
z0[i] = ((uint32_t*)idft_out0)[ip];
|
z0[i] = ((uint32_t*)idft_out0)[ip];
|
||||||
/*
|
if(LOG_DEBUGFLAG(DEBUG_ULSCH)) {
|
||||||
printf("out0 (%d,%d),(%d,%d),(%d,%d),(%d,%d)\n",
|
LOG_I(PHY,"out0 (%d,%d),(%d,%d),(%d,%d),(%d,%d)\n",
|
||||||
((int16_t*)&idft_out0[ip])[0],((int16_t*)&idft_out0[ip])[1],
|
((int16_t*)&idft_out0[ip])[0],((int16_t*)&idft_out0[ip])[1],
|
||||||
((int16_t*)&idft_out0[ip+1])[0],((int16_t*)&idft_out0[ip+1])[1],
|
((int16_t*)&idft_out0[ip+1])[0],((int16_t*)&idft_out0[ip+1])[1],
|
||||||
((int16_t*)&idft_out0[ip+2])[0],((int16_t*)&idft_out0[ip+2])[1],
|
((int16_t*)&idft_out0[ip+2])[0],((int16_t*)&idft_out0[ip+2])[1],
|
||||||
((int16_t*)&idft_out0[ip+3])[0],((int16_t*)&idft_out0[ip+3])[1]);
|
((int16_t*)&idft_out0[ip+3])[0],((int16_t*)&idft_out0[ip+3])[1]);
|
||||||
*/
|
}
|
||||||
z1[i] = ((uint32_t*)idft_out0)[ip+1];
|
z1[i] = ((uint32_t*)idft_out0)[ip+1];
|
||||||
z2[i] = ((uint32_t*)idft_out0)[ip+2];
|
z2[i] = ((uint32_t*)idft_out0)[ip+2];
|
||||||
z3[i] = ((uint32_t*)idft_out0)[ip+3];
|
z3[i] = ((uint32_t*)idft_out0)[ip+3];
|
||||||
@@ -479,10 +478,7 @@ int32_t ulsch_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms,
|
|||||||
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
// printf("qpsk llr for symbol %d (pos %d), llr offset %d\n",symbol,(symbol*frame_parms->N_RB_DL*12),llr128U-(__m128i*)ulsch_llr);
|
|
||||||
|
|
||||||
for (i=0; i<(nb_rb*3); i++) {
|
for (i=0; i<(nb_rb*3); i++) {
|
||||||
//printf("%d,%d,%d,%d,%d,%d,%d,%d\n",((int16_t *)rxF)[0],((int16_t *)rxF)[1],((int16_t *)rxF)[2],((int16_t *)rxF)[3],((int16_t *)rxF)[4],((int16_t *)rxF)[5],((int16_t *)rxF)[6],((int16_t *)rxF)[7]);
|
|
||||||
*(*llrp128) = *rxF;
|
*(*llrp128) = *rxF;
|
||||||
rxF++;
|
rxF++;
|
||||||
(*llrp128)++;
|
(*llrp128)++;
|
||||||
@@ -593,7 +589,9 @@ void ulsch_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
|
|||||||
ch_mag =(int16x8_t*)&ul_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)];
|
ch_mag =(int16x8_t*)&ul_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||||
ch_magb =(int16x8_t*)&ul_ch_magb[0][(symbol*frame_parms->N_RB_DL*12)];
|
ch_magb =(int16x8_t*)&ul_ch_magb[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||||
#endif
|
#endif
|
||||||
// printf("symbol %d: mag %d, magb %d\n",symbol,_mm_extract_epi16(ch_mag[0],0),_mm_extract_epi16(ch_magb[0],0));
|
if(LOG_DEBUGFLAG(DEBUG_ULSCH)) {
|
||||||
|
LOG_UI(PHY,"symbol %d: mag %d, magb %d\n",symbol,_mm_extract_epi16(ch_mag[0],0),_mm_extract_epi16(ch_magb[0],0));
|
||||||
|
}
|
||||||
for (i=0; i<(nb_rb*3); i++) {
|
for (i=0; i<(nb_rb*3); i++) {
|
||||||
|
|
||||||
|
|
||||||
@@ -736,9 +734,9 @@ void ulsch_extract_rbs_single(int32_t **rxdataF,
|
|||||||
nb_rb1 = cmin(cmax((int)(frame_parms->N_RB_UL) - (int)(2*first_rb),(int)0),(int)(2*nb_rb)); // 2 times no. RBs before the DC
|
nb_rb1 = cmin(cmax((int)(frame_parms->N_RB_UL) - (int)(2*first_rb),(int)0),(int)(2*nb_rb)); // 2 times no. RBs before the DC
|
||||||
nb_rb2 = 2*nb_rb - nb_rb1; // 2 times no. RBs after the DC
|
nb_rb2 = 2*nb_rb - nb_rb1; // 2 times no. RBs after the DC
|
||||||
|
|
||||||
#ifdef DEBUG_ULSCH
|
if(LOG_DEBUGFLAG(DEBUG_ULSCH)) {
|
||||||
printf("ulsch_extract_rbs_single: 2*nb_rb1 = %d, 2*nb_rb2 = %d\n",nb_rb1,nb_rb2);
|
LOG_UI(PHY,"ulsch_extract_rbs_single: 2*nb_rb1 = %d, 2*nb_rb2 = %d\n",nb_rb1,nb_rb2);
|
||||||
#endif
|
}
|
||||||
|
|
||||||
rxF_ext = &rxdataF_ext[aarx][(symbol*frame_parms->N_RB_UL*12)];
|
rxF_ext = &rxdataF_ext[aarx][(symbol*frame_parms->N_RB_UL*12)];
|
||||||
|
|
||||||
@@ -838,7 +836,7 @@ void ulsch_channel_compensation(int32_t **rxdataF_ext,
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
for (rb=0; rb<nb_rb; rb++) {
|
for (rb=0; rb<nb_rb; rb++) {
|
||||||
// printf("comp: symbol %d rb %d\n",symbol,rb);
|
LOG_D(PHY,"comp: symbol %d rb %d\n",symbol,rb);
|
||||||
|
|
||||||
// just compute channel magnitude without scaling, this is done after equalization for SC-FDMA
|
// just compute channel magnitude without scaling, this is done after equalization for SC-FDMA
|
||||||
|
|
||||||
@@ -861,7 +859,7 @@ void ulsch_channel_compensation(int32_t **rxdataF_ext,
|
|||||||
mmtmpU1 = _mm_packs_epi32(mmtmpU0,mmtmpU0);
|
mmtmpU1 = _mm_packs_epi32(mmtmpU0,mmtmpU0);
|
||||||
ul_ch_mag128[2] = _mm_unpacklo_epi16(mmtmpU1,mmtmpU1);
|
ul_ch_mag128[2] = _mm_unpacklo_epi16(mmtmpU1,mmtmpU1);
|
||||||
|
|
||||||
// printf("comp: symbol %d rb %d => %d,%d,%d (output_shift %d)\n",symbol,rb,*((int16_t*)&ul_ch_mag128[0]),*((int16_t*)&ul_ch_mag128[1]),*((int16_t*)&ul_ch_mag128[2]),output_shift);
|
LOG_D(PHY,"comp: symbol %d rb %d => %d,%d,%d (output_shift %d)\n",symbol,rb,*((int16_t*)&ul_ch_mag128[0]),*((int16_t*)&ul_ch_mag128[1]),*((int16_t*)&ul_ch_mag128[2]),output_shift);
|
||||||
|
|
||||||
|
|
||||||
#elif defined(__arm__)
|
#elif defined(__arm__)
|
||||||
@@ -1125,10 +1123,9 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
|
|||||||
|
|
||||||
harq_pid = subframe2harq_pid(frame_parms,proc->frame_rx,subframe);
|
harq_pid = subframe2harq_pid(frame_parms,proc->frame_rx,subframe);
|
||||||
Qm = ulsch[UE_id]->harq_processes[harq_pid]->Qm;
|
Qm = ulsch[UE_id]->harq_processes[harq_pid]->Qm;
|
||||||
#ifdef DEBUG_ULSCH
|
if(LOG_DEBUGFLAG(DEBUG_ULSCH)) {
|
||||||
printf("rx_ulsch: harq_pid %d, nb_rb %d first_rb %d\n",harq_pid,ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,ulsch[UE_id]->harq_processes[harq_pid]->first_rb);
|
LOG_I(PHY,"rx_ulsch: harq_pid %d, nb_rb %d first_rb %d\n",harq_pid,ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,ulsch[UE_id]->harq_processes[harq_pid]->first_rb);
|
||||||
|
}
|
||||||
#endif //DEBUG_ULSCH
|
|
||||||
|
|
||||||
if (ulsch[UE_id]->harq_processes[harq_pid]->nb_rb == 0) {
|
if (ulsch[UE_id]->harq_processes[harq_pid]->nb_rb == 0) {
|
||||||
LOG_E(PHY,"PUSCH (%d/%x) nb_rb=0!\n", harq_pid,ulsch[UE_id]->rnti);
|
LOG_E(PHY,"PUSCH (%d/%x) nb_rb=0!\n", harq_pid,ulsch[UE_id]->rnti);
|
||||||
@@ -1137,13 +1134,13 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
|
|||||||
|
|
||||||
for (l=0; l<(frame_parms->symbols_per_tti-ulsch[UE_id]->harq_processes[harq_pid]->srs_active); l++) {
|
for (l=0; l<(frame_parms->symbols_per_tti-ulsch[UE_id]->harq_processes[harq_pid]->srs_active); l++) {
|
||||||
|
|
||||||
#ifdef DEBUG_ULSCH
|
if(LOG_DEBUGFLAG(DEBUG_ULSCH)) {
|
||||||
printf("rx_ulsch : symbol %d (first_rb %d,nb_rb %d), rxdataF %p, rxdataF_ext %p\n",l,
|
LOG_I(PHY,"rx_ulsch : symbol %d (first_rb %d,nb_rb %d), rxdataF %p, rxdataF_ext %p\n",l,
|
||||||
ulsch[UE_id]->harq_processes[harq_pid]->first_rb,
|
ulsch[UE_id]->harq_processes[harq_pid]->first_rb,
|
||||||
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,
|
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,
|
||||||
common_vars->rxdataF,
|
common_vars->rxdataF,
|
||||||
pusch_vars->rxdataF_ext);
|
pusch_vars->rxdataF_ext);
|
||||||
#endif //DEBUG_ULSCH
|
}
|
||||||
|
|
||||||
ulsch_extract_rbs_single(common_vars->rxdataF,
|
ulsch_extract_rbs_single(common_vars->rxdataF,
|
||||||
pusch_vars->rxdataF_ext,
|
pusch_vars->rxdataF_ext,
|
||||||
@@ -1179,21 +1176,16 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
|
|||||||
|
|
||||||
pusch_vars->ulsch_power[i] = signal_energy_nodc(pusch_vars->drs_ch_estimates[i],
|
pusch_vars->ulsch_power[i] = signal_energy_nodc(pusch_vars->drs_ch_estimates[i],
|
||||||
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12)/correction_factor;
|
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12)/correction_factor;
|
||||||
/* printf("%4.4d.%d power harq_pid %d rb %2.2d TBS %2.2d (MPR_times_Ks %d correction %d) power %d dBtimes10\n", proc->frame_rx, proc->subframe_rx, harq_pid, ulsch[UE_id]->harq_processes[harq_pid]->nb_rb, ulsch[UE_id]->harq_processes[harq_pid]->TBS,MPR_times_100Ks,correction_factor,dB_fixed_times10(pusch_vars->ulsch_power[i]));
|
LOG_D(PHY,"%4.4d.%d power harq_pid %d rb %2.2d TBS %2.2d (MPR_times_Ks %d correction %d) power %d dBtimes10\n", proc->frame_rx, proc->subframe_rx, harq_pid, ulsch[UE_id]->harq_processes[harq_pid]->nb_rb, ulsch[UE_id]->harq_processes[harq_pid]->TBS,MPR_times_100Ks,correction_factor,dB_fixed_times10(pusch_vars->ulsch_power[i]));
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//LOG_M("rxdataF_ext.m","rxF_ext",pusch_vars->rxdataF_ext[eNB_id][0],300*(frame_parms->symbols_per_tti-ulsch[UE_id]->srs_active),1,1);
|
|
||||||
//LOG_M("ulsch_chest.m","drs_est",pusch_vars->drs_ch_estimates[eNB_id][0],300*(frame_parms->symbols_per_tti-ulsch[UE_id]->srs_active),1,1);
|
|
||||||
|
|
||||||
|
|
||||||
ulsch_channel_level(pusch_vars->drs_ch_estimates,
|
ulsch_channel_level(pusch_vars->drs_ch_estimates,
|
||||||
frame_parms,
|
frame_parms,
|
||||||
avgU,
|
avgU,
|
||||||
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb);
|
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb);
|
||||||
|
|
||||||
// printf("[ULSCH] avg[0] %d\n",avgU[0]);
|
LOG_D(PHY,"[ULSCH] avg[0] %d\n",avgU[0]);
|
||||||
|
|
||||||
|
|
||||||
avgs = 0;
|
avgs = 0;
|
||||||
@@ -1205,9 +1197,9 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
|
|||||||
|
|
||||||
log2_maxh = (log2_approx(avgs)/2)+ log2_approx(frame_parms->nb_antennas_rx-1)+4;
|
log2_maxh = (log2_approx(avgs)/2)+ log2_approx(frame_parms->nb_antennas_rx-1)+4;
|
||||||
|
|
||||||
#ifdef DEBUG_ULSCH
|
|
||||||
printf("[ULSCH] log2_maxh = %d (%d,%d)\n",log2_maxh,avgU[0],avgs);
|
LOG_D(PHY,"[ULSCH] log2_maxh = %d (%d,%d)\n",log2_maxh,avgU[0],avgs);
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
for (l=0; l<(frame_parms->symbols_per_tti-ulsch[UE_id]->harq_processes[harq_pid]->srs_active); l++) {
|
for (l=0; l<(frame_parms->symbols_per_tti-ulsch[UE_id]->harq_processes[harq_pid]->srs_active); l++) {
|
||||||
@@ -1229,9 +1221,6 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
|
|||||||
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,
|
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,
|
||||||
log2_maxh); // log2_maxh+I0_shift
|
log2_maxh); // log2_maxh+I0_shift
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (frame_parms->nb_antennas_rx > 1)
|
if (frame_parms->nb_antennas_rx > 1)
|
||||||
ulsch_detection_mrc(frame_parms,
|
ulsch_detection_mrc(frame_parms,
|
||||||
pusch_vars->rxdataF_comp,
|
pusch_vars->rxdataF_comp,
|
||||||
@@ -1240,9 +1229,7 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
|
|||||||
l,
|
l,
|
||||||
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb);
|
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb);
|
||||||
|
|
||||||
|
// if ((eNB->measurements.n0_power_dB[0]+3)<pusch_vars->ulsch_power[0])
|
||||||
|
|
||||||
// if ((eNB->measurements.n0_power_dB[0]+3)<pusch_vars->ulsch_power[0]) {
|
|
||||||
if (23<pusch_vars->ulsch_power[0]) {
|
if (23<pusch_vars->ulsch_power[0]) {
|
||||||
freq_equalization(frame_parms,
|
freq_equalization(frame_parms,
|
||||||
pusch_vars->rxdataF_comp,
|
pusch_vars->rxdataF_comp,
|
||||||
@@ -1254,22 +1241,9 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//#ifdef DEBUG_ULSCH
|
|
||||||
// Inverse-Transform equalized outputs
|
|
||||||
// printf("Doing IDFTs\n");
|
|
||||||
lte_idft(frame_parms,
|
lte_idft(frame_parms,
|
||||||
(uint32_t*)pusch_vars->rxdataF_comp[0],
|
(uint32_t*)pusch_vars->rxdataF_comp[0],
|
||||||
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12);
|
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12);
|
||||||
// printf("Done\n");
|
|
||||||
//#endif //DEBUG_ULSCH
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
llrp = (int16_t*)&pusch_vars->llr[0];
|
llrp = (int16_t*)&pusch_vars->llr[0];
|
||||||
|
|
||||||
@@ -1316,9 +1290,8 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
#ifdef DEBUG_ULSCH
|
LOG_E(PHY,"ulsch_demodulation.c (rx_ulsch): Unknown Qm!!!!\n");
|
||||||
printf("ulsch_demodulation.c (rx_ulsch): Unknown Qm!!!!\n");
|
|
||||||
#endif //DEBUG_ULSCH
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1329,7 +1302,7 @@ void rx_ulsch_emul(PHY_VARS_eNB *eNB,
|
|||||||
eNB_rxtx_proc_t *proc,
|
eNB_rxtx_proc_t *proc,
|
||||||
uint8_t UE_index)
|
uint8_t UE_index)
|
||||||
{
|
{
|
||||||
printf("[PHY] EMUL eNB %d rx_ulsch_emul : subframe %d, UE_index %d\n",eNB->Mod_id,proc->subframe_rx,UE_index);
|
LOG_I(PHY,"[PHY] EMUL eNB %d rx_ulsch_emul : subframe %d, UE_index %d\n",eNB->Mod_id,proc->subframe_rx,UE_index);
|
||||||
eNB->pusch_vars[UE_index]->ulsch_power[0] = 31622; //=45dB;
|
eNB->pusch_vars[UE_index]->ulsch_power[0] = 31622; //=45dB;
|
||||||
eNB->pusch_vars[UE_index]->ulsch_power[1] = 31622; //=45dB;
|
eNB->pusch_vars[UE_index]->ulsch_power[1] = 31622; //=45dB;
|
||||||
|
|
||||||
@@ -1344,7 +1317,7 @@ void rx_ulsch_emul(PHY_VARS_eNB *eNB,
|
|||||||
|
|
||||||
harq_pid = subframe2harq_pid(&eNB->frame_parms,frame,subframe);
|
harq_pid = subframe2harq_pid(&eNB->frame_parms,frame,subframe);
|
||||||
|
|
||||||
printf("Dumping ULSCH in subframe %d with harq_pid %d, round %d for NB_rb %d, TBS %d, Qm %d, N_symb %d\n",
|
LOG_UI(PHY,"Dumping ULSCH in subframe %d with harq_pid %d, round %d for NB_rb %d, TBS %d, Qm %d, N_symb %d\n",
|
||||||
subframe,harq_pid,round,eNB->ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,
|
subframe,harq_pid,round,eNB->ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,
|
||||||
eNB->ulsch[UE_id]->harq_processes[harq_pid]->TBS,eNB->ulsch[UE_id]->harq_processes[harq_pid]->Qm,
|
eNB->ulsch[UE_id]->harq_processes[harq_pid]->TBS,eNB->ulsch[UE_id]->harq_processes[harq_pid]->Qm,
|
||||||
eNB->ulsch[UE_id]->harq_processes[harq_pid]->Nsymb_pusch);
|
eNB->ulsch[UE_id]->harq_processes[harq_pid]->Nsymb_pusch);
|
||||||
|
|||||||
@@ -179,29 +179,29 @@ void extract_dci1C_info(uint8_t N_RB_DL, lte_frame_type_t frame_type, void *dci_
|
|||||||
|
|
||||||
uint32_t rballoc=0;
|
uint32_t rballoc=0;
|
||||||
uint8_t mcs=0;
|
uint8_t mcs=0;
|
||||||
|
uint8_t Ngap=0;
|
||||||
|
|
||||||
switch (N_RB_DL) {
|
switch (N_RB_DL) {
|
||||||
case 6:
|
case 6:
|
||||||
mcs = ((DCI1C_5MHz_t *)dci_pdu)->mcs;
|
mcs = ((DCI1C_1_5MHz_t *)dci_pdu)->mcs;
|
||||||
rballoc = conv_1C_RIV(((DCI1C_5MHz_t *)dci_pdu)->rballoc,6);
|
rballoc = conv_1C_RIV(((DCI1C_1_5MHz_t *)dci_pdu)->rballoc, 6);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 25:
|
case 25:
|
||||||
mcs = ((DCI1C_5MHz_t *)dci_pdu)->mcs;
|
mcs = ((DCI1C_5MHz_t *)dci_pdu)->mcs;
|
||||||
rballoc = conv_1C_RIV(((DCI1C_5MHz_t *)dci_pdu)->rballoc,6);
|
rballoc = conv_1C_RIV(((DCI1C_5MHz_t *)dci_pdu)->rballoc, 25);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 50:
|
case 50:
|
||||||
mcs = ((DCI1C_10MHz_t *)dci_pdu)->mcs;
|
mcs = ((DCI1C_10MHz_t *)dci_pdu)->mcs;
|
||||||
rballoc = conv_1C_RIV(((DCI1C_10MHz_t *)dci_pdu)->rballoc,6);
|
rballoc = conv_1C_RIV(((DCI1C_10MHz_t *)dci_pdu)->rballoc, 50);
|
||||||
|
Ngap = ((DCI1C_10MHz_t *)dci_pdu)->Ngap;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 100:
|
case 100:
|
||||||
mcs = ((DCI1C_20MHz_t *)dci_pdu)->mcs;
|
mcs = ((DCI1C_20MHz_t *)dci_pdu)->mcs;
|
||||||
rballoc = conv_1C_RIV(((DCI1C_20MHz_t *)dci_pdu)->rballoc,6);
|
rballoc = conv_1C_RIV(((DCI1C_20MHz_t *)dci_pdu)->rballoc, 100);
|
||||||
|
Ngap = ((DCI1C_20MHz_t *)dci_pdu)->Ngap;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -211,6 +211,7 @@ void extract_dci1C_info(uint8_t N_RB_DL, lte_frame_type_t frame_type, void *dci_
|
|||||||
|
|
||||||
pdci_info_extarcted->mcs1 = mcs;
|
pdci_info_extarcted->mcs1 = mcs;
|
||||||
pdci_info_extarcted->rballoc = rballoc;
|
pdci_info_extarcted->rballoc = rballoc;
|
||||||
|
pdci_info_extarcted->Ngap = Ngap;
|
||||||
}
|
}
|
||||||
|
|
||||||
void extract_dci1_info(uint8_t N_RB_DL, lte_frame_type_t frame_type, void *dci_pdu, DCI_INFO_EXTRACTED_t *pdci_info_extarcted)
|
void extract_dci1_info(uint8_t N_RB_DL, lte_frame_type_t frame_type, void *dci_pdu, DCI_INFO_EXTRACTED_t *pdci_info_extarcted)
|
||||||
|
|||||||
@@ -3097,10 +3097,10 @@ void dft128(int16_t *x,int16_t *y,int scale)
|
|||||||
|
|
||||||
dft64((int16_t*)(xtmp),(int16_t*)ytmp,1);
|
dft64((int16_t*)(xtmp),(int16_t*)ytmp,1);
|
||||||
dft64((int16_t*)(xtmp+32),(int16_t*)(ytmp+16),1);
|
dft64((int16_t*)(xtmp+32),(int16_t*)(ytmp+16),1);
|
||||||
|
if (LOG_DUMPFLAG(DEBUG_DFT)) {
|
||||||
/* LOG_M("dft128a.m","dfta",ytmp,64,1,1);
|
LOG_M("dft128a.m","dfta",ytmp,64,1,1);
|
||||||
LOG_M("dft128b.m","dftb",ytmp+16,64,1,1);*/
|
LOG_M("dft128b.m","dftb",ytmp+16,64,1,1);*/
|
||||||
|
}
|
||||||
for (i=0; i<16; i++) {
|
for (i=0; i<16; i++) {
|
||||||
bfly2_16(ytmpp,ytmpp+16,
|
bfly2_16(ytmpp,ytmpp+16,
|
||||||
y128p,y128p+16,
|
y128p,y128p+16,
|
||||||
@@ -3149,9 +3149,10 @@ void dft128(int16_t *x,int16_t *y,int scale)
|
|||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
if (LOG_DUMPFLAG(DEBUG_DFT)) {
|
||||||
/* LOG_M("dft128out.m","dft128",y,128,1,1);
|
LOG_M("dft128out.m","dft128",y,128,1,1);
|
||||||
exit(-1);*/
|
exit(-1);
|
||||||
|
}
|
||||||
_mm_empty();
|
_mm_empty();
|
||||||
_m_empty();
|
_m_empty();
|
||||||
|
|
||||||
@@ -3176,17 +3177,17 @@ void dft128(int16_t *x,int16_t *y,int scale)
|
|||||||
transpose4_ooff_simd256(x256+10,xtmp+5,8);
|
transpose4_ooff_simd256(x256+10,xtmp+5,8);
|
||||||
transpose4_ooff_simd256(x256+12,xtmp+6,8);
|
transpose4_ooff_simd256(x256+12,xtmp+6,8);
|
||||||
transpose4_ooff_simd256(x256+14,xtmp+7,8);
|
transpose4_ooff_simd256(x256+14,xtmp+7,8);
|
||||||
|
if (LOG_DUMPFLAG(DEBUG_DFT)) {
|
||||||
/* LOG_M("dft128ina_256.m","dftina",xtmp,64,1,1);
|
LOG_M("dft128ina_256.m","dftina",xtmp,64,1,1);
|
||||||
LOG_M("dft128inb_256.m","dftinb",xtmp+8,64,1,1);
|
LOG_M("dft128inb_256.m","dftinb",xtmp+8,64,1,1);
|
||||||
*/
|
}
|
||||||
|
|
||||||
dft64((int16_t*)(xtmp),(int16_t*)ytmp,1);
|
dft64((int16_t*)(xtmp),(int16_t*)ytmp,1);
|
||||||
dft64((int16_t*)(xtmp+8),(int16_t*)(ytmp+8),1);
|
dft64((int16_t*)(xtmp+8),(int16_t*)(ytmp+8),1);
|
||||||
|
if (LOG_DUMPFLAG(DEBUG_DFT)) {
|
||||||
/*LOG_M("dft128outa_256.m","dftouta",ytmp,64,1,1);
|
LOG_M("dft128outa_256.m","dftouta",ytmp,64,1,1);
|
||||||
LOG_M("dft128outb_256.m","dftoutb",ytmp+8,64,1,1);
|
LOG_M("dft128outb_256.m","dftoutb",ytmp+8,64,1,1);
|
||||||
*/
|
}
|
||||||
|
|
||||||
for (i=0; i<8; i++) {
|
for (i=0; i<8; i++) {
|
||||||
bfly2_16_256(ytmpp,ytmpp+8,
|
bfly2_16_256(ytmpp,ytmpp+8,
|
||||||
@@ -3219,9 +3220,10 @@ void dft128(int16_t *x,int16_t *y,int scale)
|
|||||||
y256[15] = mulhi_int16_simd256(y256[15],ONE_OVER_SQRT2_Q15_256);
|
y256[15] = mulhi_int16_simd256(y256[15],ONE_OVER_SQRT2_Q15_256);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
if (LOG_DUMPFLAG(DEBUG_DFT)) {
|
||||||
/* LOG_M("dft128.m","dft",y256,128,1,1);
|
LOG_M("dft128.m","dft",y256,128,1,1);
|
||||||
exit(-1);*/
|
exit(-1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -5422,10 +5424,11 @@ void dft1536(int16_t *input, int16_t *output, int scale)
|
|||||||
tmpo[1][i] = tmpo[1][i<<1];
|
tmpo[1][i] = tmpo[1][i<<1];
|
||||||
tmpo[2][i] = tmpo[2][i<<1];
|
tmpo[2][i] = tmpo[2][i<<1];
|
||||||
}*/
|
}*/
|
||||||
|
if (LOG_DUMPFLAG(DEBUG_DFT)) {
|
||||||
// LOG_M("out0.m","o0",tmpo[0],2048,1,1);
|
LOG_M("dft1536out0.m","o0",tmpo[0],2048,1,1);
|
||||||
// LOG_M("out1.m","o1",tmpo[1],2048,1,1);
|
LOG_M("dft1536out1.m","o1",tmpo[1],2048,1,1);
|
||||||
// LOG_M("out2.m","o2",tmpo[2],2048,1,1);
|
LOG_M("dft1536out2.m","o2",tmpo[2],2048,1,1);
|
||||||
|
}
|
||||||
for (i=0,i2=0; i<1024; i+=8,i2+=4) {
|
for (i=0,i2=0; i<1024; i+=8,i2+=4) {
|
||||||
bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]),
|
bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]),
|
||||||
(simd_q15_t*)(output+i),(simd_q15_t*)(output+1024+i),(simd_q15_t*)(output+2048+i),
|
(simd_q15_t*)(output+i),(simd_q15_t*)(output+1024+i),(simd_q15_t*)(output+2048+i),
|
||||||
@@ -5585,12 +5588,20 @@ void idft6144(int16_t *input, int16_t *output,int scale)
|
|||||||
idft2048((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),1);
|
idft2048((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),1);
|
||||||
idft2048((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),1);
|
idft2048((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),1);
|
||||||
|
|
||||||
|
if (LOG_DUMPFLAG(DEBUG_DFT)) {
|
||||||
|
LOG_M("idft6144in.m","in",input,6144,1,1);
|
||||||
|
LOG_M("idft6144out0.m","o0",tmpo[0],2048,1,1);
|
||||||
|
LOG_M("idft6144out1.m","o1",tmpo[1],2048,1,1);
|
||||||
|
LOG_M("idft6144out2.m","o2",tmpo[2],2048,1,1);
|
||||||
|
}
|
||||||
|
|
||||||
for (i=0,i2=0; i<4096; i+=8,i2+=4) {
|
for (i=0,i2=0; i<4096; i+=8,i2+=4) {
|
||||||
ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]),
|
ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]),
|
||||||
(simd_q15_t*)(output+i),(simd_q15_t*)(output+4096+i),(simd_q15_t*)(output+8192+i),
|
(simd_q15_t*)(output+i),(simd_q15_t*)(output+4096+i),(simd_q15_t*)(output+8192+i),
|
||||||
(simd_q15_t*)(twa6144+i),(simd_q15_t*)(twb6144+i));
|
(simd_q15_t*)(twa6144+i),(simd_q15_t*)(twb6144+i));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (scale==1) {
|
if (scale==1) {
|
||||||
for (i=0; i<96; i++) {
|
for (i=0; i<96; i++) {
|
||||||
y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128);
|
y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128);
|
||||||
@@ -5643,10 +5654,11 @@ void dft6144(int16_t *input, int16_t *output,int scale)
|
|||||||
tmpo[1][i] = tmpo[1][i<<1];
|
tmpo[1][i] = tmpo[1][i<<1];
|
||||||
tmpo[2][i] = tmpo[2][i<<1];
|
tmpo[2][i] = tmpo[2][i<<1];
|
||||||
}*/
|
}*/
|
||||||
|
if (LOG_DUMPFLAG(DEBUG_DFT)) {
|
||||||
// LOG_M("out0.m","o0",tmpo[0],2048,1,1);
|
LOG_M("ft6144out0.m","o0",tmpo[0],2048,1,1);
|
||||||
// LOG_M("out1.m","o1",tmpo[1],2048,1,1);
|
LOG_M("ft6144out1.m","o1",tmpo[1],2048,1,1);
|
||||||
// LOG_M("out2.m","o2",tmpo[2],2048,1,1);
|
LOG_M("ft6144out2.m","o2",tmpo[2],2048,1,1);
|
||||||
|
}
|
||||||
for (i=0,i2=0; i<4096; i+=8,i2+=4) {
|
for (i=0,i2=0; i<4096; i+=8,i2+=4) {
|
||||||
bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]),
|
bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]),
|
||||||
(simd_q15_t*)(output+i),(simd_q15_t*)(output+4096+i),(simd_q15_t*)(output+8192+i),
|
(simd_q15_t*)(output+i),(simd_q15_t*)(output+4096+i),(simd_q15_t*)(output+8192+i),
|
||||||
@@ -5707,10 +5719,11 @@ void dft12288(int16_t *input, int16_t *output,int scale)
|
|||||||
tmpo[1][i] = tmpo[1][i<<1];
|
tmpo[1][i] = tmpo[1][i<<1];
|
||||||
tmpo[2][i] = tmpo[2][i<<1];
|
tmpo[2][i] = tmpo[2][i<<1];
|
||||||
}*/
|
}*/
|
||||||
|
if (LOG_DUMPFLAG(DEBUG_DFT)) {
|
||||||
// LOG_M("out0.m","o0",tmpo[0],4096,1,1);
|
LOG_M("dft12288out0.m","o0",tmpo[0],4096,1,1);
|
||||||
// LOG_M("out1.m","o1",tmpo[1],4096,1,1);
|
LOG_M("dft12288out1.m","o1",tmpo[1],4096,1,1);
|
||||||
// LOG_M("out2.m","o2",tmpo[2],4096,1,1);
|
LOG_M("dft12288out2.m","o2",tmpo[2],4096,1,1);
|
||||||
|
}
|
||||||
for (i=0,i2=0; i<8192; i+=8,i2+=4) {
|
for (i=0,i2=0; i<8192; i+=8,i2+=4) {
|
||||||
bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]),
|
bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]),
|
||||||
(simd_q15_t*)(output+i),(simd_q15_t*)(output+8192+i),(simd_q15_t*)(output+16384+i),
|
(simd_q15_t*)(output+i),(simd_q15_t*)(output+8192+i),(simd_q15_t*)(output+16384+i),
|
||||||
@@ -5758,9 +5771,18 @@ void idft12288(int16_t *input, int16_t *output,int scale)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
idft4096((int16_t*)(tmp[0]),(int16_t*)(tmpo[0]),scale);
|
idft4096((int16_t*)(tmp[0]),(int16_t*)(tmpo[0]),scale);
|
||||||
idft4096((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),scale);
|
idft4096((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),scale);
|
||||||
idft4096((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),scale);
|
idft4096((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),scale);
|
||||||
|
|
||||||
|
if (LOG_DUMPFLAG(DEBUG_DFT)) {
|
||||||
|
LOG_M("idft12288in.m","in",input,12288,1,1);
|
||||||
|
LOG_M("idft12288out0.m","o0",tmpo[0],4096,1,1);
|
||||||
|
LOG_M("idft12288out1.m","o1",tmpo[1],4096,1,1);
|
||||||
|
LOG_M("idft12288out2.m","o2",tmpo[2],4096,1,1);
|
||||||
|
}
|
||||||
|
|
||||||
for (i=0,i2=0; i<8192; i+=8,i2+=4) {
|
for (i=0,i2=0; i<8192; i+=8,i2+=4) {
|
||||||
ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]),
|
ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]),
|
||||||
(simd_q15_t*)(output+i),(simd_q15_t*)(output+8192+i),(simd_q15_t*)(output+16384+i),
|
(simd_q15_t*)(output+i),(simd_q15_t*)(output+8192+i),(simd_q15_t*)(output+16384+i),
|
||||||
@@ -5790,8 +5812,9 @@ void idft12288(int16_t *input, int16_t *output,int scale)
|
|||||||
}
|
}
|
||||||
_mm_empty();
|
_mm_empty();
|
||||||
_m_empty();
|
_m_empty();
|
||||||
|
if (LOG_DUMPFLAG(DEBUG_DFT)) {
|
||||||
// LOG_M("out.m","out",output,6144,1,1);
|
LOG_M("idft12288out.m","out",output,6144,1,1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int16_t twa18432[12288] __attribute__((aligned(32)));
|
int16_t twa18432[12288] __attribute__((aligned(32)));
|
||||||
@@ -5920,16 +5943,18 @@ void dft24576(int16_t *input, int16_t *output,int scale)
|
|||||||
tmpo[1][i] = tmpo[1][i<<1];
|
tmpo[1][i] = tmpo[1][i<<1];
|
||||||
tmpo[2][i] = tmpo[2][i<<1];
|
tmpo[2][i] = tmpo[2][i<<1];
|
||||||
}*/
|
}*/
|
||||||
|
if (LOG_DUMPFLAG(DEBUG_DFT)) {
|
||||||
// LOG_M("out0.m","o0",tmpo[0],8192,1,1);
|
LOG_M("dft24576out0.m","o0",tmpo[0],8192,1,1);
|
||||||
// LOG_M("out1.m","o1",tmpo[1],8192,1,1);
|
LOG_M("dft24576out1.m","o1",tmpo[1],8192,1,1);
|
||||||
// LOG_M("out2.m","o2",tmpo[2],8192,1,1);
|
LOG_M("dft24576out2.m","o2",tmpo[2],8192,1,1);
|
||||||
|
}
|
||||||
for (i=0,i2=0; i<16384; i+=8,i2+=4) {
|
for (i=0,i2=0; i<16384; i+=8,i2+=4) {
|
||||||
bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]),
|
bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]),
|
||||||
(simd_q15_t*)(output+i),(simd_q15_t*)(output+16384+i),(simd_q15_t*)(output+32768+i),
|
(simd_q15_t*)(output+i),(simd_q15_t*)(output+16384+i),(simd_q15_t*)(output+32768+i),
|
||||||
(simd_q15_t*)(twa24576+i),(simd_q15_t*)(twb24576+i));
|
(simd_q15_t*)(twa24576+i),(simd_q15_t*)(twb24576+i));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (scale==1) {
|
if (scale==1) {
|
||||||
for (i=0; i<384; i++) {
|
for (i=0; i<384; i++) {
|
||||||
y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128);
|
y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128);
|
||||||
@@ -5953,8 +5978,9 @@ void dft24576(int16_t *input, int16_t *output,int scale)
|
|||||||
}
|
}
|
||||||
_mm_empty();
|
_mm_empty();
|
||||||
_m_empty();
|
_m_empty();
|
||||||
|
if (LOG_DUMPFLAG(DEBUG_DFT)) {
|
||||||
// LOG_M("out.m","out",output,24576,1,1);
|
LOG_M("out.m","out",output,24576,1,1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void idft24576(int16_t *input, int16_t *output,int scale)
|
void idft24576(int16_t *input, int16_t *output,int scale)
|
||||||
@@ -5975,12 +6001,12 @@ void idft24576(int16_t *input, int16_t *output,int scale)
|
|||||||
idft8192((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),1);
|
idft8192((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),1);
|
||||||
idft8192((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),1);
|
idft8192((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),1);
|
||||||
|
|
||||||
/*
|
if (LOG_DUMPFLAG(DEBUG_DFT)) {
|
||||||
LOG_M("in.m","in",input,24576,1,1);
|
LOG_M("idft24576in.m","in",input,24576,1,1);
|
||||||
LOG_M("out0.m","o0",tmpo[0],8192,1,1);
|
LOG_M("idft24576out0.m","o0",tmpo[0],8192,1,1);
|
||||||
LOG_M("out1.m","o1",tmpo[1],8192,1,1);
|
LOG_M("idft24576out1.m","o1",tmpo[1],8192,1,1);
|
||||||
LOG_M("out2.m","o2",tmpo[2],8192,1,1);
|
LOG_M("idft24576out2.m","o2",tmpo[2],8192,1,1);
|
||||||
*/
|
}
|
||||||
|
|
||||||
for (i=0,i2=0; i<16384; i+=8,i2+=4) {
|
for (i=0,i2=0; i<16384; i+=8,i2+=4) {
|
||||||
ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]),
|
ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]),
|
||||||
@@ -6011,7 +6037,9 @@ void idft24576(int16_t *input, int16_t *output,int scale)
|
|||||||
_mm_empty();
|
_mm_empty();
|
||||||
_m_empty();
|
_m_empty();
|
||||||
|
|
||||||
// LOG_M("out.m","out",output,24576,1,1);
|
if (LOG_DUMPFLAG(DEBUG_DFT)) {
|
||||||
|
LOG_M("idft24576out.m","out",output,24576,1,1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// THIS SECTION IS FOR ALL PUSCH DFTS (i.e. radix 2^a * 3^b * 4^c * 5^d)
|
/// THIS SECTION IS FOR ALL PUSCH DFTS (i.e. radix 2^a * 3^b * 4^c * 5^d)
|
||||||
|
|||||||
@@ -52,7 +52,7 @@
|
|||||||
# include "COMMON/ral_messages_types.h"
|
# include "COMMON/ral_messages_types.h"
|
||||||
# include "UTIL/queue.h"
|
# include "UTIL/queue.h"
|
||||||
# endif
|
# endif
|
||||||
# include "log.h"
|
# include "common/utils/LOG/log.h"
|
||||||
# define msg(aRGS...) LOG_D(PHY, ##aRGS)
|
# define msg(aRGS...) LOG_D(PHY, ##aRGS)
|
||||||
# else
|
# else
|
||||||
# define msg printf
|
# define msg printf
|
||||||
|
|||||||
@@ -93,7 +93,7 @@
|
|||||||
# include "COMMON/ral_messages_types.h"
|
# include "COMMON/ral_messages_types.h"
|
||||||
# include "UTIL/queue.h"
|
# include "UTIL/queue.h"
|
||||||
# endif
|
# endif
|
||||||
# include "log.h"
|
# include "common/utils/LOG/log.h"
|
||||||
# define msg(aRGS...) LOG_D(PHY, ##aRGS)
|
# define msg(aRGS...) LOG_D(PHY, ##aRGS)
|
||||||
# else
|
# else
|
||||||
# define msg printf
|
# define msg printf
|
||||||
|
|||||||
@@ -347,7 +347,7 @@ void pdsch_procedures(PHY_VARS_eNB *eNB,
|
|||||||
dlsch_harq->rvidx,
|
dlsch_harq->rvidx,
|
||||||
dlsch_harq->round);
|
dlsch_harq->round);
|
||||||
}
|
}
|
||||||
#if defined(MESSAGE_CHART_GENERATOR_PHY)
|
|
||||||
MSC_LOG_TX_MESSAGE(
|
MSC_LOG_TX_MESSAGE(
|
||||||
MSC_PHY_ENB,MSC_PHY_UE,
|
MSC_PHY_ENB,MSC_PHY_UE,
|
||||||
NULL,0,
|
NULL,0,
|
||||||
@@ -368,7 +368,7 @@ void pdsch_procedures(PHY_VARS_eNB *eNB,
|
|||||||
pmi2hex_2Ar1(dlsch_harq->pmi_alloc),
|
pmi2hex_2Ar1(dlsch_harq->pmi_alloc),
|
||||||
dlsch_harq->rvidx,
|
dlsch_harq->rvidx,
|
||||||
dlsch_harq->round);
|
dlsch_harq->round);
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
if (ue_stats) ue_stats->dlsch_sliding_cnt++;
|
if (ue_stats) ue_stats->dlsch_sliding_cnt++;
|
||||||
@@ -1375,7 +1375,7 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
|
|||||||
ulsch->harq_mask &= ~(1 << harq_pid);
|
ulsch->harq_mask &= ~(1 << harq_pid);
|
||||||
ulsch_harq->round = 0;
|
ulsch_harq->round = 0;
|
||||||
}
|
}
|
||||||
#if defined(MESSAGE_CHART_GENERATOR_PHY)
|
|
||||||
MSC_LOG_RX_DISCARDED_MESSAGE(
|
MSC_LOG_RX_DISCARDED_MESSAGE(
|
||||||
MSC_PHY_ENB,MSC_PHY_UE,
|
MSC_PHY_ENB,MSC_PHY_UE,
|
||||||
NULL,0,
|
NULL,0,
|
||||||
@@ -1384,7 +1384,7 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
|
|||||||
ulsch->rnti,harq_pid,
|
ulsch->rnti,harq_pid,
|
||||||
ulsch_harq->round-1
|
ulsch_harq->round-1
|
||||||
);
|
);
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Mark the HARQ process to release it later if max transmission reached
|
/* Mark the HARQ process to release it later if max transmission reached
|
||||||
* (see below).
|
* (see below).
|
||||||
@@ -1403,7 +1403,7 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
|
|||||||
T(T_ENB_PHY_ULSCH_UE_ACK, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe), T_INT(ulsch->rnti),
|
T(T_ENB_PHY_ULSCH_UE_ACK, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe), T_INT(ulsch->rnti),
|
||||||
T_INT(harq_pid));
|
T_INT(harq_pid));
|
||||||
|
|
||||||
#if defined(MESSAGE_CHART_GENERATOR_PHY)
|
|
||||||
MSC_LOG_RX_MESSAGE(
|
MSC_LOG_RX_MESSAGE(
|
||||||
MSC_PHY_ENB,MSC_PHY_UE,
|
MSC_PHY_ENB,MSC_PHY_UE,
|
||||||
NULL,0,
|
NULL,0,
|
||||||
@@ -1411,7 +1411,7 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
|
|||||||
frame,subframe,
|
frame,subframe,
|
||||||
ulsch->rnti,harq_pid
|
ulsch->rnti,harq_pid
|
||||||
);
|
);
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef DEBUG_PHY_PROC
|
#ifdef DEBUG_PHY_PROC
|
||||||
#ifdef DEBUG_ULSCH
|
#ifdef DEBUG_ULSCH
|
||||||
@@ -1604,6 +1604,16 @@ static void do_release_harq(PHY_VARS_eNB *eNB,int UE_id,int tb,uint16_t frame,ui
|
|||||||
dlsch1_harq = dlsch1->harq_processes[harq_pid];
|
dlsch1_harq = dlsch1->harq_processes[harq_pid];
|
||||||
AssertFatal(dlsch0_harq!=NULL,"dlsch0_harq is null\n");
|
AssertFatal(dlsch0_harq!=NULL,"dlsch0_harq is null\n");
|
||||||
|
|
||||||
|
#if T_TRACER
|
||||||
|
if (after_rounds != -1) {
|
||||||
|
T(T_ENB_PHY_DLSCH_UE_NACK, T_INT(0), T_INT(frame), T_INT(subframe),
|
||||||
|
T_INT(dlsch0->rnti), T_INT(harq_pid));
|
||||||
|
} else {
|
||||||
|
T(T_ENB_PHY_DLSCH_UE_ACK, T_INT(0), T_INT(frame), T_INT(subframe),
|
||||||
|
T_INT(dlsch0->rnti), T_INT(harq_pid));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (dlsch0_harq->round >= after_rounds) {
|
if (dlsch0_harq->round >= after_rounds) {
|
||||||
dlsch0_harq->status = SCH_IDLE;
|
dlsch0_harq->status = SCH_IDLE;
|
||||||
/*if ((dlsch1_harq == NULL)||
|
/*if ((dlsch1_harq == NULL)||
|
||||||
@@ -1631,6 +1641,15 @@ static void do_release_harq(PHY_VARS_eNB *eNB,int UE_id,int tb,uint16_t frame,ui
|
|||||||
dlsch1_harq = dlsch1->harq_processes[harq_pid];
|
dlsch1_harq = dlsch1->harq_processes[harq_pid];
|
||||||
AssertFatal(dlsch0_harq!=NULL,"dlsch0_harq is null\n");
|
AssertFatal(dlsch0_harq!=NULL,"dlsch0_harq is null\n");
|
||||||
|
|
||||||
|
#if T_TRACER
|
||||||
|
if (after_rounds != -1) {
|
||||||
|
T(T_ENB_PHY_DLSCH_UE_NACK, T_INT(0), T_INT(frame), T_INT(subframe),
|
||||||
|
T_INT(dlsch0->rnti), T_INT(harq_pid));
|
||||||
|
} else {
|
||||||
|
T(T_ENB_PHY_DLSCH_UE_ACK, T_INT(0), T_INT(frame), T_INT(subframe),
|
||||||
|
T_INT(dlsch0->rnti), T_INT(harq_pid));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
if (dlsch0_harq->round >= after_rounds) {
|
if (dlsch0_harq->round >= after_rounds) {
|
||||||
dlsch0_harq->status = SCH_IDLE;
|
dlsch0_harq->status = SCH_IDLE;
|
||||||
if ((dlsch1_harq == NULL)||
|
if ((dlsch1_harq == NULL)||
|
||||||
@@ -1753,22 +1772,6 @@ void fill_ulsch_harq_indication(PHY_VARS_eNB *eNB,LTE_UL_eNB_HARQ_t *ulsch_harq,
|
|||||||
pdu->harq_indication_fdd_rel13.harq_tb_n[i] = 2-ulsch_harq->o_ACK[i];
|
pdu->harq_indication_fdd_rel13.harq_tb_n[i] = 2-ulsch_harq->o_ACK[i];
|
||||||
// release DLSCH if needed
|
// release DLSCH if needed
|
||||||
release_harq(eNB,UE_id,i,frame,subframe,0xffff, ulsch_harq->o_ACK[i] == 1);
|
release_harq(eNB,UE_id,i,frame,subframe,0xffff, ulsch_harq->o_ACK[i] == 1);
|
||||||
|
|
||||||
|
|
||||||
#if T_TRACER
|
|
||||||
/* TODO: get correct harq pid */
|
|
||||||
{
|
|
||||||
int subframe_tx = (subframe+6)%10;
|
|
||||||
int frame_tx = subframe_tx >= 6 ? (frame+1023)%1024 : frame;
|
|
||||||
if (ulsch_harq->o_ACK[i] != 1) {
|
|
||||||
T(T_ENB_PHY_DLSCH_UE_NACK, T_INT(0), T_INT(frame), T_INT(subframe),
|
|
||||||
T_INT(rnti), T_INT(eNB->dlsch[UE_id][0]->harq_ids[frame_tx%2][subframe_tx]));
|
|
||||||
} else {
|
|
||||||
T(T_ENB_PHY_DLSCH_UE_ACK, T_INT(0), T_INT(frame), T_INT(subframe),
|
|
||||||
T_INT(rnti), T_INT(eNB->dlsch[UE_id][0]->harq_ids[frame_tx%2][subframe_tx]));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else { // TDD
|
else { // TDD
|
||||||
@@ -1857,21 +1860,6 @@ void fill_uci_harq_indication(PHY_VARS_eNB *eNB,
|
|||||||
pdu->harq_indication_fdd_rel13.harq_tb_n[0] = harq_ack[0];
|
pdu->harq_indication_fdd_rel13.harq_tb_n[0] = harq_ack[0];
|
||||||
// release DLSCH if needed
|
// release DLSCH if needed
|
||||||
release_harq(eNB,UE_id,0,frame,subframe,0xffff, harq_ack[0] == 1);
|
release_harq(eNB,UE_id,0,frame,subframe,0xffff, harq_ack[0] == 1);
|
||||||
|
|
||||||
|
|
||||||
#if T_TRACER
|
|
||||||
{
|
|
||||||
int subframe_tx = (subframe+6)%10;
|
|
||||||
int frame_tx = subframe_tx >= 6 ? (frame+1023)%1024 : frame;
|
|
||||||
if (harq_ack[0] != 1) {
|
|
||||||
T(T_ENB_PHY_DLSCH_UE_NACK, T_INT(0), T_INT(frame), T_INT(subframe),
|
|
||||||
T_INT(uci->rnti), T_INT(eNB->dlsch[UE_id][0]->harq_ids[frame_tx%2][subframe_tx]));
|
|
||||||
} else {
|
|
||||||
T(T_ENB_PHY_DLSCH_UE_ACK, T_INT(0), T_INT(frame), T_INT(subframe),
|
|
||||||
T_INT(uci->rnti), T_INT(eNB->dlsch[UE_id][0]->harq_ids[frame_tx%2][subframe_tx]));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
else if (uci->pucch_fmt == pucch_format1b) {
|
else if (uci->pucch_fmt == pucch_format1b) {
|
||||||
pdu->harq_indication_fdd_rel13.tl.tag = NFAPI_HARQ_INDICATION_FDD_REL13_TAG;
|
pdu->harq_indication_fdd_rel13.tl.tag = NFAPI_HARQ_INDICATION_FDD_REL13_TAG;
|
||||||
@@ -2041,16 +2029,15 @@ void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
|
|||||||
const int subframe = proc->subframe_rx;
|
const int subframe = proc->subframe_rx;
|
||||||
const int frame = proc->frame_rx;
|
const int frame = proc->frame_rx;
|
||||||
|
|
||||||
|
|
||||||
if ((fp->frame_type == TDD) && (subframe_select(fp,subframe)!=SF_UL)) return;
|
|
||||||
|
|
||||||
T(T_ENB_PHY_UL_TICK, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe));
|
|
||||||
|
|
||||||
/* TODO: use correct rxdata */
|
/* TODO: use correct rxdata */
|
||||||
T(T_ENB_PHY_INPUT_SIGNAL, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe), T_INT(0),
|
T(T_ENB_PHY_INPUT_SIGNAL, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe), T_INT(0),
|
||||||
T_BUFFER(&eNB->RU_list[0]->common.rxdata[0][subframe*eNB->frame_parms.samples_per_tti],
|
T_BUFFER(&eNB->RU_list[0]->common.rxdata[0][subframe*eNB->frame_parms.samples_per_tti],
|
||||||
eNB->frame_parms.samples_per_tti * 4));
|
eNB->frame_parms.samples_per_tti * 4));
|
||||||
|
|
||||||
|
if ((fp->frame_type == TDD) && (subframe_select(fp,subframe)!=SF_UL)) return;
|
||||||
|
|
||||||
|
T(T_ENB_PHY_UL_TICK, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe));
|
||||||
|
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_RX_UESPEC, 1 );
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_RX_UESPEC, 1 );
|
||||||
|
|
||||||
LOG_D(PHY,"[eNB %d] Frame %d: Doing phy_procedures_eNB_uespec_RX(%d)\n",eNB->Mod_id,frame, subframe);
|
LOG_D(PHY,"[eNB %d] Frame %d: Doing phy_procedures_eNB_uespec_RX(%d)\n",eNB->Mod_id,frame, subframe);
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -523,7 +523,7 @@ int main(int argc, char **argv)
|
|||||||
int c;
|
int c;
|
||||||
int k,i,j,aa;
|
int k,i,j,aa;
|
||||||
int re;
|
int re;
|
||||||
|
int loglvl=OAILOG_DEBUG;
|
||||||
|
|
||||||
int s,Kr,Kr_bytes;
|
int s,Kr,Kr_bytes;
|
||||||
|
|
||||||
@@ -1001,7 +1001,7 @@ int main(int argc, char **argv)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 'L':
|
case 'L':
|
||||||
set_glog(atoi(optarg));
|
loglvl = atoi(optarg);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'h':
|
case 'h':
|
||||||
@@ -1049,7 +1049,7 @@ int main(int argc, char **argv)
|
|||||||
"cannot load configuration module, exiting\n");
|
"cannot load configuration module, exiting\n");
|
||||||
logInit();
|
logInit();
|
||||||
// enable these lines if you need debug info
|
// enable these lines if you need debug info
|
||||||
set_glog(LOG_DEBUG);
|
set_glog(loglvl);
|
||||||
// moreover you need to init itti with the following line
|
// moreover you need to init itti with the following line
|
||||||
// however itti will catch all signals, so ctrl-c won't work anymore
|
// however itti will catch all signals, so ctrl-c won't work anymore
|
||||||
// alternatively you can disable ITTI completely in CMakeLists.txt
|
// alternatively you can disable ITTI completely in CMakeLists.txt
|
||||||
@@ -2046,24 +2046,9 @@ int main(int argc, char **argv)
|
|||||||
qsort (table_rx, time_vector_rx.size, sizeof(double), &compare);
|
qsort (table_rx, time_vector_rx.size, sizeof(double), &compare);
|
||||||
|
|
||||||
if (dump_table == 1 ) {
|
if (dump_table == 1 ) {
|
||||||
set_component_filelog(USIM); // file located in /tmp/usim.txt
|
set_component_filelog(SIM); // file located in /tmp/usim.txt
|
||||||
int n;
|
LOG_UDUMPMSG(SIM,table_tx,time_vector_tx.size,LOG_DUMP_DOUBLE,"The transmitter raw data: \n");
|
||||||
LOG_F(USIM,"The transmitter raw data: \n");
|
LOG_UDUMPMSG(SIM,table_rx,time_vector_rx.size,LOG_DUMP_DOUBLE,"Thereceiver raw data: \n");
|
||||||
|
|
||||||
for (n=0; n< time_vector_tx.size; n++) {
|
|
||||||
printf("%f ", table_tx[n]);
|
|
||||||
LOG_F(USIM,"%f ", table_tx[n]);
|
|
||||||
}
|
|
||||||
|
|
||||||
LOG_F(USIM,"\n");
|
|
||||||
LOG_F(USIM,"The receiver raw data: \n");
|
|
||||||
|
|
||||||
for (n=0; n< time_vector_rx.size; n++) {
|
|
||||||
// printf("%f ", table_rx[n]);
|
|
||||||
LOG_F(USIM,"%f ", table_rx[n]);
|
|
||||||
}
|
|
||||||
|
|
||||||
LOG_F(USIM,"\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
double tx_median = table_tx[time_vector_tx.size/2];
|
double tx_median = table_tx[time_vector_tx.size/2];
|
||||||
|
|||||||
@@ -5016,24 +5016,11 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
if (dump_table == 1 ) {
|
if (dump_table == 1 ) {
|
||||||
set_component_filelog(USIM); // file located in /tmp/usim.txt
|
set_component_filelog(USIM); // file located in /tmp/usim.txt
|
||||||
int n;
|
LOG_UDUMPMSG(RRC,(char *)table_tx,time_vector_tx.size,LOG_DUMP_DOUBLE,
|
||||||
LOG_F(USIM,"The transmitter raw data: \n");
|
"The transmitter raw data: \n");
|
||||||
|
LOG_UDUMPMSG(RRC,(char *)table_rx,time_vector_rx.size,LOG_DUMP_DOUBLE,
|
||||||
|
"The receiver raw data: \n");
|
||||||
|
|
||||||
for (n=0; n< time_vector_tx.size; n++) {
|
|
||||||
printf("%f ", table_tx[n]);
|
|
||||||
LOG_F(USIM,"%f ", table_tx[n]);
|
|
||||||
}
|
|
||||||
|
|
||||||
LOG_F(USIM,"\n");
|
|
||||||
LOG_F(USIM,"The receiver raw data: \n");
|
|
||||||
|
|
||||||
for (n=0; n< time_vector_rx.size; n++) {
|
|
||||||
// printf("%f ", table_rx[n]);
|
|
||||||
LOG_F(USIM,"%f ", table_rx[n]);
|
|
||||||
}
|
|
||||||
|
|
||||||
LOG_F(USIM,"\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
double tx_median = table_tx[time_vector_tx.size/2];
|
double tx_median = table_tx[time_vector_tx.size/2];
|
||||||
double tx_q1 = table_tx[time_vector_tx.size/4];
|
double tx_q1 = table_tx[time_vector_tx.size/4];
|
||||||
|
|||||||
@@ -3851,24 +3851,9 @@ PMI_FEEDBACK:
|
|||||||
qsort (table_rx, time_vector_rx.size, sizeof(double), &compare);
|
qsort (table_rx, time_vector_rx.size, sizeof(double), &compare);
|
||||||
|
|
||||||
if (dump_table == 1 ) {
|
if (dump_table == 1 ) {
|
||||||
set_component_filelog(USIM); // file located in /tmp/usim.txt
|
set_component_filelog(SIM); // file located in /tmp/usim.txt
|
||||||
int n;
|
LOG_UDUMPMSG(SIM,table_tx,time_vector_tx.size,LOG_DUMP_DOUBLE,"The transmitter raw data: \n");
|
||||||
LOG_F(USIM,"The transmitter raw data: \n");
|
LOG_UDUMPMSG(SIM,table_rx,time_vector_rx.size,LOG_DUMP_DOUBLE,"The receiver raw data: \n");
|
||||||
|
|
||||||
for (n=0; n< time_vector_tx.size; n++) {
|
|
||||||
printf("%f ", table_tx[n]);
|
|
||||||
LOG_F(USIM,"%f ", table_tx[n]);
|
|
||||||
}
|
|
||||||
|
|
||||||
LOG_F(USIM,"\n");
|
|
||||||
LOG_F(USIM,"The receiver raw data: \n");
|
|
||||||
|
|
||||||
for (n=0; n< time_vector_rx.size; n++) {
|
|
||||||
// printf("%f ", table_rx[n]);
|
|
||||||
LOG_F(USIM,"%f ", table_rx[n]);
|
|
||||||
}
|
|
||||||
|
|
||||||
LOG_F(USIM,"\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
double tx_median = table_tx[time_vector_tx.size/2];
|
double tx_median = table_tx[time_vector_tx.size/2];
|
||||||
|
|||||||
@@ -1491,24 +1491,9 @@ int main(int argc, char **argv)
|
|||||||
qsort (table_rx, time_vector_rx.size, sizeof(double), &compare);
|
qsort (table_rx, time_vector_rx.size, sizeof(double), &compare);
|
||||||
|
|
||||||
if (dump_table == 1 ) {
|
if (dump_table == 1 ) {
|
||||||
int n;
|
|
||||||
set_component_filelog(SIM); // file located in /tmp/usim.txt
|
set_component_filelog(SIM); // file located in /tmp/usim.txt
|
||||||
LOG_F(SIM,"The transmitter raw data: \n");
|
LOG_UDUMPMSG(SIM,table_tx,time_vector_tx.size,LOG_DUMP_DOUBLE,"The transmitter raw data: \n");
|
||||||
|
LOG_UDUMPMSG(SIM,table_rx,time_vector_rx.size,LOG_DUMP_DOUBLE,"The receiver raw data: \n");
|
||||||
for (n=0; n< time_vector_tx.size; n++) {
|
|
||||||
// printf("%f ", table_tx[n]);
|
|
||||||
LOG_F(SIM,"%f ", table_tx[n]);
|
|
||||||
}
|
|
||||||
|
|
||||||
LOG_F(SIM,"\n");
|
|
||||||
LOG_F(SIM,"The receiver raw data: \n");
|
|
||||||
|
|
||||||
for (n=0; n< time_vector_rx.size; n++) {
|
|
||||||
// printf("%f ", table_rx[n]);
|
|
||||||
LOG_F(SIM,"%f ", table_rx[n]);
|
|
||||||
}
|
|
||||||
|
|
||||||
LOG_F(SIM,"\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
double tx_median = table_tx[time_vector_tx.size/2];
|
double tx_median = table_tx[time_vector_tx.size/2];
|
||||||
|
|||||||
@@ -19,3 +19,24 @@
|
|||||||
* contact@openairinterface.org
|
* contact@openairinterface.org
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* eNB application layer -> X2AP messages */
|
||||||
|
/* ITTI LOG messages */
|
||||||
|
/* ENCODER */
|
||||||
|
MESSAGE_DEF(X2AP_RESET_REQUST_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , x2ap_reset_request_log)
|
||||||
|
MESSAGE_DEF(X2AP_RESOURCE_STATUS_RESPONSE_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , x2ap_resource_status_response_log)
|
||||||
|
MESSAGE_DEF(X2AP_RESOURCE_STATUS_FAILURE_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , x2ap_resource_status_failure_log)
|
||||||
|
|
||||||
|
/* Messages for X2AP logging */
|
||||||
|
MESSAGE_DEF(X2AP_SETUP_REQUEST_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , x2ap_setup_request_log)
|
||||||
|
|
||||||
|
|
||||||
|
/* eNB application layer -> X2AP messages */
|
||||||
|
MESSAGE_DEF(X2AP_REGISTER_ENB_REQ , MESSAGE_PRIORITY_MED, x2ap_register_enb_req_t , x2ap_register_enb_req)
|
||||||
|
|
||||||
|
/* X2AP -> eNB application layer messages */
|
||||||
|
MESSAGE_DEF(X2AP_REGISTER_ENB_CNF , MESSAGE_PRIORITY_MED, x2ap_register_enb_cnf_t , x2ap_register_enb_cnf)
|
||||||
|
MESSAGE_DEF(X2AP_DEREGISTERED_ENB_IND , MESSAGE_PRIORITY_MED, x2ap_deregistered_enb_ind_t , x2ap_deregistered_enb_ind)
|
||||||
|
|
||||||
|
/* handover messages X2AP <-> RRC */
|
||||||
|
MESSAGE_DEF(X2AP_HANDOVER_REQ , MESSAGE_PRIORITY_MED, x2ap_handover_req_t , x2ap_handover_req)
|
||||||
|
MESSAGE_DEF(X2AP_HANDOVER_REQ_ACK , MESSAGE_PRIORITY_MED, x2ap_handover_req_ack_t , x2ap_handover_req_ack)
|
||||||
|
|||||||
@@ -19,3 +19,158 @@
|
|||||||
* contact@openairinterface.org
|
* contact@openairinterface.org
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef X2AP_MESSAGES_TYPES_H_
|
||||||
|
#define X2AP_MESSAGES_TYPES_H_
|
||||||
|
|
||||||
|
#include "PhysCellId.h"
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------------------------//
|
||||||
|
// Defines to access message fields.
|
||||||
|
|
||||||
|
#define X2AP_REGISTER_ENB_REQ(mSGpTR) (mSGpTR)->ittiMsg.x2ap_register_enb_req
|
||||||
|
#define X2AP_HANDOVER_REQ(mSGpTR) (mSGpTR)->ittiMsg.x2ap_handover_req
|
||||||
|
#define X2AP_HANDOVER_REQ_ACK(mSGpTR) (mSGpTR)->ittiMsg.x2ap_handover_req_ack
|
||||||
|
#define X2AP_REGISTER_ENB_CNF(mSGpTR) (mSGpTR)->ittiMsg.x2ap_register_enb_cnf
|
||||||
|
#define X2AP_DEREGISTERED_ENB_IND(mSGpTR) (mSGpTR)->ittiMsg.x2ap_deregistered_enb_ind
|
||||||
|
|
||||||
|
|
||||||
|
#define X2AP_MAX_NB_ENB_IP_ADDRESS 2
|
||||||
|
|
||||||
|
// eNB application layer -> X2AP messages
|
||||||
|
typedef struct x2ap_register_enb_req_s {
|
||||||
|
/* Unique eNB_id to identify the eNB within EPC.
|
||||||
|
* For macro eNB ids this field should be 20 bits long.
|
||||||
|
* For home eNB ids this field should be 28 bits long.
|
||||||
|
*/
|
||||||
|
uint32_t eNB_id;
|
||||||
|
/* The type of the cell */
|
||||||
|
enum cell_type_e cell_type;
|
||||||
|
|
||||||
|
/* Optional name for the cell
|
||||||
|
* NOTE: the name can be NULL (i.e no name) and will be cropped to 150
|
||||||
|
* characters.
|
||||||
|
*/
|
||||||
|
char *eNB_name;
|
||||||
|
|
||||||
|
/* Tracking area code */
|
||||||
|
uint16_t tac;
|
||||||
|
|
||||||
|
/* Mobile Country Code
|
||||||
|
* Mobile Network Code
|
||||||
|
*/
|
||||||
|
uint16_t mcc;
|
||||||
|
uint16_t mnc;
|
||||||
|
uint8_t mnc_digit_length;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* EARFCN
|
||||||
|
*/
|
||||||
|
uint16_t fdd_uL_EARFCN;
|
||||||
|
uint16_t fdd_dL_EARFCN;
|
||||||
|
uint16_t tdd_EARFCN;
|
||||||
|
|
||||||
|
|
||||||
|
uint16_t fdd_uL_Transmission_Bandwidth;
|
||||||
|
uint16_t fdd_dL_Transmission_Bandwidth;
|
||||||
|
uint16_t tdd_Transmission_Bandwidth;
|
||||||
|
|
||||||
|
|
||||||
|
/* The local eNB IP address to bind */
|
||||||
|
net_ip_address_t enb_x2_ip_address;
|
||||||
|
|
||||||
|
/* Nb of MME to connect to */
|
||||||
|
uint8_t nb_x2;
|
||||||
|
|
||||||
|
/* List of target eNB to connect to for X2*/
|
||||||
|
net_ip_address_t target_enb_x2_ip_address[X2AP_MAX_NB_ENB_IP_ADDRESS];
|
||||||
|
|
||||||
|
/* Number of SCTP streams used for associations */
|
||||||
|
uint16_t sctp_in_streams;
|
||||||
|
uint16_t sctp_out_streams;
|
||||||
|
|
||||||
|
/* eNB port for X2C*/
|
||||||
|
uint32_t enb_port_for_X2C;
|
||||||
|
} x2ap_register_enb_req_t;
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------------------------//
|
||||||
|
// X2AP -> eNB application layer messages
|
||||||
|
typedef struct x2ap_register_enb_cnf_s {
|
||||||
|
/* Nb of connected eNBs*/
|
||||||
|
uint8_t nb_x2;
|
||||||
|
} x2ap_register_enb_cnf_t;
|
||||||
|
|
||||||
|
typedef struct x2ap_deregistered_enb_ind_s {
|
||||||
|
/* Nb of connected eNBs */
|
||||||
|
uint8_t nb_x2;
|
||||||
|
} x2ap_deregistered_enb_ind_t;
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------------------------//
|
||||||
|
// X2AP <-> RRC
|
||||||
|
typedef struct x2ap_gummei_s {
|
||||||
|
uint16_t mcc;
|
||||||
|
uint16_t mnc;
|
||||||
|
uint8_t mnc_len;
|
||||||
|
uint8_t mme_code;
|
||||||
|
uint16_t mme_group_id;
|
||||||
|
} x2ap_gummei_t;
|
||||||
|
|
||||||
|
typedef struct x2ap_lastvisitedcell_info_s {
|
||||||
|
uint16_t mcc;
|
||||||
|
uint16_t mnc;
|
||||||
|
uint8_t mnc_len;
|
||||||
|
PhysCellId_t target_physCellId;
|
||||||
|
cell_type_t cell_type;
|
||||||
|
uint64_t time_UE_StayedInCell;
|
||||||
|
}x2ap_lastvisitedcell_info_t;
|
||||||
|
|
||||||
|
//used for src
|
||||||
|
typedef struct x2ap_handover_req_s {
|
||||||
|
int source_rnti; /* TODO: to be fixed/remove */
|
||||||
|
int source_x2id; /* TODO: to be fixed/remove */
|
||||||
|
|
||||||
|
unsigned old_eNB_ue_s1ap_id:24;
|
||||||
|
|
||||||
|
PhysCellId_t target_physCellId;
|
||||||
|
|
||||||
|
x2ap_gummei_t ue_gummei;
|
||||||
|
|
||||||
|
/*UE-ContextInformation */
|
||||||
|
|
||||||
|
/* MME UE id */
|
||||||
|
uint32_t mme_ue_s1ap_id;
|
||||||
|
|
||||||
|
security_capabilities_t security_capabilities;
|
||||||
|
|
||||||
|
uint8_t kenb[32]; // keNB or keNB*
|
||||||
|
|
||||||
|
/*next_hop_chaining_coun */
|
||||||
|
long int kenb_ncc;
|
||||||
|
|
||||||
|
/* UE aggregate maximum bitrate */
|
||||||
|
ambr_t ue_ambr;
|
||||||
|
|
||||||
|
uint8_t nb_e_rabs_tobesetup;
|
||||||
|
|
||||||
|
/* list of e_rab setup-ed by RRC layers */
|
||||||
|
e_rab_setup_t e_rabs_tobesetup[S1AP_MAX_E_RAB];
|
||||||
|
|
||||||
|
/* ue_context_pP->ue_context.e_rab[i].param.sgw_addr; */
|
||||||
|
|
||||||
|
x2ap_lastvisitedcell_info_t lastvisitedcell_info;
|
||||||
|
|
||||||
|
/* TODO: this parameter has to be removed */
|
||||||
|
int target_mod_id;
|
||||||
|
} x2ap_handover_req_t;
|
||||||
|
|
||||||
|
typedef struct x2ap_handover_req_ack_s {
|
||||||
|
int source_rnti; /* TODO: to be fixed/remove */
|
||||||
|
int source_x2id; /* TODO: to be fixed/remove */
|
||||||
|
/* TODO: this parameter has to be removed */
|
||||||
|
int target_mod_id;
|
||||||
|
uint8_t rrc_buffer[1024 /* arbitrary, big enough */];
|
||||||
|
int rrc_buffer_size;
|
||||||
|
|
||||||
|
uint32_t mme_ue_s1ap_id;
|
||||||
|
} x2ap_handover_req_ack_t;
|
||||||
|
|
||||||
|
#endif /* X2AP_MESSAGES_TYPES_H_ */
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
#include "liblfds700.h"
|
#include "liblfds700.h"
|
||||||
|
|
||||||
#include "log.h"
|
#include "common/utils/LOG/log.h"
|
||||||
|
|
||||||
/*Flags showing if a mac agent has already been registered*/
|
/*Flags showing if a mac agent has already been registered*/
|
||||||
unsigned int mac_agent_registered[NUM_MAX_ENB];
|
unsigned int mac_agent_registered[NUM_MAX_ENB];
|
||||||
|
|||||||
@@ -31,7 +31,7 @@
|
|||||||
|
|
||||||
#include "liblfds700.h"
|
#include "liblfds700.h"
|
||||||
|
|
||||||
#include "log.h"
|
#include "common/utils/LOG/log.h"
|
||||||
|
|
||||||
/*Trigger boolean for RRC measurement*/
|
/*Trigger boolean for RRC measurement*/
|
||||||
bool triggered_rrc = false;
|
bool triggered_rrc = false;
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ int load_NB_IoT(void) {
|
|||||||
RCConfig_NbIoT_f_t RCConfig;
|
RCConfig_NbIoT_f_t RCConfig;
|
||||||
loader_shlibfunc_t shlib_fdesc[]=NBIOT_INTERFACE_FLIST;
|
loader_shlibfunc_t shlib_fdesc[]=NBIOT_INTERFACE_FLIST;
|
||||||
|
|
||||||
ret=load_module_shlib(NBIOT_MODULENAME,shlib_fdesc,sizeof(shlib_fdesc)/sizeof(loader_shlibfunc_t));
|
ret=load_module_shlib(NBIOT_MODULENAME,shlib_fdesc,sizeof(shlib_fdesc)/sizeof(loader_shlibfunc_t),NULL);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
+90
-51
@@ -35,7 +35,7 @@
|
|||||||
#include "assertions.h"
|
#include "assertions.h"
|
||||||
#include "common/ran_context.h"
|
#include "common/ran_context.h"
|
||||||
|
|
||||||
#include "log.h"
|
#include "common/utils/LOG/log.h"
|
||||||
|
|
||||||
#if defined(ENABLE_ITTI)
|
#if defined(ENABLE_ITTI)
|
||||||
# include "intertask_interface.h"
|
# include "intertask_interface.h"
|
||||||
@@ -44,8 +44,14 @@
|
|||||||
# include "s1ap_eNB.h"
|
# include "s1ap_eNB.h"
|
||||||
# include "sctp_eNB_task.h"
|
# include "sctp_eNB_task.h"
|
||||||
# include "gtpv1u_eNB_task.h"
|
# include "gtpv1u_eNB_task.h"
|
||||||
|
# else
|
||||||
|
# define EPC_MODE_ENABLED 0
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
//# include "x2ap_eNB.h"
|
||||||
|
# include "x2ap_messages_types.h"
|
||||||
|
# define X2AP_ENB_REGISTER_RETRY_DELAY 10
|
||||||
|
|
||||||
#include "openair1/PHY/INIT/phy_init.h"
|
#include "openair1/PHY/INIT/phy_init.h"
|
||||||
extern unsigned char NB_eNB_INST;
|
extern unsigned char NB_eNB_INST;
|
||||||
#endif
|
#endif
|
||||||
@@ -135,6 +141,30 @@ static uint32_t eNB_app_register(uint32_t enb_id_start, uint32_t enb_id_end)//,
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------------*/
|
||||||
|
static uint32_t eNB_app_register_x2(uint32_t enb_id_start, uint32_t enb_id_end)
|
||||||
|
{
|
||||||
|
uint32_t enb_id;
|
||||||
|
MessageDef *msg_p;
|
||||||
|
uint32_t register_enb_x2_pending = 0;
|
||||||
|
|
||||||
|
for (enb_id = enb_id_start; (enb_id < enb_id_end) ; enb_id++) {
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
msg_p = itti_alloc_new_message (TASK_ENB_APP, X2AP_REGISTER_ENB_REQ);
|
||||||
|
|
||||||
|
RCconfig_X2(msg_p, enb_id);
|
||||||
|
|
||||||
|
//itti_send_msg_to_task (TASK_X2AP, ENB_MODULE_ID_TO_INSTANCE(enb_id), msg_p);
|
||||||
|
|
||||||
|
register_enb_x2_pending++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return register_enb_x2_pending;
|
||||||
|
}
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
void *eNB_app_task(void *args_p)
|
void *eNB_app_task(void *args_p)
|
||||||
{
|
{
|
||||||
@@ -143,10 +173,13 @@ void *eNB_app_task(void *args_p)
|
|||||||
uint32_t enb_id_start = 0;
|
uint32_t enb_id_start = 0;
|
||||||
uint32_t enb_id_end = enb_id_start + enb_nb;
|
uint32_t enb_id_end = enb_id_start + enb_nb;
|
||||||
# if defined(ENABLE_USE_MME)
|
# if defined(ENABLE_USE_MME)
|
||||||
uint32_t register_enb_pending;
|
uint32_t register_enb_pending=0;
|
||||||
uint32_t registered_enb;
|
uint32_t registered_enb;
|
||||||
long enb_register_retry_timer_id;
|
long enb_register_retry_timer_id;
|
||||||
# endif
|
# endif
|
||||||
|
uint32_t x2_register_enb_pending;
|
||||||
|
//uint32_t x2_registered_enb;
|
||||||
|
//long x2_enb_register_retry_timer_id;
|
||||||
uint32_t enb_id;
|
uint32_t enb_id;
|
||||||
MessageDef *msg_p = NULL;
|
MessageDef *msg_p = NULL;
|
||||||
instance_t instance;
|
instance_t instance;
|
||||||
@@ -184,13 +217,17 @@ void *eNB_app_task(void *args_p)
|
|||||||
|
|
||||||
# if defined(ENABLE_USE_MME)
|
# if defined(ENABLE_USE_MME)
|
||||||
/* Try to register each eNB */
|
/* Try to register each eNB */
|
||||||
registered_enb = 0;
|
registered_enb = 0;
|
||||||
register_enb_pending = eNB_app_register (enb_id_start, enb_id_end);//, enb_properties_p);
|
register_enb_pending = eNB_app_register (enb_id_start, enb_id_end);//, enb_properties_p);
|
||||||
# else
|
#else
|
||||||
/* Start L2L1 task */
|
/* Start L2L1 task */
|
||||||
msg_p = itti_alloc_new_message(TASK_ENB_APP, INITIALIZE_MESSAGE);
|
msg_p = itti_alloc_new_message(TASK_ENB_APP, INITIALIZE_MESSAGE);
|
||||||
itti_send_msg_to_task(TASK_L2L1, INSTANCE_DEFAULT, msg_p);
|
itti_send_msg_to_task(TASK_L2L1, INSTANCE_DEFAULT, msg_p);
|
||||||
# endif
|
#endif
|
||||||
|
|
||||||
|
/* Try to register each eNB with each other */
|
||||||
|
// x2_registered_enb = 0;
|
||||||
|
x2_register_enb_pending = eNB_app_register_x2 (enb_id_start, enb_id_end);
|
||||||
|
|
||||||
do {
|
do {
|
||||||
// Wait for a message
|
// Wait for a message
|
||||||
@@ -208,66 +245,68 @@ void *eNB_app_task(void *args_p)
|
|||||||
LOG_I(ENB_APP, "Received %s\n", ITTI_MSG_NAME(msg_p));
|
LOG_I(ENB_APP, "Received %s\n", ITTI_MSG_NAME(msg_p));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
# if defined(ENABLE_USE_MME)
|
|
||||||
|
|
||||||
case S1AP_REGISTER_ENB_CNF:
|
case S1AP_REGISTER_ENB_CNF:
|
||||||
LOG_I(ENB_APP, "[eNB %d] Received %s: associated MME %d\n", instance, ITTI_MSG_NAME (msg_p),
|
# if defined(ENABLE_USE_MME)
|
||||||
S1AP_REGISTER_ENB_CNF(msg_p).nb_mme);
|
LOG_I(ENB_APP, "[eNB %d] Received %s: associated MME %d\n", instance, ITTI_MSG_NAME (msg_p),
|
||||||
|
S1AP_REGISTER_ENB_CNF(msg_p).nb_mme);
|
||||||
|
|
||||||
DevAssert(register_enb_pending > 0);
|
DevAssert(register_enb_pending > 0);
|
||||||
register_enb_pending--;
|
register_enb_pending--;
|
||||||
|
|
||||||
/* Check if at least eNB is registered with one MME */
|
/* Check if at least eNB is registered with one MME */
|
||||||
if (S1AP_REGISTER_ENB_CNF(msg_p).nb_mme > 0) {
|
if (S1AP_REGISTER_ENB_CNF(msg_p).nb_mme > 0) {
|
||||||
registered_enb++;
|
registered_enb++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check if all register eNB requests have been processed */
|
/* Check if all register eNB requests have been processed */
|
||||||
if (register_enb_pending == 0) {
|
if (register_enb_pending == 0) {
|
||||||
if (registered_enb == enb_nb) {
|
if (registered_enb == enb_nb) {
|
||||||
/* If all eNB are registered, start L2L1 task */
|
/* If all eNB are registered, start L2L1 task */
|
||||||
MessageDef *msg_init_p;
|
MessageDef *msg_init_p;
|
||||||
|
|
||||||
msg_init_p = itti_alloc_new_message (TASK_ENB_APP, INITIALIZE_MESSAGE);
|
msg_init_p = itti_alloc_new_message (TASK_ENB_APP, INITIALIZE_MESSAGE);
|
||||||
itti_send_msg_to_task (TASK_L2L1, INSTANCE_DEFAULT, msg_init_p);
|
itti_send_msg_to_task (TASK_L2L1, INSTANCE_DEFAULT, msg_init_p);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
LOG_W(ENB_APP, " %d eNB not associated with a MME, retrying registration in %d seconds ...\n",
|
LOG_W(ENB_APP, " %d eNB not associated with a MME, retrying registration in %d seconds ...\n",
|
||||||
enb_nb - registered_enb, ENB_REGISTER_RETRY_DELAY);
|
enb_nb - registered_enb, ENB_REGISTER_RETRY_DELAY);
|
||||||
|
|
||||||
/* Restart the eNB registration process in ENB_REGISTER_RETRY_DELAY seconds */
|
/* Restart the eNB registration process in ENB_REGISTER_RETRY_DELAY seconds */
|
||||||
if (timer_setup (ENB_REGISTER_RETRY_DELAY, 0, TASK_ENB_APP, INSTANCE_DEFAULT, TIMER_ONE_SHOT,
|
if (timer_setup (ENB_REGISTER_RETRY_DELAY, 0, TASK_ENB_APP, INSTANCE_DEFAULT, TIMER_ONE_SHOT,
|
||||||
NULL, &enb_register_retry_timer_id) < 0) {
|
NULL, &enb_register_retry_timer_id) < 0) {
|
||||||
LOG_E(ENB_APP, " Can not start eNB register retry timer, use \"sleep\" instead!\n");
|
LOG_E(ENB_APP, " Can not start eNB register retry timer, use \"sleep\" instead!\n");
|
||||||
|
|
||||||
sleep(ENB_REGISTER_RETRY_DELAY);
|
|
||||||
/* Restart the registration process */
|
|
||||||
registered_enb = 0;
|
|
||||||
register_enb_pending = eNB_app_register (enb_id_start, enb_id_end);//, enb_properties_p);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
sleep(ENB_REGISTER_RETRY_DELAY);
|
||||||
|
/* Restart the registration process */
|
||||||
|
registered_enb = 0;
|
||||||
|
register_enb_pending = eNB_app_register (enb_id_start, enb_id_end);//, enb_properties_p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case S1AP_DEREGISTERED_ENB_IND:
|
case S1AP_DEREGISTERED_ENB_IND:
|
||||||
LOG_W(ENB_APP, "[eNB %d] Received %s: associated MME %d\n", instance, ITTI_MSG_NAME (msg_p),
|
if (EPC_MODE_ENABLED) {
|
||||||
S1AP_DEREGISTERED_ENB_IND(msg_p).nb_mme);
|
LOG_W(ENB_APP, "[eNB %d] Received %s: associated MME %d\n", instance, ITTI_MSG_NAME (msg_p),
|
||||||
|
S1AP_DEREGISTERED_ENB_IND(msg_p).nb_mme);
|
||||||
|
|
||||||
/* TODO handle recovering of registration */
|
/* TODO handle recovering of registration */
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TIMER_HAS_EXPIRED:
|
case TIMER_HAS_EXPIRED:
|
||||||
LOG_I(ENB_APP, " Received %s: timer_id %ld\n", ITTI_MSG_NAME (msg_p), TIMER_HAS_EXPIRED(msg_p).timer_id);
|
# if defined(ENABLE_USE_MME)
|
||||||
|
LOG_I(ENB_APP, " Received %s: timer_id %ld\n", ITTI_MSG_NAME (msg_p), TIMER_HAS_EXPIRED(msg_p).timer_id);
|
||||||
if (TIMER_HAS_EXPIRED (msg_p).timer_id == enb_register_retry_timer_id) {
|
|
||||||
/* Restart the registration process */
|
|
||||||
registered_enb = 0;
|
|
||||||
register_enb_pending = eNB_app_register (enb_id_start, enb_id_end);//, enb_properties_p);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (TIMER_HAS_EXPIRED (msg_p).timer_id == enb_register_retry_timer_id) {
|
||||||
|
/* Restart the registration process */
|
||||||
|
registered_enb = 0;
|
||||||
|
register_enb_pending = eNB_app_register (enb_id_start, enb_id_end);//, enb_properties_p);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
# endif
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
LOG_E(ENB_APP, "Received unexpected message %s\n", ITTI_MSG_NAME (msg_p));
|
LOG_E(ENB_APP, "Received unexpected message %s\n", ITTI_MSG_NAME (msg_p));
|
||||||
|
|||||||
+194
-123
@@ -37,10 +37,12 @@
|
|||||||
#include "UTIL/OTG/otg_externs.h"
|
#include "UTIL/OTG/otg_externs.h"
|
||||||
#if defined(ENABLE_ITTI)
|
#if defined(ENABLE_ITTI)
|
||||||
# include "intertask_interface.h"
|
# include "intertask_interface.h"
|
||||||
# if defined(ENABLE_USE_MME)
|
# if defined(ENABLE_USE_MME)
|
||||||
# include "s1ap_eNB.h"
|
# include "s1ap_eNB.h"
|
||||||
# include "sctp_eNB_task.h"
|
# include "sctp_eNB_task.h"
|
||||||
# endif
|
# else
|
||||||
|
# define EPC_MODE_ENABLED 0
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
#include "sctp_default_values.h"
|
#include "sctp_default_values.h"
|
||||||
#include "SystemInformationBlockType2.h"
|
#include "SystemInformationBlockType2.h"
|
||||||
@@ -198,11 +200,10 @@ void RCconfig_flexran()
|
|||||||
/* eNB ID from configuration, as read in by RCconfig_RRC() */
|
/* eNB ID from configuration, as read in by RCconfig_RRC() */
|
||||||
if (!ENBParamList.paramarray[i][ENB_ENB_ID_IDX].uptr) {
|
if (!ENBParamList.paramarray[i][ENB_ENB_ID_IDX].uptr) {
|
||||||
// Calculate a default eNB ID
|
// Calculate a default eNB ID
|
||||||
# if defined(ENABLE_USE_MME)
|
if (EPC_MODE_ENABLED)
|
||||||
enb_id = i + (s1ap_generate_eNB_id () & 0xFFFF8);
|
enb_id = i + (s1ap_generate_eNB_id () & 0xFFFF8);
|
||||||
# else
|
else
|
||||||
enb_id = i;
|
enb_id = i;
|
||||||
# endif
|
|
||||||
} else {
|
} else {
|
||||||
enb_id = *(ENBParamList.paramarray[i][ENB_ENB_ID_IDX].uptr);
|
enb_id = *(ENBParamList.paramarray[i][ENB_ENB_ID_IDX].uptr);
|
||||||
}
|
}
|
||||||
@@ -546,32 +547,6 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) {
|
|||||||
int32_t srb1_max_retx_threshold = 0;
|
int32_t srb1_max_retx_threshold = 0;
|
||||||
|
|
||||||
int32_t my_int;
|
int32_t my_int;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
int32_t otg_ue_id = 0;
|
|
||||||
char* otg_app_type = NULL;
|
|
||||||
char* otg_bg_traffic = NULL;
|
|
||||||
char* glog_level = NULL;
|
|
||||||
char* glog_verbosity = NULL;
|
|
||||||
char* hw_log_level = NULL;
|
|
||||||
char* hw_log_verbosity = NULL;
|
|
||||||
char* phy_log_level = NULL;
|
|
||||||
char* phy_log_verbosity = NULL;
|
|
||||||
char* mac_log_level = NULL;
|
|
||||||
char* mac_log_verbosity = NULL;
|
|
||||||
char* rlc_log_level = NULL;
|
|
||||||
char* rlc_log_verbosity = NULL;
|
|
||||||
char* pdcp_log_level = NULL;
|
|
||||||
char* pdcp_log_verbosity = NULL;
|
|
||||||
char* rrc_log_level = NULL;
|
|
||||||
char* rrc_log_verbosity = NULL;
|
|
||||||
char* udp_log_verbosity = NULL;
|
|
||||||
char* osa_log_level = NULL;
|
|
||||||
char* osa_log_verbosity = NULL;
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
// for no gcc warnings
|
// for no gcc warnings
|
||||||
(void)my_int;
|
(void)my_int;
|
||||||
@@ -591,32 +566,13 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) {
|
|||||||
CCsParams[I].chkPptr = &(config_check_CCparams[I]);
|
CCsParams[I].chkPptr = &(config_check_CCparams[I]);
|
||||||
}
|
}
|
||||||
/* get global parameters, defined outside any section in the config file */
|
/* get global parameters, defined outside any section in the config file */
|
||||||
|
|
||||||
config_get( ENBSParams,sizeof(ENBSParams)/sizeof(paramdef_t),NULL);
|
config_get( ENBSParams,sizeof(ENBSParams)/sizeof(paramdef_t),NULL);
|
||||||
|
|
||||||
num_enbs = ENBSParams[ENB_ACTIVE_ENBS_IDX].numelt;
|
num_enbs = ENBSParams[ENB_ACTIVE_ENBS_IDX].numelt;
|
||||||
AssertFatal (i<num_enbs,
|
AssertFatal (i<num_enbs,
|
||||||
"Failed to parse config file no %ith element in %s \n",i, ENB_CONFIG_STRING_ACTIVE_ENBS);
|
"Failed to parse config file no %ith element in %s \n",i, ENB_CONFIG_STRING_ACTIVE_ENBS);
|
||||||
|
|
||||||
#if defined(ENABLE_ITTI) && defined(ENABLE_USE_MME)
|
|
||||||
|
|
||||||
|
|
||||||
if (strcasecmp( *(ENBSParams[ENB_ASN1_VERBOSITY_IDX].strptr), ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE) == 0) {
|
|
||||||
asn_debug = 0;
|
|
||||||
asn1_xer_print = 0;
|
|
||||||
} else if (strcasecmp( *(ENBSParams[ENB_ASN1_VERBOSITY_IDX].strptr), ENB_CONFIG_STRING_ASN1_VERBOSITY_INFO) == 0) {
|
|
||||||
asn_debug = 1;
|
|
||||||
asn1_xer_print = 1;
|
|
||||||
} else if (strcasecmp(*(ENBSParams[ENB_ASN1_VERBOSITY_IDX].strptr) , ENB_CONFIG_STRING_ASN1_VERBOSITY_ANNOYING) == 0) {
|
|
||||||
asn_debug = 1;
|
|
||||||
asn1_xer_print = 2;
|
|
||||||
} else {
|
|
||||||
asn_debug = 0;
|
|
||||||
asn1_xer_print = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (num_enbs>0) {
|
if (num_enbs>0) {
|
||||||
@@ -628,14 +584,14 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) {
|
|||||||
|
|
||||||
if (ENBParamList.paramarray[i][ENB_ENB_ID_IDX].uptr == NULL) {
|
if (ENBParamList.paramarray[i][ENB_ENB_ID_IDX].uptr == NULL) {
|
||||||
// Calculate a default eNB ID
|
// Calculate a default eNB ID
|
||||||
# if defined(ENABLE_USE_MME)
|
if (EPC_MODE_ENABLED) {
|
||||||
uint32_t hash;
|
uint32_t hash;
|
||||||
|
|
||||||
hash = s1ap_generate_eNB_id ();
|
hash = s1ap_generate_eNB_id ();
|
||||||
enb_id = i + (hash & 0xFFFF8);
|
enb_id = i + (hash & 0xFFFF8);
|
||||||
# else
|
} else {
|
||||||
enb_id = i;
|
enb_id = i;
|
||||||
# endif
|
}
|
||||||
} else {
|
} else {
|
||||||
enb_id = *(ENBParamList.paramarray[i][ENB_ENB_ID_IDX].uptr);
|
enb_id = *(ENBParamList.paramarray[i][ENB_ENB_ID_IDX].uptr);
|
||||||
}
|
}
|
||||||
@@ -2255,23 +2211,9 @@ int RCconfig_S1(MessageDef *msg_p, uint32_t i) {
|
|||||||
|
|
||||||
/* get global parameters, defined outside any section in the config file */
|
/* get global parameters, defined outside any section in the config file */
|
||||||
|
|
||||||
config_get( ENBSParams,sizeof(ENBSParams)/sizeof(paramdef_t),NULL);
|
config_get( ENBSParams,sizeof(ENBSParams)/sizeof(paramdef_t),NULL);
|
||||||
#if defined(ENABLE_ITTI) && defined(ENABLE_USE_MME)
|
|
||||||
if (strcasecmp( *(ENBSParams[ENB_ASN1_VERBOSITY_IDX].strptr), ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE) == 0) {
|
|
||||||
asn_debug = 0;
|
|
||||||
asn1_xer_print = 0;
|
|
||||||
} else if (strcasecmp( *(ENBSParams[ENB_ASN1_VERBOSITY_IDX].strptr), ENB_CONFIG_STRING_ASN1_VERBOSITY_INFO) == 0) {
|
|
||||||
asn_debug = 1;
|
|
||||||
asn1_xer_print = 1;
|
|
||||||
} else if (strcasecmp(*(ENBSParams[ENB_ASN1_VERBOSITY_IDX].strptr) , ENB_CONFIG_STRING_ASN1_VERBOSITY_ANNOYING) == 0) {
|
|
||||||
asn_debug = 1;
|
|
||||||
asn1_xer_print = 2;
|
|
||||||
} else {
|
|
||||||
asn_debug = 0;
|
|
||||||
asn1_xer_print = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
AssertFatal (i<ENBSParams[ENB_ACTIVE_ENBS_IDX].numelt,
|
AssertFatal (i<ENBSParams[ENB_ACTIVE_ENBS_IDX].numelt,
|
||||||
"Failed to parse config file %s, %uth attribute %s \n",
|
"Failed to parse config file %s, %uth attribute %s \n",
|
||||||
@@ -2291,17 +2233,17 @@ int RCconfig_S1(MessageDef *msg_p, uint32_t i) {
|
|||||||
if (ENBParamList.paramarray[k][ENB_ENB_ID_IDX].uptr == NULL) {
|
if (ENBParamList.paramarray[k][ENB_ENB_ID_IDX].uptr == NULL) {
|
||||||
// Calculate a default eNB ID
|
// Calculate a default eNB ID
|
||||||
|
|
||||||
# if defined(ENABLE_USE_MME)
|
if (EPC_MODE_ENABLED) {
|
||||||
uint32_t hash;
|
uint32_t hash;
|
||||||
|
|
||||||
hash = s1ap_generate_eNB_id ();
|
hash = s1ap_generate_eNB_id ();
|
||||||
enb_id = k + (hash & 0xFFFF8);
|
enb_id = k + (hash & 0xFFFF8);
|
||||||
# else
|
} else {
|
||||||
enb_id = k;
|
enb_id = k;
|
||||||
# endif
|
}
|
||||||
} else {
|
} else {
|
||||||
enb_id = *(ENBParamList.paramarray[k][ENB_ENB_ID_IDX].uptr);
|
enb_id = *(ENBParamList.paramarray[k][ENB_ENB_ID_IDX].uptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// search if in active list
|
// search if in active list
|
||||||
@@ -2349,11 +2291,7 @@ int RCconfig_S1(MessageDef *msg_p, uint32_t i) {
|
|||||||
strcpy(S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[l].ipv4_address,*(S1ParamList.paramarray[l][ENB_MME_IPV4_ADDRESS_IDX].strptr));
|
strcpy(S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[l].ipv4_address,*(S1ParamList.paramarray[l][ENB_MME_IPV4_ADDRESS_IDX].strptr));
|
||||||
strcpy(S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[l].ipv6_address,*(S1ParamList.paramarray[l][ENB_MME_IPV6_ADDRESS_IDX].strptr));
|
strcpy(S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[l].ipv6_address,*(S1ParamList.paramarray[l][ENB_MME_IPV6_ADDRESS_IDX].strptr));
|
||||||
|
|
||||||
if (strcmp(*(S1ParamList.paramarray[l][ENB_MME_IP_ADDRESS_ACTIVE_IDX].strptr), "yes") == 0) {
|
|
||||||
#if defined(ENABLE_USE_MME)
|
|
||||||
EPC_MODE_ENABLED = 1;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
if (strcmp(*(S1ParamList.paramarray[l][ENB_MME_IP_ADDRESS_PREFERENCE_IDX].strptr), "ipv4") == 0) {
|
if (strcmp(*(S1ParamList.paramarray[l][ENB_MME_IP_ADDRESS_PREFERENCE_IDX].strptr), "ipv4") == 0) {
|
||||||
S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[l].ipv4 = 1;
|
S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[l].ipv4 = 1;
|
||||||
} else if (strcmp(*(S1ParamList.paramarray[l][ENB_MME_IP_ADDRESS_PREFERENCE_IDX].strptr), "ipv6") == 0) {
|
} else if (strcmp(*(S1ParamList.paramarray[l][ENB_MME_IP_ADDRESS_PREFERENCE_IDX].strptr), "ipv6") == 0) {
|
||||||
@@ -2368,12 +2306,12 @@ int RCconfig_S1(MessageDef *msg_p, uint32_t i) {
|
|||||||
// SCTP SETTING
|
// SCTP SETTING
|
||||||
S1AP_REGISTER_ENB_REQ (msg_p).sctp_out_streams = SCTP_OUT_STREAMS;
|
S1AP_REGISTER_ENB_REQ (msg_p).sctp_out_streams = SCTP_OUT_STREAMS;
|
||||||
S1AP_REGISTER_ENB_REQ (msg_p).sctp_in_streams = SCTP_IN_STREAMS;
|
S1AP_REGISTER_ENB_REQ (msg_p).sctp_in_streams = SCTP_IN_STREAMS;
|
||||||
# if defined(ENABLE_USE_MME)
|
if (EPC_MODE_ENABLED) {
|
||||||
sprintf(aprefix,"%s.[%i].%s",ENB_CONFIG_STRING_ENB_LIST,k,ENB_CONFIG_STRING_SCTP_CONFIG);
|
sprintf(aprefix,"%s.[%i].%s",ENB_CONFIG_STRING_ENB_LIST,k,ENB_CONFIG_STRING_SCTP_CONFIG);
|
||||||
config_get( SCTPParams,sizeof(SCTPParams)/sizeof(paramdef_t),aprefix);
|
config_get( SCTPParams,sizeof(SCTPParams)/sizeof(paramdef_t),aprefix);
|
||||||
S1AP_REGISTER_ENB_REQ (msg_p).sctp_in_streams = (uint16_t)*(SCTPParams[ENB_SCTP_INSTREAMS_IDX].uptr);
|
S1AP_REGISTER_ENB_REQ (msg_p).sctp_in_streams = (uint16_t)*(SCTPParams[ENB_SCTP_INSTREAMS_IDX].uptr);
|
||||||
S1AP_REGISTER_ENB_REQ (msg_p).sctp_out_streams = (uint16_t)*(SCTPParams[ENB_SCTP_OUTSTREAMS_IDX].uptr);
|
S1AP_REGISTER_ENB_REQ (msg_p).sctp_out_streams = (uint16_t)*(SCTPParams[ENB_SCTP_OUTSTREAMS_IDX].uptr);
|
||||||
#endif
|
}
|
||||||
|
|
||||||
sprintf(aprefix,"%s.[%i].%s",ENB_CONFIG_STRING_ENB_LIST,k,ENB_CONFIG_STRING_NETWORK_INTERFACES_CONFIG);
|
sprintf(aprefix,"%s.[%i].%s",ENB_CONFIG_STRING_ENB_LIST,k,ENB_CONFIG_STRING_NETWORK_INTERFACES_CONFIG);
|
||||||
// NETWORK_INTERFACES
|
// NETWORK_INTERFACES
|
||||||
@@ -2388,28 +2326,6 @@ int RCconfig_S1(MessageDef *msg_p, uint32_t i) {
|
|||||||
|
|
||||||
strcpy(S1AP_REGISTER_ENB_REQ (msg_p).enb_ip_address.ipv4_address, address);
|
strcpy(S1AP_REGISTER_ENB_REQ (msg_p).enb_ip_address.ipv4_address, address);
|
||||||
|
|
||||||
/*
|
|
||||||
in_addr_t ipv4_address;
|
|
||||||
|
|
||||||
if (address) {
|
|
||||||
IPV4_STR_ADDR_TO_INT_NWBO ( address, ipv4_address, "BAD IP ADDRESS FORMAT FOR eNB S1_U !\n" );
|
|
||||||
}
|
|
||||||
strcpy(S1AP_REGISTER_ENB_REQ (msg_p).enb_ip_address.ipv4_address, inet_ntoa(ipv4_address));
|
|
||||||
// S1AP_REGISTER_ENB_REQ (msg_p).enb_port_for_S1U = enb_port_for_S1U;
|
|
||||||
|
|
||||||
|
|
||||||
S1AP_REGISTER_ENB_REQ (msg_p).enb_interface_name_for_S1_MME = strdup(enb_interface_name_for_S1_MME);
|
|
||||||
cidr = enb_ipv4_address_for_S1_MME;
|
|
||||||
address = strtok(cidr, "/");
|
|
||||||
|
|
||||||
if (address) {
|
|
||||||
IPV4_STR_ADDR_TO_INT_NWBO ( address, S1AP_REGISTER_ENB_REQ(msg_p).enb_ipv4_address_for_S1_MME, "BAD IP ADDRESS FORMAT FOR eNB S1_MME !\n" );
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2419,6 +2335,158 @@ int RCconfig_S1(MessageDef *msg_p, uint32_t i) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int RCconfig_X2(MessageDef *msg_p, uint32_t i)
|
||||||
|
{
|
||||||
|
int j, k, l;
|
||||||
|
|
||||||
|
int enb_id;
|
||||||
|
|
||||||
|
char *address = NULL;
|
||||||
|
char *cidr = NULL;
|
||||||
|
|
||||||
|
paramdef_t ENBSParams[] = ENBSPARAMS_DESC;
|
||||||
|
paramdef_t ENBParams[] = ENBPARAMS_DESC;
|
||||||
|
paramlist_def_t ENBParamList = {ENB_CONFIG_STRING_ENB_LIST,NULL,0};
|
||||||
|
|
||||||
|
/* get global parameters, defined outside any section in the config file */
|
||||||
|
config_get( ENBSParams,sizeof(ENBSParams)/sizeof(paramdef_t),NULL);
|
||||||
|
/*#if defined(ENABLE_ITTI) && defined(ENABLE_USE_MME)
|
||||||
|
if (strcasecmp( *(ENBSParams[ENB_ASN1_VERBOSITY_IDX].strptr), ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE) == 0) {
|
||||||
|
asn_debug = 0;
|
||||||
|
asn1_xer_print = 0;
|
||||||
|
} else if (strcasecmp( *(ENBSParams[ENB_ASN1_VERBOSITY_IDX].strptr), ENB_CONFIG_STRING_ASN1_VERBOSITY_INFO) == 0) {
|
||||||
|
asn_debug = 1;
|
||||||
|
asn1_xer_print = 1;
|
||||||
|
} else if (strcasecmp(*(ENBSParams[ENB_ASN1_VERBOSITY_IDX].strptr) , ENB_CONFIG_STRING_ASN1_VERBOSITY_ANNOYING) == 0) {
|
||||||
|
asn_debug = 1;
|
||||||
|
asn1_xer_print = 2;
|
||||||
|
} else {
|
||||||
|
asn_debug = 0;
|
||||||
|
asn1_xer_print = 0;
|
||||||
|
}
|
||||||
|
#endif */
|
||||||
|
|
||||||
|
AssertFatal(i < ENBSParams[ENB_ACTIVE_ENBS_IDX].numelt,
|
||||||
|
"Failed to parse config file %s, %uth attribute %s \n",
|
||||||
|
RC.config_file_name, i, ENB_CONFIG_STRING_ACTIVE_ENBS);
|
||||||
|
|
||||||
|
if (ENBSParams[ENB_ACTIVE_ENBS_IDX].numelt > 0) {
|
||||||
|
// Output a list of all eNBs.
|
||||||
|
config_getlist( &ENBParamList,ENBParams,sizeof(ENBParams)/sizeof(paramdef_t),NULL);
|
||||||
|
if (ENBParamList.numelt > 0) {
|
||||||
|
for (k = 0; k < ENBParamList.numelt; k++) {
|
||||||
|
if (ENBParamList.paramarray[k][ENB_ENB_ID_IDX].uptr == NULL) {
|
||||||
|
// Calculate a default eNB ID
|
||||||
|
# if defined(ENABLE_USE_MME)
|
||||||
|
uint32_t hash;
|
||||||
|
|
||||||
|
hash = s1ap_generate_eNB_id ();
|
||||||
|
enb_id = k + (hash & 0xFFFF8);
|
||||||
|
# else
|
||||||
|
enb_id = k;
|
||||||
|
# endif
|
||||||
|
} else {
|
||||||
|
enb_id = *(ENBParamList.paramarray[k][ENB_ENB_ID_IDX].uptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
// search if in active list
|
||||||
|
for (j = 0; j < ENBSParams[ENB_ACTIVE_ENBS_IDX].numelt; j++) {
|
||||||
|
if (strcmp(ENBSParams[ENB_ACTIVE_ENBS_IDX].strlistptr[j], *(ENBParamList.paramarray[k][ENB_ENB_NAME_IDX].strptr)) == 0) {
|
||||||
|
|
||||||
|
paramdef_t X2Params[] = X2PARAMS_DESC;
|
||||||
|
paramlist_def_t X2ParamList = {ENB_CONFIG_STRING_TARGET_ENB_X2_IP_ADDRESS,NULL,0};
|
||||||
|
|
||||||
|
paramdef_t SCTPParams[] = SCTPPARAMS_DESC;
|
||||||
|
paramdef_t NETParams[] = NETPARAMS_DESC;
|
||||||
|
char aprefix[MAX_OPTNAME_SIZE*2 + 8];
|
||||||
|
|
||||||
|
/* Some default/random parameters */
|
||||||
|
|
||||||
|
X2AP_REGISTER_ENB_REQ (msg_p).eNB_id = enb_id;
|
||||||
|
|
||||||
|
if (strcmp(*(ENBParamList.paramarray[k][ENB_CELL_TYPE_IDX].strptr), "CELL_MACRO_ENB") == 0) {
|
||||||
|
X2AP_REGISTER_ENB_REQ (msg_p).cell_type = CELL_MACRO_ENB;
|
||||||
|
} else if (strcmp(*(ENBParamList.paramarray[k][ENB_CELL_TYPE_IDX].strptr), "CELL_HOME_ENB") == 0) {
|
||||||
|
X2AP_REGISTER_ENB_REQ (msg_p).cell_type = CELL_HOME_ENB;
|
||||||
|
} else {
|
||||||
|
AssertFatal (0,
|
||||||
|
"Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for cell_type choice: CELL_MACRO_ENB or CELL_HOME_ENB !\n",
|
||||||
|
RC.config_file_name, i, *(ENBParamList.paramarray[k][ENB_CELL_TYPE_IDX].strptr));
|
||||||
|
}
|
||||||
|
|
||||||
|
X2AP_REGISTER_ENB_REQ (msg_p).eNB_name = strdup(*(ENBParamList.paramarray[k][ENB_ENB_NAME_IDX].strptr));
|
||||||
|
X2AP_REGISTER_ENB_REQ (msg_p).tac = (uint16_t)atoi(*(ENBParamList.paramarray[k][ENB_TRACKING_AREA_CODE_IDX].strptr));
|
||||||
|
X2AP_REGISTER_ENB_REQ (msg_p).mcc = (uint16_t)atoi(*(ENBParamList.paramarray[k][ENB_MOBILE_COUNTRY_CODE_IDX].strptr));
|
||||||
|
X2AP_REGISTER_ENB_REQ (msg_p).mnc = (uint16_t)atoi(*(ENBParamList.paramarray[k][ENB_MOBILE_NETWORK_CODE_IDX].strptr));
|
||||||
|
X2AP_REGISTER_ENB_REQ (msg_p).mnc_digit_length = strlen(*(ENBParamList.paramarray[k][ENB_MOBILE_NETWORK_CODE_IDX].strptr));
|
||||||
|
|
||||||
|
AssertFatal((X2AP_REGISTER_ENB_REQ (msg_p).mnc_digit_length == 2) ||
|
||||||
|
(X2AP_REGISTER_ENB_REQ (msg_p).mnc_digit_length == 3),
|
||||||
|
"BAD MNC DIGIT LENGTH %d",
|
||||||
|
X2AP_REGISTER_ENB_REQ (msg_p).mnc_digit_length);
|
||||||
|
|
||||||
|
sprintf(aprefix,"%s.[%i]",ENB_CONFIG_STRING_ENB_LIST,k);
|
||||||
|
config_getlist( &X2ParamList,X2Params,sizeof(X2Params)/sizeof(paramdef_t),aprefix);
|
||||||
|
|
||||||
|
if(X2ParamList.numelt>X2AP_MAX_NB_ENB_IP_ADDRESS){
|
||||||
|
LOG_E(RRC,"value of X2ParamList.numelt %d must be lower than X2AP_MAX_NB_ENB_IP_ADDRESS %d value: reconsider to increase X2AP_MAX_NB_ENB_IP_ADDRESS\n",X2ParamList.numelt,X2AP_MAX_NB_ENB_IP_ADDRESS);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
X2AP_REGISTER_ENB_REQ (msg_p).nb_x2 = 0;
|
||||||
|
for (l = 0; l < X2ParamList.numelt; l++) {
|
||||||
|
X2AP_REGISTER_ENB_REQ (msg_p).nb_x2 += 1;
|
||||||
|
|
||||||
|
strcpy(X2AP_REGISTER_ENB_REQ (msg_p).target_enb_x2_ip_address[l].ipv4_address,*(X2ParamList.paramarray[l][ENB_X2_IPV4_ADDRESS_IDX].strptr));
|
||||||
|
strcpy(X2AP_REGISTER_ENB_REQ (msg_p).target_enb_x2_ip_address[l].ipv6_address,*(X2ParamList.paramarray[l][ENB_X2_IPV6_ADDRESS_IDX].strptr));
|
||||||
|
|
||||||
|
if (strcmp(*(X2ParamList.paramarray[l][ENB_X2_IP_ADDRESS_PREFERENCE_IDX].strptr), "ipv4") == 0) {
|
||||||
|
X2AP_REGISTER_ENB_REQ (msg_p).target_enb_x2_ip_address[l].ipv4 = 1;
|
||||||
|
} else if (strcmp(*(X2ParamList.paramarray[l][ENB_X2_IP_ADDRESS_PREFERENCE_IDX].strptr), "ipv6") == 0) {
|
||||||
|
X2AP_REGISTER_ENB_REQ (msg_p).target_enb_x2_ip_address[l].ipv6 = 1;
|
||||||
|
} else if (strcmp(*(X2ParamList.paramarray[l][ENB_X2_IP_ADDRESS_PREFERENCE_IDX].strptr), "no") == 0) {
|
||||||
|
X2AP_REGISTER_ENB_REQ (msg_p).target_enb_x2_ip_address[l].ipv4 = 1;
|
||||||
|
X2AP_REGISTER_ENB_REQ (msg_p).target_enb_x2_ip_address[l].ipv6 = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// SCTP SETTING
|
||||||
|
X2AP_REGISTER_ENB_REQ (msg_p).sctp_out_streams = SCTP_OUT_STREAMS;
|
||||||
|
X2AP_REGISTER_ENB_REQ (msg_p).sctp_in_streams = SCTP_IN_STREAMS;
|
||||||
|
# if defined(ENABLE_USE_MME)
|
||||||
|
sprintf(aprefix,"%s.[%i].%s",ENB_CONFIG_STRING_ENB_LIST,k,ENB_CONFIG_STRING_SCTP_CONFIG);
|
||||||
|
config_get( SCTPParams,sizeof(SCTPParams)/sizeof(paramdef_t),aprefix);
|
||||||
|
X2AP_REGISTER_ENB_REQ (msg_p).sctp_in_streams = (uint16_t)*(SCTPParams[ENB_SCTP_INSTREAMS_IDX].uptr);
|
||||||
|
X2AP_REGISTER_ENB_REQ (msg_p).sctp_out_streams = (uint16_t)*(SCTPParams[ENB_SCTP_OUTSTREAMS_IDX].uptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
sprintf(aprefix,"%s.[%i].%s",ENB_CONFIG_STRING_ENB_LIST,k,ENB_CONFIG_STRING_NETWORK_INTERFACES_CONFIG);
|
||||||
|
|
||||||
|
// NETWORK_INTERFACES
|
||||||
|
config_get( NETParams,sizeof(NETParams)/sizeof(paramdef_t),aprefix);
|
||||||
|
|
||||||
|
X2AP_REGISTER_ENB_REQ (msg_p).enb_port_for_X2C = (uint32_t)*(NETParams[ENB_PORT_FOR_X2C_IDX].uptr);
|
||||||
|
|
||||||
|
if ((NETParams[ENB_IPV4_ADDR_FOR_X2C_IDX].strptr == NULL) || (X2AP_REGISTER_ENB_REQ (msg_p).enb_port_for_X2C == 0)) {
|
||||||
|
LOG_E(RRC,"Add eNB IPv4 address and/or port for X2C in the CONF file!\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
cidr = *(NETParams[ENB_IPV4_ADDR_FOR_X2C_IDX].strptr);
|
||||||
|
address = strtok(cidr, "/");
|
||||||
|
|
||||||
|
X2AP_REGISTER_ENB_REQ (msg_p).enb_x2_ip_address.ipv6 = 0;
|
||||||
|
X2AP_REGISTER_ENB_REQ (msg_p).enb_x2_ip_address.ipv4 = 1;
|
||||||
|
|
||||||
|
strcpy(X2AP_REGISTER_ENB_REQ (msg_p).enb_x2_ip_address.ipv4_address, address);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void RCConfig(void) {
|
void RCConfig(void) {
|
||||||
|
|
||||||
paramlist_def_t MACRLCParamList = {CONFIG_STRING_MACRLC_LIST,NULL,0};
|
paramlist_def_t MACRLCParamList = {CONFIG_STRING_MACRLC_LIST,NULL,0};
|
||||||
@@ -2436,8 +2504,11 @@ void RCConfig(void) {
|
|||||||
printf("Getting ENBSParams\n");
|
printf("Getting ENBSParams\n");
|
||||||
|
|
||||||
config_get( ENBSParams,sizeof(ENBSParams)/sizeof(paramdef_t),NULL);
|
config_get( ENBSParams,sizeof(ENBSParams)/sizeof(paramdef_t),NULL);
|
||||||
|
# if defined(ENABLE_USE_MME)
|
||||||
|
EPC_MODE_ENABLED = ((*ENBSParams[ENB_NOS1_IDX].uptr) == 0);
|
||||||
|
#endif
|
||||||
RC.nb_inst = ENBSParams[ENB_ACTIVE_ENBS_IDX].numelt;
|
RC.nb_inst = ENBSParams[ENB_ACTIVE_ENBS_IDX].numelt;
|
||||||
|
|
||||||
if (RC.nb_inst > 0) {
|
if (RC.nb_inst > 0) {
|
||||||
RC.nb_CC = (int *)malloc((1+RC.nb_inst)*sizeof(int));
|
RC.nb_CC = (int *)malloc((1+RC.nb_inst)*sizeof(int));
|
||||||
for (int i=0;i<RC.nb_inst;i++) {
|
for (int i=0;i<RC.nb_inst;i++) {
|
||||||
|
|||||||
@@ -106,6 +106,7 @@ void ru_config_display(void);
|
|||||||
|
|
||||||
int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc);
|
int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc);
|
||||||
int RCconfig_S1(MessageDef *msg_p, uint32_t i);
|
int RCconfig_S1(MessageDef *msg_p, uint32_t i);
|
||||||
|
int RCconfig_X2(MessageDef *msg_p, uint32_t i);
|
||||||
|
|
||||||
#endif /* ENB_CONFIG_H_ */
|
#endif /* ENB_CONFIG_H_ */
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|||||||
@@ -55,11 +55,6 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
#if defined(ENABLE_ITTI) && defined(ENABLE_USE_MME)
|
|
||||||
extern int asn_debug;
|
|
||||||
extern int asn1_xer_print;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef LIBCONFIG_LONG
|
#ifdef LIBCONFIG_LONG
|
||||||
#define libconfig_int long
|
#define libconfig_int long
|
||||||
#else
|
#else
|
||||||
@@ -102,6 +97,8 @@ typedef enum {
|
|||||||
#define CONFIG_STRING_RU_MAX_RXGAIN "max_rxgain"
|
#define CONFIG_STRING_RU_MAX_RXGAIN "max_rxgain"
|
||||||
#define CONFIG_STRING_RU_IF_COMPRESSION "if_compression"
|
#define CONFIG_STRING_RU_IF_COMPRESSION "if_compression"
|
||||||
#define CONFIG_STRING_RU_NBIOTRRC_LIST "NbIoT_RRC_instances"
|
#define CONFIG_STRING_RU_NBIOTRRC_LIST "NbIoT_RRC_instances"
|
||||||
|
#define CONFIG_STRING_RU_SDR_ADDRS "sdr_addrs"
|
||||||
|
#define CONFIG_STRING_RU_SDR_CLK_SRC "clock_src"
|
||||||
|
|
||||||
#define RU_LOCAL_IF_NAME_IDX 0
|
#define RU_LOCAL_IF_NAME_IDX 0
|
||||||
#define RU_LOCAL_ADDRESS_IDX 1
|
#define RU_LOCAL_ADDRESS_IDX 1
|
||||||
@@ -121,6 +118,8 @@ typedef enum {
|
|||||||
#define RU_ATT_TX_IDX 15
|
#define RU_ATT_TX_IDX 15
|
||||||
#define RU_ATT_RX_IDX 16
|
#define RU_ATT_RX_IDX 16
|
||||||
#define RU_NBIOTRRC_LIST_IDX 17
|
#define RU_NBIOTRRC_LIST_IDX 17
|
||||||
|
#define RU_SDR_ADDRS 18
|
||||||
|
#define RU_SDR_CLK_SRC 19
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -147,6 +146,8 @@ typedef enum {
|
|||||||
{CONFIG_STRING_RU_ATT_TX, NULL, 0, uptr:NULL, defintval:0, TYPE_UINT, 0}, \
|
{CONFIG_STRING_RU_ATT_TX, NULL, 0, uptr:NULL, defintval:0, TYPE_UINT, 0}, \
|
||||||
{CONFIG_STRING_RU_ATT_RX, NULL, 0, uptr:NULL, defintval:0, TYPE_UINT, 0}, \
|
{CONFIG_STRING_RU_ATT_RX, NULL, 0, uptr:NULL, defintval:0, TYPE_UINT, 0}, \
|
||||||
{CONFIG_STRING_RU_NBIOTRRC_LIST, NULL, 0, uptr:NULL, defintarrayval:DEFENBS, TYPE_INTARRAY, 1}, \
|
{CONFIG_STRING_RU_NBIOTRRC_LIST, NULL, 0, uptr:NULL, defintarrayval:DEFENBS, TYPE_INTARRAY, 1}, \
|
||||||
|
{CONFIG_STRING_RU_SDR_ADDRS, NULL, 0, strptr:NULL, defstrval:"0.0.0.0", TYPE_STRING, 0}, \
|
||||||
|
{CONFIG_STRING_RU_SDR_CLK_SRC, NULL, 0, strptr:NULL, defstrval:"internal", TYPE_STRING, 0}, \
|
||||||
}
|
}
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
@@ -160,25 +161,19 @@ typedef enum {
|
|||||||
/* global parameters, not under a specific section */
|
/* global parameters, not under a specific section */
|
||||||
#define ENB_CONFIG_STRING_ASN1_VERBOSITY "Asn1_verbosity"
|
#define ENB_CONFIG_STRING_ASN1_VERBOSITY "Asn1_verbosity"
|
||||||
#define ENB_CONFIG_STRING_ACTIVE_ENBS "Active_eNBs"
|
#define ENB_CONFIG_STRING_ACTIVE_ENBS "Active_eNBs"
|
||||||
|
#define ENB_CONFIG_STRING_NOS1 "noS1"
|
||||||
/*--------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
/* global configuration parameters */
|
/* global configuration parameters */
|
||||||
/* optname helpstr paramflags XXXptr defXXXval type numelt */
|
/* optname helpstr paramflags XXXptr defXXXval type numelt */
|
||||||
/*--------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
#define ENBSPARAMS_DESC { \
|
#define ENBSPARAMS_DESC { \
|
||||||
{ENB_CONFIG_STRING_ASN1_VERBOSITY, NULL, 0, uptr:NULL, defstrval:ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE, TYPE_STRING, 0}, \
|
{ENB_CONFIG_STRING_ASN1_VERBOSITY, NULL, 0, uptr:NULL, defstrval:ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE, TYPE_STRING, 0}, \
|
||||||
{ENB_CONFIG_STRING_ACTIVE_ENBS, NULL, 0, uptr:NULL, defstrval:NULL, TYPE_STRINGLIST, 0} \
|
{ENB_CONFIG_STRING_ACTIVE_ENBS, NULL, 0, uptr:NULL, defstrval:NULL, TYPE_STRINGLIST, 0}, \
|
||||||
|
{ENB_CONFIG_STRING_NOS1, NULL, PARAMFLAG_BOOL, uptr:NULL, defintval:0, TYPE_UINT, 0}, \
|
||||||
}
|
}
|
||||||
#define ENB_ASN1_VERBOSITY_IDX 0
|
#define ENB_ASN1_VERBOSITY_IDX 0
|
||||||
#define ENB_ACTIVE_ENBS_IDX 1
|
#define ENB_ACTIVE_ENBS_IDX 1
|
||||||
|
#define ENB_NOS1_IDX 2
|
||||||
|
|
||||||
/*
|
|
||||||
{ENB_CONFIG_STRING_COMPONENT_CARRIERS,"", "", 0, uptr:NULL,defstrval:ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE,TYPE_STRING,0}, \
|
|
||||||
{ENB_CONFIG_STRING_CC_NODE_FUNCTION,"", "", 0, uptr:NULL,defstrval:ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE,TYPE_STRING,0}, \
|
|
||||||
{ENB_CONFIG_STRING_CC_NODE_TIMING,"", "", 0, uptr:NULL,defstrval:ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE,TYPE_STRING,0}, \
|
|
||||||
{ENB_CONFIG_STRING_CC_NODE_SYNCH_REF,"", "", 0, uptr:NULL,defstrval:ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE,TYPE_STRING,0}, \
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
@@ -704,6 +699,31 @@ typedef enum {
|
|||||||
#define ENB_MME_IP_ADDRESS_ACTIVE_IDX 2
|
#define ENB_MME_IP_ADDRESS_ACTIVE_IDX 2
|
||||||
#define ENB_MME_IP_ADDRESS_PREFERENCE_IDX 3
|
#define ENB_MME_IP_ADDRESS_PREFERENCE_IDX 3
|
||||||
/*---------------------------------------------------------------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* X2 configuration parameters section name */
|
||||||
|
#define ENB_CONFIG_STRING_TARGET_ENB_X2_IP_ADDRESS "target_enb_x2_ip_address"
|
||||||
|
|
||||||
|
/* X2 configuration parameters names */
|
||||||
|
|
||||||
|
|
||||||
|
#define ENB_CONFIG_STRING_TARGET_ENB_X2_IPV4_ADDRESS "ipv4"
|
||||||
|
#define ENB_CONFIG_STRING_TARGET_ENB_X2_IPV6_ADDRESS "ipv6"
|
||||||
|
#define ENB_CONFIG_STRING_TARGET_ENB_X2_IP_ADDRESS_PREFERENCE "preference"
|
||||||
|
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
|
/* X2 configuration parameters */
|
||||||
|
/* optname helpstr paramflags XXXptr defXXXval type numelt */
|
||||||
|
/*-------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
|
#define X2PARAMS_DESC { \
|
||||||
|
{ENB_CONFIG_STRING_TARGET_ENB_X2_IPV4_ADDRESS, NULL, 0, uptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \
|
||||||
|
{ENB_CONFIG_STRING_TARGET_ENB_X2_IPV6_ADDRESS, NULL, 0, uptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \
|
||||||
|
{ENB_CONFIG_STRING_TARGET_ENB_X2_IP_ADDRESS_PREFERENCE, NULL, 0, uptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define ENB_X2_IPV4_ADDRESS_IDX 0
|
||||||
|
#define ENB_X2_IPV6_ADDRESS_IDX 1
|
||||||
|
#define ENB_X2_IP_ADDRESS_PREFERENCE_IDX 2
|
||||||
/*---------------------------------------------------------------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
/* SCTP configuration parameters section name */
|
/* SCTP configuration parameters section name */
|
||||||
#define ENB_CONFIG_STRING_SCTP_CONFIG "SCTP"
|
#define ENB_CONFIG_STRING_SCTP_CONFIG "SCTP"
|
||||||
@@ -735,6 +755,8 @@ typedef enum {
|
|||||||
#define ENB_INTERFACE_NAME_FOR_S1U_IDX 2
|
#define ENB_INTERFACE_NAME_FOR_S1U_IDX 2
|
||||||
#define ENB_IPV4_ADDR_FOR_S1U_IDX 3
|
#define ENB_IPV4_ADDR_FOR_S1U_IDX 3
|
||||||
#define ENB_PORT_FOR_S1U_IDX 4
|
#define ENB_PORT_FOR_S1U_IDX 4
|
||||||
|
#define ENB_IPV4_ADDR_FOR_X2C_IDX 5
|
||||||
|
#define ENB_PORT_FOR_X2C_IDX 6
|
||||||
|
|
||||||
/* S1 interface configuration parameters names */
|
/* S1 interface configuration parameters names */
|
||||||
#define ENB_CONFIG_STRING_ENB_INTERFACE_NAME_FOR_S1_MME "ENB_INTERFACE_NAME_FOR_S1_MME"
|
#define ENB_CONFIG_STRING_ENB_INTERFACE_NAME_FOR_S1_MME "ENB_INTERFACE_NAME_FOR_S1_MME"
|
||||||
@@ -743,8 +765,12 @@ typedef enum {
|
|||||||
#define ENB_CONFIG_STRING_ENB_IPV4_ADDR_FOR_S1U "ENB_IPV4_ADDRESS_FOR_S1U"
|
#define ENB_CONFIG_STRING_ENB_IPV4_ADDR_FOR_S1U "ENB_IPV4_ADDRESS_FOR_S1U"
|
||||||
#define ENB_CONFIG_STRING_ENB_PORT_FOR_S1U "ENB_PORT_FOR_S1U"
|
#define ENB_CONFIG_STRING_ENB_PORT_FOR_S1U "ENB_PORT_FOR_S1U"
|
||||||
|
|
||||||
|
/* X2 interface configuration parameters names */
|
||||||
|
#define ENB_CONFIG_STRING_ENB_IPV4_ADDR_FOR_X2C "ENB_IPV4_ADDRESS_FOR_X2C"
|
||||||
|
#define ENB_CONFIG_STRING_ENB_PORT_FOR_X2C "ENB_PORT_FOR_X2C"
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
/* S1 interface configuration parameters */
|
/* S1/X2 interface configuration parameters */
|
||||||
/* optname helpstr paramflags XXXptr defXXXval type numelt */
|
/* optname helpstr paramflags XXXptr defXXXval type numelt */
|
||||||
/*--------------------------------------------------------------------------------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
#define NETPARAMS_DESC { \
|
#define NETPARAMS_DESC { \
|
||||||
@@ -752,7 +778,9 @@ typedef enum {
|
|||||||
{ENB_CONFIG_STRING_ENB_IPV4_ADDRESS_FOR_S1_MME, NULL, 0, strptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \
|
{ENB_CONFIG_STRING_ENB_IPV4_ADDRESS_FOR_S1_MME, NULL, 0, strptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \
|
||||||
{ENB_CONFIG_STRING_ENB_INTERFACE_NAME_FOR_S1U, NULL, 0, strptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \
|
{ENB_CONFIG_STRING_ENB_INTERFACE_NAME_FOR_S1U, NULL, 0, strptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \
|
||||||
{ENB_CONFIG_STRING_ENB_IPV4_ADDR_FOR_S1U, NULL, 0, strptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \
|
{ENB_CONFIG_STRING_ENB_IPV4_ADDR_FOR_S1U, NULL, 0, strptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \
|
||||||
{ENB_CONFIG_STRING_ENB_PORT_FOR_S1U, NULL, 0, uptr:NULL, defintval:2152L, TYPE_UINT, 0} \
|
{ENB_CONFIG_STRING_ENB_PORT_FOR_S1U, NULL, 0, uptr:NULL, defintval:2152L, TYPE_UINT, 0}, \
|
||||||
|
{ENB_CONFIG_STRING_ENB_IPV4_ADDR_FOR_X2C, NULL, 0, strptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \
|
||||||
|
{ENB_CONFIG_STRING_ENB_PORT_FOR_X2C, NULL, 0, uptr:NULL, defintval:0L, TYPE_UINT, 0}, \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,7 @@
|
|||||||
#include "flexran_agent_mac.h"
|
#include "flexran_agent_mac.h"
|
||||||
#include "flexran_agent_rrc.h"
|
#include "flexran_agent_rrc.h"
|
||||||
#include "flexran_agent_pdcp.h"
|
#include "flexran_agent_pdcp.h"
|
||||||
#include "log.h"
|
#include "common/utils/LOG/log.h"
|
||||||
#include "assertions.h"
|
#include "assertions.h"
|
||||||
|
|
||||||
/* Initiation of the eNodeB agent */
|
/* Initiation of the eNodeB agent */
|
||||||
|
|||||||
@@ -36,7 +36,7 @@
|
|||||||
#include "flexran_agent_net_comm.h"
|
#include "flexran_agent_net_comm.h"
|
||||||
#include "flexran_agent_ran_api.h"
|
#include "flexran_agent_ran_api.h"
|
||||||
//#include "PHY/extern.h"
|
//#include "PHY/extern.h"
|
||||||
#include "log.h"
|
#include "common/utils/LOG/log.h"
|
||||||
|
|
||||||
//#include "SCHED/defs.h"
|
//#include "SCHED/defs.h"
|
||||||
#include "RRC/LTE/rrc_extern.h"
|
#include "RRC/LTE/rrc_extern.h"
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
#include "flexran_agent_pdcp.h"
|
#include "flexran_agent_pdcp.h"
|
||||||
#include "flexran_agent_timer.h"
|
#include "flexran_agent_timer.h"
|
||||||
#include "flexran_agent_ran_api.h"
|
#include "flexran_agent_ran_api.h"
|
||||||
#include "log.h"
|
#include "common/utils/LOG/log.h"
|
||||||
|
|
||||||
#include "assertions.h"
|
#include "assertions.h"
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,7 @@
|
|||||||
#include "RRC/L2_INTERFACE/openair_rrc_L2_interface.h"
|
#include "RRC/L2_INTERFACE/openair_rrc_L2_interface.h"
|
||||||
#include "RRC/LTE/rrc_eNB_UE_context.h"
|
#include "RRC/LTE/rrc_eNB_UE_context.h"
|
||||||
#include "PHY/phy_extern.h"
|
#include "PHY/phy_extern.h"
|
||||||
#include "log.h"
|
#include "common/utils/LOG/log.h"
|
||||||
|
|
||||||
/****************************
|
/****************************
|
||||||
* get generic info from RAN
|
* get generic info from RAN
|
||||||
|
|||||||
@@ -538,8 +538,8 @@ eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP,
|
|||||||
0 ? "in synch" : "out of sync",
|
0 ? "in synch" : "out of sync",
|
||||||
UE_list->UE_template[CC_id][i].phr_info,
|
UE_list->UE_template[CC_id][i].phr_info,
|
||||||
UE_list->UE_sched_ctrl[i].dl_cqi[CC_id],
|
UE_list->UE_sched_ctrl[i].dl_cqi[CC_id],
|
||||||
(UE_list->UE_sched_ctrl[i].pusch_snr[CC_id] - 128) / 2,
|
(5*UE_list->UE_sched_ctrl[i].pusch_snr[CC_id] - 640) / 10,
|
||||||
(UE_list->UE_sched_ctrl[i].pucch1_snr[CC_id] - 128) / 2);
|
(5*UE_list->UE_sched_ctrl[i].pucch1_snr[CC_id] - 640) / 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
RC.eNB[module_idP][CC_id]->pusch_stats_bsr[i][(frameP * 10) +
|
RC.eNB[module_idP][CC_id]->pusch_stats_bsr[i][(frameP * 10) +
|
||||||
|
|||||||
@@ -988,9 +988,10 @@ generate_Msg4(module_id_t module_idP, int CC_idP, frame_t frameP,
|
|||||||
payload[0], ra->msg4_TBsize));
|
payload[0], ra->msg4_TBsize));
|
||||||
|
|
||||||
if (opt_enabled == 1) {
|
if (opt_enabled == 1) {
|
||||||
trace_pdu(1,
|
trace_pdu(DIRECTION_DOWNLINK,
|
||||||
(uint8_t *) mac->
|
(uint8_t *) mac->
|
||||||
UE_list.DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0], rrc_sdu_length, UE_id, 3,
|
UE_list.DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0],
|
||||||
|
rrc_sdu_length, UE_id, WS_C_RNTI,
|
||||||
UE_RNTI(module_idP, UE_id), mac->frame,
|
UE_RNTI(module_idP, UE_id), mac->frame,
|
||||||
mac->subframe, 0, 0);
|
mac->subframe, 0, 0);
|
||||||
LOG_D(OPT,
|
LOG_D(OPT,
|
||||||
@@ -1193,9 +1194,10 @@ generate_Msg4(module_id_t module_idP, int CC_idP, frame_t frameP,
|
|||||||
payload[0], ra->msg4_TBsize));
|
payload[0], ra->msg4_TBsize));
|
||||||
|
|
||||||
if (opt_enabled == 1) {
|
if (opt_enabled == 1) {
|
||||||
trace_pdu(1,
|
trace_pdu(DIRECTION_DOWNLINK,
|
||||||
(uint8_t *) mac->
|
(uint8_t *) mac->
|
||||||
UE_list.DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0], rrc_sdu_length, UE_id, 3,
|
UE_list.DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0],
|
||||||
|
rrc_sdu_length, UE_id, WS_C_RNTI,
|
||||||
UE_RNTI(module_idP, UE_id), mac->frame,
|
UE_RNTI(module_idP, UE_id), mac->frame,
|
||||||
mac->subframe, 0, 0);
|
mac->subframe, 0, 0);
|
||||||
LOG_D(OPT,
|
LOG_D(OPT,
|
||||||
|
|||||||
@@ -281,10 +281,10 @@ schedule_SIB1_BR(module_id_t module_idP,
|
|||||||
eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
|
eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
|
||||||
|
|
||||||
if (opt_enabled == 1) {
|
if (opt_enabled == 1) {
|
||||||
trace_pdu(1,
|
trace_pdu(DIRECTION_DOWNLINK,
|
||||||
&cc->BCCH_BR_pdu[0].payload[0],
|
&cc->BCCH_BR_pdu[0].payload[0],
|
||||||
bcch_sdu_length,
|
bcch_sdu_length,
|
||||||
0xffff, 4, 0xffff, eNB->frame, eNB->subframe, 0, 0);
|
0xffff, WS_SI_RNTI, 0xffff, eNB->frame, eNB->subframe, 0, 0);
|
||||||
LOG_D(OPT,
|
LOG_D(OPT,
|
||||||
"[eNB %d][BCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n",
|
"[eNB %d][BCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n",
|
||||||
module_idP, frameP, CC_id, 0xffff, bcch_sdu_length);
|
module_idP, frameP, CC_id, 0xffff, bcch_sdu_length);
|
||||||
@@ -472,11 +472,11 @@ schedule_SI_BR(module_id_t module_idP, frame_t frameP,
|
|||||||
eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
|
eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
|
||||||
|
|
||||||
if (opt_enabled == 1) {
|
if (opt_enabled == 1) {
|
||||||
trace_pdu(1,
|
trace_pdu(DIRECTION_DOWNLINK,
|
||||||
&cc->BCCH_BR_pdu[i + 1].payload[0],
|
&cc->BCCH_BR_pdu[i + 1].payload[0],
|
||||||
bcch_sdu_length,
|
bcch_sdu_length,
|
||||||
0xffff,
|
0xffff,
|
||||||
4,
|
WS_SI_RNTI,
|
||||||
0xffff, eNB->frame, eNB->subframe, 0,
|
0xffff, eNB->frame, eNB->subframe, 0,
|
||||||
0);
|
0);
|
||||||
LOG_D(OPT,
|
LOG_D(OPT,
|
||||||
@@ -759,11 +759,11 @@ schedule_SI(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (opt_enabled == 1) {
|
if (opt_enabled == 1) {
|
||||||
trace_pdu(1,
|
trace_pdu(DIRECTION_DOWNLINK,
|
||||||
&cc->BCCH_pdu.payload[0],
|
&cc->BCCH_pdu.payload[0],
|
||||||
bcch_sdu_length,
|
bcch_sdu_length,
|
||||||
0xffff,
|
0xffff,
|
||||||
4, 0xffff, eNB->frame, eNB->subframe, 0, 0);
|
WS_SI_RNTI, 0xffff, eNB->frame, eNB->subframe, 0, 0);
|
||||||
LOG_D(OPT,
|
LOG_D(OPT,
|
||||||
"[eNB %d][BCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n",
|
"[eNB %d][BCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n",
|
||||||
module_idP, frameP, CC_id, 0xffff,
|
module_idP, frameP, CC_id, 0xffff,
|
||||||
|
|||||||
@@ -1359,9 +1359,9 @@ schedule_ue_spec(module_id_t module_idP,slice_id_t slice_idP,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (opt_enabled == 1) {
|
if (opt_enabled == 1) {
|
||||||
trace_pdu(1, (uint8_t *)
|
trace_pdu(DIRECTION_DOWNLINK,
|
||||||
UE_list->DLSCH_pdu[CC_id][0][UE_id].
|
(uint8_t *) UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0],
|
||||||
payload[0], TBS, module_idP, 3,
|
TBS, module_idP, WS_C_RNTI,
|
||||||
UE_RNTI(module_idP, UE_id), eNB->frame,
|
UE_RNTI(module_idP, UE_id), eNB->frame,
|
||||||
eNB->subframe, 0, 0);
|
eNB->subframe, 0, 0);
|
||||||
LOG_D(OPT,
|
LOG_D(OPT,
|
||||||
@@ -2085,7 +2085,7 @@ void schedule_PCH(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (opt_enabled == 1) {
|
if (opt_enabled == 1) {
|
||||||
trace_pdu(1,
|
trace_pdu(DIRECTION_DOWNLINK,
|
||||||
&eNB->common_channels[CC_id].PCCH_pdu.payload[0],
|
&eNB->common_channels[CC_id].PCCH_pdu.payload[0],
|
||||||
pcch_sdu_length,
|
pcch_sdu_length,
|
||||||
0xffff,
|
0xffff,
|
||||||
|
|||||||
@@ -1655,8 +1655,8 @@ schedule_ue_spec_fairRR(module_id_t module_idP,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (opt_enabled == 1) {
|
if (opt_enabled == 1) {
|
||||||
trace_pdu(1, (uint8_t *)UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0],
|
trace_pdu(DIRECTION_DOWNLINK, (uint8_t *)UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0],
|
||||||
TBS, module_idP, 3, UE_RNTI(module_idP,UE_id),
|
TBS, module_idP, WS_RA_RNTI, UE_RNTI(module_idP,UE_id),
|
||||||
eNB->frame, eNB->subframe,0,0);
|
eNB->frame, eNB->subframe,0,0);
|
||||||
LOG_D(OPT,"[eNB %d][DLSCH] CC_id %d Frame %d rnti %x with size %d\n",
|
LOG_D(OPT,"[eNB %d][DLSCH] CC_id %d Frame %d rnti %x with size %d\n",
|
||||||
module_idP, CC_id, frameP, UE_RNTI(module_idP,UE_id), TBS);
|
module_idP, CC_id, frameP, UE_RNTI(module_idP,UE_id), TBS);
|
||||||
@@ -1696,9 +1696,9 @@ schedule_ue_spec_fairRR(module_id_t module_idP,
|
|||||||
// this is the normalized RX power
|
// this is the normalized RX power
|
||||||
eNB_UE_stats = &UE_list->eNB_UE_stats[CC_id][UE_id];
|
eNB_UE_stats = &UE_list->eNB_UE_stats[CC_id][UE_id];
|
||||||
|
|
||||||
/* TODO: fix how we deal with power, unit is not dBm, it's special from nfapi */
|
/* Unit is not dBm, it's special from nfapi */
|
||||||
normalized_rx_power = ue_sched_ctl->pucch1_snr[CC_id];
|
normalized_rx_power = (5*ue_sched_ctl->pucch1_snr[CC_id]-640)/10+30;//(+eNB->measurements.n0_power_dB[0])
|
||||||
target_rx_power = 208;
|
target_rx_power= eNB->puCch10xSnr/10 + 30;//(+eNB->measurements.n0_power_dB[0])
|
||||||
|
|
||||||
// this assumes accumulated tpc
|
// this assumes accumulated tpc
|
||||||
// make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out
|
// make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out
|
||||||
@@ -2690,9 +2690,25 @@ void schedule_ulsch_rnti_fairRR(module_id_t module_idP,
|
|||||||
if (status < RRC_CONNECTED)
|
if (status < RRC_CONNECTED)
|
||||||
cqi_req = 0;
|
cqi_req = 0;
|
||||||
else if (UE_sched_ctrl->cqi_req_timer>30) {
|
else if (UE_sched_ctrl->cqi_req_timer>30) {
|
||||||
cqi_req = 1;
|
cqi_req = 1;
|
||||||
UE_sched_ctrl->cqi_req_timer=0;
|
// To be safe , do not ask CQI in special SFs:36.213/7.2.3 CQI definition
|
||||||
UE_sched_ctrl->cqi_req_flag |= 1 << sched_subframeP;
|
if (cc->tdd_Config) {
|
||||||
|
switch (cc->tdd_Config->subframeAssignment) {
|
||||||
|
case 1:
|
||||||
|
if( subframeP == 1 || subframeP == 6 ) cqi_req=0;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
if( subframeP == 1 ) cqi_req=0;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
LOG_E(MAC," TDD config not supported\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(cqi_req == 1){
|
||||||
|
UE_sched_ctrl->cqi_req_timer=0;
|
||||||
|
UE_sched_ctrl->cqi_req_flag |= 1 << sched_subframeP;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
cqi_req = 0;
|
cqi_req = 0;
|
||||||
@@ -2701,8 +2717,8 @@ void schedule_ulsch_rnti_fairRR(module_id_t module_idP,
|
|||||||
//compute the expected ULSCH RX power (for the stats)
|
//compute the expected ULSCH RX power (for the stats)
|
||||||
|
|
||||||
// this is the normalized RX power and this should be constant (regardless of mcs
|
// this is the normalized RX power and this should be constant (regardless of mcs
|
||||||
normalized_rx_power = UE_sched_ctrl->pusch_snr[CC_id];
|
normalized_rx_power = (5*UE_sched_ctrl->pusch_snr[CC_id]-640)/10+30; //(+eNB->measurements.n0_power_dB[0])
|
||||||
target_rx_power = 178;
|
target_rx_power= eNB->puSch10xSnr/10 + 30; //(+eNB->measurements.n0_power_dB[0])
|
||||||
|
|
||||||
// this assumes accumulated tpc
|
// this assumes accumulated tpc
|
||||||
// make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out
|
// make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out
|
||||||
|
|||||||
@@ -767,7 +767,7 @@ schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
|
|||||||
|
|
||||||
/* Tracing of PDU is done on UE side */
|
/* Tracing of PDU is done on UE side */
|
||||||
if (opt_enabled == 1) {
|
if (opt_enabled == 1) {
|
||||||
trace_pdu(1, (uint8_t *) cc->MCH_pdu.payload, TBS, module_idP, 6, 0xffff, // M_RNTI = 6 in wirehsark
|
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]->frame,
|
||||||
RC.mac[module_idP]->subframe, 0, 0);
|
RC.mac[module_idP]->subframe, 0, 0);
|
||||||
LOG_D(OPT,
|
LOG_D(OPT,
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ schedule_ue_spec_phy_test(
|
|||||||
uint16_t rnti = 0x1235;
|
uint16_t rnti = 0x1235;
|
||||||
uint32_t rb_alloc = 0x1FFFFF;
|
uint32_t rb_alloc = 0x1FFFFF;
|
||||||
int32_t tpc = 1;
|
int32_t tpc = 1;
|
||||||
int32_t mcs = 28;
|
int32_t mcs = 10;
|
||||||
int32_t cqi = 15;
|
int32_t cqi = 15;
|
||||||
int32_t ndi = (frameP*10+subframeP)/8;
|
int32_t ndi = (frameP*10+subframeP)/8;
|
||||||
int32_t dai = 0;
|
int32_t dai = 0;
|
||||||
@@ -202,7 +202,8 @@ void schedule_ulsch_phy_test(module_id_t module_idP,frame_t frameP,sub_frame_t s
|
|||||||
int32_t normalized_rx_power;
|
int32_t normalized_rx_power;
|
||||||
int32_t target_rx_power= 178;
|
int32_t target_rx_power= 178;
|
||||||
int CC_id = 0;
|
int CC_id = 0;
|
||||||
int nb_rb = 96;
|
int nb_rb = 24;
|
||||||
|
int N_RB_UL;
|
||||||
eNB_MAC_INST *mac = RC.mac[module_idP];
|
eNB_MAC_INST *mac = RC.mac[module_idP];
|
||||||
COMMON_channels_t *cc = &mac->common_channels[0];
|
COMMON_channels_t *cc = &mac->common_channels[0];
|
||||||
UE_list_t *UE_list=&mac->UE_list;
|
UE_list_t *UE_list=&mac->UE_list;
|
||||||
@@ -211,8 +212,7 @@ void schedule_ulsch_phy_test(module_id_t module_idP,frame_t frameP,sub_frame_t s
|
|||||||
int sched_frame=frameP;
|
int sched_frame=frameP;
|
||||||
int sched_subframe = (subframeP+4)%10;
|
int sched_subframe = (subframeP+4)%10;
|
||||||
uint16_t ul_req_index;
|
uint16_t ul_req_index;
|
||||||
uint8_t dlsch_flag;
|
|
||||||
|
|
||||||
if (sched_subframe<subframeP) sched_frame++;
|
if (sched_subframe<subframeP) sched_frame++;
|
||||||
|
|
||||||
nfapi_hi_dci0_request_t *hi_dci0_req = &mac->HI_DCI0_req[CC_id][subframeP];
|
nfapi_hi_dci0_request_t *hi_dci0_req = &mac->HI_DCI0_req[CC_id][subframeP];
|
||||||
@@ -222,6 +222,18 @@ void schedule_ulsch_phy_test(module_id_t module_idP,frame_t frameP,sub_frame_t s
|
|||||||
//nfapi_ul_config_request_pdu_t *ul_config_pdu = &ul_req->ul_config_pdu_list[0];;
|
//nfapi_ul_config_request_pdu_t *ul_config_pdu = &ul_req->ul_config_pdu_list[0];;
|
||||||
nfapi_ul_config_request_body_t *ul_req = &mac->UL_req[CC_id].ul_config_request_body;
|
nfapi_ul_config_request_body_t *ul_req = &mac->UL_req[CC_id].ul_config_request_body;
|
||||||
|
|
||||||
|
N_RB_UL = to_prb(cc->mib->message.dl_Bandwidth);
|
||||||
|
switch(N_RB_UL){
|
||||||
|
case 100:
|
||||||
|
nb_rb = 96;
|
||||||
|
break;
|
||||||
|
case 50:
|
||||||
|
nb_rb = 48;
|
||||||
|
break;
|
||||||
|
case 25:
|
||||||
|
nb_rb = 24;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
mac->UL_req[CC_id].sfn_sf = (sched_frame<<4) + sched_subframe;
|
mac->UL_req[CC_id].sfn_sf = (sched_frame<<4) + sched_subframe;
|
||||||
hi_dci0_req->sfn_sf = (frameP << 4) + subframeP;
|
hi_dci0_req->sfn_sf = (frameP << 4) + subframeP;
|
||||||
@@ -306,10 +318,8 @@ void schedule_ulsch_phy_test(module_id_t module_idP,frame_t frameP,sub_frame_t s
|
|||||||
hi_dci0_req_body->number_of_dci++;
|
hi_dci0_req_body->number_of_dci++;
|
||||||
|
|
||||||
ul_req_index = 0;
|
ul_req_index = 0;
|
||||||
dlsch_flag = 0;
|
|
||||||
for(ul_req_index = 0;ul_req_index < ul_req->number_of_pdus;ul_req_index++){
|
for(ul_req_index = 0;ul_req_index < ul_req->number_of_pdus;ul_req_index++){
|
||||||
if(ul_req->ul_config_pdu_list[ul_req_index].pdu_type == NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE){
|
if(ul_req->ul_config_pdu_list[ul_req_index].pdu_type == NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE){
|
||||||
dlsch_flag = 1;
|
|
||||||
LOG_D(MAC,"Frame %d, Subframe %d:rnti %x ul_req_index %d Switched UCI HARQ to ULSCH HARQ(first)\n",frameP,subframeP,rnti,ul_req_index);
|
LOG_D(MAC,"Frame %d, Subframe %d:rnti %x ul_req_index %d Switched UCI HARQ to ULSCH HARQ(first)\n",frameP,subframeP,rnti,ul_req_index);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ rx_sdu(const module_id_t enb_mod_idP,
|
|||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
|
||||||
(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_SDU, 1);
|
(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_SDU, 1);
|
||||||
if (opt_enabled == 1) {
|
if (opt_enabled == 1) {
|
||||||
trace_pdu(0, sduP, sdu_lenP, 0, 3, current_rnti, frameP, subframeP,
|
trace_pdu(DIRECTION_UPLINK, sduP, sdu_lenP, 0, WS_C_RNTI, current_rnti, frameP, subframeP,
|
||||||
0, 0);
|
0, 0);
|
||||||
LOG_D(OPT, "[eNB %d][ULSCH] Frame %d rnti %x with size %d\n",
|
LOG_D(OPT, "[eNB %d][ULSCH] Frame %d rnti %x with size %d\n",
|
||||||
enb_mod_idP, frameP, current_rnti, sdu_lenP);
|
enb_mod_idP, frameP, current_rnti, sdu_lenP);
|
||||||
@@ -1337,10 +1337,24 @@ schedule_ulsch_rnti(module_id_t module_idP,
|
|||||||
if (status >= RRC_CONNECTED && UE_sched_ctrl->cqi_req_timer > 30) {
|
if (status >= RRC_CONNECTED && UE_sched_ctrl->cqi_req_timer > 30) {
|
||||||
if (UE_sched_ctrl->cqi_received == 0) {
|
if (UE_sched_ctrl->cqi_received == 0) {
|
||||||
if (nfapi_mode) {
|
if (nfapi_mode) {
|
||||||
cqi_req = 0;
|
cqi_req = 0;
|
||||||
} else {
|
} else {
|
||||||
cqi_req = 1;
|
cqi_req = 1;
|
||||||
UE_sched_ctrl->cqi_req_flag |= 1 << sched_subframeP;
|
// To be safe , do not ask CQI in special Subframes:36.213/7.2.3 CQI definition
|
||||||
|
if (cc[CC_id].tdd_Config) {
|
||||||
|
switch (cc[CC_id].tdd_Config->subframeAssignment) {
|
||||||
|
case 1:
|
||||||
|
if( subframeP == 1 || subframeP == 6 ) cqi_req=0;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
if( subframeP == 1 ) cqi_req=0;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
LOG_E(MAC," TDD config not supported\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(cqi_req == 1) UE_sched_ctrl->cqi_req_flag |= 1 << sched_subframeP;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (UE_sched_ctrl->cqi_received == 1) {
|
else if (UE_sched_ctrl->cqi_received == 1) {
|
||||||
|
|||||||
@@ -442,7 +442,7 @@ typedef struct {
|
|||||||
/*!\brief LCID of MCCH for DL */
|
/*!\brief LCID of MCCH for DL */
|
||||||
#define MCCH_LCHANID 0
|
#define MCCH_LCHANID 0
|
||||||
/*!\brief LCID of MCH scheduling info for DL */
|
/*!\brief LCID of MCH scheduling info for DL */
|
||||||
#define MCH_SCHDL_INFO 3
|
#define MCH_SCHDL_INFO 30
|
||||||
/*!\brief LCID of Carrier component activation/deactivation */
|
/*!\brief LCID of Carrier component activation/deactivation */
|
||||||
#define CC_ACT_DEACT 27
|
#define CC_ACT_DEACT 27
|
||||||
//TTN (for D2D)
|
//TTN (for D2D)
|
||||||
@@ -1502,7 +1502,16 @@ typedef struct {
|
|||||||
/// MCCH status
|
/// MCCH status
|
||||||
uint8_t mcch_status;
|
uint8_t mcch_status;
|
||||||
/// MSI status
|
/// MSI status
|
||||||
uint8_t msi_status; // could be an array if there are >1 MCH in one MBSFN area
|
uint8_t msi_status_v[28];
|
||||||
|
uint8_t msi_current_alloc;
|
||||||
|
uint8_t msi_pmch;
|
||||||
|
|
||||||
|
struct MBSFN_SubframeConfig *commonSF_Alloc_r9_mbsfn_SubframeConfig[8]; // FIXME replace 8 by MAX_MBSFN_AREA?
|
||||||
|
uint8_t commonSF_AllocPeriod_r9;
|
||||||
|
int common_num_sf_alloc;
|
||||||
|
|
||||||
|
uint8_t pmch_lcids[28];
|
||||||
|
uint16_t pmch_stop_mtch[28];
|
||||||
#endif
|
#endif
|
||||||
//#ifdef CBA
|
//#ifdef CBA
|
||||||
/// CBA RNTI for each group
|
/// CBA RNTI for each group
|
||||||
|
|||||||
@@ -248,7 +248,7 @@ Msg1_transmitted(module_id_t module_idP, uint8_t CC_id,
|
|||||||
UE_mac_inst[module_idP].RA_attempt_number++;
|
UE_mac_inst[module_idP].RA_attempt_number++;
|
||||||
|
|
||||||
if (opt_enabled) {
|
if (opt_enabled) {
|
||||||
trace_pdu(0, NULL, 0, module_idP, 0,
|
trace_pdu(DIRECTION_UPLINK, NULL, 0, module_idP, WS_NO_RNTI,
|
||||||
UE_mac_inst[module_idP].RA_prach_resources.
|
UE_mac_inst[module_idP].RA_prach_resources.
|
||||||
ra_PreambleIndex, UE_mac_inst[module_idP].txFrame,
|
ra_PreambleIndex, UE_mac_inst[module_idP].txFrame,
|
||||||
UE_mac_inst[module_idP].txSubframe, 0,
|
UE_mac_inst[module_idP].txSubframe, 0,
|
||||||
@@ -277,8 +277,8 @@ Msg3_transmitted(module_id_t module_idP, uint8_t CC_id,
|
|||||||
UE_mac_inst[module_idP].RA_contention_resolution_timer_active = 1;
|
UE_mac_inst[module_idP].RA_contention_resolution_timer_active = 1;
|
||||||
|
|
||||||
if (opt_enabled) { // msg3
|
if (opt_enabled) { // msg3
|
||||||
trace_pdu(0, &UE_mac_inst[module_idP].CCCH_pdu.payload[0],
|
trace_pdu(DIRECTION_UPLINK , &UE_mac_inst[module_idP].CCCH_pdu.payload[0],
|
||||||
UE_mac_inst[module_idP].RA_Msg3_size, module_idP, 3,
|
UE_mac_inst[module_idP].RA_Msg3_size, module_idP, WS_C_RNTI,
|
||||||
UE_mac_inst[module_idP].crnti,
|
UE_mac_inst[module_idP].crnti,
|
||||||
UE_mac_inst[module_idP].txFrame,
|
UE_mac_inst[module_idP].txFrame,
|
||||||
UE_mac_inst[module_idP].txSubframe, 0, 0);
|
UE_mac_inst[module_idP].txSubframe, 0, 0);
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ fill_rar(const module_id_t module_idP,
|
|||||||
((ra->msg3_ULdelay & 1) << 1) | (ra->msg3_cqireq & 1);
|
((ra->msg3_ULdelay & 1) << 1) | (ra->msg3_cqireq & 1);
|
||||||
|
|
||||||
if (opt_enabled) {
|
if (opt_enabled) {
|
||||||
trace_pdu(1, dlsch_buffer, input_buffer_length, module_idP, 2, 1,
|
trace_pdu(DIRECTION_DOWNLINK , dlsch_buffer, input_buffer_length, module_idP, WS_RA_RNTI , 1,
|
||||||
RC.mac[module_idP]->frame, RC.mac[module_idP]->subframe,
|
RC.mac[module_idP]->frame, RC.mac[module_idP]->subframe,
|
||||||
0, 0);
|
0, 0);
|
||||||
LOG_D(OPT,
|
LOG_D(OPT,
|
||||||
@@ -181,7 +181,7 @@ fill_rar_br(eNB_MAC_INST * eNB,
|
|||||||
ra->preamble_index, ra->timing_offset);
|
ra->preamble_index, ra->timing_offset);
|
||||||
|
|
||||||
if (opt_enabled) {
|
if (opt_enabled) {
|
||||||
trace_pdu(1, dlsch_buffer, input_buffer_length, eNB->Mod_id, 2, 1,
|
trace_pdu(DIRECTION_DOWNLINK , dlsch_buffer, input_buffer_length, eNB->Mod_id, WS_RA_RNTI , 1,
|
||||||
eNB->frame, eNB->subframe, 0, 0);
|
eNB->frame, eNB->subframe, 0, 0);
|
||||||
LOG_D(OPT,
|
LOG_D(OPT,
|
||||||
"[RAPROC] RAR Frame %d trace pdu for rnti %x and rapid %d size %d\n",
|
"[RAPROC] RAR Frame %d trace pdu for rnti %x and rapid %d size %d\n",
|
||||||
|
|||||||
@@ -119,8 +119,8 @@ uint16_t ue_process_rar(const module_id_t module_idP, const int CC_id, const fra
|
|||||||
LOG_D(OPT,
|
LOG_D(OPT,
|
||||||
"[UE %d][RAPROC] CC_id %d RAR Frame %d trace pdu for ra-RNTI %x\n",
|
"[UE %d][RAPROC] CC_id %d RAR Frame %d trace pdu for ra-RNTI %x\n",
|
||||||
module_idP, CC_id, frameP, ra_rnti);
|
module_idP, CC_id, frameP, ra_rnti);
|
||||||
trace_pdu(1, (uint8_t *) dlsch_buffer, n_rarh + n_rarpy * 6,
|
trace_pdu(DIRECTION_DOWNLINK, (uint8_t *) dlsch_buffer, n_rarh + n_rarpy * 6,
|
||||||
module_idP, 2, ra_rnti, UE_mac_inst[module_idP].rxFrame,
|
module_idP, WS_RA_RNTI, ra_rnti, UE_mac_inst[module_idP].rxFrame,
|
||||||
UE_mac_inst[module_idP].rxSubframe, 0, 0);
|
UE_mac_inst[module_idP].rxSubframe, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+597
-383
File diff suppressed because it is too large
Load Diff
@@ -30,6 +30,8 @@
|
|||||||
#define PDCP_C
|
#define PDCP_C
|
||||||
//#define DEBUG_PDCP_FIFO_FLUSH_SDU
|
//#define DEBUG_PDCP_FIFO_FLUSH_SDU
|
||||||
|
|
||||||
|
#define MBMS_MULTICAST_OUT
|
||||||
|
|
||||||
#include "assertions.h"
|
#include "assertions.h"
|
||||||
#include "hashtable.h"
|
#include "hashtable.h"
|
||||||
#include "pdcp.h"
|
#include "pdcp.h"
|
||||||
@@ -66,6 +68,17 @@ extern int otg_enabled;
|
|||||||
#include "common/ran_context.h"
|
#include "common/ran_context.h"
|
||||||
extern RAN_CONTEXT_t RC;
|
extern RAN_CONTEXT_t RC;
|
||||||
|
|
||||||
|
#ifdef MBMS_MULTICAST_OUT
|
||||||
|
# include <sys/types.h>
|
||||||
|
# include <sys/socket.h>
|
||||||
|
# include <netinet/in.h>
|
||||||
|
# include <netinet/ip.h>
|
||||||
|
# include <netinet/udp.h>
|
||||||
|
# include <unistd.h>
|
||||||
|
|
||||||
|
static int mbms_socket = -1;
|
||||||
|
#endif
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
/*
|
/*
|
||||||
* If PDCP_UNIT_TEST is set here then data flow between PDCP and RLC is broken
|
* If PDCP_UNIT_TEST is set here then data flow between PDCP and RLC is broken
|
||||||
@@ -349,16 +362,10 @@ boolean_t pdcp_data_req(
|
|||||||
* Ask sublayer to transmit data and check return value
|
* Ask sublayer to transmit data and check return value
|
||||||
* to see if RLC succeeded
|
* to see if RLC succeeded
|
||||||
*/
|
*/
|
||||||
#ifdef PDCP_MSG_PRINT
|
|
||||||
int i=0;
|
|
||||||
LOG_F(PDCP,"[MSG] PDCP DL %s PDU on rb_id %d\n", (srb_flagP)? "CONTROL" : "DATA", rb_idP);
|
|
||||||
|
|
||||||
for (i = 0; i < pdcp_pdu_size; i++) {
|
LOG_DUMPMSG(PDCP,DEBUG_PDCP,(char *)pdcp_pdu_p->data,pdcp_pdu_size,
|
||||||
LOG_F(PDCP,"%02x ", ((uint8_t*)pdcp_pdu_p->data)[i]);
|
"[MSG] PDCP DL %s PDU on rb_id %d\n",(srb_flagP)? "CONTROL" : "DATA", rb_idP);
|
||||||
}
|
|
||||||
|
|
||||||
LOG_F(PDCP,"\n");
|
|
||||||
#endif
|
|
||||||
rlc_status = rlc_data_req(ctxt_pP, srb_flagP, MBMS_FLAG_NO, rb_idP, muiP, confirmP, pdcp_pdu_size, pdcp_pdu_p
|
rlc_status = rlc_data_req(ctxt_pP, srb_flagP, MBMS_FLAG_NO, rb_idP, muiP, confirmP, pdcp_pdu_size, pdcp_pdu_p
|
||||||
#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0))
|
#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0))
|
||||||
,sourceL2Id
|
,sourceL2Id
|
||||||
@@ -461,17 +468,8 @@ pdcp_data_ind(
|
|||||||
|
|
||||||
|
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_DATA_IND,VCD_FUNCTION_IN);
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_DATA_IND,VCD_FUNCTION_IN);
|
||||||
|
LOG_DUMPMSG(PDCP,DEBUG_PDCP,(char *)sdu_buffer_pP->data,sdu_buffer_sizeP,
|
||||||
#ifdef PDCP_MSG_PRINT
|
"[MSG] PDCP UL %s PDU on rb_id %d\n", (srb_flagP)? "CONTROL" : "DATA", rb_idP);
|
||||||
int i=0;
|
|
||||||
LOG_F(PDCP,"[MSG] PDCP UL %s PDU on rb_id %d\n", (srb_flagP)? "CONTROL" : "DATA", rb_idP);
|
|
||||||
|
|
||||||
for (i = 0; i < sdu_buffer_sizeP; i++) {
|
|
||||||
LOG_F(PDCP,"%02x ", ((uint8_t*)sdu_buffer_pP->data)[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
LOG_F(PDCP,"\n");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if T_TRACER
|
#if T_TRACER
|
||||||
if (ctxt_pP->enb_flag != ENB_FLAG_NO)
|
if (ctxt_pP->enb_flag != ENB_FLAG_NO)
|
||||||
@@ -758,11 +756,26 @@ pdcp_data_ind(
|
|||||||
packet_forwarded = FALSE;
|
packet_forwarded = FALSE;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef MBMS_MULTICAST_OUT
|
||||||
|
if ((MBMS_flagP != 0) && (mbms_socket != -1)) {
|
||||||
|
struct iphdr *ip_header = (struct iphdr*)&sdu_buffer_pP->data[payload_offset];
|
||||||
|
struct udphdr *udp_header = (struct udphdr*)&sdu_buffer_pP->data[payload_offset + sizeof(struct iphdr)];
|
||||||
|
struct sockaddr_in dest_addr;
|
||||||
|
|
||||||
|
dest_addr.sin_family = AF_INET;
|
||||||
|
dest_addr.sin_port = udp_header->dest;
|
||||||
|
dest_addr.sin_addr.s_addr = ip_header->daddr;
|
||||||
|
|
||||||
|
sendto(mbms_socket, &sdu_buffer_pP->data[payload_offset], sdu_buffer_sizeP - payload_offset, MSG_DONTWAIT, (struct sockaddr*)&dest_addr, sizeof(dest_addr));
|
||||||
|
packet_forwarded = TRUE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (FALSE == packet_forwarded) {
|
if (FALSE == packet_forwarded) {
|
||||||
new_sdu_p = get_free_mem_block(sdu_buffer_sizeP - payload_offset + sizeof (pdcp_data_ind_header_t), __func__);
|
new_sdu_p = get_free_mem_block(sdu_buffer_sizeP - payload_offset + sizeof (pdcp_data_ind_header_t), __func__);
|
||||||
|
|
||||||
if (new_sdu_p) {
|
if (new_sdu_p) {
|
||||||
if (pdcp_p->rlc_mode == RLC_MODE_AM ) {
|
if ((MBMS_flagP == 0) && (pdcp_p->rlc_mode == RLC_MODE_AM)) {
|
||||||
pdcp_p->last_submitted_pdcp_rx_sn = sequence_number;
|
pdcp_p->last_submitted_pdcp_rx_sn = sequence_number;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -803,7 +816,6 @@ pdcp_data_ind(
|
|||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* Print octets of incoming data in hexadecimal form */
|
/* Print octets of incoming data in hexadecimal form */
|
||||||
LOG_D(PDCP, "Following content has been received from RLC (%d,%d)(PDCP header has already been removed):\n",
|
LOG_D(PDCP, "Following content has been received from RLC (%d,%d)(PDCP header has already been removed):\n",
|
||||||
@@ -839,13 +851,14 @@ pdcp_data_ind(
|
|||||||
|
|
||||||
|
|
||||||
#if defined(STOP_ON_IP_TRAFFIC_OVERLOAD)
|
#if defined(STOP_ON_IP_TRAFFIC_OVERLOAD)
|
||||||
else {
|
else {
|
||||||
AssertFatal(0, PROTOCOL_PDCP_CTXT_FMT" PDCP_DATA_IND SDU DROPPED, OUT OF MEMORY \n",
|
AssertFatal(0, PROTOCOL_PDCP_CTXT_FMT" PDCP_DATA_IND SDU DROPPED, OUT OF MEMORY \n",
|
||||||
PROTOCOL_PDCP_CTXT_ARGS(ctxt_pP, pdcp_p));
|
PROTOCOL_PDCP_CTXT_ARGS(ctxt_pP, pdcp_p));
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
free_mem_block(sdu_buffer_pP, __func__);
|
free_mem_block(sdu_buffer_pP, __func__);
|
||||||
|
|
||||||
if (ctxt_pP->enb_flag) {
|
if (ctxt_pP->enb_flag) {
|
||||||
@@ -1458,8 +1471,12 @@ rrc_pdcp_config_asn1_req (
|
|||||||
|
|
||||||
for (j=0; j<mbms_SessionInfoList_r9_p->list.count; j++) {
|
for (j=0; j<mbms_SessionInfoList_r9_p->list.count; j++) {
|
||||||
MBMS_SessionInfo_p = mbms_SessionInfoList_r9_p->list.array[j];
|
MBMS_SessionInfo_p = mbms_SessionInfoList_r9_p->list.array[j];
|
||||||
lc_id = MBMS_SessionInfo_p->sessionId_r9->buf[0];
|
if (MBMS_SessionInfo_p->sessionId_r9)
|
||||||
|
lc_id = MBMS_SessionInfo_p->sessionId_r9->buf[0];
|
||||||
|
else
|
||||||
|
lc_id = MBMS_SessionInfo_p->logicalChannelIdentity_r9;
|
||||||
mch_id = MBMS_SessionInfo_p->tmgi_r9.serviceId_r9.buf[2]; //serviceId is 3-octet string
|
mch_id = MBMS_SessionInfo_p->tmgi_r9.serviceId_r9.buf[2]; //serviceId is 3-octet string
|
||||||
|
// mch_id = j;
|
||||||
|
|
||||||
// can set the mch_id = i
|
// can set the mch_id = i
|
||||||
if (ctxt_pP->enb_flag) {
|
if (ctxt_pP->enb_flag) {
|
||||||
@@ -1480,6 +1497,14 @@ rrc_pdcp_config_asn1_req (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LOG_D(PDCP, "lc_id (%02ld) mch_id(%02x,%02x,%02x) drb_id(%ld) action(%d)\n",
|
||||||
|
lc_id,
|
||||||
|
MBMS_SessionInfo_p->tmgi_r9.serviceId_r9.buf[0],
|
||||||
|
MBMS_SessionInfo_p->tmgi_r9.serviceId_r9.buf[1],
|
||||||
|
MBMS_SessionInfo_p->tmgi_r9.serviceId_r9.buf[2],
|
||||||
|
drb_id,
|
||||||
|
action);
|
||||||
|
|
||||||
pdcp_config_req_asn1 (
|
pdcp_config_req_asn1 (
|
||||||
ctxt_pP,
|
ctxt_pP,
|
||||||
NULL, // unused for MBMS
|
NULL, // unused for MBMS
|
||||||
@@ -2018,6 +2043,12 @@ void pdcp_layer_init(void)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef MBMS_MULTICAST_OUT
|
||||||
|
mbms_socket = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
|
||||||
|
if (mbms_socket == -1)
|
||||||
|
LOG_W(PDCP, "Could not create RAW socket, MBMS packets will not be put to the network\n");
|
||||||
|
#endif
|
||||||
|
|
||||||
LOG_I(PDCP, "PDCP layer has been initialized\n");
|
LOG_I(PDCP, "PDCP layer has been initialized\n");
|
||||||
|
|
||||||
pdcp_output_sdu_bytes_to_write=0;
|
pdcp_output_sdu_bytes_to_write=0;
|
||||||
@@ -2068,6 +2099,12 @@ void pdcp_layer_cleanup (void)
|
|||||||
{
|
{
|
||||||
list_free (&pdcp_sdu_list);
|
list_free (&pdcp_sdu_list);
|
||||||
hashtable_destroy(pdcp_coll_p);
|
hashtable_destroy(pdcp_coll_p);
|
||||||
|
#ifdef MBMS_MULTICAST_OUT
|
||||||
|
if(mbms_socket != -1) {
|
||||||
|
close(mbms_socket);
|
||||||
|
mbms_socket = -1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef PDCP_USE_RT_FIFO
|
#ifdef PDCP_USE_RT_FIFO
|
||||||
|
|||||||
@@ -760,10 +760,10 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP)
|
|||||||
0,
|
0,
|
||||||
MSC_AS_TIME_FMT" DATA-REQ inst %u rb %u rab %u size %u",
|
MSC_AS_TIME_FMT" DATA-REQ inst %u rb %u rab %u size %u",
|
||||||
MSC_AS_TIME_ARGS(ctxt_pP),
|
MSC_AS_TIME_ARGS(ctxt_pP),
|
||||||
pc5s_header.inst,
|
pc5s_header->inst,
|
||||||
pc5s_header.rb_id,
|
pc5s_header->rb_id,
|
||||||
rab_id,
|
rab_id,
|
||||||
pc5s_header.data_size);
|
pc5s_header->data_size);
|
||||||
|
|
||||||
pdcp_data_req(
|
pdcp_data_req(
|
||||||
&ctxt,
|
&ctxt,
|
||||||
@@ -787,10 +787,10 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP)
|
|||||||
0,
|
0,
|
||||||
MSC_AS_TIME_FMT" DATA-REQ inst %u rb %u rab %u size %u",
|
MSC_AS_TIME_FMT" DATA-REQ inst %u rb %u rab %u size %u",
|
||||||
MSC_AS_TIME_ARGS(ctxt_pP),
|
MSC_AS_TIME_ARGS(ctxt_pP),
|
||||||
pc5s_header.inst,
|
pc5s_header->inst,
|
||||||
pc5s_header.rb_id,
|
pc5s_header->rb_id,
|
||||||
rab_id,
|
rab_id,
|
||||||
pc5s_header.data_size);
|
pc5s_header->data_size);
|
||||||
LOG_D(PDCP,
|
LOG_D(PDCP,
|
||||||
"[FRAME %5u][UE][IP][INSTANCE %u][RB %u][--- PDCP_DATA_REQ / %d Bytes ---X][PDCP][MOD %u][UE %u][RB %u] NON INSTANCIATED INSTANCE key 0x%"PRIx64", DROPPED\n",
|
"[FRAME %5u][UE][IP][INSTANCE %u][RB %u][--- PDCP_DATA_REQ / %d Bytes ---X][PDCP][MOD %u][UE %u][RB %u] NON INSTANCIATED INSTANCE key 0x%"PRIx64", DROPPED\n",
|
||||||
ctxt.frame,
|
ctxt.frame,
|
||||||
|
|||||||
@@ -208,7 +208,7 @@ rlc_mbms_id_t rlc_mbms_lcid2service_session_id_eNB[MAX_eNB][RLC_MAX_MBMS_
|
|||||||
#define rlc_mbms_ue_get_lcid_by_rb_id(uE_mOD,rB_iD) rlc_mbms_rbid2lcid_ue[uE_mOD][rB_iD]
|
#define rlc_mbms_ue_get_lcid_by_rb_id(uE_mOD,rB_iD) rlc_mbms_rbid2lcid_ue[uE_mOD][rB_iD]
|
||||||
|
|
||||||
#define rlc_mbms_ue_set_lcid_by_rb_id(uE_mOD,rB_iD,lOG_cH_iD) do { \
|
#define rlc_mbms_ue_set_lcid_by_rb_id(uE_mOD,rB_iD,lOG_cH_iD) do { \
|
||||||
AssertFatal(rB_iD<NB_RB_MAX, "INVALID RB ID %u", rB_iD); \
|
AssertFatal(rB_iD<NB_RB_MBMS_MAX, "INVALID RB ID %u", rB_iD); \
|
||||||
rlc_mbms_rbid2lcid_ue[uE_mOD][rB_iD] = lOG_cH_iD; \
|
rlc_mbms_rbid2lcid_ue[uE_mOD][rB_iD] = lOG_cH_iD; \
|
||||||
} while (0);
|
} while (0);
|
||||||
|
|
||||||
|
|||||||
@@ -414,9 +414,13 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP
|
|||||||
|
|
||||||
for (j=0; j<mbms_SessionInfoList_r9_p->list.count; j++) {
|
for (j=0; j<mbms_SessionInfoList_r9_p->list.count; j++) {
|
||||||
MBMS_SessionInfo_p = mbms_SessionInfoList_r9_p->list.array[j];
|
MBMS_SessionInfo_p = mbms_SessionInfoList_r9_p->list.array[j];
|
||||||
mbms_session_id = MBMS_SessionInfo_p->sessionId_r9->buf[0];
|
if (MBMS_SessionInfo_p->sessionId_r9)
|
||||||
|
mbms_session_id = MBMS_SessionInfo_p->sessionId_r9->buf[0];
|
||||||
|
else
|
||||||
|
mbms_session_id = MBMS_SessionInfo_p->logicalChannelIdentity_r9;
|
||||||
lc_id = mbms_session_id;
|
lc_id = mbms_session_id;
|
||||||
mbms_service_id = MBMS_SessionInfo_p->tmgi_r9.serviceId_r9.buf[2]; //serviceId is 3-octet string
|
mbms_service_id = MBMS_SessionInfo_p->tmgi_r9.serviceId_r9.buf[2]; //serviceId is 3-octet string
|
||||||
|
// mbms_service_id = j;
|
||||||
|
|
||||||
// can set the mch_id = i
|
// can set the mch_id = i
|
||||||
if (ctxt_pP->enb_flag) {
|
if (ctxt_pP->enb_flag) {
|
||||||
|
|||||||
@@ -333,7 +333,7 @@ void oai_nw_drv_common_class_wireless2ip(uint16_t dlen,
|
|||||||
|
|
||||||
printk("\n");
|
printk("\n");
|
||||||
#endif //OAI_DRV_DEBUG_RECEIVE
|
#endif //OAI_DRV_DEBUG_RECEIVE
|
||||||
netif_rx(skb);
|
netif_rx_ni(skb);
|
||||||
#ifdef OAI_DRV_DEBUG_RECEIVE
|
#ifdef OAI_DRV_DEBUG_RECEIVE
|
||||||
printk("[OAI_IP_DRV][%s] end\n",__FUNCTION__);
|
printk("[OAI_IP_DRV][%s] end\n",__FUNCTION__);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -309,7 +309,7 @@ void nas_COMMON_receive(uint16_t dlen,
|
|||||||
|
|
||||||
printk("\n");
|
printk("\n");
|
||||||
#endif //NAS_DEBUG_RECEIVE
|
#endif //NAS_DEBUG_RECEIVE
|
||||||
netif_rx(skb);
|
netif_rx_ni(skb);
|
||||||
#ifdef NAS_DEBUG_RECEIVE
|
#ifdef NAS_DEBUG_RECEIVE
|
||||||
printk("NAS_COMMON_RECEIVE: end\n");
|
printk("NAS_COMMON_RECEIVE: end\n");
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -222,7 +222,7 @@ skb_p->mark = rb_idP;
|
|||||||
|
|
||||||
printk("\n");
|
printk("\n");
|
||||||
#endif //OAI_DRV_DEBUG_RECEIVE
|
#endif //OAI_DRV_DEBUG_RECEIVE
|
||||||
netif_rx(skb_p);
|
netif_rx_ni(skb_p);
|
||||||
#ifdef OAI_DRV_DEBUG_RECEIVE
|
#ifdef OAI_DRV_DEBUG_RECEIVE
|
||||||
printk("[UE_IP_DRV][%s] end\n",__FUNCTION__);
|
printk("[UE_IP_DRV][%s] end\n",__FUNCTION__);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -43,9 +43,6 @@
|
|||||||
|
|
||||||
#include "flexran_agent_extern.h"
|
#include "flexran_agent_extern.h"
|
||||||
|
|
||||||
//#define RRC_DATA_REQ_DEBUG
|
|
||||||
//#define DEBUG_RRC 1
|
|
||||||
|
|
||||||
|
|
||||||
extern RAN_CONTEXT_t RC;
|
extern RAN_CONTEXT_t RC;
|
||||||
|
|
||||||
@@ -68,10 +65,9 @@ mac_rrc_data_req(
|
|||||||
uint8_t sfn = (uint8_t)((frameP>>2)&0xff);
|
uint8_t sfn = (uint8_t)((frameP>>2)&0xff);
|
||||||
|
|
||||||
|
|
||||||
#ifdef DEBUG_RRC
|
if (LOG_DEBUGFLAG(DEBUG_RRC)) {
|
||||||
int i;
|
LOG_D(RRC,"[eNB %d] mac_rrc_data_req to SRB ID=%d\n",Mod_idP,Srb_id);
|
||||||
LOG_I(RRC,"[eNB %d] mac_rrc_data_req to SRB ID=%d\n",Mod_idP,Srb_id);
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
eNB_RRC_INST *rrc;
|
eNB_RRC_INST *rrc;
|
||||||
rrc_eNB_carrier_data_t *carrier;
|
rrc_eNB_carrier_data_t *carrier;
|
||||||
@@ -96,15 +92,15 @@ mac_rrc_data_req(
|
|||||||
RC.rrc[Mod_idP]->carrier[CC_id].SIB1,
|
RC.rrc[Mod_idP]->carrier[CC_id].SIB1,
|
||||||
RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB1);
|
RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB1);
|
||||||
|
|
||||||
#ifdef DEBUG_RRC
|
if (LOG_DEBUGFLAG(DEBUG_RRC)) {
|
||||||
LOG_T(RRC,"[eNB %d] Frame %d : BCCH request => SIB 1\n",Mod_idP,frameP);
|
LOG_T(RRC,"[eNB %d] Frame %d : BCCH request => SIB 1\n",Mod_idP,frameP);
|
||||||
|
|
||||||
for (i=0; i<RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB1; i++) {
|
for (int i=0; i<RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB1; i++) {
|
||||||
LOG_T(RRC,"%x.",buffer_pP[i]);
|
LOG_T(RRC,"%x.",buffer_pP[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_T(RRC,"\n");
|
LOG_T(RRC,"\n");
|
||||||
#endif
|
} /* LOG_DEBUGFLAG(DEBUG_RRC) */
|
||||||
|
|
||||||
return (RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB1);
|
return (RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB1);
|
||||||
} // All RFN mod 8 transmit SIB2-3 in SF 5
|
} // All RFN mod 8 transmit SIB2-3 in SF 5
|
||||||
@@ -113,15 +109,15 @@ mac_rrc_data_req(
|
|||||||
RC.rrc[Mod_idP]->carrier[CC_id].SIB23,
|
RC.rrc[Mod_idP]->carrier[CC_id].SIB23,
|
||||||
RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB23);
|
RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB23);
|
||||||
|
|
||||||
#ifdef DEBUG_RRC
|
if (LOG_DEBUGFLAG(DEBUG_RRC)) {
|
||||||
LOG_T(RRC,"[eNB %d] Frame %d BCCH request => SIB 2-3\n",Mod_idP,frameP);
|
LOG_T(RRC,"[eNB %d] Frame %d BCCH request => SIB 2-3\n",Mod_idP,frameP);
|
||||||
|
|
||||||
for (i=0; i<RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB23; i++) {
|
for (int i=0; i<RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB23; i++) {
|
||||||
LOG_T(RRC,"%x.",buffer_pP[i]);
|
LOG_T(RRC,"%x.",buffer_pP[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_T(RRC,"\n");
|
LOG_T(RRC,"\n");
|
||||||
#endif
|
} /* LOG_DEBUGFLAG(DEBUG_RRC) */
|
||||||
return(RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB23);
|
return(RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB23);
|
||||||
} else {
|
} else {
|
||||||
return(0);
|
return(0);
|
||||||
@@ -193,20 +189,17 @@ mac_rrc_data_req(
|
|||||||
RC.rrc[Mod_idP]->carrier[CC_id].MCCH_MESSAGE[mbsfn_sync_area],
|
RC.rrc[Mod_idP]->carrier[CC_id].MCCH_MESSAGE[mbsfn_sync_area],
|
||||||
RC.rrc[Mod_idP]->carrier[CC_id].sizeof_MCCH_MESSAGE[mbsfn_sync_area]);
|
RC.rrc[Mod_idP]->carrier[CC_id].sizeof_MCCH_MESSAGE[mbsfn_sync_area]);
|
||||||
|
|
||||||
#ifdef DEBUG_RRC
|
if (LOG_DEBUGFLAG(DEBUG_RRC)) {
|
||||||
LOG_D(RRC,"[eNB %d] Frame %d : MCCH request => MCCH_MESSAGE \n",Mod_idP,frameP);
|
LOG_D(RRC,"[eNB %d] Frame %d : MCCH request => MCCH_MESSAGE \n",Mod_idP,frameP);
|
||||||
|
|
||||||
for (i=0; i<RC.rrc[Mod_idP]->carrier[CC_id].sizeof_MCCH_MESSAGE[mbsfn_sync_area]; i++) {
|
for (int i=0; i<RC.rrc[Mod_idP]->carrier[CC_id].sizeof_MCCH_MESSAGE[mbsfn_sync_area]; i++) {
|
||||||
LOG_T(RRC,"%x.",buffer_pP[i]);
|
LOG_T(RRC,"%x.",buffer_pP[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_T(RRC,"\n");
|
LOG_T(RRC,"\n");
|
||||||
#endif
|
} /* LOG_DEBUGFLAG(DEBUG_RRC) */
|
||||||
|
|
||||||
return (RC.rrc[Mod_idP]->carrier[CC_id].sizeof_MCCH_MESSAGE[mbsfn_sync_area]);
|
return (RC.rrc[Mod_idP]->carrier[CC_id].sizeof_MCCH_MESSAGE[mbsfn_sync_area]);
|
||||||
// }
|
|
||||||
//else
|
|
||||||
//return(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0))
|
#endif // #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0))
|
||||||
@@ -329,7 +322,7 @@ void mac_eNB_rrc_ul_failure(const module_id_t Mod_instP,
|
|||||||
rntiP,
|
rntiP,
|
||||||
PROTOCOL__FLEX_UE_STATE_CHANGE_TYPE__FLUESC_DEACTIVATED);
|
PROTOCOL__FLEX_UE_STATE_CHANGE_TYPE__FLUESC_DEACTIVATED);
|
||||||
}
|
}
|
||||||
// rrc_mac_remove_ue(Mod_instP,rntiP);
|
rrc_mac_remove_ue(Mod_instP,rntiP);
|
||||||
}
|
}
|
||||||
|
|
||||||
void mac_eNB_rrc_uplane_failure(const module_id_t Mod_instP,
|
void mac_eNB_rrc_uplane_failure(const module_id_t Mod_instP,
|
||||||
|
|||||||
@@ -42,7 +42,6 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
//#define RRC_DATA_REQ_DEBUG
|
//#define RRC_DATA_REQ_DEBUG
|
||||||
//#define DEBUG_RRC 1
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -61,10 +60,7 @@ mac_rrc_data_req_ue(
|
|||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
{
|
{
|
||||||
|
|
||||||
#ifdef DEBUG_RRC
|
LOG_D(RRC,"[eNB %d] mac_rrc_data_req to SRB ID=%d\n",Mod_idP,Srb_id);
|
||||||
int i;
|
|
||||||
LOG_I(RRC,"[eNB %d] mac_rrc_data_req to SRB ID=%d\n",Mod_idP,Srb_id);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0))
|
#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0))
|
||||||
|
|||||||
@@ -91,7 +91,6 @@
|
|||||||
#define msg printf
|
#define msg printf
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//#define XER_PRINT
|
|
||||||
|
|
||||||
typedef struct xer_sprint_string_s {
|
typedef struct xer_sprint_string_s {
|
||||||
char *string;
|
char *string;
|
||||||
@@ -1353,9 +1352,9 @@ uint8_t do_SIB23(uint8_t Mod_id,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef XER_PRINT
|
if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
||||||
xer_fprint(stdout, &asn_DEF_BCCH_DL_SCH_Message, (void*)bcch_message);
|
xer_fprint(stdout, &asn_DEF_BCCH_DL_SCH_Message, (void*)bcch_message);
|
||||||
#endif
|
}
|
||||||
enc_rval = uper_encode_to_buffer(&asn_DEF_BCCH_DL_SCH_Message,
|
enc_rval = uper_encode_to_buffer(&asn_DEF_BCCH_DL_SCH_Message,
|
||||||
NULL,
|
NULL,
|
||||||
(void*)bcch_message,
|
(void*)bcch_message,
|
||||||
@@ -1607,9 +1606,9 @@ uint8_t do_SidelinkUEInformation(uint8_t Mod_id, uint8_t *buffer, SL_Destinatio
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef XER_PRINT
|
if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
||||||
xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void*)&ul_dcch_msg);
|
xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void*)&ul_dcch_msg);
|
||||||
#endif
|
}
|
||||||
|
|
||||||
|
|
||||||
enc_rval = uper_encode_to_buffer(&asn_DEF_UL_DCCH_Message,
|
enc_rval = uper_encode_to_buffer(&asn_DEF_UL_DCCH_Message,
|
||||||
@@ -2165,9 +2164,9 @@ do_RRCConnectionSetup(
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef XER_PRINT
|
if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
||||||
xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg);
|
xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg);
|
||||||
#endif
|
}
|
||||||
enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message,
|
enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message,
|
||||||
NULL,
|
NULL,
|
||||||
(void*)&dl_ccch_msg,
|
(void*)&dl_ccch_msg,
|
||||||
@@ -2240,9 +2239,9 @@ do_SecurityModeCommand(
|
|||||||
dl_dcch_msg.message.choice.c1.choice.securityModeCommand.criticalExtensions.choice.c1.choice.securityModeCommand_r8.securityConfigSMC.securityAlgorithmConfig.integrityProtAlgorithm
|
dl_dcch_msg.message.choice.c1.choice.securityModeCommand.criticalExtensions.choice.c1.choice.securityModeCommand_r8.securityConfigSMC.securityAlgorithmConfig.integrityProtAlgorithm
|
||||||
= (e_SecurityAlgorithmConfig__integrityProtAlgorithm)integrityProtAlgorithm;
|
= (e_SecurityAlgorithmConfig__integrityProtAlgorithm)integrityProtAlgorithm;
|
||||||
|
|
||||||
#ifdef XER_PRINT
|
if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
||||||
xer_fprint(stdout, &asn_DEF_DL_DCCH_Message, (void*)&dl_dcch_msg);
|
xer_fprint(stdout, &asn_DEF_DL_DCCH_Message, (void*)&dl_dcch_msg);
|
||||||
#endif
|
}
|
||||||
enc_rval = uper_encode_to_buffer(&asn_DEF_DL_DCCH_Message,
|
enc_rval = uper_encode_to_buffer(&asn_DEF_DL_DCCH_Message,
|
||||||
NULL,
|
NULL,
|
||||||
(void*)&dl_dcch_msg,
|
(void*)&dl_dcch_msg,
|
||||||
@@ -2320,9 +2319,9 @@ do_UECapabilityEnquiry(
|
|||||||
ASN_SEQUENCE_ADD(&dl_dcch_msg.message.choice.c1.choice.ueCapabilityEnquiry.criticalExtensions.choice.c1.choice.ueCapabilityEnquiry_r8.ue_CapabilityRequest.list,
|
ASN_SEQUENCE_ADD(&dl_dcch_msg.message.choice.c1.choice.ueCapabilityEnquiry.criticalExtensions.choice.c1.choice.ueCapabilityEnquiry_r8.ue_CapabilityRequest.list,
|
||||||
&rat);
|
&rat);
|
||||||
|
|
||||||
#ifdef XER_PRINT
|
if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
||||||
xer_fprint(stdout, &asn_DEF_DL_DCCH_Message, (void*)&dl_dcch_msg);
|
xer_fprint(stdout, &asn_DEF_DL_DCCH_Message, (void*)&dl_dcch_msg);
|
||||||
#endif
|
}
|
||||||
enc_rval = uper_encode_to_buffer(&asn_DEF_DL_DCCH_Message,
|
enc_rval = uper_encode_to_buffer(&asn_DEF_DL_DCCH_Message,
|
||||||
NULL,
|
NULL,
|
||||||
(void*)&dl_dcch_msg,
|
(void*)&dl_dcch_msg,
|
||||||
@@ -2539,9 +2538,9 @@ do_RRCConnectionReconfiguration(
|
|||||||
enc_rval.failed_type->name, enc_rval.encoded);
|
enc_rval.failed_type->name, enc_rval.encoded);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
#ifdef XER_PRINT
|
if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
||||||
xer_fprint(stdout,&asn_DEF_DL_DCCH_Message,(void*)&dl_dcch_msg);
|
xer_fprint(stdout,&asn_DEF_DL_DCCH_Message,(void*)&dl_dcch_msg);
|
||||||
#endif
|
}
|
||||||
|
|
||||||
#if defined(ENABLE_ITTI)
|
#if defined(ENABLE_ITTI)
|
||||||
# if !defined(DISABLE_XER_SPRINT)
|
# if !defined(DISABLE_XER_SPRINT)
|
||||||
@@ -2742,9 +2741,9 @@ do_RRCConnectionReestablishment(
|
|||||||
|
|
||||||
rrcConnectionReestablishment->criticalExtensions.choice.c1.choice.rrcConnectionReestablishment_r8.nonCriticalExtension = NULL;
|
rrcConnectionReestablishment->criticalExtensions.choice.c1.choice.rrcConnectionReestablishment_r8.nonCriticalExtension = NULL;
|
||||||
|
|
||||||
#ifdef XER_PRINT
|
if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
||||||
xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg);
|
xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg);
|
||||||
#endif
|
}
|
||||||
enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message,
|
enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message,
|
||||||
NULL,
|
NULL,
|
||||||
(void*)&dl_ccch_msg,
|
(void*)&dl_ccch_msg,
|
||||||
@@ -2804,9 +2803,9 @@ do_RRCConnectionReestablishmentReject(
|
|||||||
// RRCConnectionReestablishmentReject
|
// RRCConnectionReestablishmentReject
|
||||||
rrcConnectionReestablishmentReject->criticalExtensions.present = RRCConnectionReestablishmentReject__criticalExtensions_PR_rrcConnectionReestablishmentReject_r8;
|
rrcConnectionReestablishmentReject->criticalExtensions.present = RRCConnectionReestablishmentReject__criticalExtensions_PR_rrcConnectionReestablishmentReject_r8;
|
||||||
|
|
||||||
#ifdef XER_PRINT
|
if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
||||||
xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg);
|
xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg);
|
||||||
#endif
|
}
|
||||||
enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message,
|
enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message,
|
||||||
NULL,
|
NULL,
|
||||||
(void*)&dl_ccch_msg,
|
(void*)&dl_ccch_msg,
|
||||||
@@ -2867,9 +2866,9 @@ do_RRCConnectionReject(
|
|||||||
/* let's put a wait time of 1s for the moment */
|
/* let's put a wait time of 1s for the moment */
|
||||||
rrcConnectionReject->criticalExtensions.choice.c1.choice.rrcConnectionReject_r8.waitTime = 1;
|
rrcConnectionReject->criticalExtensions.choice.c1.choice.rrcConnectionReject_r8.waitTime = 1;
|
||||||
|
|
||||||
#ifdef XER_PRINT
|
if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
||||||
xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg);
|
xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg);
|
||||||
#endif
|
}
|
||||||
enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message,
|
enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message,
|
||||||
NULL,
|
NULL,
|
||||||
(void*)&dl_ccch_msg,
|
(void*)&dl_ccch_msg,
|
||||||
@@ -3061,9 +3060,9 @@ uint8_t do_MBSFNAreaConfig(uint8_t Mod_id,
|
|||||||
*/
|
*/
|
||||||
ASN_SEQUENCE_ADD(&(*mbsfnAreaConfiguration)->pmch_InfoList_r9.list,pmch_Info_1);
|
ASN_SEQUENCE_ADD(&(*mbsfnAreaConfiguration)->pmch_InfoList_r9.list,pmch_Info_1);
|
||||||
|
|
||||||
#ifdef XER_PRINT
|
if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
||||||
xer_fprint(stdout,&asn_DEF_MCCH_Message,(void*)mcch_message);
|
xer_fprint(stdout,&asn_DEF_MCCH_Message,(void*)mcch_message);
|
||||||
#endif
|
}
|
||||||
enc_rval = uper_encode_to_buffer(&asn_DEF_MCCH_Message,
|
enc_rval = uper_encode_to_buffer(&asn_DEF_MCCH_Message,
|
||||||
NULL,
|
NULL,
|
||||||
(void*)mcch_message,
|
(void*)mcch_message,
|
||||||
@@ -3339,9 +3338,9 @@ uint8_t do_Paging(uint8_t Mod_id, uint8_t *buffer, ue_paging_identity_t ue_pagin
|
|||||||
enc_rval.failed_type->name, enc_rval.encoded);
|
enc_rval.failed_type->name, enc_rval.encoded);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
#ifdef XER_PRINT
|
if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
||||||
xer_fprint(stdout, &asn_DEF_PCCH_Message, (void*)&pcch_msg);
|
xer_fprint(stdout, &asn_DEF_PCCH_Message, (void*)&pcch_msg);
|
||||||
#endif
|
}
|
||||||
|
|
||||||
return((enc_rval.encoded+7)/8);
|
return((enc_rval.encoded+7)/8);
|
||||||
}
|
}
|
||||||
@@ -3504,9 +3503,9 @@ OAI_UECapability_t *fill_ue_capability(char *UE_EUTRA_Capability_xer_fname)
|
|||||||
}
|
}
|
||||||
|
|
||||||
UECapability.UE_EUTRA_Capability = UE_EUTRA_Capability;
|
UECapability.UE_EUTRA_Capability = UE_EUTRA_Capability;
|
||||||
#ifdef XER_PRINT
|
if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
||||||
xer_fprint(stdout,&asn_DEF_UE_EUTRA_Capability,(void *)UE_EUTRA_Capability);
|
xer_fprint(stdout,&asn_DEF_UE_EUTRA_Capability,(void *)UE_EUTRA_Capability);
|
||||||
#endif
|
}
|
||||||
enc_rval = uper_encode_to_buffer(&asn_DEF_UE_EUTRA_Capability,
|
enc_rval = uper_encode_to_buffer(&asn_DEF_UE_EUTRA_Capability,
|
||||||
NULL,
|
NULL,
|
||||||
(void*)UE_EUTRA_Capability,
|
(void*)UE_EUTRA_Capability,
|
||||||
|
|||||||
@@ -136,7 +136,7 @@ uint8_t do_MIB_NB_IoT(
|
|||||||
carrier->MIB_NB_IoT,
|
carrier->MIB_NB_IoT,
|
||||||
100);
|
100);
|
||||||
if(enc_rval.encoded <= 0) {
|
if(enc_rval.encoded <= 0) {
|
||||||
LOG_F(RRC, "ASN1 message encoding failed (%s, %lu)!\n",
|
LOG_E(RRC, "ASN1 message encoding failed (%s, %lu)!\n",
|
||||||
enc_rval.failed_type->name, enc_rval.encoded);
|
enc_rval.failed_type->name, enc_rval.encoded);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -382,9 +382,9 @@ uint8_t do_SIB1_NB_IoT(uint8_t Mod_id, int CC_id,
|
|||||||
ASN_SEQUENCE_ADD(&(*sib1_NB_IoT)->systemInfoValueTagList_r13->list,&systemInfoValueTagSI);
|
ASN_SEQUENCE_ADD(&(*sib1_NB_IoT)->systemInfoValueTagList_r13->list,&systemInfoValueTagSI);
|
||||||
|
|
||||||
|
|
||||||
#ifdef XER_PRINT //generate xml files
|
if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
||||||
xer_fprint(stdout, &asn_DEF_BCCH_DL_SCH_Message_NB, (void*)bcch_message);
|
xer_fprint(stdout, &asn_DEF_BCCH_DL_SCH_Message_NB, (void*)bcch_message);
|
||||||
#endif
|
}
|
||||||
|
|
||||||
|
|
||||||
enc_rval = uper_encode_to_buffer(&asn_DEF_BCCH_DL_SCH_Message_NB,
|
enc_rval = uper_encode_to_buffer(&asn_DEF_BCCH_DL_SCH_Message_NB,
|
||||||
@@ -394,7 +394,7 @@ uint8_t do_SIB1_NB_IoT(uint8_t Mod_id, int CC_id,
|
|||||||
100);
|
100);
|
||||||
|
|
||||||
if (enc_rval.encoded > 0){
|
if (enc_rval.encoded > 0){
|
||||||
LOG_F(RRC,"ASN1 message encoding failed (%s, %lu)!\n",
|
LOG_E(RRC,"ASN1 message encoding failed (%s, %lu)!\n",
|
||||||
enc_rval.failed_type->name, enc_rval.encoded);
|
enc_rval.failed_type->name, enc_rval.encoded);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -667,9 +667,9 @@ uint8_t do_SIB23_NB_IoT(uint8_t Mod_id,
|
|||||||
ASN_SEQUENCE_ADD(&bcch_message->message.choice.c1.choice.systemInformation_r13.criticalExtensions.choice.systemInformation_r13.sib_TypeAndInfo_r13.list,
|
ASN_SEQUENCE_ADD(&bcch_message->message.choice.c1.choice.systemInformation_r13.criticalExtensions.choice.systemInformation_r13.sib_TypeAndInfo_r13.list,
|
||||||
sib3_NB_part);
|
sib3_NB_part);
|
||||||
|
|
||||||
#ifdef XER_PRINT
|
if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
||||||
xer_fprint(stdout, &asn_DEF_BCCH_DL_SCH_Message_NB, (void*)bcch_message);
|
xer_fprint(stdout, &asn_DEF_BCCH_DL_SCH_Message_NB, (void*)bcch_message);
|
||||||
#endif
|
}
|
||||||
enc_rval = uper_encode_to_buffer(&asn_DEF_BCCH_DL_SCH_Message_NB,
|
enc_rval = uper_encode_to_buffer(&asn_DEF_BCCH_DL_SCH_Message_NB,
|
||||||
NULL,
|
NULL,
|
||||||
(void*)bcch_message,
|
(void*)bcch_message,
|
||||||
@@ -887,9 +887,9 @@ uint8_t do_RRCConnectionSetup_NB_IoT(
|
|||||||
rrcConnectionSetup_NB_IoT->criticalExtensions.choice.c1.choice.rrcConnectionSetup_r13.radioResourceConfigDedicated_r13.physicalConfigDedicated_r13 = physicalConfigDedicated2_NB_IoT;
|
rrcConnectionSetup_NB_IoT->criticalExtensions.choice.c1.choice.rrcConnectionSetup_r13.radioResourceConfigDedicated_r13.physicalConfigDedicated_r13 = physicalConfigDedicated2_NB_IoT;
|
||||||
rrcConnectionSetup_NB_IoT->criticalExtensions.choice.c1.choice.rrcConnectionSetup_r13.radioResourceConfigDedicated_r13.mac_MainConfig_r13 = NULL;
|
rrcConnectionSetup_NB_IoT->criticalExtensions.choice.c1.choice.rrcConnectionSetup_r13.radioResourceConfigDedicated_r13.mac_MainConfig_r13 = NULL;
|
||||||
|
|
||||||
#ifdef XER_PRINT
|
if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
||||||
xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg);
|
xer_fprint(stdout, &asn_DEF_DL_CCCH_Message_NB, (void*)&dl_ccch_msg_NB_IoT);
|
||||||
#endif
|
}
|
||||||
enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message_NB,
|
enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message_NB,
|
||||||
NULL,
|
NULL,
|
||||||
(void*)&dl_ccch_msg_NB_IoT,
|
(void*)&dl_ccch_msg_NB_IoT,
|
||||||
@@ -897,7 +897,7 @@ uint8_t do_RRCConnectionSetup_NB_IoT(
|
|||||||
100);
|
100);
|
||||||
|
|
||||||
if (enc_rval.encoded <= 0) {
|
if (enc_rval.encoded <= 0) {
|
||||||
LOG_F(RRC, "ASN1 message encoding failed (%s, %lu)!\n",
|
LOG_E(RRC, "ASN1 message encoding failed (%s, %lu)!\n",
|
||||||
enc_rval.failed_type->name, enc_rval.encoded);
|
enc_rval.failed_type->name, enc_rval.encoded);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -939,16 +939,16 @@ uint8_t do_SecurityModeCommand_NB_IoT(
|
|||||||
= (e_SecurityAlgorithmConfig__integrityProtAlgorithm)integrityProtAlgorithm;
|
= (e_SecurityAlgorithmConfig__integrityProtAlgorithm)integrityProtAlgorithm;
|
||||||
|
|
||||||
//only changed "asn_DEF_DL_DCCH_Message_NB"
|
//only changed "asn_DEF_DL_DCCH_Message_NB"
|
||||||
#ifdef XER_PRINT
|
if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
||||||
xer_fprint(stdout, &asn_DEF_DL_DCCH_Message_NB, (void*)&dl_dcch_msg_NB_IoT);
|
xer_fprint(stdout, &asn_DEF_DL_DCCH_Message_NB, (void*)&dl_dcch_msg_NB_IoT);
|
||||||
#endif
|
}
|
||||||
enc_rval = uper_encode_to_buffer(&asn_DEF_DL_DCCH_Message_NB,
|
enc_rval = uper_encode_to_buffer(&asn_DEF_DL_DCCH_Message_NB,
|
||||||
NULL,
|
NULL,
|
||||||
(void*)&dl_dcch_msg_NB_IoT,
|
(void*)&dl_dcch_msg_NB_IoT,
|
||||||
buffer,
|
buffer,
|
||||||
100);
|
100);
|
||||||
if (enc_rval.encoded <= 0) {
|
if (enc_rval.encoded <= 0) {
|
||||||
LOG_F(RRC, "ASN1 message encoding failed (%s, %lu)!\n",
|
LOG_E(RRC, "ASN1 message encoding failed (%s, %lu)!\n",
|
||||||
enc_rval.failed_type->name, enc_rval.encoded);
|
enc_rval.failed_type->name, enc_rval.encoded);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1001,16 +1001,16 @@ uint8_t do_UECapabilityEnquiry_NB_IoT(
|
|||||||
//no ue_CapabilityRequest (list of RAT_Type)
|
//no ue_CapabilityRequest (list of RAT_Type)
|
||||||
|
|
||||||
//only changed "asn_DEF_DL_DCCH_Message_NB"
|
//only changed "asn_DEF_DL_DCCH_Message_NB"
|
||||||
#ifdef XER_PRINT
|
if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
||||||
xer_fprint(stdout, &asn_DEF_DL_DCCH_Message_NB, (void*)&dl_dcch_msg_NB_IoT);
|
xer_fprint(stdout, &asn_DEF_DL_DCCH_Message_NB, (void*)&dl_dcch_msg_NB_IoT);
|
||||||
#endif
|
}
|
||||||
enc_rval = uper_encode_to_buffer(&asn_DEF_DL_DCCH_Message_NB,
|
enc_rval = uper_encode_to_buffer(&asn_DEF_DL_DCCH_Message_NB,
|
||||||
NULL,
|
NULL,
|
||||||
(void*)&dl_dcch_msg_NB_IoT,
|
(void*)&dl_dcch_msg_NB_IoT,
|
||||||
buffer,
|
buffer,
|
||||||
100);
|
100);
|
||||||
if (enc_rval.encoded <= 0) {
|
if (enc_rval.encoded <= 0) {
|
||||||
LOG_F(RRC, "ASN1 message encoding failed (%s, %lu)!\n",
|
LOG_E(RRC, "ASN1 message encoding failed (%s, %lu)!\n",
|
||||||
enc_rval.failed_type->name, enc_rval.encoded);
|
enc_rval.failed_type->name, enc_rval.encoded);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1105,14 +1105,14 @@ uint16_t do_RRCConnectionReconfiguration_NB_IoT(
|
|||||||
buffer,
|
buffer,
|
||||||
RRC_BUF_SIZE);
|
RRC_BUF_SIZE);
|
||||||
if (enc_rval.encoded <= 0) {
|
if (enc_rval.encoded <= 0) {
|
||||||
LOG_F(RRC, "ASN1 message encoding failed %s, %li\n",
|
LOG_E(RRC, "ASN1 message encoding failed %s, %li\n",
|
||||||
enc_rval.failed_type->name, enc_rval.encoded);
|
enc_rval.failed_type->name, enc_rval.encoded);
|
||||||
}
|
}
|
||||||
|
|
||||||
//changed only asn_DEF_DL_DCCH_Message_NB
|
//changed only asn_DEF_DL_DCCH_Message_NB
|
||||||
#ifdef XER_PRINT
|
if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
||||||
xer_fprint(stdout,&asn_DEF_DL_DCCH_Message_NB,(void*)&dl_dcch_msg_NB_IoT);
|
xer_fprint(stdout,&asn_DEF_DL_DCCH_Message_NB,(void*)&dl_dcch_msg_NB_IoT);
|
||||||
#endif
|
}
|
||||||
|
|
||||||
//#if defined(ENABLE_ITTI)
|
//#if defined(ENABLE_ITTI)
|
||||||
//# if !defined(DISABLE_XER_SPRINT)...
|
//# if !defined(DISABLE_XER_SPRINT)...
|
||||||
@@ -1143,16 +1143,16 @@ uint8_t do_RRCConnectionReestablishmentReject_NB_IoT(
|
|||||||
rrcConnectionReestablishmentReject->criticalExtensions.present = RRCConnectionReestablishmentReject__criticalExtensions_PR_rrcConnectionReestablishmentReject_r8;
|
rrcConnectionReestablishmentReject->criticalExtensions.present = RRCConnectionReestablishmentReject__criticalExtensions_PR_rrcConnectionReestablishmentReject_r8;
|
||||||
|
|
||||||
//Only change in "asn_DEF_DL_CCCH_Message_NB"
|
//Only change in "asn_DEF_DL_CCCH_Message_NB"
|
||||||
#ifdef XER_PRINT
|
if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
||||||
xer_fprint(stdout, &asn_DEF_DL_CCCH_Message_NB, (void*)&dl_ccch_msg_NB_IoT);
|
xer_fprint(stdout, &asn_DEF_DL_CCCH_Message_NB, (void*)&dl_ccch_msg_NB_IoT);
|
||||||
#endif
|
}
|
||||||
enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message_NB,
|
enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message_NB,
|
||||||
NULL,
|
NULL,
|
||||||
(void*)&dl_ccch_msg_NB_IoT,
|
(void*)&dl_ccch_msg_NB_IoT,
|
||||||
buffer,
|
buffer,
|
||||||
100);
|
100);
|
||||||
if (enc_rval.encoded <= 0) {
|
if (enc_rval.encoded <= 0) {
|
||||||
LOG_F(RRC,"ASN1 message encoding failed (%s, %lu)!\n",
|
LOG_E(RRC,"ASN1 message encoding failed (%s, %lu)!\n",
|
||||||
enc_rval.failed_type->name, enc_rval.encoded);
|
enc_rval.failed_type->name, enc_rval.encoded);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1214,16 +1214,16 @@ uint8_t do_RRCConnectionReject_NB_IoT(
|
|||||||
RRCConnectionReject_NB_r13_IEs__rrc_SuspendIndication_r13_true;
|
RRCConnectionReject_NB_r13_IEs__rrc_SuspendIndication_r13_true;
|
||||||
|
|
||||||
//Only Modified "asn_DEF_DL_CCCH_Message_NB"
|
//Only Modified "asn_DEF_DL_CCCH_Message_NB"
|
||||||
#ifdef XER_PRINT
|
if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
||||||
xer_fprint(stdout, &asn_DEF_DL_CCCH_Message_NB, (void*)&dl_ccch_msg);
|
xer_fprint(stdout, &asn_DEF_DL_CCCH_Message_NB, (void*)&dl_ccch_msg_NB_IoT);
|
||||||
#endif
|
}
|
||||||
enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message_NB,
|
enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message_NB,
|
||||||
NULL,
|
NULL,
|
||||||
(void*)&dl_ccch_msg_NB_IoT,
|
(void*)&dl_ccch_msg_NB_IoT,
|
||||||
buffer,
|
buffer,
|
||||||
100);
|
100);
|
||||||
if (enc_rval.encoded <= 0) {
|
if (enc_rval.encoded <= 0) {
|
||||||
LOG_F(RRC, "ASN1 message encoding failed (%s, %ld)!\n",
|
LOG_E(RRC, "ASN1 message encoding failed (%s, %ld)!\n",
|
||||||
enc_rval.failed_type->name, enc_rval.encoded);
|
enc_rval.failed_type->name, enc_rval.encoded);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1351,13 +1351,13 @@ uint8_t do_RRCConnectionReestablishment_NB_IoT(
|
|||||||
RRC_BUF_SIZE);
|
RRC_BUF_SIZE);
|
||||||
|
|
||||||
if (enc_rval.encoded <= 0) {
|
if (enc_rval.encoded <= 0) {
|
||||||
LOG_F(RRC, "ASN1 message encoding failed (%s, %li)!\n",
|
LOG_E(RRC, "ASN1 message encoding failed (%s, %li)!\n",
|
||||||
enc_rval.failed_type->name, enc_rval.encoded);
|
enc_rval.failed_type->name, enc_rval.encoded);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef XER_PRINT
|
if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
||||||
xer_fprint(stdout,&asn_DEF_DL_CCCH_Message_NB,(void*)&dl_ccch_msg_NB_IoT);
|
xer_fprint(stdout,&asn_DEF_DL_CCCH_Message_NB,(void*)&dl_ccch_msg_NB_IoT);
|
||||||
#endif
|
}
|
||||||
|
|
||||||
#if defined(ENABLE_ITTI)
|
#if defined(ENABLE_ITTI)
|
||||||
# if !defined(DISABLE_XER_SPRINT)
|
# if !defined(DISABLE_XER_SPRINT)
|
||||||
|
|||||||
+83
-67
@@ -99,10 +99,6 @@ int send_ue_information = 0;
|
|||||||
// for malloc_clear
|
// for malloc_clear
|
||||||
#include "PHY/defs_UE.h"
|
#include "PHY/defs_UE.h"
|
||||||
|
|
||||||
//#define XER_PRINT
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
extern void pdcp_config_set_security(
|
extern void pdcp_config_set_security(
|
||||||
const protocol_ctxt_t* const ctxt_pP,
|
const protocol_ctxt_t* const ctxt_pP,
|
||||||
pdcp_t * const pdcp_pP,
|
pdcp_t * const pdcp_pP,
|
||||||
@@ -733,9 +729,9 @@ int rrc_ue_decode_ccch( const protocol_ctxt_t* const ctxt_pP, const SRB_INFO* co
|
|||||||
(uint8_t*)Srb_info->Rx_buffer.Payload,
|
(uint8_t*)Srb_info->Rx_buffer.Payload,
|
||||||
100,0,0);
|
100,0,0);
|
||||||
|
|
||||||
#ifdef XER_PRINT
|
if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
||||||
xer_fprint(stdout,&asn_DEF_DL_CCCH_Message,(void*)dl_ccch_msg);
|
xer_fprint(stdout,&asn_DEF_DL_CCCH_Message,(void*)dl_ccch_msg);
|
||||||
#endif
|
}
|
||||||
|
|
||||||
#if defined(ENABLE_ITTI)
|
#if defined(ENABLE_ITTI)
|
||||||
# if defined(DISABLE_ITTI_XER_PRINT)
|
# if defined(DISABLE_ITTI_XER_PRINT)
|
||||||
@@ -1931,9 +1927,9 @@ rrc_ue_process_securityModeCommand(
|
|||||||
AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %jd)!\n",
|
AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %jd)!\n",
|
||||||
enc_rval.failed_type->name, enc_rval.encoded);
|
enc_rval.failed_type->name, enc_rval.encoded);
|
||||||
|
|
||||||
#ifdef XER_PRINT
|
if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
||||||
xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void*)&ul_dcch_msg);
|
xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void*)&ul_dcch_msg);
|
||||||
#endif
|
}
|
||||||
|
|
||||||
#if defined(ENABLE_ITTI)
|
#if defined(ENABLE_ITTI)
|
||||||
# if !defined(DISABLE_XER_SPRINT)
|
# if !defined(DISABLE_XER_SPRINT)
|
||||||
@@ -2042,9 +2038,9 @@ rrc_ue_process_ueCapabilityEnquiry(
|
|||||||
AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %jd)!\n",
|
AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %jd)!\n",
|
||||||
enc_rval.failed_type->name, enc_rval.encoded);
|
enc_rval.failed_type->name, enc_rval.encoded);
|
||||||
|
|
||||||
#ifdef XER_PRINT
|
if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
||||||
xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void*)&ul_dcch_msg);
|
xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void*)&ul_dcch_msg);
|
||||||
#endif
|
}
|
||||||
|
|
||||||
#if defined(ENABLE_ITTI)
|
#if defined(ENABLE_ITTI)
|
||||||
# if !defined(DISABLE_XER_SPRINT)
|
# if !defined(DISABLE_XER_SPRINT)
|
||||||
@@ -2429,9 +2425,9 @@ rrc_ue_decode_dcch(
|
|||||||
(uint8_t*)Buffer,
|
(uint8_t*)Buffer,
|
||||||
RRC_BUF_SIZE,0,0);
|
RRC_BUF_SIZE,0,0);
|
||||||
|
|
||||||
#ifdef XER_PRINT
|
if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
||||||
xer_fprint(stdout,&asn_DEF_DL_DCCH_Message,(void*)dl_dcch_msg);
|
xer_fprint(stdout,&asn_DEF_DL_DCCH_Message,(void*)dl_dcch_msg);
|
||||||
#endif
|
}
|
||||||
|
|
||||||
#if defined(ENABLE_ITTI)
|
#if defined(ENABLE_ITTI)
|
||||||
# if defined(DISABLE_ITTI_XER_PRINT)
|
# if defined(DISABLE_ITTI_XER_PRINT)
|
||||||
@@ -4560,9 +4556,9 @@ int decode_MCCH_Message( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef XER_PRINT
|
if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
||||||
xer_fprint(stdout, &asn_DEF_MCCH_Message, (void*)mcch);
|
xer_fprint(stdout, &asn_DEF_MCCH_Message, (void*)mcch);
|
||||||
#endif
|
}
|
||||||
|
|
||||||
if (mcch->message.present == MCCH_MessageType_PR_c1) {
|
if (mcch->message.present == MCCH_MessageType_PR_c1) {
|
||||||
LOG_D(RRC,"[UE %d] Found mcch message \n",
|
LOG_D(RRC,"[UE %d] Found mcch message \n",
|
||||||
@@ -4594,10 +4590,30 @@ int decode_MCCH_Message( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB
|
|||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
void decode_MBSFNAreaConfiguration( module_id_t ue_mod_idP, uint8_t eNB_index, frame_t frameP, uint8_t mbsfn_sync_area )
|
void decode_MBSFNAreaConfiguration( module_id_t ue_mod_idP, uint8_t eNB_index, frame_t frameP, uint8_t mbsfn_sync_area )
|
||||||
{
|
{
|
||||||
|
uint8_t i;
|
||||||
protocol_ctxt_t ctxt;
|
protocol_ctxt_t ctxt;
|
||||||
|
|
||||||
LOG_I(RRC,"[UE %d] Frame %d : Number of MCH(s) in the MBSFN Sync Area %d is %d\n",
|
LOG_I(RRC,"[UE %d] Frame %d : Number of MCH(s) in the MBSFN Sync Area %d is %d\n",
|
||||||
ue_mod_idP, frameP, mbsfn_sync_area, UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index]->pmch_InfoList_r9.list.count);
|
ue_mod_idP, frameP, mbsfn_sync_area, UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index]->pmch_InfoList_r9.list.count);
|
||||||
|
|
||||||
|
// Configure commonSF_Alloc
|
||||||
|
for(i=0; i< UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index]->commonSF_Alloc_r9.list.count;i++){
|
||||||
|
LOG_W(RRC,"[UE %d] Frame %d, commonSF_Alloc_r9: radioframeAllocationPeriod(%ldn),radioframeAllocationOffset(%ld), subframeAllocation(%x,%x,%x)\n",
|
||||||
|
ue_mod_idP, frameP,
|
||||||
|
UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index]->commonSF_Alloc_r9.list.array[i]->radioframeAllocationPeriod<<1,
|
||||||
|
UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index]->commonSF_Alloc_r9.list.array[i]->radioframeAllocationOffset,
|
||||||
|
UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index]->commonSF_Alloc_r9.list.array[i]->subframeAllocation.choice.oneFrame.buf[0],
|
||||||
|
UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index]->commonSF_Alloc_r9.list.array[i]->subframeAllocation.choice.oneFrame.buf[1],
|
||||||
|
UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index]->commonSF_Alloc_r9.list.array[i]->subframeAllocation.choice.oneFrame.buf[2]);
|
||||||
|
UE_mac_inst[ue_mod_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[i] = UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index]->commonSF_Alloc_r9.list.array[i];
|
||||||
|
}
|
||||||
|
LOG_W(RRC,"[UE %d] Frame %d, commonSF_AllocPeriod_r9 %drf \n",
|
||||||
|
ue_mod_idP, frameP,
|
||||||
|
4<<UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index]->commonSF_AllocPeriod_r9);
|
||||||
|
|
||||||
|
// Configure commonSF_AllocPeriod
|
||||||
|
UE_mac_inst[ue_mod_idP].commonSF_AllocPeriod_r9 = UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index]->commonSF_AllocPeriod_r9;
|
||||||
|
|
||||||
// store to MAC/PHY necessary parameters for receiving MTCHs
|
// store to MAC/PHY necessary parameters for receiving MTCHs
|
||||||
|
|
||||||
rrc_mac_config_req_ue(ue_mod_idP,0,eNB_index,
|
rrc_mac_config_req_ue(ue_mod_idP,0,eNB_index,
|
||||||
@@ -5558,9 +5574,9 @@ void *rrc_control_socket_thread_fct(void *arg)
|
|||||||
//process the message
|
//process the message
|
||||||
switch (sl_ctrl_msg_recv->type) {
|
switch (sl_ctrl_msg_recv->type) {
|
||||||
case SESSION_INIT_REQ:
|
case SESSION_INIT_REQ:
|
||||||
LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET)
|
if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){
|
||||||
LOG_UI(RRC,"Received SessionInitializationRequest on socket from ProSe App (msg type: %d)\n", sl_ctrl_msg_recv->type);
|
LOG_UI(RRC,"Received SessionInitializationRequest on socket from ProSe App (msg type: %d)\n", sl_ctrl_msg_recv->type);
|
||||||
LOG_DEBUG_END
|
}
|
||||||
//TODO: get SL_UE_STATE from lower layer
|
//TODO: get SL_UE_STATE from lower layer
|
||||||
|
|
||||||
LOG_I(RRC,"Send UEStateInformation to ProSe App \n");
|
LOG_I(RRC,"Send UEStateInformation to ProSe App \n");
|
||||||
@@ -5579,12 +5595,12 @@ LOG_DEBUG_END
|
|||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET)
|
if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){
|
||||||
struct sidelink_ctrl_element *ptr_ctrl_msg = NULL;
|
struct sidelink_ctrl_element *ptr_ctrl_msg = NULL;
|
||||||
ptr_ctrl_msg = (struct sidelink_ctrl_element *) send_buf;
|
ptr_ctrl_msg = (struct sidelink_ctrl_element *) send_buf;
|
||||||
LOG_UI(RRC,"[UEStateInformation] msg type: %d\n",ptr_ctrl_msg->type);
|
LOG_UI(RRC,"[UEStateInformation] msg type: %d\n",ptr_ctrl_msg->type);
|
||||||
LOG_UI(RRC,"[UEStateInformation] UE state: %d\n",ptr_ctrl_msg->sidelinkPrimitive.ue_state);
|
LOG_UI(RRC,"[UEStateInformation] UE state: %d\n",ptr_ctrl_msg->sidelinkPrimitive.ue_state);
|
||||||
LOG_DEBUG_END
|
}
|
||||||
/* if (enable_notification > 0) {
|
/* if (enable_notification > 0) {
|
||||||
//create thread to send status notification (for testing purpose, status notification will be sent e.g., every 20 seconds)
|
//create thread to send status notification (for testing purpose, status notification will be sent e.g., every 20 seconds)
|
||||||
pthread_t notification_thread;
|
pthread_t notification_thread;
|
||||||
@@ -5599,12 +5615,12 @@ LOG_DEBUG_END
|
|||||||
sourceL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.sourceL2Id;
|
sourceL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.sourceL2Id;
|
||||||
groupL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupL2Id;
|
groupL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupL2Id;
|
||||||
|
|
||||||
LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET)
|
if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){
|
||||||
LOG_UI(RRC,"[GroupCommunicationEstablishReq] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type);
|
LOG_UI(RRC,"[GroupCommunicationEstablishReq] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type);
|
||||||
LOG_UI(RRC,"[GroupCommunicationEstablishReq] source Id: 0x%08x\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.sourceL2Id);
|
LOG_UI(RRC,"[GroupCommunicationEstablishReq] source Id: 0x%08x\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.sourceL2Id);
|
||||||
LOG_UI(RRC,"[GroupCommunicationEstablishReq] group Id: 0x%08x\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupL2Id);
|
LOG_UI(RRC,"[GroupCommunicationEstablishReq] group Id: 0x%08x\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupL2Id);
|
||||||
LOG_UI(RRC,"[GroupCommunicationEstablishReq] group IP Address: " IPV4_ADDR "\n",IPV4_ADDR_FORMAT(sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupIpAddress));
|
LOG_UI(RRC,"[GroupCommunicationEstablishReq] group IP Address: " IPV4_ADDR "\n",IPV4_ADDR_FORMAT(sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupIpAddress));
|
||||||
LOG_DEBUG_END
|
}
|
||||||
|
|
||||||
//store sourceL2Id/groupL2Id
|
//store sourceL2Id/groupL2Id
|
||||||
UE_rrc_inst[module_id].sourceL2Id = sourceL2Id;
|
UE_rrc_inst[module_id].sourceL2Id = sourceL2Id;
|
||||||
@@ -5764,20 +5780,20 @@ LOG_DEBUG_END
|
|||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET)
|
if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){
|
||||||
struct sidelink_ctrl_element *ptr_ctrl_msg = NULL;
|
struct sidelink_ctrl_element *ptr_ctrl_msg = NULL;
|
||||||
ptr_ctrl_msg = (struct sidelink_ctrl_element *) send_buf;
|
ptr_ctrl_msg = (struct sidelink_ctrl_element *) send_buf;
|
||||||
LOG_UI(RRC,"[GroupCommunicationEstablishResponse] msg type: %d\n",ptr_ctrl_msg->type);
|
LOG_UI(RRC,"[GroupCommunicationEstablishResponse] msg type: %d\n",ptr_ctrl_msg->type);
|
||||||
LOG_UI(RRC,"[GroupCommunicationEstablishResponse] slrb_id: %d\n",ptr_ctrl_msg->sidelinkPrimitive.slrb_id);
|
LOG_UI(RRC,"[GroupCommunicationEstablishResponse] slrb_id: %d\n",ptr_ctrl_msg->sidelinkPrimitive.slrb_id);
|
||||||
LOG_DEBUG_END
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GROUP_COMMUNICATION_RELEASE_REQ:
|
case GROUP_COMMUNICATION_RELEASE_REQ:
|
||||||
printf("-----------------------------------\n");
|
printf("-----------------------------------\n");
|
||||||
LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET)
|
if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){
|
||||||
LOG_UI(RRC,"[GroupCommunicationReleaseRequest] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type);
|
LOG_UI(RRC,"[GroupCommunicationReleaseRequest] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type);
|
||||||
LOG_UI(RRC,"[GroupCommunicationReleaseRequest] Slrb Id: %i\n",sl_ctrl_msg_recv->sidelinkPrimitive.slrb_id);
|
LOG_UI(RRC,"[GroupCommunicationReleaseRequest] Slrb Id: %i\n",sl_ctrl_msg_recv->sidelinkPrimitive.slrb_id);
|
||||||
LOG_DEBUG_END
|
}
|
||||||
//reset groupL2ID from MAC LAYER
|
//reset groupL2ID from MAC LAYER
|
||||||
UE_rrc_inst[module_id].groupL2Id = 0x00000000;
|
UE_rrc_inst[module_id].groupL2Id = 0x00000000;
|
||||||
sourceL2Id = UE_rrc_inst[module_id].sourceL2Id;
|
sourceL2Id = UE_rrc_inst[module_id].sourceL2Id;
|
||||||
@@ -5849,11 +5865,11 @@ LOG_DEBUG_END
|
|||||||
sourceL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.direct_comm_establish_req.sourceL2Id;
|
sourceL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.direct_comm_establish_req.sourceL2Id;
|
||||||
destinationL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.direct_comm_establish_req.destinationL2Id;
|
destinationL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.direct_comm_establish_req.destinationL2Id;
|
||||||
|
|
||||||
LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET)
|
if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){
|
||||||
LOG_UI(RRC,"[DirectCommunicationEstablishReq] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type);
|
LOG_UI(RRC,"[DirectCommunicationEstablishReq] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type);
|
||||||
LOG_UI(RRC,"[DirectCommunicationEstablishReq] source Id: 0x%08x\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.sourceL2Id);
|
LOG_UI(RRC,"[DirectCommunicationEstablishReq] source Id: 0x%08x\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.sourceL2Id);
|
||||||
LOG_UI(RRC,"[DirectCommunicationEstablishReq] destination Id: 0x%08x\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupL2Id);
|
LOG_UI(RRC,"[DirectCommunicationEstablishReq] destination Id: 0x%08x\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupL2Id);
|
||||||
LOG_DEBUG_END
|
}
|
||||||
|
|
||||||
//store sourceL2Id/destinationL2Id
|
//store sourceL2Id/destinationL2Id
|
||||||
UE_rrc_inst[module_id].sourceL2Id = sourceL2Id;
|
UE_rrc_inst[module_id].sourceL2Id = sourceL2Id;
|
||||||
@@ -6013,27 +6029,27 @@ LOG_DEBUG_END
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET)
|
if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){
|
||||||
struct sidelink_ctrl_element *ptr_ctrl_msg = NULL;
|
struct sidelink_ctrl_element *ptr_ctrl_msg = NULL;
|
||||||
ptr_ctrl_msg = (struct sidelink_ctrl_element *) send_buf;
|
ptr_ctrl_msg = (struct sidelink_ctrl_element *) send_buf;
|
||||||
LOG_UI(RRC,"[DirectCommunicationEstablishResponse] msg type: %d\n",ptr_ctrl_msg->type);
|
LOG_UI(RRC,"[DirectCommunicationEstablishResponse] msg type: %d\n",ptr_ctrl_msg->type);
|
||||||
LOG_UI(RRC,"[DirectCommunicationEstablishResponse] slrb_id: %d\n",ptr_ctrl_msg->sidelinkPrimitive.slrb_id);
|
LOG_UI(RRC,"[DirectCommunicationEstablishResponse] slrb_id: %d\n",ptr_ctrl_msg->sidelinkPrimitive.slrb_id);
|
||||||
LOG_DEBUG_END
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PC5S_ESTABLISH_REQ:
|
case PC5S_ESTABLISH_REQ:
|
||||||
type = sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.type;
|
type = sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.type;
|
||||||
sourceL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.sourceL2Id;
|
sourceL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.sourceL2Id;
|
||||||
LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET)
|
if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){
|
||||||
LOG_UI(RRC,"[PC5EstablishReq] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type);
|
LOG_UI(RRC,"[PC5EstablishReq] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type);
|
||||||
LOG_UI(RRC,"[PC5EstablishReq] type: %d\n",sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.type); //RX/TX
|
LOG_UI(RRC,"[PC5EstablishReq] type: %d\n",sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.type); //RX/TX
|
||||||
LOG_UI(RRC,"[PC5EstablishReq] source Id: 0x%08x \n",sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.sourceL2Id);
|
LOG_UI(RRC,"[PC5EstablishReq] source Id: 0x%08x \n",sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.sourceL2Id);
|
||||||
LOG_DEBUG_END
|
}
|
||||||
if (type > 0) {
|
if (type > 0) {
|
||||||
destinationL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.destinationL2Id;
|
destinationL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.destinationL2Id;
|
||||||
LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET)
|
if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){
|
||||||
LOG_UI(RRC,"[PC5EstablishReq] destination Id: 0x%08x \n",sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.destinationL2Id);
|
LOG_UI(RRC,"[PC5EstablishReq] destination Id: 0x%08x \n",sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.destinationL2Id);
|
||||||
LOG_DEBUG_END
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//store sourceL2Id/destinationL2Id
|
//store sourceL2Id/destinationL2Id
|
||||||
@@ -6244,9 +6260,9 @@ LOG_DEBUG_END
|
|||||||
|
|
||||||
case PC5_DISCOVERY_MESSAGE:
|
case PC5_DISCOVERY_MESSAGE:
|
||||||
|
|
||||||
LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET)
|
if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){
|
||||||
LOG_UI(RRC,"[PC5DiscoveryMessage] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type);
|
LOG_UI(RRC,"[PC5DiscoveryMessage] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type);
|
||||||
LOG_DEBUG_END
|
}
|
||||||
//prepare SL_Discovery buffer
|
//prepare SL_Discovery buffer
|
||||||
if (UE_rrc_inst) {
|
if (UE_rrc_inst) {
|
||||||
memcpy((void*)&UE_rrc_inst[module_id].SL_Discovery[0].Tx_buffer.Payload[0], (void*)&sl_ctrl_msg_recv->sidelinkPrimitive.pc5_discovery_message.payload[0], PC5_DISCOVERY_PAYLOAD_SIZE);
|
memcpy((void*)&UE_rrc_inst[module_id].SL_Discovery[0].Tx_buffer.Payload[0], (void*)&sl_ctrl_msg_recv->sidelinkPrimitive.pc5_discovery_message.payload[0], PC5_DISCOVERY_PAYLOAD_SIZE);
|
||||||
|
|||||||
@@ -43,7 +43,6 @@
|
|||||||
#include "rrc_eNB_UE_context.h"
|
#include "rrc_eNB_UE_context.h"
|
||||||
#include "common/ran_context.h"
|
#include "common/ran_context.h"
|
||||||
|
|
||||||
#define DEBUG_RRC 1
|
|
||||||
extern RAN_CONTEXT_t RC;
|
extern RAN_CONTEXT_t RC;
|
||||||
extern UE_MAC_INST *UE_mac_inst;
|
extern UE_MAC_INST *UE_mac_inst;
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user