All the *.c *.h and *.cpp files that have a eurecom copyright at the head have been processed. All other files (ie. those with other extensions) have not been touched. Changes to be committed: modified: common/utils/asn1_conversions.h modified: common/utils/assertions.h modified: common/utils/collection/hashtable/hashtable.c modified: common/utils/collection/hashtable/hashtable.h modified: common/utils/collection/hashtable/obj_hashtable.c modified: common/utils/collection/hashtable/obj_hashtable.h modified: common/utils/itti/assertions.h modified: common/utils/itti/backtrace.c modified: common/utils/itti/backtrace.h modified: common/utils/itti/intertask_interface.c modified: common/utils/itti/intertask_interface.h modified: common/utils/itti/intertask_interface_dump.c modified: common/utils/itti/intertask_interface_dump.h modified: common/utils/itti/intertask_interface_init.h modified: common/utils/itti/intertask_interface_types.h modified: common/utils/itti/intertask_messages_def.h modified: common/utils/itti/intertask_messages_types.h modified: common/utils/itti/itti_types.h modified: common/utils/itti/memory_pools.c modified: common/utils/itti/memory_pools.h modified: common/utils/itti/messages_def.h modified: common/utils/itti/messages_types.h modified: common/utils/itti/signals.c modified: common/utils/itti/signals.h modified: common/utils/itti/tasks_def.h modified: common/utils/itti/timer.c modified: common/utils/itti/timer.h modified: common/utils/itti/timer_messages_def.h modified: common/utils/itti/timer_messages_types.h modified: common/utils/itti_analyzer/common/itti_types.h modified: common/utils/itti_analyzer/common/logs.h modified: common/utils/itti_analyzer/common/rc.h modified: common/utils/itti_analyzer/itti_analyzer.c modified: common/utils/itti_analyzer/libbuffers/buffers.c modified: common/utils/itti_analyzer/libbuffers/buffers.h modified: common/utils/itti_analyzer/libbuffers/file.c modified: common/utils/itti_analyzer/libbuffers/file.h modified: common/utils/itti_analyzer/libbuffers/socket.c modified: common/utils/itti_analyzer/libbuffers/socket.h modified: common/utils/itti_analyzer/libparser/array_type.c modified: common/utils/itti_analyzer/libparser/array_type.h modified: common/utils/itti_analyzer/libparser/enum_type.c modified: common/utils/itti_analyzer/libparser/enum_type.h modified: common/utils/itti_analyzer/libparser/enum_value_type.c modified: common/utils/itti_analyzer/libparser/enum_value_type.h modified: common/utils/itti_analyzer/libparser/field_type.c modified: common/utils/itti_analyzer/libparser/field_type.h modified: common/utils/itti_analyzer/libparser/file_type.c modified: common/utils/itti_analyzer/libparser/file_type.h modified: common/utils/itti_analyzer/libparser/fundamental_type.c modified: common/utils/itti_analyzer/libparser/fundamental_type.h modified: common/utils/itti_analyzer/libparser/intertask_contexts.h modified: common/utils/itti_analyzer/libparser/pointer_type.c modified: common/utils/itti_analyzer/libparser/pointer_type.h modified: common/utils/itti_analyzer/libparser/reference_type.c modified: common/utils/itti_analyzer/libparser/reference_type.h modified: common/utils/itti_analyzer/libparser/struct_type.c modified: common/utils/itti_analyzer/libparser/struct_type.h modified: common/utils/itti_analyzer/libparser/typedef_type.c modified: common/utils/itti_analyzer/libparser/typedef_type.h modified: common/utils/itti_analyzer/libparser/types.c modified: common/utils/itti_analyzer/libparser/types.h modified: common/utils/itti_analyzer/libparser/union_type.c modified: common/utils/itti_analyzer/libparser/union_type.h modified: common/utils/itti_analyzer/libparser/xml_parse.c modified: common/utils/itti_analyzer/libparser/xml_parse.h modified: common/utils/itti_analyzer/libresolver/locate_root.c modified: common/utils/itti_analyzer/libresolver/locate_root.h modified: common/utils/itti_analyzer/libresolver/resolvers.c modified: common/utils/itti_analyzer/libresolver/resolvers.h modified: common/utils/itti_analyzer/libui/ui_callbacks.c modified: common/utils/itti_analyzer/libui/ui_callbacks.h modified: common/utils/itti_analyzer/libui/ui_filters.c modified: common/utils/itti_analyzer/libui/ui_filters.h modified: common/utils/itti_analyzer/libui/ui_interface.c modified: common/utils/itti_analyzer/libui/ui_interface.h modified: common/utils/itti_analyzer/libui/ui_main_screen.c modified: common/utils/itti_analyzer/libui/ui_main_screen.h modified: common/utils/itti_analyzer/libui/ui_menu_bar.c modified: common/utils/itti_analyzer/libui/ui_menu_bar.h modified: common/utils/itti_analyzer/libui/ui_notebook.c modified: common/utils/itti_analyzer/libui/ui_notebook.h modified: common/utils/itti_analyzer/libui/ui_notif_dlg.c modified: common/utils/itti_analyzer/libui/ui_notif_dlg.h modified: common/utils/itti_analyzer/libui/ui_notifications.c modified: common/utils/itti_analyzer/libui/ui_notifications.h modified: common/utils/itti_analyzer/libui/ui_signal_dissect_view.c modified: common/utils/itti_analyzer/libui/ui_signal_dissect_view.h modified: common/utils/itti_analyzer/libui/ui_tree_view.c modified: common/utils/itti_analyzer/libui/ui_tree_view.h modified: common/utils/msc/msc.c modified: common/utils/msc/msc.h modified: openair1/PHY/CODING/3gpplte.c modified: openair1/PHY/CODING/3gpplte_sse.c modified: openair1/PHY/CODING/3gpplte_turbo_decoder.c modified: openair1/PHY/CODING/3gpplte_turbo_decoder_avx2_16bit.c modified: openair1/PHY/CODING/3gpplte_turbo_decoder_sse.c modified: openair1/PHY/CODING/3gpplte_turbo_decoder_sse_16bit.c modified: openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c modified: openair1/PHY/CODING/TESTBENCH/ltetest.c modified: openair1/PHY/CODING/TESTBENCH/pdcch_test.c modified: openair1/PHY/CODING/TESTBENCH/viterbi_test.c modified: openair1/PHY/CODING/ccoding_byte.c modified: openair1/PHY/CODING/ccoding_byte_lte.c modified: openair1/PHY/CODING/crc_byte.c modified: openair1/PHY/CODING/defs.h modified: openair1/PHY/CODING/extern.h modified: openair1/PHY/CODING/extern_3GPPinterleaver.h modified: openair1/PHY/CODING/lte_interleaver.h modified: openair1/PHY/CODING/lte_interleaver2.h modified: openair1/PHY/CODING/lte_interleaver_inline.h modified: openair1/PHY/CODING/lte_rate_matching.c modified: openair1/PHY/CODING/lte_segmentation.c modified: openair1/PHY/CODING/rate_matching.c modified: openair1/PHY/CODING/scrambler.h modified: openair1/PHY/CODING/vars.h modified: openair1/PHY/CODING/viterbi.c modified: openair1/PHY/CODING/viterbi_lte.c modified: openair1/PHY/INIT/defs.h modified: openair1/PHY/INIT/extern.h modified: openair1/PHY/INIT/init_top.c modified: openair1/PHY/INIT/lte_init.c modified: openair1/PHY/INIT/lte_parms.c modified: openair1/PHY/INIT/vars.h modified: openair1/PHY/LTE_ESTIMATION/adjust_gain.c modified: openair1/PHY/LTE_ESTIMATION/defs.h modified: openair1/PHY/LTE_ESTIMATION/extern.h modified: openair1/PHY/LTE_ESTIMATION/filt96_32.h modified: openair1/PHY/LTE_ESTIMATION/freq_equalization.c modified: openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c modified: openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c modified: openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation_emos.c modified: openair1/PHY/LTE_ESTIMATION/lte_dl_mbsfn_channel_estimation.c modified: openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c modified: openair1/PHY/LTE_ESTIMATION/lte_est_freq_offset.c modified: openair1/PHY/LTE_ESTIMATION/lte_sync_time.c modified: openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.c modified: openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c modified: openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c modified: openair1/PHY/LTE_ESTIMATION/pss6144.h modified: openair1/PHY/LTE_ESTIMATION/vars.h modified: openair1/PHY/LTE_REFSIG/defs.h modified: openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c modified: openair1/PHY/LTE_REFSIG/lte_dl_mbsfn.c modified: openair1/PHY/LTE_REFSIG/lte_dl_uespec.c modified: openair1/PHY/LTE_REFSIG/lte_gold.c modified: openair1/PHY/LTE_REFSIG/lte_gold_mbsfn.c modified: openair1/PHY/LTE_REFSIG/lte_ul_ref.c modified: openair1/PHY/LTE_REFSIG/mod_table.h modified: openair1/PHY/LTE_TRANSPORT/dci.c modified: openair1/PHY/LTE_TRANSPORT/dci.h modified: openair1/PHY/LTE_TRANSPORT/dci_tools.c modified: openair1/PHY/LTE_TRANSPORT/defs.h modified: openair1/PHY/LTE_TRANSPORT/dlsch_coding.c modified: openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c modified: openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c modified: openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c modified: openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c modified: openair1/PHY/LTE_TRANSPORT/dlsch_scrambling.c modified: openair1/PHY/LTE_TRANSPORT/dlsch_tbs.h modified: openair1/PHY/LTE_TRANSPORT/dlsch_tbs_full.h modified: openair1/PHY/LTE_TRANSPORT/drs_modulation.c modified: openair1/PHY/LTE_TRANSPORT/extern.h modified: openair1/PHY/LTE_TRANSPORT/group_hopping.c modified: openair1/PHY/LTE_TRANSPORT/initial_sync.c modified: openair1/PHY/LTE_TRANSPORT/lte_mcs.c modified: openair1/PHY/LTE_TRANSPORT/mcs_tbs_tools.h modified: openair1/PHY/LTE_TRANSPORT/pbch.c modified: openair1/PHY/LTE_TRANSPORT/pcfich.c modified: openair1/PHY/LTE_TRANSPORT/phich.c modified: openair1/PHY/LTE_TRANSPORT/pilots.c modified: openair1/PHY/LTE_TRANSPORT/pilots_mbsfn.c modified: openair1/PHY/LTE_TRANSPORT/pmch.c modified: openair1/PHY/LTE_TRANSPORT/power_control.c modified: openair1/PHY/LTE_TRANSPORT/prach.c modified: openair1/PHY/LTE_TRANSPORT/prach.h modified: openair1/PHY/LTE_TRANSPORT/print_stats.c modified: openair1/PHY/LTE_TRANSPORT/proto.h modified: openair1/PHY/LTE_TRANSPORT/pss.c modified: openair1/PHY/LTE_TRANSPORT/pucch.c modified: openair1/PHY/LTE_TRANSPORT/rar_tools.c modified: openair1/PHY/LTE_TRANSPORT/srs_modulation.c modified: openair1/PHY/LTE_TRANSPORT/sss.c modified: openair1/PHY/LTE_TRANSPORT/sss.h modified: openair1/PHY/LTE_TRANSPORT/uci.h modified: openair1/PHY/LTE_TRANSPORT/uci_tools.c modified: openair1/PHY/LTE_TRANSPORT/ulsch_coding.c modified: openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c modified: openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c modified: openair1/PHY/LTE_TRANSPORT/ulsch_modulation.c modified: openair1/PHY/LTE_TRANSPORT/vars.h modified: openair1/PHY/MODULATION/defs.h modified: openair1/PHY/MODULATION/extern.h modified: openair1/PHY/MODULATION/kHz_7_5.h modified: openair1/PHY/MODULATION/ofdm_mod.c modified: openair1/PHY/MODULATION/prach625Hz.h modified: openair1/PHY/MODULATION/slot_fep.c modified: openair1/PHY/MODULATION/slot_fep_mbsfn.c modified: openair1/PHY/MODULATION/slot_fep_ul.c modified: openair1/PHY/MODULATION/ul_7_5_kHz.c modified: openair1/PHY/MODULATION/vars.h modified: openair1/PHY/TOOLS/8bit_rxdemux.c modified: openair1/PHY/TOOLS/8bit_txmux.c modified: openair1/PHY/TOOLS/angle.c modified: openair1/PHY/TOOLS/cadd_sv.c modified: openair1/PHY/TOOLS/cadd_vv.c modified: openair1/PHY/TOOLS/cdot_prod.c modified: openair1/PHY/TOOLS/cmult_sv.c modified: openair1/PHY/TOOLS/cmult_vv.c modified: openair1/PHY/TOOLS/costable.h modified: openair1/PHY/TOOLS/dB_routines.c modified: openair1/PHY/TOOLS/dB_routines.h modified: openair1/PHY/TOOLS/defs.h modified: openair1/PHY/TOOLS/extern.h modified: openair1/PHY/TOOLS/file_output.c modified: openair1/PHY/TOOLS/invSqrt.c modified: openair1/PHY/TOOLS/log2_approx.c modified: openair1/PHY/TOOLS/lte_dfts.c modified: openair1/PHY/TOOLS/lte_phy_scope.c modified: openair1/PHY/TOOLS/lte_phy_scope.h modified: openair1/PHY/TOOLS/lut.c modified: openair1/PHY/TOOLS/memory_routines.c modified: openair1/PHY/TOOLS/signal_energy.c modified: openair1/PHY/TOOLS/smbv.c modified: openair1/PHY/TOOLS/smbv.h modified: openair1/PHY/TOOLS/sqrt.c modified: openair1/PHY/TOOLS/time_meas.c modified: openair1/PHY/TOOLS/time_meas.h modified: openair1/PHY/TOOLS/twiddle12288.h modified: openair1/PHY/TOOLS/twiddle1536.h modified: openair1/PHY/TOOLS/twiddle24576.h modified: openair1/PHY/TOOLS/twiddle6144.h modified: openair1/PHY/TOOLS/vars.h modified: openair1/PHY/defs.h modified: openair1/PHY/extern.h modified: openair1/PHY/impl_defs_lte.h modified: openair1/PHY/impl_defs_top.h modified: openair1/PHY/sse_intrin.h modified: openair1/PHY/types.h modified: openair1/PHY/vars.h modified: openair1/SCHED/defs.h modified: openair1/SCHED/extern.h modified: openair1/SCHED/phy_mac_stub.c modified: openair1/SCHED/phy_procedures_emos.h modified: openair1/SCHED/phy_procedures_lte_common.c modified: openair1/SCHED/phy_procedures_lte_eNb.c modified: openair1/SCHED/phy_procedures_lte_ue.c modified: openair1/SCHED/pucch_pc.c modified: openair1/SCHED/pusch_pc.c modified: openair1/SCHED/rt_compat.h modified: openair1/SCHED/vars.h modified: openair1/SIMULATION/ETH_TRANSPORT/bypass_session_layer.c modified: openair1/SIMULATION/ETH_TRANSPORT/defs.h modified: openair1/SIMULATION/ETH_TRANSPORT/emu_transport.c modified: openair1/SIMULATION/ETH_TRANSPORT/extern.h modified: openair1/SIMULATION/ETH_TRANSPORT/multicast_link.c modified: openair1/SIMULATION/ETH_TRANSPORT/multicast_link.h modified: openair1/SIMULATION/ETH_TRANSPORT/netlink_init.c modified: openair1/SIMULATION/ETH_TRANSPORT/pgm_link.c modified: openair1/SIMULATION/ETH_TRANSPORT/pgm_link.h modified: openair1/SIMULATION/ETH_TRANSPORT/proto.h modified: openair1/SIMULATION/ETH_TRANSPORT/socket.c modified: openair1/SIMULATION/ETH_TRANSPORT/socket.h modified: openair1/SIMULATION/ETH_TRANSPORT/vars.h modified: openair1/SIMULATION/LTE_PHY/LTE_Configuration.c modified: openair1/SIMULATION/LTE_PHY/LTE_Configuration.h modified: openair1/SIMULATION/LTE_PHY/dlsim.c modified: openair1/SIMULATION/LTE_PHY/framegen.c modified: openair1/SIMULATION/LTE_PHY/gpib_send.c modified: openair1/SIMULATION/LTE_PHY/gpib_send.h modified: openair1/SIMULATION/LTE_PHY/mbmssim.c modified: openair1/SIMULATION/LTE_PHY/pbchsim.c modified: openair1/SIMULATION/LTE_PHY/pdcchsim.c modified: openair1/SIMULATION/LTE_PHY/prachsim.c modified: openair1/SIMULATION/LTE_PHY/pucchsignalgegerator.h modified: openair1/SIMULATION/LTE_PHY/pucchsignalgenerator.c modified: openair1/SIMULATION/LTE_PHY/pucchsim.c modified: openair1/SIMULATION/LTE_PHY/scansim.c modified: openair1/SIMULATION/LTE_PHY/signalanalyzer.c modified: openair1/SIMULATION/LTE_PHY/signalanalyzer.h modified: openair1/SIMULATION/LTE_PHY/syncsim.c modified: openair1/SIMULATION/LTE_PHY/test.c modified: openair1/SIMULATION/LTE_PHY/ulsignalgenerator.c modified: openair1/SIMULATION/LTE_PHY/ulsignalgenerator.h modified: openair1/SIMULATION/LTE_PHY/ulsim.c modified: openair1/SIMULATION/LTE_PHY/ulsim2.c modified: openair1/SIMULATION/RF/adc.c modified: openair1/SIMULATION/RF/dac.c modified: openair1/SIMULATION/RF/defs.h modified: openair1/SIMULATION/RF/rf.c modified: openair1/SIMULATION/TOOLS/abstraction.c modified: openair1/SIMULATION/TOOLS/ch_desc_proto.c modified: openair1/SIMULATION/TOOLS/defs.h modified: openair1/SIMULATION/TOOLS/gauss.c modified: openair1/SIMULATION/TOOLS/llr_quantization.c modified: openair1/SIMULATION/TOOLS/multipath_channel.c modified: openair1/SIMULATION/TOOLS/multipath_tv_channel.c modified: openair1/SIMULATION/TOOLS/random_channel.c modified: openair1/SIMULATION/TOOLS/rangen_double.c modified: openair1/SIMULATION/TOOLS/scm_corrmat.h modified: openair1/SIMULATION/TOOLS/taus.c modified: openair2/COMMON/as_message.h modified: openair2/COMMON/commonDef.h modified: openair2/COMMON/gtpv1_u_messages_def.h modified: openair2/COMMON/gtpv1_u_messages_types.h modified: openair2/COMMON/intertask_interface_conf.h modified: openair2/COMMON/mac_messages_def.h modified: openair2/COMMON/mac_messages_types.h modified: openair2/COMMON/mac_primitives.h modified: openair2/COMMON/mac_rlc_primitives.h modified: openair2/COMMON/mac_rrc_primitives.h modified: openair2/COMMON/messages_def.h modified: openair2/COMMON/messages_types.h modified: openair2/COMMON/nas_messages_def.h modified: openair2/COMMON/nas_messages_types.h modified: openair2/COMMON/networkDef.h modified: openair2/COMMON/openair_defs.h modified: openair2/COMMON/openair_types.h modified: openair2/COMMON/pdcp_messages_def.h modified: openair2/COMMON/pdcp_messages_types.h modified: openair2/COMMON/phy_messages_def.h modified: openair2/COMMON/phy_messages_types.h modified: openair2/COMMON/platform_constants.h modified: openair2/COMMON/platform_types.h modified: openair2/COMMON/ral_messages_def.h modified: openair2/COMMON/ral_messages_types.h modified: openair2/COMMON/rlc_messages_def.h modified: openair2/COMMON/rlc_messages_types.h modified: openair2/COMMON/rrc_messages_def.h modified: openair2/COMMON/rrc_messages_types.h modified: openair2/COMMON/rrm_config_structs.h modified: openair2/COMMON/rrm_constants.h modified: openair2/COMMON/rtos_header.h modified: openair2/COMMON/s1ap_messages_def.h modified: openair2/COMMON/s1ap_messages_types.h modified: openair2/COMMON/sctp_messages_def.h modified: openair2/COMMON/sctp_messages_types.h modified: openair2/COMMON/tasks_def.h modified: openair2/COMMON/udp_messages_def.h modified: openair2/COMMON/udp_messages_types.h modified: openair2/COMMON/x2ap_messages_def.h modified: openair2/COMMON/x2ap_messages_types.h modified: openair2/DOCS/TEMPLATES/CODE/example_doxy.h modified: openair2/ENB_APP/enb_app.c modified: openair2/ENB_APP/enb_app.h modified: openair2/ENB_APP/enb_config.c modified: openair2/ENB_APP/enb_config.h modified: openair2/LAYER2/MAC/config.c modified: openair2/LAYER2/MAC/defs.h modified: openair2/LAYER2/MAC/eNB_scheduler.c modified: openair2/LAYER2/MAC/eNB_scheduler_RA.c modified: openair2/LAYER2/MAC/eNB_scheduler_bch.c modified: openair2/LAYER2/MAC/eNB_scheduler_dlsch.c modified: openair2/LAYER2/MAC/eNB_scheduler_mch.c modified: openair2/LAYER2/MAC/eNB_scheduler_primitives.c modified: openair2/LAYER2/MAC/eNB_scheduler_ulsch.c modified: openair2/LAYER2/MAC/extern.h modified: openair2/LAYER2/MAC/l1_helpers.c modified: openair2/LAYER2/MAC/lte_transport_init.c modified: openair2/LAYER2/MAC/main.c modified: openair2/LAYER2/MAC/openair2_proc.c modified: openair2/LAYER2/MAC/pre_processor.c modified: openair2/LAYER2/MAC/proto.h modified: openair2/LAYER2/MAC/ra_procedures.c modified: openair2/LAYER2/MAC/rar_tools.c modified: openair2/LAYER2/MAC/ue_procedures.c modified: openair2/LAYER2/MAC/vars.h modified: openair2/LAYER2/PDCP_v10.1.0/pdcp.c modified: openair2/LAYER2/PDCP_v10.1.0/pdcp.h modified: openair2/LAYER2/PDCP_v10.1.0/pdcp_control_primitive.c modified: openair2/LAYER2/PDCP_v10.1.0/pdcp_control_primitives_proto_extern.h modified: openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c modified: openair2/LAYER2/PDCP_v10.1.0/pdcp_netlink.c modified: openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.c modified: openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.h modified: openair2/LAYER2/PDCP_v10.1.0/pdcp_proto_extern.h modified: openair2/LAYER2/PDCP_v10.1.0/pdcp_security.c modified: openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.c modified: openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.h modified: openair2/LAYER2/PDCP_v10.1.0/pdcp_thread.c modified: openair2/LAYER2/PDCP_v10.1.0/pdcp_util.c modified: openair2/LAYER2/PDCP_v10.1.0/pdcp_util.h modified: openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c modified: openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.h modified: openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_constants.h modified: openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_entity.h modified: openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.c modified: openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.h modified: openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.c modified: openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.h modified: openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_proto_extern.h modified: openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.c modified: openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.h modified: openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c modified: openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.h modified: openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c modified: openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.h modified: openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.c modified: openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.h modified: openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.c modified: openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.h modified: openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segments_holes.c modified: openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segments_holes.h modified: openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c modified: openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.h modified: openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_structs.h modified: openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.c modified: openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.h modified: openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_poll_retransmit.c modified: openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_poll_retransmit.h modified: openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_reordering.c modified: openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_reordering.h modified: openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_status_prohibit.c modified: openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_status_prohibit.h modified: openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_windows.c modified: openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_windows.h modified: openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.c modified: openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.h modified: openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_entity.h modified: openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.c modified: openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.h modified: openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_structs.h modified: openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.c modified: openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.h modified: openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_constants.h modified: openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.c modified: openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.h modified: openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.c modified: openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.h modified: openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_entity.h modified: openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_fsm.c modified: openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_fsm.h modified: openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_reassembly.c modified: openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_reassembly.h modified: openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_receiver.c modified: openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_receiver.h modified: openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_segment.c modified: openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_segment.h modified: openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_structs.h modified: openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_test.c modified: openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_test.h modified: openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_very_simple_test.c modified: openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_very_simple_test.h modified: openair2/LAYER2/RLC/rlc.c modified: openair2/LAYER2/RLC/rlc.h modified: openair2/LAYER2/RLC/rlc_def.h modified: openair2/LAYER2/RLC/rlc_def_lte.h modified: openair2/LAYER2/RLC/rlc_mac.c modified: openair2/LAYER2/RLC/rlc_mpls.c modified: openair2/LAYER2/RLC/rlc_primitives.h modified: openair2/LAYER2/RLC/rlc_rrc.c modified: openair2/LAYER2/layer2_top.c modified: openair2/LAYER2/openair2_proc.c modified: openair2/LAYER2/register.c modified: openair2/LAYER2/register.h modified: openair2/NAS/DRIVER/CELLULAR/CTL_TOOL/nascell_ioctl.c modified: openair2/NAS/DRIVER/CELLULAR/CTL_TOOL/nascell_ioctl.h modified: openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_ascontrol.c modified: openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_classifier.c modified: openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_common.c modified: openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_constant.h modified: openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_device.c modified: openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_iocontrol.c modified: openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_iocontrol.h modified: openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_netlink.c modified: openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_proto.h modified: openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_sap.h modified: openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_tool.c modified: openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_variables.h modified: openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_ascontrol.c modified: openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_classifier.c modified: openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_common.c modified: openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_constant.h modified: openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_device.c modified: openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_iocontrol.c modified: openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_iocontrol.h modified: openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_netlink.c modified: openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_proto.h modified: openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_sap.h modified: openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_tool.c modified: openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_variables.h modified: openair2/NAS/DRIVER/CELLULAR/NETLTEST/netltest.c modified: openair2/NAS/SIMU_CELLULAR/nas_simu_proto.h modified: openair2/NAS/SIMU_CELLULAR/nasrg_simu_meas.c modified: openair2/NAS/SIMU_CELLULAR/rrm_fifo_standalone.c modified: openair2/NAS/nas_ue_task.h modified: openair2/NETWORK_DRIVER/LITE/RB_TOOL/rb_tool.c modified: openair2/NETWORK_DRIVER/LITE/classifier.c modified: openair2/NETWORK_DRIVER/LITE/common.c modified: openair2/NETWORK_DRIVER/LITE/constant.h modified: openair2/NETWORK_DRIVER/LITE/device.c modified: openair2/NETWORK_DRIVER/LITE/ioctl.c modified: openair2/NETWORK_DRIVER/LITE/ioctl.h modified: openair2/NETWORK_DRIVER/LITE/local.h modified: openair2/NETWORK_DRIVER/LITE/netlink.c modified: openair2/NETWORK_DRIVER/LITE/proto_extern.h modified: openair2/NETWORK_DRIVER/LITE/sap.h modified: openair2/NETWORK_DRIVER/LITE/tool.c modified: openair2/NETWORK_DRIVER/MESH/RB_TOOL/rb_tool.c modified: openair2/NETWORK_DRIVER/MESH/classifier.c modified: openair2/NETWORK_DRIVER/MESH/common.c modified: openair2/NETWORK_DRIVER/MESH/constant.h modified: openair2/NETWORK_DRIVER/MESH/device.c modified: openair2/NETWORK_DRIVER/MESH/ioctl.c modified: openair2/NETWORK_DRIVER/MESH/ioctl.h modified: openair2/NETWORK_DRIVER/MESH/local.h modified: openair2/NETWORK_DRIVER/MESH/mesh.c modified: openair2/NETWORK_DRIVER/MESH/netlink.c modified: openair2/NETWORK_DRIVER/MESH/proto_extern.h modified: openair2/NETWORK_DRIVER/MESH/rrc_nas_primitives.h modified: openair2/NETWORK_DRIVER/MESH/sap.h modified: openair2/NETWORK_DRIVER/MESH/tool.c modified: openair2/NETWORK_DRIVER/UE_IP/common.c modified: openair2/NETWORK_DRIVER/UE_IP/constant.h modified: openair2/NETWORK_DRIVER/UE_IP/device.c modified: openair2/NETWORK_DRIVER/UE_IP/local.h modified: openair2/NETWORK_DRIVER/UE_IP/netlink.c modified: openair2/NETWORK_DRIVER/UE_IP/proto_extern.h modified: openair2/NETWORK_DRIVER/UE_IP/sap.h modified: openair2/PHY_INTERFACE/defs.h modified: openair2/PHY_INTERFACE/extern.h modified: openair2/PHY_INTERFACE/mac_phy_primitives.c modified: openair2/PHY_INTERFACE/mac_phy_primitives.h modified: openair2/PHY_INTERFACE/vars.h modified: openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.c modified: openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.h modified: openair2/RRC/LITE/L2_interface.c modified: openair2/RRC/LITE/MESSAGES/asn1_msg.c modified: openair2/RRC/LITE/MESSAGES/asn1_msg.h modified: openair2/RRC/LITE/defs.h modified: openair2/RRC/LITE/extern.h modified: openair2/RRC/LITE/proto.h modified: openair2/RRC/LITE/rrc_2_rrm_msg.c modified: openair2/RRC/LITE/rrc_UE.c modified: openair2/RRC/LITE/rrc_UE_ral.c modified: openair2/RRC/LITE/rrc_UE_ral.h modified: openair2/RRC/LITE/rrc_common.c modified: openair2/RRC/LITE/rrc_config.c modified: openair2/RRC/LITE/rrc_eNB.c modified: openair2/RRC/LITE/rrc_eNB_GTPV1U.c modified: openair2/RRC/LITE/rrc_eNB_GTPV1U.h modified: openair2/RRC/LITE/rrc_eNB_S1AP.c modified: openair2/RRC/LITE/rrc_eNB_S1AP.h modified: openair2/RRC/LITE/rrc_eNB_UE_context.c modified: openair2/RRC/LITE/rrc_eNB_UE_context.h modified: openair2/RRC/LITE/rrc_eNB_ral.c modified: openair2/RRC/LITE/rrc_eNB_ral.h modified: openair2/RRC/LITE/rrc_rrm_interface.c modified: openair2/RRC/LITE/rrc_rrm_interface.h modified: openair2/RRC/LITE/rrc_types.h modified: openair2/RRC/LITE/rrm_2_rrc_msg.c modified: openair2/RRC/LITE/utils.c modified: openair2/RRC/LITE/vars.h modified: openair2/RRC/NAS/nas_config.c modified: openair2/RRC/NAS/nas_config.h modified: openair2/RRC/NAS/rb_config.c modified: openair2/RRC/NAS/rb_config.h modified: openair2/RRM_4_RRC_LITE/src/platform.h modified: openair2/RRM_4_RRC_LITE/src/platform_constants.h modified: openair2/RRM_4_RRC_LITE/src/platform_defines.h modified: openair2/RRM_4_RRC_LITE/src/radio_resources/Asn1Utils.cpp modified: openair2/RRM_4_RRC_LITE/src/radio_resources/Asn1Utils.h modified: openair2/RRM_4_RRC_LITE/src/radio_resources/Command.cpp modified: openair2/RRM_4_RRC_LITE/src/radio_resources/Command.h modified: openair2/RRM_4_RRC_LITE/src/radio_resources/DataRadioBearer.cpp modified: openair2/RRM_4_RRC_LITE/src/radio_resources/DataRadioBearer.h modified: openair2/RRM_4_RRC_LITE/src/radio_resources/ENodeB.cpp modified: openair2/RRM_4_RRC_LITE/src/radio_resources/ENodeB.h modified: openair2/RRM_4_RRC_LITE/src/radio_resources/Exceptions.h modified: openair2/RRM_4_RRC_LITE/src/radio_resources/LogicalChannel.cpp modified: openair2/RRM_4_RRC_LITE/src/radio_resources/LogicalChannel.h modified: openair2/RRM_4_RRC_LITE/src/radio_resources/Mobile.cpp modified: openair2/RRM_4_RRC_LITE/src/radio_resources/Mobile.h modified: openair2/RRM_4_RRC_LITE/src/radio_resources/RadioBearer.cpp modified: openair2/RRM_4_RRC_LITE/src/radio_resources/RadioBearer.h modified: openair2/RRM_4_RRC_LITE/src/radio_resources/RadioResources.cpp modified: openair2/RRM_4_RRC_LITE/src/radio_resources/RadioResources.h modified: openair2/RRM_4_RRC_LITE/src/radio_resources/SignallingRadioBearer.cpp modified: openair2/RRM_4_RRC_LITE/src/radio_resources/SignallingRadioBearer.h modified: openair2/RRM_4_RRC_LITE/src/radio_resources/Transaction.cpp modified: openair2/RRM_4_RRC_LITE/src/radio_resources/Transaction.h modified: openair2/RRM_4_RRC_LITE/src/radio_resources/Transactions.cpp modified: openair2/RRM_4_RRC_LITE/src/radio_resources/Transactions.h modified: openair2/RRM_4_RRC_LITE/src/rrm.cpp modified: openair2/UTIL/AT_COMMANDS/parser.c modified: openair2/UTIL/AT_COMMANDS/parser.h modified: openair2/UTIL/BIGPHYS/bigphys.c modified: openair2/UTIL/BIGPHYS/defs.h modified: openair2/UTIL/CLI/cli.c modified: openair2/UTIL/CLI/cli.h modified: openair2/UTIL/CLI/cli_cmd.c modified: openair2/UTIL/CLI/cli_if.h modified: openair2/UTIL/CLI/cli_server.c modified: openair2/UTIL/FIFO/pad_list.c modified: openair2/UTIL/FIFO/pad_list.h modified: openair2/UTIL/FIFO/types.h modified: openair2/UTIL/LISTS/list.c modified: openair2/UTIL/LOG/log.c modified: openair2/UTIL/LOG/log.h modified: openair2/UTIL/LOG/log_extern.h modified: openair2/UTIL/LOG/log_if.h modified: openair2/UTIL/LOG/vcd_signal_dumper.c modified: openair2/UTIL/LOG/vcd_signal_dumper.h modified: openair2/UTIL/MATH/crc_byte.c modified: openair2/UTIL/MATH/oml.c modified: openair2/UTIL/MATH/oml.h modified: openair2/UTIL/MATH/random.c modified: openair2/UTIL/MATH/random_proto_extern.h modified: openair2/UTIL/MATH/taus.c modified: openair2/UTIL/MEM/mem_block.c modified: openair2/UTIL/MEM/mem_block.h modified: openair2/UTIL/MEM/mem_mngt.c modified: openair2/UTIL/MEM/mem_mngt_proto_extern.h modified: openair2/UTIL/MEM/mem_pool.h modified: openair2/UTIL/OCG/OCG.c modified: openair2/UTIL/OCG/OCG.h modified: openair2/UTIL/OCG/OCG_call_emu.h modified: openair2/UTIL/OCG/OCG_config_mobi.c modified: openair2/UTIL/OCG/OCG_config_mobi.h modified: openair2/UTIL/OCG/OCG_create_dir.c modified: openair2/UTIL/OCG/OCG_create_dir.h modified: openair2/UTIL/OCG/OCG_detect_file.c modified: openair2/UTIL/OCG/OCG_detect_file.h modified: openair2/UTIL/OCG/OCG_extern.h modified: openair2/UTIL/OCG/OCG_generate_report.c modified: openair2/UTIL/OCG/OCG_generate_report.h modified: openair2/UTIL/OCG/OCG_get_opt.c modified: openair2/UTIL/OCG/OCG_get_opt.h modified: openair2/UTIL/OCG/OCG_if.h modified: openair2/UTIL/OCG/OCG_parse_XML.c modified: openair2/UTIL/OCG/OCG_parse_XML.h modified: openair2/UTIL/OCG/OCG_parse_filename.c modified: openair2/UTIL/OCG/OCG_parse_filename.h modified: openair2/UTIL/OCG/OCG_save_XML.c modified: openair2/UTIL/OCG/OCG_save_XML.h modified: openair2/UTIL/OCG/OCG_vars.h modified: openair2/UTIL/OMG/TraCIConstants.h modified: openair2/UTIL/OMG/client_traci_OMG.c modified: openair2/UTIL/OMG/client_traci_OMG.h modified: openair2/UTIL/OMG/common.c modified: openair2/UTIL/OMG/defs.h modified: openair2/UTIL/OMG/grid.c modified: openair2/UTIL/OMG/grid.h modified: openair2/UTIL/OMG/id_manager.c modified: openair2/UTIL/OMG/id_manager.h modified: openair2/UTIL/OMG/job.c modified: openair2/UTIL/OMG/mobility_parser.c modified: openair2/UTIL/OMG/mobility_parser.h modified: openair2/UTIL/OMG/omg.c modified: openair2/UTIL/OMG/omg.h modified: openair2/UTIL/OMG/omg_constants.h modified: openair2/UTIL/OMG/omg_hashtable.c modified: openair2/UTIL/OMG/omg_hashtable.h modified: openair2/UTIL/OMG/omg_vars.h modified: openair2/UTIL/OMG/rwalk.c modified: openair2/UTIL/OMG/rwalk.h modified: openair2/UTIL/OMG/rwp.c modified: openair2/UTIL/OMG/rwp.h modified: openair2/UTIL/OMG/socket_traci_OMG.c modified: openair2/UTIL/OMG/socket_traci_OMG.h modified: openair2/UTIL/OMG/static.c modified: openair2/UTIL/OMG/static.h modified: openair2/UTIL/OMG/steadystaterwp.c modified: openair2/UTIL/OMG/steadystaterwp.h modified: openair2/UTIL/OMG/storage_traci_OMG.c modified: openair2/UTIL/OMG/storage_traci_OMG.h modified: openair2/UTIL/OMG/sumo.c modified: openair2/UTIL/OMG/sumo.h modified: openair2/UTIL/OMG/trace.c modified: openair2/UTIL/OMG/trace.h modified: openair2/UTIL/OMG/trace_hashtable.c modified: openair2/UTIL/OMG/trace_hashtable.h modified: openair2/UTIL/OMV/communicationthread.cpp modified: openair2/UTIL/OMV/communicationthread.h modified: openair2/UTIL/OMV/mywindow.cpp modified: openair2/UTIL/OMV/mywindow.h modified: openair2/UTIL/OMV/omv.cpp modified: openair2/UTIL/OMV/openglwidget.cpp modified: openair2/UTIL/OMV/openglwidget.h modified: openair2/UTIL/OMV/structures.h modified: openair2/UTIL/OPT/mac_pcap.h modified: openair2/UTIL/OPT/opt.h modified: openair2/UTIL/OPT/socket_sender.c modified: openair2/UTIL/OPT/vars.h modified: openair2/UTIL/OSA/osa_defs.h modified: openair2/UTIL/OSA/osa_internal.h modified: openair2/UTIL/OSA/osa_key_deriver.c modified: openair2/UTIL/OSA/osa_snow3g.h modified: openair2/UTIL/OSA/osa_stream_eea.c modified: openair2/UTIL/OSA/osa_stream_eia.c modified: openair2/UTIL/OTG/main.c modified: openair2/UTIL/OTG/otg.c modified: openair2/UTIL/OTG/otg.h modified: openair2/UTIL/OTG/otg_config.h modified: openair2/UTIL/OTG/otg_defs.h modified: openair2/UTIL/OTG/otg_externs.h modified: openair2/UTIL/OTG/otg_form.c modified: openair2/UTIL/OTG/otg_form.h modified: openair2/UTIL/OTG/otg_kpi.c modified: openair2/UTIL/OTG/otg_kpi.h modified: openair2/UTIL/OTG/otg_models.c modified: openair2/UTIL/OTG/otg_models.h modified: openair2/UTIL/OTG/otg_rx.c modified: openair2/UTIL/OTG/otg_rx.h modified: openair2/UTIL/OTG/otg_rx_socket.c modified: openair2/UTIL/OTG/otg_rx_socket.h modified: openair2/UTIL/OTG/otg_tx.c modified: openair2/UTIL/OTG/otg_tx.h modified: openair2/UTIL/OTG/otg_tx_socket.c modified: openair2/UTIL/OTG/otg_tx_socket.h modified: openair2/UTIL/OTG/otg_vars.h modified: openair2/UTIL/OTG/traffic_config.h modified: openair2/UTIL/TIMER/umts_timer.c modified: openair2/UTIL/TIMER/umts_timer.h modified: openair2/UTIL/TIMER/umts_timer_proto_extern.h modified: openair2/UTIL/TIMER/umts_timer_struct.h modified: openair2/UTIL/TRACE/fifo_printf.c modified: openair2/UTIL/TRACE/fifo_printf.h modified: openair2/UTIL/TRACE/fifo_printf_proto_extern.h modified: openair2/UTIL/TRACE/print.h modified: openair2/X2AP/x2ap.c modified: openair2/X2AP/x2ap.h modified: openair2/X2AP/x2ap_common.c modified: openair2/X2AP/x2ap_common.h modified: openair3/COMMON/common_types.h modified: openair3/COMMON/gtpv1_u_messages_def.h modified: openair3/COMMON/gtpv1_u_messages_types.h modified: openair3/COMMON/intertask_interface_conf.h modified: openair3/COMMON/messages_def.h modified: openair3/COMMON/messages_types.h modified: openair3/COMMON/nas_messages_def.h modified: openair3/COMMON/nas_messages_types.h modified: openair3/COMMON/s1ap_messages_def.h modified: openair3/COMMON/s1ap_messages_types.h modified: openair3/COMMON/sctp_messages_def.h modified: openair3/COMMON/sctp_messages_types.h modified: openair3/COMMON/security_types.h modified: openair3/COMMON/tasks_def.h modified: openair3/COMMON/udp_messages_def.h modified: openair3/COMMON/udp_messages_types.h modified: openair3/GTPV1-U/gtpv1u.h modified: openair3/GTPV1-U/gtpv1u_eNB.c modified: openair3/GTPV1-U/gtpv1u_eNB_defs.h modified: openair3/GTPV1-U/gtpv1u_eNB_task.h modified: openair3/GTPV1-U/gtpv1u_sgw_defs.h modified: openair3/GTPV1-U/gtpv1u_task.c modified: openair3/GTPV1-U/gtpv1u_teid_pool.c modified: openair3/NAS/COMMON/API/NETWORK/as_message.c modified: openair3/NAS/COMMON/API/NETWORK/l2_message.h modified: openair3/NAS/COMMON/API/NETWORK/nas_message.c modified: openair3/NAS/COMMON/API/NETWORK/nas_message.h modified: openair3/NAS/COMMON/API/NETWORK/network_api.c modified: openair3/NAS/COMMON/API/NETWORK/network_api.h modified: openair3/NAS/COMMON/EMM/MSG/AttachAccept.c modified: openair3/NAS/COMMON/EMM/MSG/AttachAccept.h modified: openair3/NAS/COMMON/EMM/MSG/AttachComplete.c modified: openair3/NAS/COMMON/EMM/MSG/AttachComplete.h modified: openair3/NAS/COMMON/EMM/MSG/AttachReject.c modified: openair3/NAS/COMMON/EMM/MSG/AttachReject.h modified: openair3/NAS/COMMON/EMM/MSG/AttachRequest.c modified: openair3/NAS/COMMON/EMM/MSG/AttachRequest.h modified: openair3/NAS/COMMON/EMM/MSG/AuthenticationFailure.c modified: openair3/NAS/COMMON/EMM/MSG/AuthenticationFailure.h modified: openair3/NAS/COMMON/EMM/MSG/AuthenticationReject.c modified: openair3/NAS/COMMON/EMM/MSG/AuthenticationReject.h modified: openair3/NAS/COMMON/EMM/MSG/AuthenticationRequest.c modified: openair3/NAS/COMMON/EMM/MSG/AuthenticationRequest.h modified: openair3/NAS/COMMON/EMM/MSG/AuthenticationResponse.c modified: openair3/NAS/COMMON/EMM/MSG/AuthenticationResponse.h modified: openair3/NAS/COMMON/EMM/MSG/CsServiceNotification.c modified: openair3/NAS/COMMON/EMM/MSG/CsServiceNotification.h modified: openair3/NAS/COMMON/EMM/MSG/DetachAccept.c modified: openair3/NAS/COMMON/EMM/MSG/DetachAccept.h modified: openair3/NAS/COMMON/EMM/MSG/DetachRequest.c modified: openair3/NAS/COMMON/EMM/MSG/DetachRequest.h modified: openair3/NAS/COMMON/EMM/MSG/DownlinkNasTransport.c modified: openair3/NAS/COMMON/EMM/MSG/DownlinkNasTransport.h modified: openair3/NAS/COMMON/EMM/MSG/EmmInformation.c modified: openair3/NAS/COMMON/EMM/MSG/EmmInformation.h modified: openair3/NAS/COMMON/EMM/MSG/EmmStatus.c modified: openair3/NAS/COMMON/EMM/MSG/EmmStatus.h modified: openair3/NAS/COMMON/EMM/MSG/ExtendedServiceRequest.c modified: openair3/NAS/COMMON/EMM/MSG/ExtendedServiceRequest.h modified: openair3/NAS/COMMON/EMM/MSG/GutiReallocationCommand.c modified: openair3/NAS/COMMON/EMM/MSG/GutiReallocationCommand.h modified: openair3/NAS/COMMON/EMM/MSG/GutiReallocationComplete.c modified: openair3/NAS/COMMON/EMM/MSG/GutiReallocationComplete.h modified: openair3/NAS/COMMON/EMM/MSG/IdentityRequest.c modified: openair3/NAS/COMMON/EMM/MSG/IdentityRequest.h modified: openair3/NAS/COMMON/EMM/MSG/IdentityResponse.c modified: openair3/NAS/COMMON/EMM/MSG/IdentityResponse.h modified: openair3/NAS/COMMON/EMM/MSG/NASSecurityModeCommand.h modified: openair3/NAS/COMMON/EMM/MSG/NASSecurityModeComplete.h modified: openair3/NAS/COMMON/EMM/MSG/SecurityModeCommand.c modified: openair3/NAS/COMMON/EMM/MSG/SecurityModeComplete.c modified: openair3/NAS/COMMON/EMM/MSG/SecurityModeReject.c modified: openair3/NAS/COMMON/EMM/MSG/SecurityModeReject.h modified: openair3/NAS/COMMON/EMM/MSG/ServiceReject.c modified: openair3/NAS/COMMON/EMM/MSG/ServiceReject.h modified: openair3/NAS/COMMON/EMM/MSG/ServiceRequest.c modified: openair3/NAS/COMMON/EMM/MSG/ServiceRequest.h modified: openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateAccept.c modified: openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateAccept.h modified: openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateComplete.c modified: openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateComplete.h modified: openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateReject.c modified: openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateReject.h modified: openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateRequest.c modified: openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateRequest.h modified: openair3/NAS/COMMON/EMM/MSG/UplinkNasTransport.c modified: openair3/NAS/COMMON/EMM/MSG/UplinkNasTransport.h modified: openair3/NAS/COMMON/EMM/MSG/emm_cause.h modified: openair3/NAS/COMMON/EMM/MSG/emm_msg.c modified: openair3/NAS/COMMON/EMM/MSG/emm_msg.h modified: openair3/NAS/COMMON/EMM/MSG/emm_msgDef.h modified: openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextAccept.c modified: openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextAccept.h modified: openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextReject.c modified: openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextReject.h modified: openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextRequest.c modified: openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextRequest.h modified: openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextAccept.c modified: openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextAccept.h modified: openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextReject.c modified: openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextReject.h modified: openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.c modified: openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.h modified: openair3/NAS/COMMON/ESM/MSG/BearerResourceAllocationReject.c modified: openair3/NAS/COMMON/ESM/MSG/BearerResourceAllocationReject.h modified: openair3/NAS/COMMON/ESM/MSG/BearerResourceAllocationRequest.c modified: openair3/NAS/COMMON/ESM/MSG/BearerResourceAllocationRequest.h modified: openair3/NAS/COMMON/ESM/MSG/BearerResourceModificationReject.c modified: openair3/NAS/COMMON/ESM/MSG/BearerResourceModificationReject.h modified: openair3/NAS/COMMON/ESM/MSG/BearerResourceModificationRequest.c modified: openair3/NAS/COMMON/ESM/MSG/BearerResourceModificationRequest.h modified: openair3/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextAccept.c modified: openair3/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextAccept.h modified: openair3/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextRequest.c modified: openair3/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextRequest.h modified: openair3/NAS/COMMON/ESM/MSG/EsmInformationRequest.c modified: openair3/NAS/COMMON/ESM/MSG/EsmInformationRequest.h modified: openair3/NAS/COMMON/ESM/MSG/EsmInformationResponse.c modified: openair3/NAS/COMMON/ESM/MSG/EsmInformationResponse.h modified: openair3/NAS/COMMON/ESM/MSG/EsmStatus.c modified: openair3/NAS/COMMON/ESM/MSG/EsmStatus.h modified: openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextAccept.c modified: openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextAccept.h modified: openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextReject.c modified: openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextReject.h modified: openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextRequest.c modified: openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextRequest.h modified: openair3/NAS/COMMON/ESM/MSG/PdnConnectivityReject.c modified: openair3/NAS/COMMON/ESM/MSG/PdnConnectivityReject.h modified: openair3/NAS/COMMON/ESM/MSG/PdnConnectivityRequest.c modified: openair3/NAS/COMMON/ESM/MSG/PdnConnectivityRequest.h modified: openair3/NAS/COMMON/ESM/MSG/PdnDisconnectReject.c modified: openair3/NAS/COMMON/ESM/MSG/PdnDisconnectReject.h modified: openair3/NAS/COMMON/ESM/MSG/PdnDisconnectRequest.c modified: openair3/NAS/COMMON/ESM/MSG/PdnDisconnectRequest.h modified: openair3/NAS/COMMON/ESM/MSG/esm_cause.h modified: openair3/NAS/COMMON/ESM/MSG/esm_msg.c modified: openair3/NAS/COMMON/ESM/MSG/esm_msg.h modified: openair3/NAS/COMMON/ESM/MSG/esm_msgDef.h modified: openair3/NAS/COMMON/IES/AccessPointName.c modified: openair3/NAS/COMMON/IES/AccessPointName.h modified: openair3/NAS/COMMON/IES/AdditionalUpdateResult.c modified: openair3/NAS/COMMON/IES/AdditionalUpdateResult.h modified: openair3/NAS/COMMON/IES/AdditionalUpdateType.c modified: openair3/NAS/COMMON/IES/AdditionalUpdateType.h modified: openair3/NAS/COMMON/IES/ApnAggregateMaximumBitRate.c modified: openair3/NAS/COMMON/IES/ApnAggregateMaximumBitRate.h modified: openair3/NAS/COMMON/IES/AuthenticationFailureParameter.c modified: openair3/NAS/COMMON/IES/AuthenticationFailureParameter.h modified: openair3/NAS/COMMON/IES/AuthenticationParameterAutn.c modified: openair3/NAS/COMMON/IES/AuthenticationParameterAutn.h modified: openair3/NAS/COMMON/IES/AuthenticationParameterRand.c modified: openair3/NAS/COMMON/IES/AuthenticationParameterRand.h modified: openair3/NAS/COMMON/IES/AuthenticationResponseParameter.c modified: openair3/NAS/COMMON/IES/AuthenticationResponseParameter.h modified: openair3/NAS/COMMON/IES/CipheringKeySequenceNumber.c modified: openair3/NAS/COMMON/IES/CipheringKeySequenceNumber.h modified: openair3/NAS/COMMON/IES/Cli.c modified: openair3/NAS/COMMON/IES/Cli.h modified: openair3/NAS/COMMON/IES/CsfbResponse.c modified: openair3/NAS/COMMON/IES/CsfbResponse.h modified: openair3/NAS/COMMON/IES/DaylightSavingTime.c modified: openair3/NAS/COMMON/IES/DaylightSavingTime.h modified: openair3/NAS/COMMON/IES/DetachType.c modified: openair3/NAS/COMMON/IES/DetachType.h modified: openair3/NAS/COMMON/IES/DrxParameter.c modified: openair3/NAS/COMMON/IES/DrxParameter.h modified: openair3/NAS/COMMON/IES/EmergencyNumberList.c modified: openair3/NAS/COMMON/IES/EmergencyNumberList.h modified: openair3/NAS/COMMON/IES/EmmCause.c modified: openair3/NAS/COMMON/IES/EmmCause.h modified: openair3/NAS/COMMON/IES/EpsAttachResult.c modified: openair3/NAS/COMMON/IES/EpsAttachResult.h modified: openair3/NAS/COMMON/IES/EpsAttachType.c modified: openair3/NAS/COMMON/IES/EpsAttachType.h modified: openair3/NAS/COMMON/IES/EpsBearerContextStatus.c modified: openair3/NAS/COMMON/IES/EpsBearerContextStatus.h modified: openair3/NAS/COMMON/IES/EpsBearerIdentity.c modified: openair3/NAS/COMMON/IES/EpsBearerIdentity.h modified: openair3/NAS/COMMON/IES/EpsMobileIdentity.c modified: openair3/NAS/COMMON/IES/EpsMobileIdentity.h modified: openair3/NAS/COMMON/IES/EpsNetworkFeatureSupport.c modified: openair3/NAS/COMMON/IES/EpsNetworkFeatureSupport.h modified: openair3/NAS/COMMON/IES/EpsQualityOfService.c modified: openair3/NAS/COMMON/IES/EpsQualityOfService.h modified: openair3/NAS/COMMON/IES/EpsUpdateResult.c modified: openair3/NAS/COMMON/IES/EpsUpdateResult.h modified: openair3/NAS/COMMON/IES/EpsUpdateType.c modified: openair3/NAS/COMMON/IES/EpsUpdateType.h modified: openair3/NAS/COMMON/IES/EsmCause.c modified: openair3/NAS/COMMON/IES/EsmCause.h modified: openair3/NAS/COMMON/IES/EsmInformationTransferFlag.c modified: openair3/NAS/COMMON/IES/EsmInformationTransferFlag.h modified: openair3/NAS/COMMON/IES/EsmMessageContainer.c modified: openair3/NAS/COMMON/IES/EsmMessageContainer.h modified: openair3/NAS/COMMON/IES/GprsTimer.c modified: openair3/NAS/COMMON/IES/GprsTimer.h modified: openair3/NAS/COMMON/IES/GutiType.c modified: openair3/NAS/COMMON/IES/GutiType.h modified: openair3/NAS/COMMON/IES/IdentityType2.c modified: openair3/NAS/COMMON/IES/IdentityType2.h modified: openair3/NAS/COMMON/IES/ImeisvRequest.c modified: openair3/NAS/COMMON/IES/ImeisvRequest.h modified: openair3/NAS/COMMON/IES/KsiAndSequenceNumber.c modified: openair3/NAS/COMMON/IES/KsiAndSequenceNumber.h modified: openair3/NAS/COMMON/IES/LcsClientIdentity.c modified: openair3/NAS/COMMON/IES/LcsClientIdentity.h modified: openair3/NAS/COMMON/IES/LcsIndicator.c modified: openair3/NAS/COMMON/IES/LcsIndicator.h modified: openair3/NAS/COMMON/IES/LinkedEpsBearerIdentity.c modified: openair3/NAS/COMMON/IES/LinkedEpsBearerIdentity.h modified: openair3/NAS/COMMON/IES/LlcServiceAccessPointIdentifier.c modified: openair3/NAS/COMMON/IES/LlcServiceAccessPointIdentifier.h modified: openair3/NAS/COMMON/IES/LocationAreaIdentification.c modified: openair3/NAS/COMMON/IES/LocationAreaIdentification.h modified: openair3/NAS/COMMON/IES/MessageType.c modified: openair3/NAS/COMMON/IES/MessageType.h modified: openair3/NAS/COMMON/IES/MobileIdentity.c modified: openair3/NAS/COMMON/IES/MobileIdentity.h modified: openair3/NAS/COMMON/IES/MobileStationClassmark2.c modified: openair3/NAS/COMMON/IES/MobileStationClassmark2.h modified: openair3/NAS/COMMON/IES/MobileStationClassmark3.c modified: openair3/NAS/COMMON/IES/MobileStationClassmark3.h modified: openair3/NAS/COMMON/IES/MsNetworkCapability.c modified: openair3/NAS/COMMON/IES/MsNetworkCapability.h modified: openair3/NAS/COMMON/IES/MsNetworkFeatureSupport.c modified: openair3/NAS/COMMON/IES/MsNetworkFeatureSupport.h modified: openair3/NAS/COMMON/IES/NasKeySetIdentifier.c modified: openair3/NAS/COMMON/IES/NasKeySetIdentifier.h modified: openair3/NAS/COMMON/IES/NasMessageContainer.c modified: openair3/NAS/COMMON/IES/NasMessageContainer.h modified: openair3/NAS/COMMON/IES/NasRequestType.c modified: openair3/NAS/COMMON/IES/NasRequestType.h modified: openair3/NAS/COMMON/IES/NasSecurityAlgorithms.c modified: openair3/NAS/COMMON/IES/NasSecurityAlgorithms.h modified: openair3/NAS/COMMON/IES/NetworkName.c modified: openair3/NAS/COMMON/IES/NetworkName.h modified: openair3/NAS/COMMON/IES/Nonce.c modified: openair3/NAS/COMMON/IES/Nonce.h modified: openair3/NAS/COMMON/IES/PTmsiSignature.c modified: openair3/NAS/COMMON/IES/PTmsiSignature.h modified: openair3/NAS/COMMON/IES/PacketFlowIdentifier.c modified: openair3/NAS/COMMON/IES/PacketFlowIdentifier.h modified: openair3/NAS/COMMON/IES/PagingIdentity.c modified: openair3/NAS/COMMON/IES/PagingIdentity.h modified: openair3/NAS/COMMON/IES/PdnAddress.c modified: openair3/NAS/COMMON/IES/PdnAddress.h modified: openair3/NAS/COMMON/IES/PdnType.c modified: openair3/NAS/COMMON/IES/PdnType.h modified: openair3/NAS/COMMON/IES/PlmnList.c modified: openair3/NAS/COMMON/IES/PlmnList.h modified: openair3/NAS/COMMON/IES/ProcedureTransactionIdentity.c modified: openair3/NAS/COMMON/IES/ProcedureTransactionIdentity.h modified: openair3/NAS/COMMON/IES/ProtocolConfigurationOptions.c modified: openair3/NAS/COMMON/IES/ProtocolConfigurationOptions.h modified: openair3/NAS/COMMON/IES/ProtocolDiscriminator.c modified: openair3/NAS/COMMON/IES/ProtocolDiscriminator.h modified: openair3/NAS/COMMON/IES/QualityOfService.c modified: openair3/NAS/COMMON/IES/QualityOfService.h modified: openair3/NAS/COMMON/IES/RadioPriority.c modified: openair3/NAS/COMMON/IES/RadioPriority.h modified: openair3/NAS/COMMON/IES/SecurityHeaderType.c modified: openair3/NAS/COMMON/IES/SecurityHeaderType.h modified: openair3/NAS/COMMON/IES/ServiceType.c modified: openair3/NAS/COMMON/IES/ServiceType.h modified: openair3/NAS/COMMON/IES/ShortMac.c modified: openair3/NAS/COMMON/IES/ShortMac.h modified: openair3/NAS/COMMON/IES/SsCode.c modified: openair3/NAS/COMMON/IES/SsCode.h modified: openair3/NAS/COMMON/IES/SupportedCodecList.c modified: openair3/NAS/COMMON/IES/SupportedCodecList.h modified: openair3/NAS/COMMON/IES/TimeZone.c modified: openair3/NAS/COMMON/IES/TimeZone.h modified: openair3/NAS/COMMON/IES/TimeZoneAndTime.c modified: openair3/NAS/COMMON/IES/TimeZoneAndTime.h modified: openair3/NAS/COMMON/IES/TmsiStatus.c modified: openair3/NAS/COMMON/IES/TmsiStatus.h modified: openair3/NAS/COMMON/IES/TrackingAreaIdentity.c modified: openair3/NAS/COMMON/IES/TrackingAreaIdentity.h modified: openair3/NAS/COMMON/IES/TrackingAreaIdentityList.c modified: openair3/NAS/COMMON/IES/TrackingAreaIdentityList.h modified: openair3/NAS/COMMON/IES/TrafficFlowAggregateDescription.c modified: openair3/NAS/COMMON/IES/TrafficFlowAggregateDescription.h modified: openair3/NAS/COMMON/IES/TrafficFlowTemplate.c modified: openair3/NAS/COMMON/IES/TrafficFlowTemplate.h modified: openair3/NAS/COMMON/IES/TransactionIdentifier.c modified: openair3/NAS/COMMON/IES/TransactionIdentifier.h modified: openair3/NAS/COMMON/IES/UeNetworkCapability.c modified: openair3/NAS/COMMON/IES/UeNetworkCapability.h modified: openair3/NAS/COMMON/IES/UeRadioCapabilityInformationUpdateNeeded.c modified: openair3/NAS/COMMON/IES/UeRadioCapabilityInformationUpdateNeeded.h modified: openair3/NAS/COMMON/IES/UeSecurityCapability.c modified: openair3/NAS/COMMON/IES/UeSecurityCapability.h modified: openair3/NAS/COMMON/IES/VoiceDomainPreferenceAndUeUsageSetting.c modified: openair3/NAS/COMMON/IES/VoiceDomainPreferenceAndUeUsageSetting.h modified: openair3/NAS/COMMON/UTIL/OctetString.c modified: openair3/NAS/COMMON/UTIL/OctetString.h modified: openair3/NAS/COMMON/UTIL/TLVDecoder.c modified: openair3/NAS/COMMON/UTIL/TLVDecoder.h modified: openair3/NAS/COMMON/UTIL/TLVEncoder.c modified: openair3/NAS/COMMON/UTIL/TLVEncoder.h modified: openair3/NAS/COMMON/UTIL/device.c modified: openair3/NAS/COMMON/UTIL/device.h modified: openair3/NAS/COMMON/UTIL/memory.c modified: openair3/NAS/COMMON/UTIL/memory.h modified: openair3/NAS/COMMON/UTIL/nas_log.c modified: openair3/NAS/COMMON/UTIL/nas_log.h modified: openair3/NAS/COMMON/UTIL/nas_timer.c modified: openair3/NAS/COMMON/UTIL/nas_timer.h modified: openair3/NAS/COMMON/UTIL/parser.c modified: openair3/NAS/COMMON/UTIL/parser.h modified: openair3/NAS/COMMON/UTIL/socket.c modified: openair3/NAS/COMMON/UTIL/socket.h modified: openair3/NAS/COMMON/UTIL/stty.c modified: openair3/NAS/COMMON/UTIL/tst/timer.c modified: openair3/NAS/COMMON/securityDef.h modified: openair3/NAS/COMMON/userDef.h modified: openair3/NAS/TOOLS/network.h modified: openair3/NAS/TOOLS/ue_data.c modified: openair3/NAS/TOOLS/usim_data.c modified: openair3/NAS/UE/API/USER/at_command.c modified: openair3/NAS/UE/API/USER/at_command.h modified: openair3/NAS/UE/API/USER/at_error.c modified: openair3/NAS/UE/API/USER/at_error.h modified: openair3/NAS/UE/API/USER/at_response.c modified: openair3/NAS/UE/API/USER/at_response.h modified: openair3/NAS/UE/API/USER/tst/at_parser.c modified: openair3/NAS/UE/API/USER/user_api.c modified: openair3/NAS/UE/API/USER/user_api.h modified: openair3/NAS/UE/API/USER/user_indication.c modified: openair3/NAS/UE/API/USER/user_indication.h modified: openair3/NAS/UE/API/USIM/aka_functions.h modified: openair3/NAS/UE/API/USIM/usim_api.c modified: openair3/NAS/UE/API/USIM/usim_api.h modified: openair3/NAS/UE/EMM/Attach.c modified: openair3/NAS/UE/EMM/Authentication.c modified: openair3/NAS/UE/EMM/Detach.c modified: openair3/NAS/UE/EMM/EmmStatusHdl.c modified: openair3/NAS/UE/EMM/Identification.c modified: openair3/NAS/UE/EMM/IdleMode.c modified: openair3/NAS/UE/EMM/IdleMode.h modified: openair3/NAS/UE/EMM/LowerLayer.c modified: openair3/NAS/UE/EMM/LowerLayer.h modified: openair3/NAS/UE/EMM/SAP/EmmDeregistered.c modified: openair3/NAS/UE/EMM/SAP/EmmDeregisteredAttachNeeded.c modified: openair3/NAS/UE/EMM/SAP/EmmDeregisteredAttemptingToAttach.c modified: openair3/NAS/UE/EMM/SAP/EmmDeregisteredInitiated.c modified: openair3/NAS/UE/EMM/SAP/EmmDeregisteredLimitedService.c modified: openair3/NAS/UE/EMM/SAP/EmmDeregisteredNoCellAvailable.c modified: openair3/NAS/UE/EMM/SAP/EmmDeregisteredNoImsi.c modified: openair3/NAS/UE/EMM/SAP/EmmDeregisteredNormalService.c modified: openair3/NAS/UE/EMM/SAP/EmmDeregisteredPlmnSearch.c modified: openair3/NAS/UE/EMM/SAP/EmmNull.c modified: openair3/NAS/UE/EMM/SAP/EmmRegistered.c modified: openair3/NAS/UE/EMM/SAP/EmmRegisteredAttemptingToUpdate.c modified: openair3/NAS/UE/EMM/SAP/EmmRegisteredImsiDetachInitiated.c modified: openair3/NAS/UE/EMM/SAP/EmmRegisteredInitiated.c modified: openair3/NAS/UE/EMM/SAP/EmmRegisteredLimitedService.c modified: openair3/NAS/UE/EMM/SAP/EmmRegisteredNoCellAvailable.c modified: openair3/NAS/UE/EMM/SAP/EmmRegisteredNormalService.c modified: openair3/NAS/UE/EMM/SAP/EmmRegisteredPlmnSearch.c modified: openair3/NAS/UE/EMM/SAP/EmmRegisteredUpdateNeeded.c modified: openair3/NAS/UE/EMM/SAP/EmmServiceRequestInitiated.c modified: openair3/NAS/UE/EMM/SAP/EmmTrackingAreaUpdatingInitiated.c modified: openair3/NAS/UE/EMM/SAP/emm_as.c modified: openair3/NAS/UE/EMM/SAP/emm_as.h modified: openair3/NAS/UE/EMM/SAP/emm_asDef.h modified: openair3/NAS/UE/EMM/SAP/emm_esm.c modified: openair3/NAS/UE/EMM/SAP/emm_esm.h modified: openair3/NAS/UE/EMM/SAP/emm_esmDef.h modified: openair3/NAS/UE/EMM/SAP/emm_fsm.c modified: openair3/NAS/UE/EMM/SAP/emm_fsm.h modified: openair3/NAS/UE/EMM/SAP/emm_recv.c modified: openair3/NAS/UE/EMM/SAP/emm_recv.h modified: openair3/NAS/UE/EMM/SAP/emm_reg.c modified: openair3/NAS/UE/EMM/SAP/emm_reg.h modified: openair3/NAS/UE/EMM/SAP/emm_regDef.h modified: openair3/NAS/UE/EMM/SAP/emm_sap.c modified: openair3/NAS/UE/EMM/SAP/emm_sap.h modified: openair3/NAS/UE/EMM/SAP/emm_send.c modified: openair3/NAS/UE/EMM/SAP/emm_send.h modified: openair3/NAS/UE/EMM/SecurityModeControl.c modified: openair3/NAS/UE/EMM/ServiceRequestHdl.c modified: openair3/NAS/UE/EMM/TrackingAreaUpdate.c modified: openair3/NAS/UE/EMM/emmData.h modified: openair3/NAS/UE/EMM/emm_main.c modified: openair3/NAS/UE/EMM/emm_main.h modified: openair3/NAS/UE/EMM/emm_proc.h modified: openair3/NAS/UE/ESM/DedicatedEpsBearerContextActivation.c modified: openair3/NAS/UE/ESM/DefaultEpsBearerContextActivation.c modified: openair3/NAS/UE/ESM/EpsBearerContextDeactivation.c modified: openair3/NAS/UE/ESM/EsmStatusHdl.c modified: openair3/NAS/UE/ESM/PdnConnectivity.c modified: openair3/NAS/UE/ESM/PdnDisconnect.c modified: openair3/NAS/UE/ESM/SAP/esm_recv.c modified: openair3/NAS/UE/ESM/SAP/esm_recv.h modified: openair3/NAS/UE/ESM/SAP/esm_sap.c modified: openair3/NAS/UE/ESM/SAP/esm_sap.h modified: openair3/NAS/UE/ESM/SAP/esm_sapDef.h modified: openair3/NAS/UE/ESM/SAP/esm_send.c modified: openair3/NAS/UE/ESM/SAP/esm_send.h modified: openair3/NAS/UE/ESM/esmData.h modified: openair3/NAS/UE/ESM/esm_ebr.c modified: openair3/NAS/UE/ESM/esm_ebr.h modified: openair3/NAS/UE/ESM/esm_ebr_context.c modified: openair3/NAS/UE/ESM/esm_ebr_context.h modified: openair3/NAS/UE/ESM/esm_ip.c modified: openair3/NAS/UE/ESM/esm_main.c modified: openair3/NAS/UE/ESM/esm_main.h modified: openair3/NAS/UE/ESM/esm_proc.h modified: openair3/NAS/UE/ESM/esm_pt.c modified: openair3/NAS/UE/ESM/esm_pt.h modified: openair3/NAS/UE/UEprocess.c modified: openair3/NAS/UE/nas_itti_messaging.c modified: openair3/NAS/UE/nas_itti_messaging.h modified: openair3/NAS/UE/nas_network.c modified: openair3/NAS/UE/nas_network.h modified: openair3/NAS/UE/nas_parser.c modified: openair3/NAS/UE/nas_parser.h modified: openair3/NAS/UE/nas_proc.c modified: openair3/NAS/UE/nas_proc.h modified: openair3/NAS/UE/nas_ue_task.c modified: openair3/NAS/UE/nas_user.c modified: openair3/NAS/UE/nas_user.h modified: openair3/S1AP/s1ap_common.c modified: openair3/S1AP/s1ap_common.h modified: openair3/S1AP/s1ap_eNB.c modified: openair3/S1AP/s1ap_eNB.h modified: openair3/S1AP/s1ap_eNB_context_management_procedures.c modified: openair3/S1AP/s1ap_eNB_context_management_procedures.h modified: openair3/S1AP/s1ap_eNB_decoder.c modified: openair3/S1AP/s1ap_eNB_decoder.h modified: openair3/S1AP/s1ap_eNB_default_values.h modified: openair3/S1AP/s1ap_eNB_defs.h modified: openair3/S1AP/s1ap_eNB_encoder.c modified: openair3/S1AP/s1ap_eNB_encoder.h modified: openair3/S1AP/s1ap_eNB_handlers.c modified: openair3/S1AP/s1ap_eNB_handlers.h modified: openair3/S1AP/s1ap_eNB_itti_messaging.c modified: openair3/S1AP/s1ap_eNB_itti_messaging.h modified: openair3/S1AP/s1ap_eNB_management_procedures.c modified: openair3/S1AP/s1ap_eNB_management_procedures.h modified: openair3/S1AP/s1ap_eNB_nas_procedures.c modified: openair3/S1AP/s1ap_eNB_nas_procedures.h modified: openair3/S1AP/s1ap_eNB_nnsf.c modified: openair3/S1AP/s1ap_eNB_nnsf.h modified: openair3/S1AP/s1ap_eNB_overload.c modified: openair3/S1AP/s1ap_eNB_overload.h modified: openair3/S1AP/s1ap_eNB_trace.c modified: openair3/S1AP/s1ap_eNB_trace.h modified: openair3/S1AP/s1ap_eNB_ue_context.c modified: openair3/S1AP/s1ap_eNB_ue_context.h modified: openair3/SCTP/sctp_common.c modified: openair3/SCTP/sctp_common.h modified: openair3/SCTP/sctp_default_values.h modified: openair3/SCTP/sctp_eNB_defs.h modified: openair3/SCTP/sctp_eNB_itti_messaging.c modified: openair3/SCTP/sctp_eNB_itti_messaging.h modified: openair3/SCTP/sctp_eNB_task.c modified: openair3/SCTP/sctp_eNB_task.h modified: openair3/SCTP/sctp_primitives_client.c modified: openair3/SCTP/sctp_primitives_client.h modified: openair3/SECU/kdf.c modified: openair3/SECU/key_nas_deriver.c modified: openair3/SECU/key_nas_encryption.c modified: openair3/SECU/nas_stream_eea1.c modified: openair3/SECU/nas_stream_eea2.c modified: openair3/SECU/nas_stream_eia1.c modified: openair3/SECU/nas_stream_eia2.c modified: openair3/SECU/rijndael.h modified: openair3/SECU/secu_defs.h modified: openair3/SECU/snow3g.c modified: openair3/SECU/snow3g.h modified: openair3/TEST/EPC_TEST/generate_scenario.c modified: openair3/TEST/EPC_TEST/generate_scenario.h modified: openair3/TEST/EPC_TEST/play_scenario.c modified: openair3/TEST/EPC_TEST/play_scenario.h modified: openair3/TEST/EPC_TEST/play_scenario_decode.c modified: openair3/TEST/EPC_TEST/play_scenario_display.c modified: openair3/TEST/EPC_TEST/play_scenario_fsm.c modified: openair3/TEST/EPC_TEST/play_scenario_parse.c modified: openair3/TEST/EPC_TEST/play_scenario_s1ap.c modified: openair3/TEST/EPC_TEST/play_scenario_s1ap_compare_ie.c modified: openair3/TEST/EPC_TEST/play_scenario_s1ap_eNB_defs.h modified: openair3/TEST/EPC_TEST/play_scenario_sctp.c modified: openair3/TEST/oaisim_mme_client_test.c modified: openair3/TEST/oaisim_mme_itti_test.c modified: openair3/TEST/oaisim_mme_list_benchmark.c modified: openair3/TEST/oaisim_mme_s1ap_test.c modified: openair3/TEST/oaisim_mme_sctp_test.c modified: openair3/TEST/oaisim_mme_test_s1c.c modified: openair3/TEST/oaisim_mme_test_s1c.h modified: openair3/TEST/oaisim_mme_test_s1c_s1ap.c modified: openair3/TEST/oaisim_mme_test_s1c_s1ap.h modified: openair3/TEST/oaisim_mme_test_s1c_scenario.c modified: openair3/TEST/oaisim_mme_test_s1c_scenario.h modified: openair3/TEST/oaisim_mme_test_s1c_scenario1.c modified: openair3/TEST/test_aes128_cmac_encrypt.c modified: openair3/TEST/test_aes128_ctr_decrypt.c modified: openair3/TEST/test_aes128_ctr_encrypt.c modified: openair3/TEST/test_kdf.c modified: openair3/TEST/test_s1ap.c modified: openair3/TEST/test_secu.c modified: openair3/TEST/test_secu_kenb.c modified: openair3/TEST/test_secu_knas.c modified: openair3/TEST/test_secu_knas_encrypt_eea1.c modified: openair3/TEST/test_secu_knas_encrypt_eea2.c modified: openair3/TEST/test_secu_knas_encrypt_eia1.c modified: openair3/TEST/test_secu_knas_encrypt_eia2.c modified: openair3/TEST/test_secu_knas_stream_int.c modified: openair3/UDP/udp_eNB_task.c modified: openair3/UDP/udp_eNB_task.h modified: openair3/UTILS/HASHTABLE/hashtable.c modified: openair3/UTILS/HASHTABLE/hashtable.h modified: openair3/UTILS/HASHTABLE/obj_hashtable.c modified: openair3/UTILS/HASHTABLE/obj_hashtable.h modified: openair3/UTILS/conversions.c modified: openair3/UTILS/conversions.h modified: openair3/UTILS/enum_string.c modified: openair3/UTILS/enum_string.h modified: openair3/UTILS/log.c modified: openair3/UTILS/log.h modified: openair3/UTILS/mcc_mnc_itu.c modified: openair3/UTILS/mcc_mnc_itu.h modified: openair3/UTILS/mme_config.c modified: openair3/UTILS/mme_config.h modified: openair3/UTILS/mme_default_values.h modified: targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c modified: targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.h modified: targets/ARCH/COMMON/common_lib.c modified: targets/ARCH/COMMON/common_lib.h modified: targets/ARCH/ETHERNET/USERSPACE/LIB/eth_raw.c modified: targets/ARCH/ETHERNET/USERSPACE/LIB/eth_udp.c modified: targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c modified: targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.h modified: targets/ARCH/EXMIMO/DEFS/openair_device.h modified: targets/ARCH/EXMIMO/DEFS/pcie_interface.h modified: targets/ARCH/EXMIMO/DRIVER/eurecom/defs.h modified: targets/ARCH/EXMIMO/DRIVER/eurecom/exmimo_fw.c modified: targets/ARCH/EXMIMO/DRIVER/eurecom/extern.h modified: targets/ARCH/EXMIMO/DRIVER/eurecom/fileops.c modified: targets/ARCH/EXMIMO/DRIVER/eurecom/irq.c modified: targets/ARCH/EXMIMO/DRIVER/eurecom/module_main.c modified: targets/ARCH/EXMIMO/DRIVER/eurecom/vars.h modified: targets/ARCH/EXMIMO/DRIVER/exmimo3/defs.h modified: targets/ARCH/EXMIMO/DRIVER/exmimo3/exmimo_fw.c modified: targets/ARCH/EXMIMO/DRIVER/exmimo3/extern.h modified: targets/ARCH/EXMIMO/DRIVER/exmimo3/fileops.c modified: targets/ARCH/EXMIMO/DRIVER/exmimo3/irq.c modified: targets/ARCH/EXMIMO/DRIVER/exmimo3/module_main.c modified: targets/ARCH/EXMIMO/DRIVER/exmimo3/vars.h modified: targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_dev.c modified: targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_drv.c modified: targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_drv.h modified: targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_fifos.c modified: targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_ioctl.c modified: targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_mmap.c modified: targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_rw.c modified: targets/ARCH/EXMIMO/USERSPACE/LIB/example.c modified: targets/ARCH/EXMIMO/USERSPACE/LIB/gain_control.c modified: targets/ARCH/EXMIMO/USERSPACE/LIB/gain_control.h modified: targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c modified: targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.h modified: targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/elf.h modified: targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/elftypes.h modified: targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/updatefw.c modified: targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/updatefw.h modified: targets/ARCH/LMSSDR/USERSPACE/LIB/lms_lib.cpp modified: targets/ARCH/LMSSDR/USERSPACE/LIB/sodera_lib.cpp modified: targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp modified: targets/COMMON/create_tasks.c modified: targets/COMMON/create_tasks.h modified: targets/RT/USER/TOOLS/thread_ipc.c modified: targets/RT/USER/TOOLS/thread_ipc.h modified: targets/RT/USER/UE_transport_IQ.c modified: targets/RT/USER/condtest.c modified: targets/RT/USER/eNB_transport_IQ.c modified: targets/RT/USER/emos-raw.c modified: targets/RT/USER/lte-softmodem.c modified: targets/RT/USER/lte-ue.c modified: targets/RT/USER/msg_many.h modified: targets/RT/USER/rrh.c modified: targets/RT/USER/rrh_gw.c modified: targets/RT/USER/rrh_gw.h modified: targets/RT/USER/rrh_gw_externs.h modified: targets/RT/USER/rt_wrapper.c modified: targets/RT/USER/rt_wrapper.h modified: targets/RT/USER/sched_dlsch.c modified: targets/RT/USER/sched_rx_pdsch.c modified: targets/RT/USER/sched_ulsch.c modified: targets/RT/USER/sleeptest.c modified: targets/RT/USER/synctest.c modified: targets/SIMU/PROC/Process.c modified: targets/SIMU/PROC/Process.h modified: targets/SIMU/PROC/Tsync.h modified: targets/SIMU/PROC/channel_sim_proc.c modified: targets/SIMU/PROC/channel_sim_proc.h modified: targets/SIMU/PROC/interface.h modified: targets/SIMU/USER/channel_sim.c modified: targets/SIMU/USER/cor_SF_sim.c modified: targets/SIMU/USER/cor_SF_sim.h modified: targets/SIMU/USER/event_handler.c modified: targets/SIMU/USER/event_handler.h modified: targets/SIMU/USER/init_lte.c modified: targets/SIMU/USER/init_lte.h modified: targets/SIMU/USER/oaisim.c modified: targets/SIMU/USER/oaisim.h modified: targets/SIMU/USER/oaisim_config.c modified: targets/SIMU/USER/oaisim_config.h modified: targets/SIMU/USER/oaisim_functions.c modified: targets/SIMU/USER/oaisim_functions.h modified: targets/SIMU/USER/oaisim_pad.c modified: targets/SIMU/USER/sinr_sim.c
1410 lines
52 KiB
C
1410 lines
52 KiB
C
/*! \file rrc_eNB_S1AP.c
|
|
* \brief rrc S1AP procedures for eNB
|
|
* \author Navid Nikaein, Laurent Winckel, Sebastien ROUX, and Lionel GAUTHIER
|
|
* \date 2013-2016
|
|
* \version 1.0
|
|
* \company Eurecom
|
|
* \email: navid.nikaein@eurecom.fr
|
|
*/
|
|
|
|
#if defined(ENABLE_USE_MME)
|
|
# include "defs.h"
|
|
# include "extern.h"
|
|
# include "RRC/L2_INTERFACE/openair_rrc_L2_interface.h"
|
|
# include "RRC/LITE/MESSAGES/asn1_msg.h"
|
|
# include "RRC/LITE/defs.h"
|
|
# include "rrc_eNB_UE_context.h"
|
|
# include "rrc_eNB_S1AP.h"
|
|
# include "enb_config.h"
|
|
|
|
# if defined(ENABLE_ITTI)
|
|
# include "asn1_conversions.h"
|
|
# include "intertask_interface.h"
|
|
# include "pdcp.h"
|
|
# include "pdcp_primitives.h"
|
|
# include "s1ap_eNB.h"
|
|
# else
|
|
# include "../../S1AP/s1ap_eNB.h"
|
|
# endif
|
|
|
|
#if defined(ENABLE_SECURITY)
|
|
# include "UTIL/OSA/osa_defs.h"
|
|
#endif
|
|
#include "msc.h"
|
|
|
|
#include "UERadioAccessCapabilityInformation.h"
|
|
|
|
#include "gtpv1u_eNB_task.h"
|
|
#include "RRC/LITE/rrc_eNB_GTPV1U.h"
|
|
|
|
/* Value to indicate an invalid UE initial id */
|
|
static const uint16_t UE_INITIAL_ID_INVALID = 0;
|
|
|
|
/* Masks for S1AP Encryption algorithms, EEA0 is always supported (not coded) */
|
|
static const uint16_t S1AP_ENCRYPTION_EEA1_MASK = 0x8000;
|
|
static const uint16_t S1AP_ENCRYPTION_EEA2_MASK = 0x4000;
|
|
|
|
/* Masks for S1AP Integrity algorithms, EIA0 is always supported (not coded) */
|
|
static const uint16_t S1AP_INTEGRITY_EIA1_MASK = 0x8000;
|
|
static const uint16_t S1AP_INTEGRITY_EIA2_MASK = 0x4000;
|
|
|
|
#ifdef Rel10
|
|
# define INTEGRITY_ALGORITHM_NONE SecurityAlgorithmConfig__integrityProtAlgorithm_eia0_v920
|
|
#else
|
|
#ifdef EXMIMO_IOT
|
|
# define INTEGRITY_ALGORITHM_NONE SecurityAlgorithmConfig__integrityProtAlgorithm_eia2
|
|
#else
|
|
# define INTEGRITY_ALGORITHM_NONE SecurityAlgorithmConfig__integrityProtAlgorithm_reserved
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
|
|
# if defined(ENABLE_ITTI)
|
|
//------------------------------------------------------------------------------
|
|
struct rrc_ue_s1ap_ids_s*
|
|
rrc_eNB_S1AP_get_ue_ids(
|
|
eNB_RRC_INST* const rrc_instance_pP,
|
|
const uint16_t ue_initial_id,
|
|
const uint32_t eNB_ue_s1ap_id
|
|
)
|
|
//------------------------------------------------------------------------------
|
|
{
|
|
rrc_ue_s1ap_ids_t *result = NULL;
|
|
rrc_ue_s1ap_ids_t *result2 = NULL;
|
|
hashtable_rc_t h_rc;
|
|
|
|
// we assume that a rrc_ue_s1ap_ids_s is initially inserted in initial_id2_s1ap_ids
|
|
if (eNB_ue_s1ap_id > 0) {
|
|
h_rc = hashtable_get(rrc_instance_pP->s1ap_id2_s1ap_ids, (hash_key_t)eNB_ue_s1ap_id, (void**)&result);
|
|
}
|
|
if (ue_initial_id != UE_INITIAL_ID_INVALID) {
|
|
h_rc = hashtable_get(rrc_instance_pP->initial_id2_s1ap_ids, (hash_key_t)ue_initial_id, (void**)&result);
|
|
if (h_rc == HASH_TABLE_OK) {
|
|
if (eNB_ue_s1ap_id > 0) {
|
|
h_rc = hashtable_get(rrc_instance_pP->s1ap_id2_s1ap_ids, (hash_key_t)eNB_ue_s1ap_id, (void**)&result2);
|
|
if (h_rc != HASH_TABLE_OK) {
|
|
result2 = malloc(sizeof(*result2));
|
|
if (NULL != result2) {
|
|
*result2 = *result;
|
|
result2->eNB_ue_s1ap_id = eNB_ue_s1ap_id;
|
|
result->eNB_ue_s1ap_id = eNB_ue_s1ap_id;
|
|
h_rc = hashtable_insert(rrc_instance_pP->s1ap_id2_s1ap_ids,
|
|
(hash_key_t)eNB_ue_s1ap_id,
|
|
result2);
|
|
if (h_rc != HASH_TABLE_OK) {
|
|
LOG_E(S1AP, "[eNB %u] Error while hashtable_insert in s1ap_id2_s1ap_ids eNB_ue_s1ap_id %u\n",
|
|
rrc_instance_pP - eNB_rrc_inst, eNB_ue_s1ap_id);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
//------------------------------------------------------------------------------
|
|
void
|
|
rrc_eNB_S1AP_remove_ue_ids(
|
|
eNB_RRC_INST* const rrc_instance_pP,
|
|
struct rrc_ue_s1ap_ids_s* const ue_ids_pP
|
|
)
|
|
//------------------------------------------------------------------------------
|
|
{
|
|
const uint16_t ue_initial_id = ue_ids_pP->ue_initial_id;
|
|
const uint32_t eNB_ue_s1ap_id = ue_ids_pP->eNB_ue_s1ap_id;
|
|
hashtable_rc_t h_rc;
|
|
if (rrc_instance_pP == NULL) {
|
|
LOG_E(RRC, "Bad RRC instance\n");
|
|
return;
|
|
}
|
|
|
|
if (ue_ids_pP == NULL) {
|
|
LOG_E(RRC, "Trying to free a NULL S1AP UE IDs\n");
|
|
return;
|
|
}
|
|
|
|
if (eNB_ue_s1ap_id > 0) {
|
|
h_rc = hashtable_remove(rrc_instance_pP->s1ap_id2_s1ap_ids, (hash_key_t)eNB_ue_s1ap_id);
|
|
if (h_rc != HASH_TABLE_OK) {
|
|
LOG_W(RRC, "S1AP Did not find entry in hashtable s1ap_id2_s1ap_ids for eNB_ue_s1ap_id %u\n", eNB_ue_s1ap_id);
|
|
} else {
|
|
LOG_W(RRC, "S1AP removed entry in hashtable s1ap_id2_s1ap_ids for eNB_ue_s1ap_id %u\n", eNB_ue_s1ap_id);
|
|
}
|
|
}
|
|
|
|
if (ue_initial_id != UE_INITIAL_ID_INVALID) {
|
|
h_rc = hashtable_remove(rrc_instance_pP->initial_id2_s1ap_ids, (hash_key_t)ue_initial_id);
|
|
if (h_rc != HASH_TABLE_OK) {
|
|
LOG_W(RRC, "S1AP Did not find entry in hashtable initial_id2_s1ap_ids for ue_initial_id %u\n", ue_initial_id);
|
|
} else {
|
|
LOG_W(RRC, "S1AP removed entry in hashtable initial_id2_s1ap_ids for ue_initial_id %u\n", ue_initial_id);
|
|
}
|
|
}
|
|
}
|
|
|
|
/*! \fn uint16_t get_next_ue_initial_id(uint8_t mod_id)
|
|
*\brief provide an UE initial ID for S1AP initial communication.
|
|
*\param mod_id Instance ID of eNB.
|
|
*\return the UE initial ID.
|
|
*/
|
|
//------------------------------------------------------------------------------
|
|
static uint16_t
|
|
get_next_ue_initial_id(
|
|
const module_id_t mod_id
|
|
)
|
|
//------------------------------------------------------------------------------
|
|
{
|
|
static uint16_t ue_initial_id[NUMBER_OF_eNB_MAX];
|
|
ue_initial_id[mod_id]++;
|
|
|
|
/* Never use UE_INITIAL_ID_INVALID this is the invalid id! */
|
|
if (ue_initial_id[mod_id] == UE_INITIAL_ID_INVALID) {
|
|
ue_initial_id[mod_id]++;
|
|
}
|
|
|
|
return ue_initial_id[mod_id];
|
|
}
|
|
|
|
|
|
|
|
|
|
/*! \fn uint8_t get_UE_index_from_s1ap_ids(uint8_t mod_id, uint16_t ue_initial_id, uint32_t eNB_ue_s1ap_id)
|
|
*\brief retrieve UE index in the eNB from the UE initial ID if not equal to UE_INDEX_INVALID or
|
|
*\brief from the eNB_ue_s1ap_id previously transmitted by S1AP.
|
|
*\param mod_id Instance ID of eNB.
|
|
*\param ue_initial_id The UE initial ID sent to S1AP.
|
|
*\param eNB_ue_s1ap_id The value sent by S1AP.
|
|
*\return the UE index or UE_INDEX_INVALID if not found.
|
|
*/
|
|
static struct rrc_eNB_ue_context_s*
|
|
rrc_eNB_get_ue_context_from_s1ap_ids(
|
|
const instance_t instanceP,
|
|
const uint16_t ue_initial_idP,
|
|
const uint32_t eNB_ue_s1ap_idP
|
|
)
|
|
{
|
|
rrc_ue_s1ap_ids_t* temp = NULL;
|
|
temp =
|
|
rrc_eNB_S1AP_get_ue_ids(
|
|
&eNB_rrc_inst[ENB_INSTANCE_TO_MODULE_ID(instanceP)],
|
|
ue_initial_idP,
|
|
eNB_ue_s1ap_idP);
|
|
|
|
if (temp) {
|
|
|
|
return rrc_eNB_get_ue_context(
|
|
&eNB_rrc_inst[ENB_INSTANCE_TO_MODULE_ID(instanceP)],
|
|
temp->ue_rnti);
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
/*! \fn e_SecurityAlgorithmConfig__cipheringAlgorithm rrc_eNB_select_ciphering(uint16_t algorithms)
|
|
*\brief analyze available encryption algorithms bit mask and return the relevant one.
|
|
*\param algorithms The bit mask of available algorithms received from S1AP.
|
|
*\return the selected algorithm.
|
|
*/
|
|
static e_SecurityAlgorithmConfig__cipheringAlgorithm rrc_eNB_select_ciphering(uint16_t algorithms)
|
|
{
|
|
|
|
//#warning "Forced return SecurityAlgorithmConfig__cipheringAlgorithm_eea0, to be deleted in future"
|
|
return SecurityAlgorithmConfig__cipheringAlgorithm_eea0;
|
|
|
|
if (algorithms & S1AP_ENCRYPTION_EEA2_MASK) {
|
|
return SecurityAlgorithmConfig__cipheringAlgorithm_eea2;
|
|
}
|
|
|
|
if (algorithms & S1AP_ENCRYPTION_EEA1_MASK) {
|
|
return SecurityAlgorithmConfig__cipheringAlgorithm_eea1;
|
|
}
|
|
|
|
return SecurityAlgorithmConfig__cipheringAlgorithm_eea0;
|
|
}
|
|
|
|
/*! \fn e_SecurityAlgorithmConfig__integrityProtAlgorithm rrc_eNB_select_integrity(uint16_t algorithms)
|
|
*\brief analyze available integrity algorithms bit mask and return the relevant one.
|
|
*\param algorithms The bit mask of available algorithms received from S1AP.
|
|
*\return the selected algorithm.
|
|
*/
|
|
static e_SecurityAlgorithmConfig__integrityProtAlgorithm rrc_eNB_select_integrity(uint16_t algorithms)
|
|
{
|
|
|
|
if (algorithms & S1AP_INTEGRITY_EIA2_MASK) {
|
|
return SecurityAlgorithmConfig__integrityProtAlgorithm_eia2;
|
|
}
|
|
|
|
if (algorithms & S1AP_INTEGRITY_EIA1_MASK) {
|
|
return SecurityAlgorithmConfig__integrityProtAlgorithm_eia1;
|
|
}
|
|
|
|
return INTEGRITY_ALGORITHM_NONE;
|
|
}
|
|
|
|
/*! \fn int rrc_eNB_process_security (uint8_t mod_id, uint8_t ue_index, security_capabilities_t *security_capabilities)
|
|
*\brief save and analyze available security algorithms bit mask and select relevant ones.
|
|
*\param mod_id Instance ID of eNB.
|
|
*\param ue_index Instance ID of UE in the eNB.
|
|
*\param security_capabilities The security capabilities received from S1AP.
|
|
*\return TRUE if at least one algorithm has been changed else FALSE.
|
|
*/
|
|
static int
|
|
rrc_eNB_process_security(
|
|
const protocol_ctxt_t* const ctxt_pP,
|
|
rrc_eNB_ue_context_t* const ue_context_pP,
|
|
security_capabilities_t* security_capabilities_pP
|
|
)
|
|
{
|
|
boolean_t changed = FALSE;
|
|
e_SecurityAlgorithmConfig__cipheringAlgorithm cipheringAlgorithm;
|
|
e_SecurityAlgorithmConfig__integrityProtAlgorithm integrityProtAlgorithm;
|
|
|
|
/* Save security parameters */
|
|
ue_context_pP->ue_context.security_capabilities = *security_capabilities_pP;
|
|
|
|
// translation
|
|
LOG_D(RRC,
|
|
"[eNB %d] NAS security_capabilities.encryption_algorithms %u AS ciphering_algorithm %u NAS security_capabilities.integrity_algorithms %u AS integrity_algorithm %u\n",
|
|
ctxt_pP->module_id,
|
|
ue_context_pP->ue_context.security_capabilities.encryption_algorithms,
|
|
ue_context_pP->ue_context.ciphering_algorithm,
|
|
ue_context_pP->ue_context.security_capabilities.integrity_algorithms,
|
|
ue_context_pP->ue_context.integrity_algorithm);
|
|
/* Select relevant algorithms */
|
|
cipheringAlgorithm = rrc_eNB_select_ciphering (ue_context_pP->ue_context.security_capabilities.encryption_algorithms);
|
|
|
|
if (ue_context_pP->ue_context.ciphering_algorithm != cipheringAlgorithm) {
|
|
ue_context_pP->ue_context.ciphering_algorithm = cipheringAlgorithm;
|
|
changed = TRUE;
|
|
}
|
|
|
|
integrityProtAlgorithm = rrc_eNB_select_integrity (ue_context_pP->ue_context.security_capabilities.integrity_algorithms);
|
|
|
|
if (ue_context_pP->ue_context.integrity_algorithm != integrityProtAlgorithm) {
|
|
ue_context_pP->ue_context.integrity_algorithm = integrityProtAlgorithm;
|
|
changed = TRUE;
|
|
}
|
|
|
|
LOG_I (RRC, "[eNB %d][UE %x] Selected security algorithms (%x): %x, %x, %s\n",
|
|
ctxt_pP->module_id,
|
|
ue_context_pP->ue_context.rnti,
|
|
security_capabilities_pP,
|
|
cipheringAlgorithm,
|
|
integrityProtAlgorithm,
|
|
changed ? "changed" : "same");
|
|
|
|
return changed;
|
|
}
|
|
|
|
/*! \fn void process_eNB_security_key (const protocol_ctxt_t* const ctxt_pP, eNB_RRC_UE_t * const ue_context_pP, uint8_t *security_key)
|
|
*\brief save security key.
|
|
*\param ctxt_pP Running context.
|
|
*\param ue_context_pP UE context.
|
|
*\param security_key_pP The security key received from S1AP.
|
|
*/
|
|
//------------------------------------------------------------------------------
|
|
static void process_eNB_security_key (
|
|
const protocol_ctxt_t* const ctxt_pP,
|
|
rrc_eNB_ue_context_t* const ue_context_pP,
|
|
uint8_t* security_key_pP
|
|
)
|
|
//------------------------------------------------------------------------------
|
|
{
|
|
#if defined(ENABLE_SECURITY)
|
|
char ascii_buffer[65];
|
|
uint8_t i;
|
|
|
|
/* Saves the security key */
|
|
memcpy (ue_context_pP->ue_context.kenb, security_key_pP, SECURITY_KEY_LENGTH);
|
|
|
|
for (i = 0; i < 32; i++) {
|
|
sprintf(&ascii_buffer[2 * i], "%02X", ue_context_pP->ue_context.kenb[i]);
|
|
}
|
|
|
|
ascii_buffer[2 * i] = '\0';
|
|
|
|
LOG_I (RRC, "[eNB %d][UE %x] Saved security key %s\n", ctxt_pP->module_id, ue_context_pP->ue_context.rnti, ascii_buffer);
|
|
#endif
|
|
}
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
static void
|
|
rrc_pdcp_config_security(
|
|
const protocol_ctxt_t* const ctxt_pP,
|
|
rrc_eNB_ue_context_t* const ue_context_pP,
|
|
const uint8_t send_security_mode_command
|
|
)
|
|
//------------------------------------------------------------------------------
|
|
{
|
|
|
|
#if defined(ENABLE_SECURITY)
|
|
|
|
|
|
SRB_ToAddModList_t* SRB_configList = ue_context_pP->ue_context.SRB_configList;
|
|
uint8_t *kRRCenc = NULL;
|
|
uint8_t *kRRCint = NULL;
|
|
uint8_t *kUPenc = NULL;
|
|
pdcp_t *pdcp_p = NULL;
|
|
static int print_keys= 1;
|
|
hashtable_rc_t h_rc;
|
|
hash_key_t key;
|
|
|
|
/* Derive the keys from kenb */
|
|
if (SRB_configList != NULL) {
|
|
derive_key_up_enc(ue_context_pP->ue_context.ciphering_algorithm,
|
|
ue_context_pP->ue_context.kenb,
|
|
&kUPenc);
|
|
}
|
|
|
|
derive_key_rrc_enc(ue_context_pP->ue_context.ciphering_algorithm,
|
|
ue_context_pP->ue_context.kenb,
|
|
&kRRCenc);
|
|
derive_key_rrc_int(ue_context_pP->ue_context.integrity_algorithm,
|
|
ue_context_pP->ue_context.kenb,
|
|
&kRRCint);
|
|
|
|
#define DEBUG_SECURITY 1
|
|
|
|
#if defined (DEBUG_SECURITY)
|
|
#undef msg
|
|
#define msg printf
|
|
|
|
if (print_keys ==1 ) {
|
|
print_keys =0;
|
|
int i;
|
|
msg("\nKeNB:");
|
|
|
|
for(i = 0; i < 32; i++) {
|
|
msg("%02x", ue_context_pP->ue_context.kenb[i]);
|
|
}
|
|
|
|
msg("\n");
|
|
|
|
msg("\nKRRCenc:");
|
|
|
|
for(i = 0; i < 32; i++) {
|
|
msg("%02x", kRRCenc[i]);
|
|
}
|
|
|
|
msg("\n");
|
|
|
|
msg("\nKRRCint:");
|
|
|
|
for(i = 0; i < 32; i++) {
|
|
msg("%02x", kRRCint[i]);
|
|
}
|
|
|
|
msg("\n");
|
|
|
|
}
|
|
|
|
#endif //DEBUG_SECURITY
|
|
key = PDCP_COLL_KEY_VALUE(ctxt_pP->module_id, ctxt_pP->rnti, ctxt_pP->enb_flag, DCCH, SRB_FLAG_YES);
|
|
h_rc = hashtable_get(pdcp_coll_p, key, (void**)&pdcp_p);
|
|
|
|
|
|
if (h_rc == HASH_TABLE_OK) {
|
|
pdcp_config_set_security(
|
|
ctxt_pP,
|
|
pdcp_p,
|
|
DCCH,
|
|
DCCH+2,
|
|
(send_security_mode_command == TRUE) ?
|
|
0 | (ue_context_pP->ue_context.integrity_algorithm << 4) :
|
|
(ue_context_pP->ue_context.ciphering_algorithm ) |
|
|
(ue_context_pP->ue_context.integrity_algorithm << 4),
|
|
kRRCenc,
|
|
kRRCint,
|
|
kUPenc);
|
|
} else {
|
|
LOG_E(RRC,
|
|
PROTOCOL_RRC_CTXT_UE_FMT"Could not get PDCP instance for SRB DCCH %u\n",
|
|
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),
|
|
DCCH);
|
|
}
|
|
|
|
#endif
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
void
|
|
rrc_eNB_send_S1AP_INITIAL_CONTEXT_SETUP_RESP(
|
|
const protocol_ctxt_t* const ctxt_pP,
|
|
rrc_eNB_ue_context_t* const ue_context_pP
|
|
)
|
|
//------------------------------------------------------------------------------
|
|
{
|
|
MessageDef *msg_p = NULL;
|
|
int e_rab;
|
|
int e_rabs_done = 0;
|
|
int e_rabs_failed = 0;
|
|
|
|
msg_p = itti_alloc_new_message (TASK_RRC_ENB, S1AP_INITIAL_CONTEXT_SETUP_RESP);
|
|
S1AP_INITIAL_CONTEXT_SETUP_RESP (msg_p).eNB_ue_s1ap_id = ue_context_pP->ue_context.eNB_ue_s1ap_id;
|
|
|
|
for (e_rab = 0; e_rab < ue_context_pP->ue_context.nb_of_e_rabs; e_rab++) {
|
|
if (ue_context_pP->ue_context.e_rab[e_rab].status == E_RAB_STATUS_DONE) {
|
|
e_rabs_done++;
|
|
S1AP_INITIAL_CONTEXT_SETUP_RESP (msg_p).e_rabs[e_rab].e_rab_id = ue_context_pP->ue_context.e_rab[e_rab].param.e_rab_id;
|
|
// TODO add other information from S1-U when it will be integrated
|
|
S1AP_INITIAL_CONTEXT_SETUP_RESP (msg_p).e_rabs[e_rab].gtp_teid = ue_context_pP->ue_context.enb_gtp_teid[e_rab];
|
|
S1AP_INITIAL_CONTEXT_SETUP_RESP (msg_p).e_rabs[e_rab].eNB_addr = ue_context_pP->ue_context.enb_gtp_addrs[e_rab];
|
|
S1AP_INITIAL_CONTEXT_SETUP_RESP (msg_p).e_rabs[e_rab].eNB_addr.length = 4;
|
|
ue_context_pP->ue_context.e_rab[e_rab].status = E_RAB_STATUS_ESTABLISHED;
|
|
} else {
|
|
e_rabs_failed++;
|
|
ue_context_pP->ue_context.e_rab[e_rab].status = E_RAB_STATUS_FAILED;
|
|
S1AP_INITIAL_CONTEXT_SETUP_RESP (msg_p).e_rabs_failed[e_rab].e_rab_id = ue_context_pP->ue_context.e_rab[e_rab].param.e_rab_id;
|
|
// TODO add cause when it will be integrated
|
|
}
|
|
}
|
|
|
|
MSC_LOG_TX_MESSAGE(
|
|
MSC_RRC_ENB,
|
|
MSC_S1AP_ENB,
|
|
(const char *)&S1AP_INITIAL_CONTEXT_SETUP_RESP (msg_p),
|
|
sizeof(s1ap_initial_context_setup_resp_t),
|
|
MSC_AS_TIME_FMT" INITIAL_CONTEXT_SETUP_RESP UE %X eNB_ue_s1ap_id %u e_rabs:%u succ %u fail",
|
|
MSC_AS_TIME_ARGS(ctxt_pP),
|
|
ue_context_pP->ue_id_rnti,
|
|
S1AP_INITIAL_CONTEXT_SETUP_RESP (msg_p).eNB_ue_s1ap_id,
|
|
e_rabs_done, e_rabs_failed);
|
|
|
|
|
|
S1AP_INITIAL_CONTEXT_SETUP_RESP (msg_p).nb_of_e_rabs = e_rabs_done;
|
|
S1AP_INITIAL_CONTEXT_SETUP_RESP (msg_p).nb_of_e_rabs_failed = e_rabs_failed;
|
|
|
|
itti_send_msg_to_task (TASK_S1AP, ctxt_pP->instance, msg_p);
|
|
}
|
|
# endif
|
|
|
|
//------------------------------------------------------------------------------
|
|
void
|
|
rrc_eNB_send_S1AP_UPLINK_NAS(
|
|
const protocol_ctxt_t* const ctxt_pP,
|
|
rrc_eNB_ue_context_t* const ue_context_pP,
|
|
UL_DCCH_Message_t* const ul_dcch_msg
|
|
)
|
|
//------------------------------------------------------------------------------
|
|
{
|
|
#if defined(ENABLE_ITTI)
|
|
{
|
|
ULInformationTransfer_t *ulInformationTransfer = &ul_dcch_msg->message.choice.c1.choice.ulInformationTransfer;
|
|
|
|
if ((ulInformationTransfer->criticalExtensions.present == ULInformationTransfer__criticalExtensions_PR_c1)
|
|
&& (ulInformationTransfer->criticalExtensions.choice.c1.present
|
|
== ULInformationTransfer__criticalExtensions__c1_PR_ulInformationTransfer_r8)
|
|
&& (ulInformationTransfer->criticalExtensions.choice.c1.choice.ulInformationTransfer_r8.dedicatedInfoType.present
|
|
== ULInformationTransfer_r8_IEs__dedicatedInfoType_PR_dedicatedInfoNAS)) {
|
|
/* This message hold a dedicated info NAS payload, forward it to NAS */
|
|
struct ULInformationTransfer_r8_IEs__dedicatedInfoType *dedicatedInfoType =
|
|
&ulInformationTransfer->criticalExtensions.choice.c1.choice.ulInformationTransfer_r8.dedicatedInfoType;
|
|
uint32_t pdu_length;
|
|
uint8_t *pdu_buffer;
|
|
MessageDef *msg_p;
|
|
|
|
pdu_length = dedicatedInfoType->choice.dedicatedInfoNAS.size;
|
|
pdu_buffer = dedicatedInfoType->choice.dedicatedInfoNAS.buf;
|
|
|
|
msg_p = itti_alloc_new_message (TASK_RRC_ENB, S1AP_UPLINK_NAS);
|
|
S1AP_UPLINK_NAS (msg_p).eNB_ue_s1ap_id = ue_context_pP->ue_context.eNB_ue_s1ap_id;
|
|
S1AP_UPLINK_NAS (msg_p).nas_pdu.length = pdu_length;
|
|
S1AP_UPLINK_NAS (msg_p).nas_pdu.buffer = pdu_buffer;
|
|
|
|
itti_send_msg_to_task (TASK_S1AP, ctxt_pP->instance, msg_p);
|
|
}
|
|
}
|
|
#else
|
|
{
|
|
ULInformationTransfer_t *ulInformationTransfer;
|
|
ulInformationTransfer =
|
|
&ul_dcch_msg->message.choice.c1.choice.
|
|
ulInformationTransfer;
|
|
|
|
if (ulInformationTransfer->criticalExtensions.present ==
|
|
ULInformationTransfer__criticalExtensions_PR_c1) {
|
|
if (ulInformationTransfer->criticalExtensions.choice.c1.present ==
|
|
ULInformationTransfer__criticalExtensions__c1_PR_ulInformationTransfer_r8) {
|
|
|
|
ULInformationTransfer_r8_IEs_t
|
|
*ulInformationTransferR8;
|
|
ulInformationTransferR8 =
|
|
&ulInformationTransfer->criticalExtensions.choice.
|
|
c1.choice.ulInformationTransfer_r8;
|
|
|
|
if (ulInformationTransferR8->dedicatedInfoType.
|
|
present ==
|
|
ULInformationTransfer_r8_IEs__dedicatedInfoType_PR_dedicatedInfoNAS)
|
|
s1ap_eNB_new_data_request (mod_id, ue_index,
|
|
ulInformationTransferR8->
|
|
dedicatedInfoType.choice.
|
|
dedicatedInfoNAS.buf,
|
|
ulInformationTransferR8->
|
|
dedicatedInfoType.choice.
|
|
dedicatedInfoNAS.size);
|
|
}
|
|
}
|
|
}
|
|
#endif
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
void rrc_eNB_send_S1AP_UE_CAPABILITIES_IND(
|
|
const protocol_ctxt_t* const ctxt_pP,
|
|
rrc_eNB_ue_context_t* const ue_context_pP,
|
|
UL_DCCH_Message_t* ul_dcch_msg
|
|
)
|
|
//------------------------------------------------------------------------------
|
|
{
|
|
UECapabilityInformation_t *ueCapabilityInformation = &ul_dcch_msg->message.choice.c1.choice.ueCapabilityInformation;
|
|
/* 4096 is arbitrary, should be big enough */
|
|
unsigned char buf[4096];
|
|
unsigned char *buf2;
|
|
UERadioAccessCapabilityInformation_t rac;
|
|
|
|
if (ueCapabilityInformation->criticalExtensions.present != UECapabilityInformation__criticalExtensions_PR_c1
|
|
|| ueCapabilityInformation->criticalExtensions.choice.c1.present != UECapabilityInformation__criticalExtensions__c1_PR_ueCapabilityInformation_r8) {
|
|
LOG_E(RRC, "[eNB %d][UE %x] bad UE capabilities\n", ctxt_pP->module_id, ue_context_pP->ue_context.rnti);
|
|
return;
|
|
}
|
|
|
|
asn_enc_rval_t ret = uper_encode_to_buffer(&asn_DEF_UECapabilityInformation, ueCapabilityInformation, buf, 4096);
|
|
if (ret.encoded == -1) abort();
|
|
|
|
memset(&rac, 0, sizeof(UERadioAccessCapabilityInformation_t));
|
|
|
|
rac.criticalExtensions.present = UERadioAccessCapabilityInformation__criticalExtensions_PR_c1;
|
|
rac.criticalExtensions.choice.c1.present = UERadioAccessCapabilityInformation__criticalExtensions__c1_PR_ueRadioAccessCapabilityInformation_r8;
|
|
rac.criticalExtensions.choice.c1.choice.ueRadioAccessCapabilityInformation_r8.ue_RadioAccessCapabilityInfo.buf = buf;
|
|
rac.criticalExtensions.choice.c1.choice.ueRadioAccessCapabilityInformation_r8.ue_RadioAccessCapabilityInfo.size = (ret.encoded+7)/8;
|
|
rac.criticalExtensions.choice.c1.choice.ueRadioAccessCapabilityInformation_r8.nonCriticalExtension = NULL;
|
|
|
|
/* 8192 is arbitrary, should be big enough */
|
|
buf2 = malloc16(8192);
|
|
if (buf2 == NULL) abort();
|
|
ret = uper_encode_to_buffer(&asn_DEF_UERadioAccessCapabilityInformation, &rac, buf2, 8192);
|
|
if (ret.encoded == -1) abort();
|
|
|
|
MessageDef *msg_p;
|
|
|
|
msg_p = itti_alloc_new_message (TASK_RRC_ENB, S1AP_UE_CAPABILITIES_IND);
|
|
S1AP_UE_CAPABILITIES_IND (msg_p).eNB_ue_s1ap_id = ue_context_pP->ue_context.eNB_ue_s1ap_id;
|
|
S1AP_UE_CAPABILITIES_IND (msg_p).ue_radio_cap.length = (ret.encoded+7)/8;
|
|
S1AP_UE_CAPABILITIES_IND (msg_p).ue_radio_cap.buffer = buf2;
|
|
|
|
itti_send_msg_to_task (TASK_S1AP, ctxt_pP->instance, msg_p);
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
void
|
|
rrc_eNB_send_S1AP_NAS_FIRST_REQ(
|
|
const protocol_ctxt_t* const ctxt_pP,
|
|
rrc_eNB_ue_context_t* const ue_context_pP,
|
|
RRCConnectionSetupComplete_r8_IEs_t* rrcConnectionSetupComplete
|
|
)
|
|
//------------------------------------------------------------------------------
|
|
{
|
|
#if defined(ENABLE_ITTI)
|
|
{
|
|
MessageDef* message_p = NULL;
|
|
rrc_ue_s1ap_ids_t* rrc_ue_s1ap_ids_p = NULL;
|
|
hashtable_rc_t h_rc;
|
|
|
|
message_p = itti_alloc_new_message (TASK_RRC_ENB, S1AP_NAS_FIRST_REQ);
|
|
memset(&message_p->ittiMsg.s1ap_nas_first_req, 0, sizeof(s1ap_nas_first_req_t));
|
|
|
|
ue_context_pP->ue_context.ue_initial_id = get_next_ue_initial_id (ctxt_pP->module_id);
|
|
S1AP_NAS_FIRST_REQ (message_p).ue_initial_id = ue_context_pP->ue_context.ue_initial_id;
|
|
|
|
rrc_ue_s1ap_ids_p = malloc(sizeof(*rrc_ue_s1ap_ids_p));
|
|
rrc_ue_s1ap_ids_p->ue_initial_id = ue_context_pP->ue_context.ue_initial_id;
|
|
rrc_ue_s1ap_ids_p->eNB_ue_s1ap_id = UE_INITIAL_ID_INVALID;
|
|
rrc_ue_s1ap_ids_p->ue_rnti = ctxt_pP->rnti;
|
|
|
|
h_rc = hashtable_insert(eNB_rrc_inst[ctxt_pP->module_id].initial_id2_s1ap_ids,
|
|
(hash_key_t)ue_context_pP->ue_context.ue_initial_id,
|
|
rrc_ue_s1ap_ids_p);
|
|
if (h_rc != HASH_TABLE_OK) {
|
|
LOG_E(S1AP, "[eNB %d] Error while hashtable_insert in initial_id2_s1ap_ids ue_initial_id %u\n",
|
|
ctxt_pP->module_id, ue_context_pP->ue_context.ue_initial_id);
|
|
}
|
|
|
|
/* Assume that cause is coded in the same way in RRC and S1ap, just check that the value is in S1ap range */
|
|
AssertFatal(ue_context_pP->ue_context.establishment_cause < RRC_CAUSE_LAST,
|
|
"Establishment cause invalid (%jd/%d) for eNB %d!",
|
|
ue_context_pP->ue_context.establishment_cause, RRC_CAUSE_LAST, ctxt_pP->module_id);
|
|
|
|
S1AP_NAS_FIRST_REQ (message_p).establishment_cause = ue_context_pP->ue_context.establishment_cause;
|
|
|
|
/* Forward NAS message */S1AP_NAS_FIRST_REQ (message_p).nas_pdu.buffer =
|
|
rrcConnectionSetupComplete->dedicatedInfoNAS.buf;
|
|
S1AP_NAS_FIRST_REQ (message_p).nas_pdu.length = rrcConnectionSetupComplete->dedicatedInfoNAS.size;
|
|
|
|
/* Fill UE identities with available information */
|
|
{
|
|
S1AP_NAS_FIRST_REQ (message_p).ue_identity.presenceMask = UE_IDENTITIES_NONE;
|
|
|
|
if (ue_context_pP->ue_context.Initialue_identity_s_TMSI.presence) {
|
|
/* Fill s-TMSI */
|
|
UE_S_TMSI* s_TMSI = &ue_context_pP->ue_context.Initialue_identity_s_TMSI;
|
|
|
|
S1AP_NAS_FIRST_REQ (message_p).ue_identity.presenceMask |= UE_IDENTITIES_s_tmsi;
|
|
S1AP_NAS_FIRST_REQ (message_p).ue_identity.s_tmsi.mme_code = s_TMSI->mme_code;
|
|
S1AP_NAS_FIRST_REQ (message_p).ue_identity.s_tmsi.m_tmsi = s_TMSI->m_tmsi;
|
|
LOG_I(S1AP, "[eNB %d] Build S1AP_NAS_FIRST_REQ with s_TMSI: MME code %u M-TMSI %u ue %x\n",
|
|
ctxt_pP->module_id,
|
|
S1AP_NAS_FIRST_REQ (message_p).ue_identity.s_tmsi.mme_code,
|
|
S1AP_NAS_FIRST_REQ (message_p).ue_identity.s_tmsi.m_tmsi,
|
|
ue_context_pP->ue_context.rnti);
|
|
}
|
|
|
|
if (rrcConnectionSetupComplete->registeredMME != NULL) {
|
|
/* Fill GUMMEI */
|
|
struct RegisteredMME *r_mme = rrcConnectionSetupComplete->registeredMME;
|
|
//int selected_plmn_identity = rrcConnectionSetupComplete->selectedPLMN_Identity;
|
|
|
|
S1AP_NAS_FIRST_REQ (message_p).ue_identity.presenceMask |= UE_IDENTITIES_gummei;
|
|
|
|
if (r_mme->plmn_Identity != NULL) {
|
|
if ((r_mme->plmn_Identity->mcc != NULL) && (r_mme->plmn_Identity->mcc->list.count > 0)) {
|
|
/* Use first indicated PLMN MCC if it is defined */
|
|
S1AP_NAS_FIRST_REQ (message_p).ue_identity.gummei.mcc = *r_mme->plmn_Identity->mcc->list.array[0];
|
|
LOG_I(S1AP, "[eNB %d] Build S1AP_NAS_FIRST_REQ adding in s_TMSI: GUMMEI MCC %u ue %x\n",
|
|
ctxt_pP->module_id,
|
|
S1AP_NAS_FIRST_REQ (message_p).ue_identity.gummei.mcc,
|
|
ue_context_pP->ue_context.rnti);
|
|
}
|
|
|
|
if (r_mme->plmn_Identity->mnc.list.count > 0) {
|
|
/* Use first indicated PLMN MNC if it is defined */
|
|
S1AP_NAS_FIRST_REQ (message_p).ue_identity.gummei.mnc = *r_mme->plmn_Identity->mnc.list.array[0];
|
|
LOG_I(S1AP, "[eNB %d] Build S1AP_NAS_FIRST_REQ adding in s_TMSI: GUMMEI MNC %u ue %x\n",
|
|
ctxt_pP->module_id,
|
|
S1AP_NAS_FIRST_REQ (message_p).ue_identity.gummei.mnc,
|
|
ue_context_pP->ue_context.rnti);
|
|
}
|
|
} else {
|
|
const Enb_properties_array_t *enb_properties_p = NULL;
|
|
enb_properties_p = enb_config_get();
|
|
|
|
// actually the eNB configuration contains only one PLMN (can be up to 6)
|
|
S1AP_NAS_FIRST_REQ (message_p).ue_identity.gummei.mcc = enb_properties_p->properties[ctxt_pP->module_id]->mcc;
|
|
S1AP_NAS_FIRST_REQ (message_p).ue_identity.gummei.mnc = enb_properties_p->properties[ctxt_pP->module_id]->mnc;
|
|
S1AP_NAS_FIRST_REQ (message_p).ue_identity.gummei.mnc_len = enb_properties_p->properties[ctxt_pP->module_id]->mnc_digit_length;
|
|
}
|
|
|
|
S1AP_NAS_FIRST_REQ (message_p).ue_identity.gummei.mme_code = BIT_STRING_to_uint8 (&r_mme->mmec);
|
|
S1AP_NAS_FIRST_REQ (message_p).ue_identity.gummei.mme_group_id = BIT_STRING_to_uint16 (&r_mme->mmegi);
|
|
|
|
MSC_LOG_TX_MESSAGE(
|
|
MSC_S1AP_ENB,
|
|
MSC_S1AP_MME,
|
|
(const char *)&message_p->ittiMsg.s1ap_nas_first_req,
|
|
sizeof(s1ap_nas_first_req_t),
|
|
MSC_AS_TIME_FMT" S1AP_NAS_FIRST_REQ eNB %u UE %x",
|
|
MSC_AS_TIME_ARGS(ctxt_pP),
|
|
ctxt_pP->module_id,
|
|
ctxt_pP->rnti);
|
|
|
|
LOG_I(S1AP, "[eNB %d] Build S1AP_NAS_FIRST_REQ adding in s_TMSI: GUMMEI mme_code %u mme_group_id %u ue %x\n",
|
|
ctxt_pP->module_id,
|
|
S1AP_NAS_FIRST_REQ (message_p).ue_identity.gummei.mme_code,
|
|
S1AP_NAS_FIRST_REQ (message_p).ue_identity.gummei.mme_group_id,
|
|
ue_context_pP->ue_context.rnti);
|
|
}
|
|
}
|
|
itti_send_msg_to_task (TASK_S1AP, ctxt_pP->instance, message_p);
|
|
}
|
|
#else
|
|
{
|
|
s1ap_eNB_new_data_request (
|
|
ctxt_pP->module_id,
|
|
ue_context_pP,
|
|
rrcConnectionSetupComplete->dedicatedInfoNAS.
|
|
buf,
|
|
rrcConnectionSetupComplete->dedicatedInfoNAS.
|
|
size);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
# if defined(ENABLE_ITTI)
|
|
//------------------------------------------------------------------------------
|
|
int
|
|
rrc_eNB_process_S1AP_DOWNLINK_NAS(
|
|
MessageDef* msg_p,
|
|
const char* msg_name,
|
|
instance_t instance,
|
|
mui_t* rrc_eNB_mui
|
|
)
|
|
//------------------------------------------------------------------------------
|
|
{
|
|
uint16_t ue_initial_id;
|
|
uint32_t eNB_ue_s1ap_id;
|
|
uint32_t length;
|
|
uint8_t *buffer;
|
|
uint8_t srb_id;
|
|
|
|
struct rrc_eNB_ue_context_s* ue_context_p = NULL;
|
|
protocol_ctxt_t ctxt;
|
|
ue_initial_id = S1AP_DOWNLINK_NAS (msg_p).ue_initial_id;
|
|
eNB_ue_s1ap_id = S1AP_DOWNLINK_NAS (msg_p).eNB_ue_s1ap_id;
|
|
ue_context_p = rrc_eNB_get_ue_context_from_s1ap_ids(instance, ue_initial_id, eNB_ue_s1ap_id);
|
|
srb_id = ue_context_p->ue_context.Srb2.Srb_info.Srb_id;
|
|
|
|
LOG_I(RRC, "[eNB %d] Received %s: ue_initial_id %d, eNB_ue_s1ap_id %d\n",
|
|
instance,
|
|
msg_name,
|
|
ue_initial_id,
|
|
eNB_ue_s1ap_id);
|
|
|
|
if (ue_context_p == NULL) {
|
|
|
|
MSC_LOG_RX_MESSAGE(
|
|
MSC_RRC_ENB,
|
|
MSC_S1AP_ENB,
|
|
NULL,
|
|
0,
|
|
MSC_AS_TIME_FMT" DOWNLINK-NAS UE initial id %u eNB_ue_s1ap_id %u",
|
|
0,0,//MSC_AS_TIME_ARGS(ctxt_pP),
|
|
ue_initial_id,
|
|
eNB_ue_s1ap_id);
|
|
|
|
/* Can not associate this message to an UE index, send a failure to S1AP and discard it! */
|
|
MessageDef *msg_fail_p;
|
|
|
|
LOG_W(RRC, "[eNB %d] In S1AP_DOWNLINK_NAS: unknown UE from S1AP ids (%d, %d)\n", instance, ue_initial_id, eNB_ue_s1ap_id);
|
|
|
|
msg_fail_p = itti_alloc_new_message (TASK_RRC_ENB, S1AP_NAS_NON_DELIVERY_IND);
|
|
S1AP_NAS_NON_DELIVERY_IND (msg_fail_p).eNB_ue_s1ap_id = eNB_ue_s1ap_id;
|
|
S1AP_NAS_NON_DELIVERY_IND (msg_fail_p).nas_pdu.length = S1AP_DOWNLINK_NAS (msg_p).nas_pdu.length;
|
|
S1AP_NAS_NON_DELIVERY_IND (msg_fail_p).nas_pdu.buffer = S1AP_DOWNLINK_NAS (msg_p).nas_pdu.buffer;
|
|
|
|
// TODO add failure cause when defined!
|
|
|
|
|
|
MSC_LOG_TX_MESSAGE(
|
|
MSC_RRC_ENB,
|
|
MSC_S1AP_ENB,
|
|
(const char *)NULL,
|
|
0,
|
|
MSC_AS_TIME_FMT" S1AP_NAS_NON_DELIVERY_IND UE initial id %u eNB_ue_s1ap_id %u (ue ctxt !found)",
|
|
0,0,//MSC_AS_TIME_ARGS(ctxt_pP),
|
|
ue_initial_id,
|
|
eNB_ue_s1ap_id);
|
|
|
|
itti_send_msg_to_task (TASK_S1AP, instance, msg_fail_p);
|
|
return (-1);
|
|
} else {
|
|
PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, instance, ENB_FLAG_YES, ue_context_p->ue_context.rnti, 0, 0);
|
|
|
|
/* Is it the first income from S1AP ? */
|
|
if (ue_context_p->ue_context.eNB_ue_s1ap_id == 0) {
|
|
ue_context_p->ue_context.eNB_ue_s1ap_id = S1AP_DOWNLINK_NAS (msg_p).eNB_ue_s1ap_id;
|
|
}
|
|
|
|
MSC_LOG_RX_MESSAGE(
|
|
MSC_RRC_ENB,
|
|
MSC_S1AP_ENB,
|
|
(const char *)NULL,
|
|
0,
|
|
MSC_AS_TIME_FMT" DOWNLINK-NAS UE initial id %u eNB_ue_s1ap_id %u",
|
|
0,0,//MSC_AS_TIME_ARGS(ctxt_pP),
|
|
ue_initial_id,
|
|
S1AP_DOWNLINK_NAS (msg_p).eNB_ue_s1ap_id);
|
|
|
|
|
|
/* Create message for PDCP (DLInformationTransfer_t) */
|
|
length = do_DLInformationTransfer (
|
|
instance,
|
|
&buffer,
|
|
rrc_eNB_get_next_transaction_identifier (instance),
|
|
S1AP_DOWNLINK_NAS (msg_p).nas_pdu.length,
|
|
S1AP_DOWNLINK_NAS (msg_p).nas_pdu.buffer);
|
|
|
|
#ifdef RRC_MSG_PRINT
|
|
int i=0;
|
|
LOG_F(RRC,"[MSG] RRC DL Information Transfer\n");
|
|
|
|
for (i = 0; i < length; i++) {
|
|
LOG_F(RRC,"%02x ", ((uint8_t*)buffer)[i]);
|
|
}
|
|
|
|
LOG_F(RRC,"\n");
|
|
#endif
|
|
/*
|
|
* switch UL or DL NAS message without RRC piggybacked to SRB2 if active.
|
|
*/
|
|
/* Transfer data to PDCP */
|
|
rrc_data_req (
|
|
&ctxt,
|
|
srb_id,
|
|
*rrc_eNB_mui++,
|
|
SDU_CONFIRM_NO,
|
|
length,
|
|
buffer,
|
|
PDCP_TRANSMISSION_MODE_CONTROL);
|
|
|
|
return (0);
|
|
}
|
|
}
|
|
|
|
/*------------------------------------------------------------------------------*/
|
|
int rrc_eNB_process_S1AP_INITIAL_CONTEXT_SETUP_REQ(MessageDef *msg_p, const char *msg_name, instance_t instance)
|
|
{
|
|
uint16_t ue_initial_id;
|
|
uint32_t eNB_ue_s1ap_id;
|
|
//MessageDef *message_gtpv1u_p = NULL;
|
|
gtpv1u_enb_create_tunnel_req_t create_tunnel_req;
|
|
gtpv1u_enb_create_tunnel_resp_t create_tunnel_resp;
|
|
|
|
struct rrc_eNB_ue_context_s* ue_context_p = NULL;
|
|
protocol_ctxt_t ctxt;
|
|
ue_initial_id = S1AP_INITIAL_CONTEXT_SETUP_REQ (msg_p).ue_initial_id;
|
|
eNB_ue_s1ap_id = S1AP_INITIAL_CONTEXT_SETUP_REQ (msg_p).eNB_ue_s1ap_id;
|
|
ue_context_p = rrc_eNB_get_ue_context_from_s1ap_ids(instance, ue_initial_id, eNB_ue_s1ap_id);
|
|
LOG_I(RRC, "[eNB %d] Received %s: ue_initial_id %d, eNB_ue_s1ap_id %d, nb_of_e_rabs %d\n",
|
|
instance, msg_name, ue_initial_id, eNB_ue_s1ap_id, S1AP_INITIAL_CONTEXT_SETUP_REQ (msg_p).nb_of_e_rabs);
|
|
|
|
if (ue_context_p == NULL) {
|
|
/* Can not associate this message to an UE index, send a failure to S1AP and discard it! */
|
|
MessageDef *msg_fail_p = NULL;
|
|
|
|
LOG_W(RRC, "[eNB %d] In S1AP_INITIAL_CONTEXT_SETUP_REQ: unknown UE from S1AP ids (%d, %d)\n", instance, ue_initial_id, eNB_ue_s1ap_id);
|
|
|
|
msg_fail_p = itti_alloc_new_message (TASK_RRC_ENB, S1AP_INITIAL_CONTEXT_SETUP_FAIL);
|
|
S1AP_INITIAL_CONTEXT_SETUP_FAIL (msg_fail_p).eNB_ue_s1ap_id = eNB_ue_s1ap_id;
|
|
|
|
// TODO add failure cause when defined!
|
|
|
|
itti_send_msg_to_task (TASK_S1AP, instance, msg_fail_p);
|
|
return (-1);
|
|
} else {
|
|
|
|
PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, instance, ENB_FLAG_YES, ue_context_p->ue_context.rnti, 0, 0);
|
|
ue_context_p->ue_context.eNB_ue_s1ap_id = S1AP_INITIAL_CONTEXT_SETUP_REQ (msg_p).eNB_ue_s1ap_id;
|
|
|
|
/* Save e RAB information for later */
|
|
{
|
|
int i;
|
|
|
|
memset(&create_tunnel_req, 0 , sizeof(create_tunnel_req));
|
|
ue_context_p->ue_context.nb_of_e_rabs = S1AP_INITIAL_CONTEXT_SETUP_REQ (msg_p).nb_of_e_rabs;
|
|
|
|
for (i = 0; i < ue_context_p->ue_context.nb_of_e_rabs; i++) {
|
|
ue_context_p->ue_context.e_rab[i].status = E_RAB_STATUS_NEW;
|
|
ue_context_p->ue_context.e_rab[i].param = S1AP_INITIAL_CONTEXT_SETUP_REQ (msg_p).e_rab_param[i];
|
|
|
|
|
|
create_tunnel_req.eps_bearer_id[i] = S1AP_INITIAL_CONTEXT_SETUP_REQ (msg_p).e_rab_param[i].e_rab_id;
|
|
create_tunnel_req.sgw_S1u_teid[i] = S1AP_INITIAL_CONTEXT_SETUP_REQ (msg_p).e_rab_param[i].gtp_teid;
|
|
|
|
memcpy(&create_tunnel_req.sgw_addr[i],
|
|
&S1AP_INITIAL_CONTEXT_SETUP_REQ (msg_p).e_rab_param[i].sgw_addr,
|
|
sizeof(transport_layer_addr_t));
|
|
}
|
|
|
|
create_tunnel_req.rnti = ue_context_p->ue_context.rnti; // warning put zero above
|
|
create_tunnel_req.num_tunnels = i;
|
|
|
|
gtpv1u_create_s1u_tunnel(
|
|
instance,
|
|
&create_tunnel_req,
|
|
&create_tunnel_resp);
|
|
|
|
rrc_eNB_process_GTPV1U_CREATE_TUNNEL_RESP(
|
|
&ctxt,
|
|
&create_tunnel_resp);
|
|
ue_context_p->ue_context.setup_e_rabs=ue_context_p->ue_context.nb_of_e_rabs;
|
|
}
|
|
|
|
/* TODO parameters yet to process ... */
|
|
{
|
|
// S1AP_INITIAL_CONTEXT_SETUP_REQ(msg_p).ue_ambr;
|
|
}
|
|
|
|
rrc_eNB_process_security (
|
|
&ctxt,
|
|
ue_context_p,
|
|
&S1AP_INITIAL_CONTEXT_SETUP_REQ(msg_p).security_capabilities);
|
|
process_eNB_security_key (
|
|
&ctxt,
|
|
ue_context_p,
|
|
S1AP_INITIAL_CONTEXT_SETUP_REQ(msg_p).security_key);
|
|
|
|
{
|
|
uint8_t send_security_mode_command = TRUE;
|
|
|
|
#ifndef EXMIMO_IOT
|
|
|
|
if ((ue_context_p->ue_context.ciphering_algorithm == SecurityAlgorithmConfig__cipheringAlgorithm_eea0)
|
|
&& (ue_context_p->ue_context.integrity_algorithm == INTEGRITY_ALGORITHM_NONE)) {
|
|
send_security_mode_command = FALSE;
|
|
}
|
|
|
|
#endif
|
|
rrc_pdcp_config_security(
|
|
&ctxt,
|
|
ue_context_p,
|
|
send_security_mode_command);
|
|
|
|
if (send_security_mode_command) {
|
|
|
|
rrc_eNB_generate_SecurityModeCommand (
|
|
&ctxt,
|
|
ue_context_p);
|
|
send_security_mode_command = FALSE;
|
|
// apply ciphering after RRC security command mode
|
|
rrc_pdcp_config_security(
|
|
&ctxt,
|
|
ue_context_p,
|
|
send_security_mode_command);
|
|
} else {
|
|
rrc_eNB_generate_UECapabilityEnquiry (&ctxt, ue_context_p);
|
|
}
|
|
}
|
|
return (0);
|
|
}
|
|
}
|
|
|
|
/*------------------------------------------------------------------------------*/
|
|
int rrc_eNB_process_S1AP_UE_CTXT_MODIFICATION_REQ(MessageDef *msg_p, const char *msg_name, instance_t instance)
|
|
{
|
|
uint32_t eNB_ue_s1ap_id;
|
|
struct rrc_eNB_ue_context_s* ue_context_p = NULL;
|
|
protocol_ctxt_t ctxt;
|
|
|
|
eNB_ue_s1ap_id = S1AP_UE_CTXT_MODIFICATION_REQ (msg_p).eNB_ue_s1ap_id;
|
|
ue_context_p = rrc_eNB_get_ue_context_from_s1ap_ids(instance, UE_INITIAL_ID_INVALID, eNB_ue_s1ap_id);
|
|
|
|
if (ue_context_p == NULL) {
|
|
/* Can not associate this message to an UE index, send a failure to S1AP and discard it! */
|
|
MessageDef *msg_fail_p;
|
|
|
|
LOG_W(RRC, "[eNB %d] In S1AP_UE_CTXT_MODIFICATION_REQ: unknown UE from eNB_ue_s1ap_id (%d) for eNB %d\n", instance, eNB_ue_s1ap_id);
|
|
|
|
msg_fail_p = itti_alloc_new_message (TASK_RRC_ENB, S1AP_UE_CTXT_MODIFICATION_FAIL);
|
|
S1AP_UE_CTXT_MODIFICATION_FAIL (msg_fail_p).eNB_ue_s1ap_id = eNB_ue_s1ap_id;
|
|
|
|
// TODO add failure cause when defined!
|
|
|
|
itti_send_msg_to_task (TASK_S1AP, instance, msg_fail_p);
|
|
return (-1);
|
|
} else {
|
|
|
|
PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, instance, ENB_FLAG_YES, ue_context_p->ue_context.rnti, 0, 0);
|
|
/* TODO parameters yet to process ... */
|
|
{
|
|
if (S1AP_UE_CTXT_MODIFICATION_REQ(msg_p).present & S1AP_UE_CONTEXT_MODIFICATION_UE_AMBR) {
|
|
// S1AP_UE_CTXT_MODIFICATION_REQ(msg_p).ue_ambr;
|
|
}
|
|
}
|
|
|
|
if (S1AP_UE_CTXT_MODIFICATION_REQ(msg_p).present & S1AP_UE_CONTEXT_MODIFICATION_UE_SECU_CAP) {
|
|
if (rrc_eNB_process_security (
|
|
&ctxt,
|
|
ue_context_p,
|
|
&S1AP_UE_CTXT_MODIFICATION_REQ(msg_p).security_capabilities)) {
|
|
/* transmit the new security parameters to UE */
|
|
rrc_eNB_generate_SecurityModeCommand (
|
|
&ctxt,
|
|
ue_context_p);
|
|
}
|
|
}
|
|
|
|
if (S1AP_UE_CTXT_MODIFICATION_REQ(msg_p).present & S1AP_UE_CONTEXT_MODIFICATION_SECURITY_KEY) {
|
|
process_eNB_security_key (
|
|
&ctxt,
|
|
ue_context_p,
|
|
S1AP_UE_CTXT_MODIFICATION_REQ(msg_p).security_key);
|
|
|
|
/* TODO reconfigure lower layers... */
|
|
}
|
|
|
|
/* Send the response */
|
|
{
|
|
MessageDef *msg_resp_p;
|
|
|
|
msg_resp_p = itti_alloc_new_message(TASK_RRC_ENB, S1AP_UE_CTXT_MODIFICATION_RESP);
|
|
S1AP_UE_CTXT_MODIFICATION_RESP(msg_resp_p).eNB_ue_s1ap_id = eNB_ue_s1ap_id;
|
|
|
|
itti_send_msg_to_task(TASK_S1AP, instance, msg_resp_p);
|
|
}
|
|
|
|
return (0);
|
|
}
|
|
}
|
|
|
|
/*------------------------------------------------------------------------------*/
|
|
int rrc_eNB_process_S1AP_UE_CONTEXT_RELEASE_REQ (MessageDef *msg_p, const char *msg_name, instance_t instance)
|
|
{
|
|
uint32_t eNB_ue_s1ap_id;
|
|
struct rrc_eNB_ue_context_s* ue_context_p = NULL;
|
|
|
|
eNB_ue_s1ap_id = S1AP_UE_CONTEXT_RELEASE_REQ(msg_p).eNB_ue_s1ap_id;
|
|
ue_context_p = rrc_eNB_get_ue_context_from_s1ap_ids(instance, UE_INITIAL_ID_INVALID, eNB_ue_s1ap_id);
|
|
|
|
if (ue_context_p == NULL) {
|
|
/* Can not associate this message to an UE index, send a failure to S1AP and discard it! */
|
|
MessageDef *msg_fail_p;
|
|
|
|
LOG_W(RRC, "[eNB %d] In S1AP_UE_CONTEXT_RELEASE_REQ: unknown UE from eNB_ue_s1ap_id (%d)\n",
|
|
instance,
|
|
eNB_ue_s1ap_id);
|
|
|
|
msg_fail_p = itti_alloc_new_message(TASK_RRC_ENB, S1AP_UE_CONTEXT_RELEASE_RESP); /* TODO change message ID. */
|
|
S1AP_UE_CONTEXT_RELEASE_RESP(msg_fail_p).eNB_ue_s1ap_id = eNB_ue_s1ap_id;
|
|
|
|
// TODO add failure cause when defined!
|
|
|
|
itti_send_msg_to_task(TASK_S1AP, instance, msg_fail_p);
|
|
return (-1);
|
|
} else {
|
|
/* TODO release context. */
|
|
|
|
/* Send the response */
|
|
{
|
|
MessageDef *msg_resp_p;
|
|
|
|
msg_resp_p = itti_alloc_new_message(TASK_RRC_ENB, S1AP_UE_CONTEXT_RELEASE_RESP);
|
|
S1AP_UE_CONTEXT_RELEASE_RESP(msg_resp_p).eNB_ue_s1ap_id = eNB_ue_s1ap_id;
|
|
|
|
itti_send_msg_to_task(TASK_S1AP, instance, msg_resp_p);
|
|
}
|
|
|
|
return (0);
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
void rrc_eNB_send_S1AP_UE_CONTEXT_RELEASE_REQ (
|
|
const module_id_t enb_mod_idP,
|
|
const rrc_eNB_ue_context_t* const ue_context_pP,
|
|
const s1ap_Cause_t causeP,
|
|
const long cause_valueP
|
|
)
|
|
//------------------------------------------------------------------------------
|
|
{
|
|
if (ue_context_pP == NULL) {
|
|
LOG_W(RRC,
|
|
"[eNB] In S1AP_UE_CONTEXT_RELEASE_COMMAND: invalid UE\n");
|
|
} else {
|
|
MSC_LOG_TX_MESSAGE(
|
|
MSC_RRC_ENB,
|
|
MSC_S1AP_ENB,
|
|
NULL,0,
|
|
"0 S1AP_UE_CONTEXT_RELEASE_REQ eNB_ue_s1ap_id 0x%06"PRIX32" ",
|
|
ue_context_pP->ue_context.eNB_ue_s1ap_id);
|
|
|
|
MessageDef *msg_context_release_req_p = NULL;
|
|
msg_context_release_req_p = itti_alloc_new_message(TASK_RRC_ENB, S1AP_UE_CONTEXT_RELEASE_REQ);
|
|
S1AP_UE_CONTEXT_RELEASE_REQ(msg_context_release_req_p).eNB_ue_s1ap_id = ue_context_pP->ue_context.eNB_ue_s1ap_id;
|
|
S1AP_UE_CONTEXT_RELEASE_REQ(msg_context_release_req_p).cause = causeP;
|
|
S1AP_UE_CONTEXT_RELEASE_REQ(msg_context_release_req_p).cause_value = cause_valueP;
|
|
itti_send_msg_to_task(TASK_S1AP, ENB_MODULE_ID_TO_INSTANCE(enb_mod_idP), msg_context_release_req_p);
|
|
}
|
|
}
|
|
|
|
|
|
/*------------------------------------------------------------------------------*/
|
|
int rrc_eNB_process_S1AP_UE_CONTEXT_RELEASE_COMMAND (MessageDef *msg_p, const char *msg_name, instance_t instance)
|
|
{
|
|
uint32_t eNB_ue_s1ap_id;
|
|
protocol_ctxt_t ctxt;
|
|
struct rrc_eNB_ue_context_s *ue_context_p = NULL;
|
|
struct rrc_ue_s1ap_ids_s *rrc_ue_s1ap_ids = NULL;
|
|
|
|
eNB_ue_s1ap_id = S1AP_UE_CONTEXT_RELEASE_COMMAND(msg_p).eNB_ue_s1ap_id;
|
|
|
|
|
|
ue_context_p = rrc_eNB_get_ue_context_from_s1ap_ids(instance, UE_INITIAL_ID_INVALID, eNB_ue_s1ap_id);
|
|
|
|
if (ue_context_p == NULL) {
|
|
/* Can not associate this message to an UE index */
|
|
MessageDef *msg_complete_p;
|
|
|
|
LOG_W(RRC,
|
|
"[eNB %d] In S1AP_UE_CONTEXT_RELEASE_COMMAND: unknown UE from eNB_ue_s1ap_id (%d)\n",
|
|
instance,
|
|
eNB_ue_s1ap_id);
|
|
|
|
MSC_LOG_EVENT(
|
|
MSC_RRC_ENB,
|
|
"0 S1AP_UE_CONTEXT_RELEASE_COMPLETE eNB_ue_s1ap_id 0x%06"PRIX32" context not found",
|
|
eNB_ue_s1ap_id);
|
|
|
|
MSC_LOG_TX_MESSAGE(
|
|
MSC_RRC_ENB,
|
|
MSC_S1AP_ENB,
|
|
NULL,0,
|
|
"0 S1AP_UE_CONTEXT_RELEASE_COMPLETE eNB_ue_s1ap_id 0x%06"PRIX32" ",
|
|
eNB_ue_s1ap_id);
|
|
|
|
msg_complete_p = itti_alloc_new_message(TASK_RRC_ENB, S1AP_UE_CONTEXT_RELEASE_COMPLETE);
|
|
S1AP_UE_CONTEXT_RELEASE_COMPLETE(msg_complete_p).eNB_ue_s1ap_id = eNB_ue_s1ap_id;
|
|
itti_send_msg_to_task(TASK_S1AP, instance, msg_complete_p);
|
|
|
|
rrc_ue_s1ap_ids = rrc_eNB_S1AP_get_ue_ids(
|
|
&eNB_rrc_inst[instance],
|
|
UE_INITIAL_ID_INVALID,
|
|
eNB_ue_s1ap_id);
|
|
|
|
if (NULL != rrc_ue_s1ap_ids) {
|
|
rrc_eNB_S1AP_remove_ue_ids(
|
|
&eNB_rrc_inst[instance],
|
|
rrc_ue_s1ap_ids);
|
|
}
|
|
return (-1);
|
|
} else {
|
|
PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, instance, ENB_FLAG_YES, ue_context_p->ue_context.rnti, 0, 0);
|
|
rrc_eNB_generate_RRCConnectionRelease(&ctxt, ue_context_p);
|
|
/*
|
|
LOG_W(RRC,
|
|
"[eNB %d] In S1AP_UE_CONTEXT_RELEASE_COMMAND: TODO call rrc_eNB_connection_release for eNB %d\n",
|
|
instance,
|
|
eNB_ue_s1ap_id);
|
|
*/
|
|
{
|
|
int e_rab;
|
|
//int mod_id = 0;
|
|
MessageDef *msg_delete_tunnels_p = NULL;
|
|
|
|
MSC_LOG_TX_MESSAGE(
|
|
MSC_RRC_ENB,
|
|
MSC_GTPU_ENB,
|
|
NULL,0,
|
|
"0 GTPV1U_ENB_DELETE_TUNNEL_REQ rnti %x ",
|
|
eNB_ue_s1ap_id);
|
|
|
|
msg_delete_tunnels_p = itti_alloc_new_message(TASK_RRC_ENB, GTPV1U_ENB_DELETE_TUNNEL_REQ);
|
|
memset(>PV1U_ENB_DELETE_TUNNEL_REQ(msg_delete_tunnels_p),
|
|
0,
|
|
sizeof(GTPV1U_ENB_DELETE_TUNNEL_REQ(msg_delete_tunnels_p)));
|
|
|
|
// do not wait response
|
|
GTPV1U_ENB_DELETE_TUNNEL_REQ(msg_delete_tunnels_p).rnti = ue_context_p->ue_context.rnti;
|
|
|
|
for (e_rab = 0; e_rab < ue_context_p->ue_context.nb_of_e_rabs; e_rab++) {
|
|
GTPV1U_ENB_DELETE_TUNNEL_REQ(msg_delete_tunnels_p).eps_bearer_id[GTPV1U_ENB_DELETE_TUNNEL_REQ(msg_delete_tunnels_p).num_erab++] =
|
|
ue_context_p->ue_context.enb_gtp_ebi[e_rab];
|
|
// erase data
|
|
ue_context_p->ue_context.enb_gtp_teid[e_rab] = 0;
|
|
memset(&ue_context_p->ue_context.enb_gtp_addrs[e_rab], 0, sizeof(ue_context_p->ue_context.enb_gtp_addrs[e_rab]));
|
|
ue_context_p->ue_context.enb_gtp_ebi[e_rab] = 0;
|
|
}
|
|
|
|
itti_send_msg_to_task(TASK_GTPV1_U, instance, msg_delete_tunnels_p);
|
|
|
|
|
|
MSC_LOG_TX_MESSAGE(
|
|
MSC_RRC_ENB,
|
|
MSC_S1AP_ENB,
|
|
NULL,0,
|
|
"0 S1AP_UE_CONTEXT_RELEASE_COMPLETE eNB_ue_s1ap_id 0x%06"PRIX32" ",
|
|
eNB_ue_s1ap_id);
|
|
|
|
MessageDef *msg_complete_p = NULL;
|
|
msg_complete_p = itti_alloc_new_message(TASK_RRC_ENB, S1AP_UE_CONTEXT_RELEASE_COMPLETE);
|
|
S1AP_UE_CONTEXT_RELEASE_COMPLETE(msg_complete_p).eNB_ue_s1ap_id = eNB_ue_s1ap_id;
|
|
itti_send_msg_to_task(TASK_S1AP, instance, msg_complete_p);
|
|
|
|
rrc_ue_s1ap_ids = rrc_eNB_S1AP_get_ue_ids(
|
|
&eNB_rrc_inst[instance],
|
|
UE_INITIAL_ID_INVALID,
|
|
eNB_ue_s1ap_id);
|
|
|
|
if (NULL != rrc_ue_s1ap_ids) {
|
|
rrc_eNB_S1AP_remove_ue_ids(
|
|
&eNB_rrc_inst[instance],
|
|
rrc_ue_s1ap_ids);
|
|
}
|
|
}
|
|
|
|
return (0);
|
|
}
|
|
}
|
|
|
|
int rrc_eNB_process_S1AP_E_RAB_SETUP_REQ(MessageDef *msg_p, const char *msg_name, instance_t instance)
|
|
{
|
|
uint16_t ue_initial_id;
|
|
uint32_t eNB_ue_s1ap_id;
|
|
MessageDef *message_gtpv1u_p = NULL;
|
|
gtpv1u_enb_create_tunnel_req_t create_tunnel_req;
|
|
gtpv1u_enb_create_tunnel_resp_t create_tunnel_resp;
|
|
|
|
struct rrc_eNB_ue_context_s* ue_context_p = NULL;
|
|
protocol_ctxt_t ctxt;
|
|
ue_initial_id = S1AP_E_RAB_SETUP_REQ (msg_p).ue_initial_id;
|
|
eNB_ue_s1ap_id = S1AP_E_RAB_SETUP_REQ (msg_p).eNB_ue_s1ap_id;
|
|
ue_context_p = rrc_eNB_get_ue_context_from_s1ap_ids(instance, ue_initial_id, eNB_ue_s1ap_id);
|
|
LOG_I(RRC, "[eNB %d] Received %s: ue_initial_id %d, eNB_ue_s1ap_id %d, nb_of_e_rabs %d\n",
|
|
instance, msg_name, ue_initial_id, eNB_ue_s1ap_id, S1AP_E_RAB_SETUP_REQ (msg_p).nb_e_rabs_tosetup);
|
|
|
|
if (ue_context_p == NULL) {
|
|
/* Can not associate this message to an UE index, send a failure to S1AP and discard it! */
|
|
MessageDef *msg_fail_p = NULL;
|
|
|
|
LOG_W(RRC, "[eNB %d] In S1AP_E_RAB_SETUP_REQ: unknown UE from S1AP ids (%d, %d)\n", instance, ue_initial_id, eNB_ue_s1ap_id);
|
|
|
|
msg_fail_p = itti_alloc_new_message (TASK_RRC_ENB, S1AP_E_RAB_SETUP_REQUEST_FAIL);
|
|
S1AP_E_RAB_SETUP_REQ (msg_fail_p).eNB_ue_s1ap_id = eNB_ue_s1ap_id;
|
|
|
|
// TODO add failure cause when defined!
|
|
|
|
itti_send_msg_to_task (TASK_S1AP, instance, msg_fail_p);
|
|
return (-1);
|
|
} else {
|
|
|
|
PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, instance, ENB_FLAG_YES, ue_context_p->ue_context.rnti, 0, 0);
|
|
ue_context_p->ue_context.eNB_ue_s1ap_id = S1AP_E_RAB_SETUP_REQ (msg_p).eNB_ue_s1ap_id;
|
|
|
|
/* Save e RAB information for later */
|
|
{
|
|
int i;
|
|
|
|
memset(&create_tunnel_req, 0 , sizeof(create_tunnel_req));
|
|
uint8_t nb_e_rabs_tosetup = S1AP_E_RAB_SETUP_REQ (msg_p).nb_e_rabs_tosetup;
|
|
|
|
// keep the previous bearer
|
|
// the index for the rec
|
|
for (i = 0;
|
|
i < nb_e_rabs_tosetup;
|
|
i++) {
|
|
if (ue_context_p->ue_context.e_rab[i+ue_context_p->ue_context.setup_e_rabs].status == E_RAB_STATUS_DONE)
|
|
LOG_W(RRC,"E-RAB already configured, reconfiguring\n");
|
|
ue_context_p->ue_context.e_rab[i+ue_context_p->ue_context.setup_e_rabs].status = E_RAB_STATUS_NEW;
|
|
ue_context_p->ue_context.e_rab[i+ue_context_p->ue_context.setup_e_rabs].param = S1AP_E_RAB_SETUP_REQ (msg_p).e_rab_setup_params[i];
|
|
|
|
|
|
create_tunnel_req.eps_bearer_id[i] = S1AP_E_RAB_SETUP_REQ (msg_p).e_rab_setup_params[i].e_rab_id;
|
|
create_tunnel_req.sgw_S1u_teid[i] = S1AP_E_RAB_SETUP_REQ (msg_p).e_rab_setup_params[i].gtp_teid;
|
|
|
|
memcpy(&create_tunnel_req.sgw_addr[i],
|
|
& S1AP_E_RAB_SETUP_REQ (msg_p).e_rab_setup_params[i].sgw_addr,
|
|
sizeof(transport_layer_addr_t));
|
|
|
|
LOG_I(RRC,"E_RAB setup REQ: local index %d teid %u, eps id %d \n",
|
|
i+ue_context_p->ue_context.setup_e_rabs,
|
|
create_tunnel_req.sgw_S1u_teid[i],
|
|
create_tunnel_req.eps_bearer_id[i] );
|
|
}
|
|
ue_context_p->ue_context.nb_of_e_rabs=nb_e_rabs_tosetup;
|
|
|
|
|
|
create_tunnel_req.rnti = ue_context_p->ue_context.rnti; // warning put zero above
|
|
create_tunnel_req.num_tunnels = i;
|
|
|
|
// NN: not sure if we should create a new tunnel: need to check teid, etc.
|
|
gtpv1u_create_s1u_tunnel(
|
|
instance,
|
|
&create_tunnel_req,
|
|
&create_tunnel_resp);
|
|
|
|
rrc_eNB_process_GTPV1U_CREATE_TUNNEL_RESP(
|
|
&ctxt,
|
|
&create_tunnel_resp);
|
|
|
|
ue_context_p->ue_context.setup_e_rabs+=nb_e_rabs_tosetup;
|
|
|
|
}
|
|
|
|
/* TODO parameters yet to process ... */
|
|
{
|
|
// S1AP_INITIAL_CONTEXT_SETUP_REQ(msg_p).ue_ambr;
|
|
}
|
|
|
|
rrc_eNB_generate_dedicatedRRCConnectionReconfiguration(&ctxt, ue_context_p, 0);
|
|
|
|
return (0);
|
|
}
|
|
}
|
|
|
|
/*NN: careful about the typcast of xid (long -> uint8_t*/
|
|
int rrc_eNB_send_S1AP_E_RAB_SETUP_RESP(const protocol_ctxt_t* const ctxt_pP,
|
|
rrc_eNB_ue_context_t* const ue_context_pP,
|
|
uint8_t xid ){
|
|
|
|
MessageDef *msg_p = NULL;
|
|
int e_rab;
|
|
int e_rabs_done = 0;
|
|
int e_rabs_failed = 0;
|
|
|
|
msg_p = itti_alloc_new_message (TASK_RRC_ENB, S1AP_E_RAB_SETUP_RESP);
|
|
S1AP_E_RAB_SETUP_RESP (msg_p).eNB_ue_s1ap_id = ue_context_pP->ue_context.eNB_ue_s1ap_id;
|
|
|
|
for (e_rab = 0; e_rab < ue_context_pP->ue_context.setup_e_rabs ; e_rab++) {
|
|
|
|
/* only respond to the corresponding transaction */
|
|
//if (((xid+1)%4) == ue_context_pP->ue_context.e_rab[e_rab].xid) {
|
|
if (xid == ue_context_pP->ue_context.e_rab[e_rab].xid) {
|
|
|
|
if (ue_context_pP->ue_context.e_rab[e_rab].status == E_RAB_STATUS_DONE) {
|
|
|
|
S1AP_E_RAB_SETUP_RESP (msg_p).e_rabs[e_rabs_done].e_rab_id = ue_context_pP->ue_context.e_rab[e_rab].param.e_rab_id;
|
|
// TODO add other information from S1-U when it will be integrated
|
|
S1AP_E_RAB_SETUP_RESP (msg_p).e_rabs[e_rabs_done].gtp_teid = ue_context_pP->ue_context.enb_gtp_teid[e_rab];
|
|
S1AP_E_RAB_SETUP_RESP (msg_p).e_rabs[e_rabs_done].eNB_addr = ue_context_pP->ue_context.enb_gtp_addrs[e_rab];
|
|
//S1AP_E_RAB_SETUP_RESP (msg_p).e_rabs[e_rab].eNB_addr.length += 4;
|
|
ue_context_pP->ue_context.e_rab[e_rab].status = E_RAB_STATUS_ESTABLISHED;
|
|
|
|
LOG_I (RRC,"enb_gtp_addr (msg index %d, e_rab index %d, status %d, xid %d): nb_of_e_rabs %d, e_rab_id %d, teid: %u, addr: %d.%d.%d.%d \n ",
|
|
e_rabs_done, e_rab, ue_context_pP->ue_context.e_rab[e_rab].status, xid,
|
|
ue_context_pP->ue_context.nb_of_e_rabs,
|
|
S1AP_E_RAB_SETUP_RESP (msg_p).e_rabs[e_rabs_done].e_rab_id,
|
|
S1AP_E_RAB_SETUP_RESP (msg_p).e_rabs[e_rabs_done].gtp_teid,
|
|
S1AP_E_RAB_SETUP_RESP (msg_p).e_rabs[e_rabs_done].eNB_addr.buffer[0],
|
|
S1AP_E_RAB_SETUP_RESP (msg_p).e_rabs[e_rabs_done].eNB_addr.buffer[1],
|
|
S1AP_E_RAB_SETUP_RESP (msg_p).e_rabs[e_rabs_done].eNB_addr.buffer[2],
|
|
S1AP_E_RAB_SETUP_RESP (msg_p).e_rabs[e_rabs_done].eNB_addr.buffer[3]);
|
|
|
|
e_rabs_done++;
|
|
} else if ((ue_context_pP->ue_context.e_rab[e_rab].status == E_RAB_STATUS_NEW) ||
|
|
(ue_context_pP->ue_context.e_rab[e_rab].status == E_RAB_STATUS_ESTABLISHED)){
|
|
LOG_D (RRC,"E-RAB is NEW or already ESTABLISHED\n");
|
|
}else { /* to be improved */
|
|
ue_context_pP->ue_context.e_rab[e_rab].status = E_RAB_STATUS_FAILED;
|
|
S1AP_E_RAB_SETUP_RESP (msg_p).e_rabs_failed[e_rabs_failed].e_rab_id = ue_context_pP->ue_context.e_rab[e_rab].param.e_rab_id;
|
|
e_rabs_failed++;
|
|
// TODO add cause when it will be integrated
|
|
}
|
|
|
|
|
|
S1AP_E_RAB_SETUP_RESP (msg_p).nb_of_e_rabs = e_rabs_done;
|
|
S1AP_E_RAB_SETUP_RESP (msg_p).nb_of_e_rabs_failed = e_rabs_failed;
|
|
// NN: add conditions for e_rabs_failed
|
|
if ((e_rabs_done > 0) ){
|
|
|
|
LOG_I(RRC,"S1AP_E_RAB_SETUP_RESP: sending the message: nb_of_erabs %d, total e_rabs %d, index %d\n",
|
|
ue_context_pP->ue_context.nb_of_e_rabs, ue_context_pP->ue_context.setup_e_rabs, e_rab);
|
|
MSC_LOG_TX_MESSAGE(
|
|
MSC_RRC_ENB,
|
|
MSC_S1AP_ENB,
|
|
(const char *)&S1AP_E_RAB_SETUP_RESP (msg_p),
|
|
sizeof(s1ap_e_rab_setup_resp_t),
|
|
MSC_AS_TIME_FMT" E_RAB_SETUP_RESP UE %X eNB_ue_s1ap_id %u e_rabs:%u succ %u fail",
|
|
MSC_AS_TIME_ARGS(ctxt_pP),
|
|
ue_context_pP->ue_id_rnti,
|
|
S1AP_E_RAB_SETUP_RESP (msg_p).eNB_ue_s1ap_id,
|
|
e_rabs_done, e_rabs_failed);
|
|
|
|
|
|
itti_send_msg_to_task (TASK_S1AP, ctxt_pP->instance, msg_p);
|
|
}
|
|
|
|
} else {
|
|
/*debug info for the xid */
|
|
LOG_D(RRC,"xid does not corresponds (context e_rab index %d, status %d, xid %d/%d) \n ",
|
|
e_rab, ue_context_pP->ue_context.e_rab[e_rab].status, xid, ue_context_pP->ue_context.e_rab[e_rab].xid);
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
# endif /* defined(ENABLE_ITTI) */
|
|
#endif /* defined(ENABLE_USE_MME) */
|