diff --git a/openair2/COMMON/f1ap_messages_types.h b/openair2/COMMON/f1ap_messages_types.h index e44e1dccb4..a92f14ca50 100644 --- a/openair2/COMMON/f1ap_messages_types.h +++ b/openair2/COMMON/f1ap_messages_types.h @@ -671,4 +671,937 @@ typedef struct f1ap_reset_ack_t { //uint16_t criticality_diagnostics; // not implemented as of now } f1ap_reset_ack_t; +/* Structure of Position Information Transfer related NRPPA messages */ +/* IE structures for Positioning related messages as per TS 38.473 V16.3.1*/ + +typedef enum f1ap_subcarrier_spacing_e { + F1AP_SUBCARRIER_SPACING_15KHZ, + F1AP_SUBCARRIER_SPACING_30KHZ, + F1AP_SUBCARRIER_SPACING_60KHZ, + F1AP_SUBCARRIER_SPACING_120KHZ +} f1ap_subcarrier_spacing_pr; + +typedef struct f1ap_scs_specific_carrier_s { + uint32_t offset_to_carrier; + f1ap_subcarrier_spacing_pr subcarrier_spacing; + uint16_t carrier_bandwidth; +} f1ap_scs_specific_carrier_t; + +typedef struct f1ap_uplink_channel_bw_per_scs_list_s { + f1ap_scs_specific_carrier_t *scs_specific_carrier; + uint32_t scs_specific_carrier_list_length; +} f1ap_uplink_channel_bw_per_scs_list_t; + +typedef enum f1ap_transmission_comb_e { + F1AP_TRANSMISSION_COMB_PR_NOTHING, + F1AP_TRANSMISSION_COMB_PR_N2, + F1AP_TRANSMISSION_COMB_PR_N4 +} f1ap_transmission_comb_pr; + +typedef struct f1ap_transmission_comb_n2_s { + uint8_t comb_offset_n2; + uint8_t cyclic_shift_n2; +} f1ap_transmission_comb_n2_t, f1ap_transmission_comb_pos_n2_t; + +typedef struct f1ap_transmission_comb_n4_s { + uint8_t comb_offset_n4; + uint8_t cyclic_shift_n4; +} f1ap_transmission_comb_n4_t, f1ap_transmission_comb_pos_n4_t; + +typedef union f1ap_transmission_comb_c { + f1ap_transmission_comb_n2_t n2; + f1ap_transmission_comb_n4_t n4; +} f1ap_transmission_comb_u; + +typedef struct f1ap_transmission_comb_s { + f1ap_transmission_comb_pr present; + f1ap_transmission_comb_u choice; +} f1ap_transmission_comb_t; + +typedef enum f1ap_srs_resource_type_periodicity_e { + F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT1 = 0, + F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT2, + F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT4, + F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT5, + F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT8, + F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT10, + F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT16, + F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT20, + F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT32, + F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT40, + F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT64, + F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT80, + F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT160, + F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT320, + F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT640, + F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT1280, + F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT2560 +} f1ap_srs_resource_type_periodicity_pr; + +typedef struct f1ap_resource_type_periodic_s { + f1ap_srs_resource_type_periodicity_pr periodicity; + uint16_t offset; +} f1ap_resource_type_periodic_t, f1ap_resource_type_semi_persistent_t; + +typedef union f1ap_resource_type_c { + f1ap_resource_type_periodic_t periodic; + f1ap_resource_type_semi_persistent_t semi_persistent; + bool aperiodic; +} f1ap_resource_type_u; + +typedef enum f1ap_resource_type_e { + F1AP_RESOURCE_TYPE_PR_NOTHING, + F1AP_RESOURCE_TYPE_PR_PERIODIC, + F1AP_RESOURCE_TYPE_PR_SEMI_PERSISTENT, + F1AP_RESOURCE_TYPE_PR_APERIODIC +} f1ap_resource_type_pr; + +typedef struct f1ap_resource_type_s { + f1ap_resource_type_pr present; + f1ap_resource_type_u choice; +} f1ap_resource_type_t; + +typedef struct f1ap_transmission_comb_n8_s { + uint8_t comb_offset_n8; + uint8_t cyclic_shift_n8; +} f1ap_transmission_comb_pos_n8_t; + +typedef union f1ap_transmission_comb_pos_c { + f1ap_transmission_comb_pos_n2_t n2; + f1ap_transmission_comb_pos_n4_t n4; + f1ap_transmission_comb_pos_n8_t n8; +} f1ap_transmission_comb_pos_u; + +typedef enum f1ap_transmission_comb_pos_e { + F1AP_TRANSMISSION_COMB_POS_PR_NOTHING, + F1AP_TRANSMISSION_COMB_POS_PR_N2, + F1AP_TRANSMISSION_COMB_POS_PR_N4, + F1AP_TRANSMISSION_COMB_POS_PR_N8 +} f1ap_transmission_comb_pos_pr; + +typedef struct f1ap_transmission_comb_pos_s { + f1ap_transmission_comb_pos_pr present; + f1ap_transmission_comb_pos_u choice; +} f1ap_transmission_comb_pos_t; + +typedef enum f1ap_srs_resource_type_pos_periodicity_e { + F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT1 = 0, + F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT2, + F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT4, + F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT5, + F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT8, + F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT10, + F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT16, + F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT20, + F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT32, + F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT40, + F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT64, + F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT80, + F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT160, + F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT320, + F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT640, + F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT1280, + F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT2560, + F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT5120, + F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT10240, + F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT20480, + F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT40960, + F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT81920 +} f1ap_srs_resource_type_pos_periodicity_pr; + +typedef struct f1ap_resource_type_periodic_pos_s { + f1ap_srs_resource_type_pos_periodicity_pr periodicity; + uint16_t offset; +} f1ap_resource_type_periodic_pos_t, f1ap_resource_type_semi_persistent_pos_t; + +typedef struct f1ap_resource_type_aperiodic_pos_s { + uint8_t slot_offset; +} f1ap_resource_type_aperiodic_pos_t; + +typedef union f1ap_resource_type_pos_c { + f1ap_resource_type_periodic_pos_t periodic; + f1ap_resource_type_semi_persistent_pos_t semi_persistent; + f1ap_resource_type_aperiodic_pos_t aperiodic; +} f1ap_resource_type_pos_u; + +typedef enum f1ap_resource_type_pos_e { + F1AP_RESOURCE_TYPE_POS_PR_NOTHING, + F1AP_RESOURCE_TYPE_POS_PR_PERIODIC, + F1AP_RESOURCE_TYPE_POS_PR_SEMI_PERSISTENT, + F1AP_RESOURCE_TYPE_POS_PR_APERIODIC +} f1ap_resource_type_pos_pr; + +typedef struct f1ap_resource_type_pos_s { + f1ap_resource_type_pos_pr present; + f1ap_resource_type_pos_u choice; +} f1ap_resource_type_pos_t; + +typedef struct f1ap_srs_resource_id_list_s { + long *srs_resource_id; + uint8_t srs_resource_id_list_length; +} f1ap_srs_resource_id_list_t; + +typedef struct f1ap_resource_set_type_aperiodic_s { + uint8_t srs_resource_trigger; + long slot_offset; +} f1ap_resource_set_type_aperiodic_t; + +typedef union f1ap_resource_set_type_c { + bool periodic; + bool semi_persistent; + f1ap_resource_set_type_aperiodic_t aperiodic; +} f1ap_resource_set_type_u; + +typedef enum f1ap_resource_set_type_e { + F1AP_RESOURCE_SET_TYPE_PR_NOTHING, + F1AP_RESOURCE_SET_TYPE_PR_PERIODIC, + F1AP_RESOURCE_SET_TYPE_PR_SEMI_PERSISTENT, + F1AP_RESOURCE_SET_TYPE_PR_APERIODIC +} f1ap_resource_set_type_pr; + +typedef struct f1ap_resource_set_type_s { + f1ap_resource_set_type_pr present; + f1ap_resource_set_type_u choice; +} f1ap_resource_set_type_t; + +typedef struct f1ap_pos_srs_resource_id_list_s { + long *srs_pos_resource_id; + uint32_t pos_srs_resource_id_list_length; +} f1ap_pos_srs_resource_id_list_t; + +typedef union f1ap_pos_resource_set_type_c { + bool periodic; + bool semi_persistent; + uint8_t srs_resource; +} f1ap_pos_resource_set_type_u; + +typedef enum f1ap_pos_resource_set_type_e { + F1AP_POS_RESOURCE_SET_TYPE_PR_NOTHING, + F1AP_POS_RESOURCE_SET_TYPE_PR_PERIODIC, + F1AP_POS_RESOURCE_SET_TYPE_PR_SEMI_PERSISTENT, + F1AP_POS_RESOURCE_SET_TYPE_PR_APERIODIC +} f1ap_pos_resource_set_type_pr; + +typedef struct f1ap_pos_resource_set_type_s { + f1ap_pos_resource_set_type_pr present; + f1ap_pos_resource_set_type_u choice; +} f1ap_pos_resource_set_type_t; + +typedef enum f1ap_srs_resource_number_of_ports_e { + F1AP_SRS_NUMBER_OF_PORTS_N1, + F1AP_SRS_NUMBER_OF_PORTS_N2, + F1AP_SRS_NUMBER_OF_PORTS_N4 +} f1ap_srs_resource_number_of_ports_pr; + +typedef enum f1ap_srs_resource_number_of_symbols_e { + F1AP_SRS_NUMBER_OF_SYMBOLS_N1, + F1AP_SRS_NUMBER_OF_SYMBOLS_N2, + F1AP_SRS_NUMBER_OF_SYMBOLS_N4 +} f1ap_srs_resource_number_of_symbols_pr; + +typedef enum f1ap_srs_repetition_factor_e { + F1AP_SRS_REPETITION_FACTOR_RF1, + F1AP_SRS_REPETITION_FACTOR_RF2, + F1AP_SRS_REPETITION_FACTOR_RF4 +} f1ap_srs_repetition_factor_pr; + +typedef enum f1ap_srs_group_or_sequencehopping_e { + F1AP_GROUPORSEQUENCEHOPPING_NOTHING, + F1AP_GROUPORSEQUENCEHOPPING_GROUPHOPPING, + F1AP_GROUPORSEQUENCEHOPPING_SEQUENCEHOPPING +} f1ap_srs_group_or_sequencehopping_pr; + +typedef struct f1ap_srs_resource_s { + uint32_t srs_resource_id; + f1ap_srs_resource_number_of_ports_pr nr_of_srs_ports; + f1ap_transmission_comb_t transmission_comb; + uint8_t start_position; + f1ap_srs_resource_number_of_symbols_pr nr_of_symbols; + f1ap_srs_repetition_factor_pr repetition_factor; + uint8_t freq_domain_position; + uint16_t freq_domain_shift; + uint8_t c_srs; + uint8_t b_srs; + uint8_t b_hop; + f1ap_srs_group_or_sequencehopping_pr group_or_sequence_hopping; + f1ap_resource_type_t resource_type; + uint16_t sequence_id; +} f1ap_srs_resource_t; + +typedef enum f1ap_srs_resource_item_number_of_symbols_e { + F1AP_SRS_RESOURCE_ITEM_NUMBER_OF_SYMBOLS_N1, + F1AP_SRS_RESOURCE_ITEM_NUMBER_OF_SYMBOLS_N2, + F1AP_SRS_RESOURCE_ITEM_NUMBER_OF_SYMBOLS_N4, + F1AP_SRS_RESOURCE_ITEM_NUMBER_OF_SYMBOLS_N8, + F1AP_SRS_RESOURCE_ITEM_NUMBER_OF_SYMBOLS_N12 +} f1ap_srs_resource_item_number_of_symbols_pr; + +typedef struct f1ap_pos_srs_resource_item_s { + uint32_t srs_pos_resource_id; + f1ap_transmission_comb_pos_t transmission_comb_pos; + uint8_t start_position; + f1ap_srs_resource_item_number_of_symbols_pr nr_of_symbols; + uint16_t freq_domain_shift; + uint8_t c_srs; + f1ap_srs_group_or_sequencehopping_pr group_or_sequence_hopping; + f1ap_resource_type_pos_t resource_type_pos; + uint32_t sequence_id; +} f1ap_pos_srs_resource_item_t; + +typedef struct f1ap_srs_resource_set_s { + uint8_t srs_resource_set_id; + f1ap_srs_resource_id_list_t srs_resource_id_list; + f1ap_resource_set_type_t resource_set_type; +} f1ap_srs_resource_set_t; + +typedef struct f1ap_pos_srs_resource_set_item_s { + uint8_t pos_srs_resource_set_id; + f1ap_pos_srs_resource_id_list_t pos_srs_resource_id_list; + f1ap_pos_resource_set_type_t pos_resource_set_type; +} f1ap_pos_srs_resource_set_item_t; + +typedef struct f1ap_srs_resource_list_s { + f1ap_srs_resource_t *srs_resource; + uint32_t srs_resource_list_length; +} f1ap_srs_resource_list_t; + +typedef struct f1ap_pos_srs_resource_list_s { + f1ap_pos_srs_resource_item_t *pos_srs_resource_item; + uint32_t pos_srs_resource_list_length; +} f1ap_pos_srs_resource_list_t; + +typedef struct f1ap_srs_resource_set_list_s { + f1ap_srs_resource_set_t *srs_resource_set; + uint32_t srs_resource_set_list_length; +} f1ap_srs_resource_set_list_t; + +typedef struct f1ap_pos_srs_resource_set_list_s { + f1ap_pos_srs_resource_set_item_t *pos_srs_resource_set_item; + uint32_t pos_srs_resource_set_list_length; +} f1ap_pos_srs_resource_set_list_t; + +typedef struct f1ap_srs_config_s { + f1ap_srs_resource_list_t *srs_resource_list; + f1ap_pos_srs_resource_list_t *pos_srs_resource_list; + f1ap_srs_resource_set_list_t *srs_resource_set_list; + f1ap_pos_srs_resource_set_list_t *pos_srs_resource_set_list; +} f1ap_srs_config_t; + +typedef enum f1ap_cp_type_e { F1AP_CP_TYPE_NORMAL, F1AP_CP_TYPE_EXTENDED } f1ap_cp_type_pr; + +typedef struct f1ap_active_ul_bwp_s { + uint32_t location_and_bandwidth; + f1ap_subcarrier_spacing_pr subcarrier_spacing; + f1ap_cp_type_pr cyclic_prefix; + uint32_t tx_direct_current_location; + uint8_t shift_7_dot_5kHz; + f1ap_srs_config_t srs_config; +} f1ap_active_ul_bwp_t; + +typedef struct f1ap_srs_carrier_list_item_s { + uint32_t pointA; + f1ap_uplink_channel_bw_per_scs_list_t uplink_channel_bw_per_scs_list; + f1ap_active_ul_bwp_t active_ul_bwp; + uint16_t pci; +} f1ap_srs_carrier_list_item_t; + +typedef struct f1ap_srs_carrier_list_s { + f1ap_srs_carrier_list_item_t *srs_carrier_list_item; + uint32_t srs_carrier_list_length; +} f1ap_srs_carrier_list_t; + +// optional: IE 9.3.1.192 (TS 38.473 V16.21.0) +typedef struct f1ap_srs_configuration_s { + f1ap_srs_carrier_list_t srs_carrier_list; +} f1ap_srs_configuration_t; + +typedef union f1ap_srs_type_c { + uint8_t *srs_resource_set_id; + bool *aperiodic; +} f1ap_srs_type_u; + +typedef enum f1ap_srs_type_e { + F1AP_SRS_TYPE_PR_NOTHING, + F1AP_SRS_TYPE_PR_SEMIPERSISTENTSRS, + F1AP_SRS_TYPE_PR_APERIODICSRS +} f1ap_srs_type_pr; + +typedef struct f1ap_srs_type_s { + f1ap_srs_type_pr present; + f1ap_srs_type_u choice; +} f1ap_srs_type_t; + +typedef union f1ap_abort_transmission_c { + uint8_t srs_resource_set_id; + bool release_all; +} f1ap_abort_transmission_u; + +typedef enum f1ap_abort_transmission_e { + F1AP_ABORT_TRANSMISSION_PR_NOTHING, + F1AP_ABORT_TRANSMISSION_PR_SRSRESOURCESETID, + F1AP_ABORT_TRANSMISSION_PR_RELEASEALL +} f1ap_abort_transmission_pr; + +typedef struct f1ap_abort_transmission_s { + f1ap_abort_transmission_pr present; + f1ap_abort_transmission_u choice; +} f1ap_abort_transmission_t; + +typedef struct f1ap_trp_list_item_s { + uint32_t trp_id; +} f1ap_trp_list_item_t; + +typedef struct f1ap_trp_list_s { + f1ap_trp_list_item_t *trp_list_item; + uint32_t trp_list_length; +} f1ap_trp_list_t; + +typedef enum f1ap_trp_information_type_item_e { + F1AP_TRP_INFORMATION_TYPE_ITEM_NR_PCI, + F1AP_TRP_INFORMATION_TYPE_ITEM_NG_RAN_CGI, + F1AP_TRP_INFORMATION_TYPE_ITEM_NR_ARFCN, + F1AP_TRP_INFORMATION_TYPE_ITEM_PRS_CONFIG, + F1AP_TRP_INFORMATION_TYPE_ITEM_SSB_CONFIG, + F1AP_TRP_INFORMATION_TYPE_ITEM_SFN_INIT_TIME, + F1AP_TRP_INFORMATION_TYPE_ITEM_SPATIAL_DIRECTION_INFO, + F1AP_TRP_INFORMATION_TYPE_ITEM_GEO_COORDINATES +} f1ap_trp_information_type_item_pr; + +typedef struct f1ap_trp_information_type_list_s { + f1ap_trp_information_type_item_pr *trp_information_type_item; + uint8_t trp_information_type_list_length; +} f1ap_trp_information_type_list_t; + +typedef struct f1ap_access_point_position_s { + long latitude_sign; + long latitude; + long longitude; + long direction_of_altitude; + long altitude; + long uncertainty_semi_major; + long uncertainty_semi_minor; + long orientation_of_major_axis; + long uncertainty_altitude; + long confidence; +} f1ap_access_point_position_t; + +typedef struct f1ap_ngran_high_accuracy_access_point_position_s { + long latitude; + long longitude; + long altitude; + long uncertainty_semi_major; + long uncertainty_semi_minor; + long orientation_of_major_axis; + long horizontal_confidence; + long uncertainty_altitude; + long vertical_confidence; +} f1ap_ngran_high_accuracy_access_point_position_t; + +typedef union f1ap_trp_position_direct_accuracy_c { + f1ap_access_point_position_t trp_position; + f1ap_ngran_high_accuracy_access_point_position_t trp_HAposition; +} f1ap_trp_position_direct_accuracy_u; + +typedef enum f1ap_trp_position_direct_accuracy_e { + F1AP_TRP_POSITION_DIRECT_ACCURACY_PR_NOTHING, + F1AP_TRP_POSITION_DIRECT_ACCURACY_PR_TRPPOSITION, + F1AP_TRP_POSITION_DIRECT_ACCURACY_PR_TRPHAPOSITION +} f1ap_trp_position_direct_accuracy_pr; + +typedef struct f1ap_trp_position_direct_accuracy_s { + f1ap_trp_position_direct_accuracy_pr present; + f1ap_trp_position_direct_accuracy_u choice; +} f1ap_trp_position_direct_accuracy_t; + +typedef struct f1ap_trp_position_direct_s { + f1ap_trp_position_direct_accuracy_t accuracy; +} f1ap_trp_position_direct_t; + +typedef enum f1ap_reference_point_e { + F1AP_REFERENCE_POINT_PR_NOTHING, + F1AP_REFERENCE_POINT_PR_COORDINATEID, + F1AP_REFERENCE_POINT_PR_REFERENCEPOINTCOORDINATE, + F1AP_REFERENCE_POINT_PR_REFERENCEPOINTCOORDINATEHA +} f1ap_reference_point_pr; + +typedef union f1ap_reference_point_c { + long coordinate_id; + f1ap_access_point_position_t reference_point_coordinate; + f1ap_ngran_high_accuracy_access_point_position_t reference_point_coordinateHA; +} f1ap_reference_point_u; + +typedef struct f1ap_reference_point_s { + f1ap_reference_point_pr present; + f1ap_reference_point_u choice; +} f1ap_reference_point_t; + +typedef struct f1ap_location_uncertainty_s { + long horizontal_uncertainty; + long horizontal_confidence; + long vertical_uncertainty; + long vertical_confidence; +} f1ap_location_uncertainty_t; + +typedef struct f1ap_relative_geodetic_location_s { + long milli_arc_second_units; + long height_units; + long delta_latitude; + long delta_longitude; + long delta_height; + f1ap_location_uncertainty_t location_uncertainty; +} f1ap_relative_geodetic_location_t; + +typedef struct f1ap_relative_cartesian_location_s { + long xyz_unit; + long xvalue; + long yvalue; + long zvalue; + f1ap_location_uncertainty_t location_uncertainty; +} f1ap_relative_cartesian_location_t; + +typedef union f1ap_trp_reference_point_type_c { + f1ap_relative_geodetic_location_t trp_position_relative_geodetic; + f1ap_relative_cartesian_location_t trp_position_relative_cartesian; +} f1ap_trp_reference_point_type_u; + +typedef enum f1ap_trp_reference_point_type_e { + F1AP_TRP_REFERENCE_POINT_TYPE_PR_NOTHING, + F1AP_TRP_REFERENCE_POINT_TYPE_PR_TRPPOSITION_RELATIVE_GEODETIC, + F1AP_TRP_REFERENCE_POINT_TYPE_PR_TRPPOSITION_RELATIVE_CARTESIAN +} f1ap_trp_reference_point_type_pr; + +typedef struct f1ap_trp_reference_point_type_t { + f1ap_trp_reference_point_type_pr present; + f1ap_trp_reference_point_type_u choice; +} f1ap_trp_reference_point_type_t; + +typedef struct f1ap_trp_position_referenced_t { + f1ap_reference_point_t reference_point; + f1ap_trp_reference_point_type_t reference_point_type; +} f1ap_trp_position_referenced_t; + +typedef union f1ap_trp_position_definition_type_c { + f1ap_trp_position_direct_t direct; + f1ap_trp_position_referenced_t referenced; +} f1ap_trp_position_definition_type_u; + +typedef enum f1ap_trp_position_definition_type_e { + F1AP_TRP_POSITION_DEFINITION_TYPE_PR_NOTHING, + F1AP_TRP_POSITION_DEFINITION_TYPE_PR_DIRECT, + F1AP_TRP_POSITION_DEFINITION_TYPE_PR_REFERENCED +} f1ap_trp_position_definition_type_pr; + +typedef struct f1ap_trp_position_definition_type_s { + f1ap_trp_position_definition_type_u choice; + f1ap_trp_position_definition_type_pr present; +} f1ap_trp_position_definition_type_t; + +typedef struct f1ap_geographical_coordinates_s { + f1ap_trp_position_definition_type_t trp_position_definition_type; +} f1ap_geographical_coordinates_t; + +typedef struct f1ap_ng_ran_cgi_s { + plmn_id_t plmn; + uint64_t nr_cellid; +} f1ap_ng_ran_cgi_t; + +typedef union f1ap_trp_information_type_response_item_c { + uint16_t pci_nr; + f1ap_ng_ran_cgi_t ng_ran_cgi; + uint32_t nr_arfcn; + // f1ap_prs_configuration_t pRSConfiguration; + // f1ap_ssb_information_t sSBinformation; + // bit_string_t sFNInitialisationTime; + // f1ap_spatial_direction_information_t spatialDirectionInformation; + f1ap_geographical_coordinates_t geographical_coordinates; +} f1ap_trp_information_type_response_item_u; + +typedef enum f1ap_trp_information_type_response_item_e { + F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_NOTHING, + F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_PCI_NR, + F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_NG_RAN_CGI, + F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_NRARFCN, + F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_PRSCONFIGURATION, + F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_SSBINFORMATION, + F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_SFNINITIALISATIONTIME, + F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_SPATIALDIRECTIONINFORMATION, + F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_GEOGRAPHICALCOORDINATES +} f1ap_trp_information_type_response_item_pr; + +typedef struct f1ap_trp_information_type_response_item_s { + f1ap_trp_information_type_response_item_pr present; + f1ap_trp_information_type_response_item_u choice; +} f1ap_trp_information_type_response_item_t; + +typedef struct f1ap_trp_information_type_response_list_s { + f1ap_trp_information_type_response_item_t *trp_information_type_response_item; + uint8_t trp_information_type_response_item_length; +} f1ap_trp_information_type_response_list_t; + +typedef struct f1ap_trp_information_s { + uint32_t trp_id; + f1ap_trp_information_type_response_list_t trp_information_type_response_list; +} f1ap_trp_information_t; + +// IE 9.3.1.176 (TS 38.473 V16.21.0) +typedef struct f1ap_trp_information_list_s { + f1ap_trp_information_t *trp_information_item; + uint32_t trp_information_item_length; +} f1ap_trp_information_list_t; + +typedef struct f1ap_trp_measurement_request_item_s { + uint32_t tRPID; +} f1ap_trp_measurement_request_item_t; + +typedef struct f1ap_trp_measurement_request_list_s { + f1ap_trp_measurement_request_item_t *trp_measurement_request_item; + uint32_t trp_measurement_request_list_length; +} f1ap_trp_measurement_request_list_t; + +typedef enum f1ap_PosMeasurementType_e { + F1AP_POSMEASUREMENTTYPE_GNB_RX_TX = 0, + F1AP_POSMEASUREMENTTYPE_UL_SRS_RSRP = 1, + F1AP_POSMEASUREMENTTYPE_UL_AOA = 2, + F1AP_POSMEASUREMENTTYPE_UL_RTOA = 3 +} f1ap_PosMeasurementType_e; + +typedef struct f1ap_pos_measurement_quantities_item_s { + f1ap_PosMeasurementType_e pos_measurement_type; +} f1ap_pos_measurement_quantities_item_t; + +typedef struct f1ap_pos_measurement_quantities_s { + f1ap_pos_measurement_quantities_item_t *pos_measurement_quantities_item; + uint32_t pos_measurement_quantities_length; +} f1ap_pos_measurement_quantities_t; + +typedef enum f1ap_pos_measurement_periodicity_e { + F1AP_POSMEASUREMENTPERIODICITY_MS120 = 0, + F1AP_POSMEASUREMENTPERIODICITY_MS240 = 1, + F1AP_POSMEASUREMENTPERIODICITY_MS480 = 2, + F1AP_POSMEASUREMENTPERIODICITY_MS640 = 3, + F1AP_POSMEASUREMENTPERIODICITY_MS1024 = 4, + F1AP_POSMEASUREMENTPERIODICITY_MS2048 = 5, + F1AP_POSMEASUREMENTPERIODICITY_MS5120 = 6, + F1AP_POSMEASUREMENTPERIODICITY_MS10240 = 7, + F1AP_POSMEASUREMENTPERIODICITY_MIN1 = 8, + F1AP_POSMEASUREMENTPERIODICITY_MIN6 = 9, + F1AP_POSMEASUREMENTPERIODICITY_MIN12 = 10, + F1AP_POSMEASUREMENTPERIODICITY_MIN30 = 11, + F1AP_POSMEASUREMENTPERIODICITY_MIN60 = 12 +} f1ap_pos_measurement_periodicity_pr; + +typedef enum f1ap_pos_report_characteristics_e { + F1AP_POSREPORTCHARACTERISTICS_ONDEMAND = 0, + F1AP_POSREPORTCHARACTERISTICS_PERIODIC = 1 +} f1ap_pos_report_characteristics_pr; + +typedef struct f1ap_lcs_to_gcs_translationaoa_c { + uint16_t alpha; + uint16_t beta; + uint16_t gamma; +} f1ap_lcs_to_gcs_translationaoa_t; + +typedef struct f1ap_ul_aoa_s { + uint16_t azimuth_aoa; + uint16_t *zenith_aoa; + f1ap_lcs_to_gcs_translationaoa_t *lcs_to_gcs_translation_aoa; +} f1ap_ul_aoa_t; + +typedef union f1ap_relative_path_delay_c { + uint32_t k0; + uint32_t k1; + uint32_t k2; + uint32_t k3; + uint32_t k4; + uint32_t k5; +} f1ap_relative_path_delay_u, f1ap_ul_rtoa_measurement_item_u, f1ap_gnb_rx_tx_time_diff_meas_u; + +typedef enum f1ap_gnb_rx_tx_time_diff_meas_e { + F1AP_GNBRXTXTIMEDIFFMEAS_PR_NOTHING, + F1AP_GNBRXTXTIMEDIFFMEAS_PR_K0, + F1AP_GNBRXTXTIMEDIFFMEAS_PR_K1, + F1AP_GNBRXTXTIMEDIFFMEAS_PR_K2, + F1AP_GNBRXTXTIMEDIFFMEAS_PR_K3, + F1AP_GNBRXTXTIMEDIFFMEAS_PR_K4, + F1AP_GNBRXTXTIMEDIFFMEAS_PR_K5 +} f1ap_gnb_rx_tx_time_diff_meas_pr; + +typedef struct f1ap_gnb_rx_tx_time_diff_meas_s { + f1ap_gnb_rx_tx_time_diff_meas_pr present; + f1ap_gnb_rx_tx_time_diff_meas_u choice; +} f1ap_gnb_rx_tx_time_diff_meas_t; + +typedef enum f1ap_ul_rtoa_measurement_item_e { + F1AP_ULRTOAMEAS_PR_NOTHING, + F1AP_ULRTOAMEAS_PR_K0, + F1AP_ULRTOAMEAS_PR_K1, + F1AP_ULRTOAMEAS_PR_K2, + F1AP_ULRTOAMEAS_PR_K3, + F1AP_ULRTOAMEAS_PR_K4, + F1AP_ULRTOAMEAS_PR_K5 +} f1ap_ul_rtoa_measurement_item_pr; + +typedef struct f1ap_ul_rtoa_measurement_item_s { + f1ap_ul_rtoa_measurement_item_pr present; + f1ap_ul_rtoa_measurement_item_u choice; +} f1ap_ul_rtoa_measurement_item_t; + +typedef union f1ap_ul_rtoa_measurement_s { + f1ap_ul_rtoa_measurement_item_t ul_rtoa_measurement_item; +} f1ap_ul_rtoa_measurement_t; + +typedef struct f1ap_gnb_rx_tx_time_diff_s { + f1ap_gnb_rx_tx_time_diff_meas_t rx_tx_time_diff; +} f1ap_gnb_rx_tx_time_diff_t; + +typedef union f1ap_measured_results_value_c { + f1ap_ul_aoa_t ul_angle_of_arrival; + uint8_t ul_srs_rsrp; + f1ap_ul_rtoa_measurement_t ul_rtoa; + f1ap_gnb_rx_tx_time_diff_t gnb_rx_tx_time_diff; +} f1ap_measured_results_value_u; + +typedef enum f1ap_measured_results_value_e { + F1AP_MEASURED_RESULTS_VALUE_PR_NOTHING, + F1AP_MEASURED_RESULTS_VALUE_PR_UL_ANGLEOFARRIVAL, + F1AP_MEASURED_RESULTS_VALUE_PR_UL_SRS_RSRP, + F1AP_MEASURED_RESULTS_VALUE_PR_UL_RTOA, + F1AP_MEASURED_RESULTS_VALUE_PR_GNB_RXTXTIMEDIFF +} f1ap_measured_results_value_pr; + +typedef struct f1ap_measured_results_value_s { + f1ap_measured_results_value_pr present; + f1ap_measured_results_value_u choice; +} f1ap_measured_results_value_t; + +typedef union f1ap_time_stamp_slot_index_c { + uint8_t scs_15; + uint8_t scs_30; + uint8_t scs_60; + uint8_t scs_120; +} f1ap_time_stamp_slot_index_u; + +typedef enum f1ap_time_stamp_slot_index_e { + F1AP_TIME_STAMP_SLOT_INDEX_PR_NOTHING, + F1AP_TIME_STAMP_SLOT_INDEX_PR_SCS_15, + F1AP_TIME_STAMP_SLOT_INDEX_PR_SCS_30, + F1AP_TIME_STAMP_SLOT_INDEX_PR_SCS_60, + F1AP_TIME_STAMP_SLOT_INDEX_PR_SCS_120 +} f1ap_time_stamp_slot_index_pr; + +typedef struct f1ap_time_stamp_slot_index_s { + f1ap_time_stamp_slot_index_pr present; + f1ap_time_stamp_slot_index_u choice; +} f1ap_time_stamp_slot_index_t; + +typedef struct f1ap_time_stamp_s { + uint16_t system_frame_number; + f1ap_time_stamp_slot_index_t slot_index; +} f1ap_time_stamp_t; + +typedef struct f1ap_pos_measurement_result_item_s { + f1ap_measured_results_value_t measured_results_value; + f1ap_time_stamp_t time_stamp; +} f1ap_pos_measurement_result_item_t; + +typedef struct f1ap_pos_measurement_result_s { + f1ap_pos_measurement_result_item_t *pos_measurement_result_item; + uint32_t pos_measurement_result_item_length; +} f1ap_pos_measurement_result_t; + +typedef struct f1ap_pos_measurement_result_list_item_s { + f1ap_pos_measurement_result_t pos_measurement_result; + uint32_t trp_id; +} f1ap_pos_measurement_result_list_item_t; + +typedef struct f1ap_pos_measurement_result_list_s { + f1ap_pos_measurement_result_list_item_t *pos_measurement_result_list_item; + uint32_t pos_measurement_result_list_length; +} f1ap_pos_measurement_result_list_t; + +typedef struct f1ap_positioning_information_req_s { + // IE 9.3.1.4 (mandatory) + uint32_t gNB_CU_ue_id; + // IE 9.3.1.5 (mandatory) + uint32_t gNB_DU_ue_id; +} f1ap_positioning_information_req_t; + +typedef struct f1ap_positioning_information_resp_s { + // IE 9.3.1.4 (mandatory) + uint32_t gNB_CU_ue_id; + // IE 9.3.1.5 (mandatory) + uint32_t gNB_DU_ue_id; + // IE 9.3.1.192 (optional) + f1ap_srs_configuration_t *srs_configuration; +} f1ap_positioning_information_resp_t; + +typedef struct f1ap_positioning_information_failure_s { + // IE 9.3.1.4 (mandatory) + uint32_t gNB_CU_ue_id; + // IE 9.3.1.5 (mandatory) + uint32_t gNB_DU_ue_id; + // IE 9.3.1.2 (mandatory) + f1ap_Cause_t cause; + // IE 9.3.1.2 (mandatory) + long cause_value; +} f1ap_positioning_information_failure_t; + +typedef struct f1ap_positioning_activation_req_s { + // IE 9.3.1.4 (mandatory) + uint32_t gNB_CU_ue_id; + // IE 9.3.1.5 (mandatory) + uint32_t gNB_DU_ue_id; + // (mandatory) + f1ap_srs_type_t srs_type; +} f1ap_positioning_activation_req_t; + +typedef struct f1ap_positioning_activation_resp_s { + // IE 9.3.1.4 (mandatory) + uint32_t gNB_CU_ue_id; + // IE 9.3.1.5 (mandatory) + uint32_t gNB_DU_ue_id; +} f1ap_positioning_activation_resp_t; + +typedef struct f1ap_positioning_activation_failure_s { + // IE 9.3.1.4 (mandatory) + uint32_t gNB_CU_ue_id; + // IE 9.3.1.5 (mandatory) + uint32_t gNB_DU_ue_id; + // IE 9.3.1.2 (mandatory) + f1ap_Cause_t cause; + // IE 9.3.1.2 (mandatory) + long cause_value; +} f1ap_positioning_activation_failure_t; + +typedef struct f1ap_positioning_deactivation_s { + // IE 9.3.1.4 (mandatory) + uint32_t gNB_CU_ue_id; + // IE 9.3.1.5 (mandatory) + uint32_t gNB_DU_ue_id; + // (mandatory) + f1ap_abort_transmission_t abort_transmission; +} f1ap_positioning_deactivation_t; + +typedef struct f1ap_positioning_information_update_s { + // IE 9.3.1.4 (mandatory) + uint32_t gNB_CU_ue_id; + // IE 9.3.1.5 (mandatory) + uint32_t gNB_DU_ue_id; + // IE 9.3.1.192 (optional) + f1ap_srs_configuration_t *srs_configuration; +} f1ap_positioning_information_update_t; + +typedef struct f1ap_trp_information_req_s { + // IE 9.3.1.23 (mandatory) + uint8_t transaction_id; + bool has_trp_list; + // mandatory + f1ap_trp_list_t trp_list; + // mandatory + f1ap_trp_information_type_list_t trp_information_type_list; +} f1ap_trp_information_req_t; + +typedef struct f1ap_trp_information_resp_s { + // IE 9.3.1.23 (mandatory) + uint8_t transaction_id; + // mandatory + f1ap_trp_information_list_t trp_information_list; +} f1ap_trp_information_resp_t; + +typedef struct f1ap_trp_information_failure_s { + // IE 9.3.1.23 (mandatory) + uint8_t transaction_id; + // IE 9.3.1.2 (mandatory) + f1ap_Cause_t cause; + // IE 9.3.1.2 (mandatory) + long cause_value; +} f1ap_trp_information_failure_t; + +typedef struct f1ap_measurement_req_s { + // IE 9.3.1.23 (mandatory) + uint8_t transaction_id; + // (mandatory) + uint16_t lmf_measurement_id; + // (mandatory) + uint16_t ran_measurement_id; + // (mandatory) + f1ap_trp_measurement_request_list_t trp_measurement_request_list; + // (mandatory) ondemand = 0, periodic = 1 + f1ap_pos_report_characteristics_pr pos_report_characteristics; + // if report characteristics periodic + f1ap_pos_measurement_periodicity_pr measurement_periodicity; + // (mandatory) + f1ap_pos_measurement_quantities_t pos_measurement_quantities; + // IE 9.3.1.192 (optional) + f1ap_srs_configuration_t *srs_configuration; +} f1ap_positioning_measurement_req_t; + +typedef struct f1ap_positioning_measurement_resp_s { + // IE 9.3.1.23 (mandatory) + uint8_t transaction_id; + // (mandatory) + uint16_t lmf_measurement_id; + // (mandatory) + uint16_t ran_measurement_id; + // (mandatory) + f1ap_pos_measurement_result_list_t *pos_measurement_result_list; +} f1ap_positioning_measurement_resp_t; + +typedef struct f1ap_positioning_measurement_failure_s { + // IE 9.3.1.23 (mandatory) + uint8_t transaction_id; + // (mandatory) + uint16_t lmf_measurement_id; + // (mandatory) + uint16_t ran_measurement_id; + // IE 9.3.1.2 (mandatory) + f1ap_Cause_t cause; + // IE 9.3.1.2 (mandatory) + long cause_value; +} f1ap_positioning_measurement_failure_t; + +typedef struct f1ap_positioning_measurement_report_s { + // IE 9.3.1.23 (mandatory) + uint8_t transaction_id; + // (mandatory) + uint16_t lmf_measurement_id; + // (mandatory) + uint16_t ran_measurement_id; + // (mandatory) + f1ap_pos_measurement_result_list_t *pos_measurement_result_list; +} f1ap_positioning_measurement_report_t; + +typedef struct f1ap_positioning_measurement_abort_s { + // IE 9.3.1.23 (mandatory) + uint8_t transaction_id; + // (mandatory) + uint16_t lmf_measurement_id; + // (mandatory) + uint16_t ran_measurement_id; +} f1ap_positioning_measurement_abort_t; + +typedef struct f1ap_positioning_measurement_failure_indication_s { + // IE 9.3.1.23 (mandatory) + uint8_t transaction_id; + // (mandatory) + uint16_t lmf_measurement_id; + // (mandatory) + uint16_t ran_measurement_id; + // IE 9.3.1.2 (mandatory) + f1ap_Cause_t cause; + // IE 9.3.1.2 (mandatory) + long cause_value; +} f1ap_positioning_measurement_failure_indication_t; + +typedef struct f1ap_positioning_measurement_update_s { + // IE 9.3.1.23 (mandatory) + uint8_t transaction_id; + // (mandatory) + uint16_t lmf_measurement_id; + // (mandatory) + uint16_t ran_measurement_id; + // IE 9.3.1.192 (optional) + f1ap_srs_configuration_t *srs_configuration; +} f1ap_positioning_measurement_update_t; + #endif /* F1AP_MESSAGES_TYPES_H_ */ diff --git a/openair2/F1AP/MESSAGES/ASN1/R16.21.0/f1ap-16.21.0.asn b/openair2/F1AP/MESSAGES/ASN1/R16.21.0/f1ap-16.21.0.asn new file mode 100644 index 0000000000..59b01b918b --- /dev/null +++ b/openair2/F1AP/MESSAGES/ASN1/R16.21.0/f1ap-16.21.0.asn @@ -0,0 +1,11048 @@ +-- ASN1START +-- ************************************************************** +-- +-- Elementary Procedure definitions +-- +-- ************************************************************** + +F1AP-PDU-Descriptions { +itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) +ngran-access (22) modules (3) f1ap (3) version1 (1) f1ap-PDU-Descriptions (0)} + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +-- ************************************************************** +-- +-- IE parameter types from other modules. +-- +-- ************************************************************** + +IMPORTS + Criticality, + ProcedureCode + +FROM F1AP-CommonDataTypes + Reset, + ResetAcknowledge, + F1SetupRequest, + F1SetupResponse, + F1SetupFailure, + GNBDUConfigurationUpdate, + GNBDUConfigurationUpdateAcknowledge, + GNBDUConfigurationUpdateFailure, + GNBCUConfigurationUpdate, + GNBCUConfigurationUpdateAcknowledge, + GNBCUConfigurationUpdateFailure, + UEContextSetupRequest, + UEContextSetupResponse, + UEContextSetupFailure, + UEContextReleaseCommand, + UEContextReleaseComplete, + UEContextModificationRequest, + UEContextModificationResponse, + UEContextModificationFailure, + UEContextModificationRequired, + UEContextModificationConfirm, + ErrorIndication, + UEContextReleaseRequest, + DLRRCMessageTransfer, + ULRRCMessageTransfer, + GNBDUResourceCoordinationRequest, + GNBDUResourceCoordinationResponse, + PrivateMessage, + UEInactivityNotification, + InitialULRRCMessageTransfer, + SystemInformationDeliveryCommand, + Paging, + Notify, + WriteReplaceWarningRequest, + WriteReplaceWarningResponse, + PWSCancelRequest, + PWSCancelResponse, + PWSRestartIndication, + PWSFailureIndication, + GNBDUStatusIndication, + RRCDeliveryReport, + UEContextModificationRefuse, + F1RemovalRequest, + F1RemovalResponse, + F1RemovalFailure, + NetworkAccessRateReduction, + TraceStart, + DeactivateTrace, + DUCURadioInformationTransfer, + CUDURadioInformationTransfer, + BAPMappingConfiguration, + BAPMappingConfigurationAcknowledge, + BAPMappingConfigurationFailure, + GNBDUResourceConfiguration, + GNBDUResourceConfigurationAcknowledge, + GNBDUResourceConfigurationFailure, + IABTNLAddressRequest, + IABTNLAddressResponse, + IABTNLAddressFailure, + IABUPConfigurationUpdateRequest, + IABUPConfigurationUpdateResponse, + IABUPConfigurationUpdateFailure, + ResourceStatusRequest, + ResourceStatusResponse, + ResourceStatusFailure, + ResourceStatusUpdate, + AccessAndMobilityIndication, + ReferenceTimeInformationReportingControl, + ReferenceTimeInformationReport, + AccessSuccess, + CellTrafficTrace, + PositioningMeasurementRequest, + PositioningMeasurementResponse, + PositioningMeasurementFailure, + PositioningAssistanceInformationControl, + PositioningAssistanceInformationFeedback, + PositioningMeasurementReport, + PositioningMeasurementAbort, + PositioningMeasurementFailureIndication, + PositioningMeasurementUpdate, + TRPInformationRequest, + TRPInformationResponse, + TRPInformationFailure, + PositioningInformationRequest, + PositioningInformationResponse, + PositioningInformationFailure, + PositioningActivationRequest, + PositioningActivationResponse, + PositioningActivationFailure, + PositioningDeactivation, + PositioningInformationUpdate, + E-CIDMeasurementInitiationRequest, + E-CIDMeasurementInitiationResponse, + E-CIDMeasurementInitiationFailure, + E-CIDMeasurementFailureIndication, + E-CIDMeasurementReport, + E-CIDMeasurementTerminationCommand, + PosSystemInformationDeliveryCommand + + + +FROM F1AP-PDU-Contents + id-Reset, + id-F1Setup, + id-gNBDUConfigurationUpdate, + id-gNBCUConfigurationUpdate, + id-UEContextSetup, + id-UEContextRelease, + id-UEContextModification, + id-UEContextModificationRequired, + id-ErrorIndication, + id-UEContextReleaseRequest, + id-DLRRCMessageTransfer, + id-ULRRCMessageTransfer, + id-GNBDUResourceCoordination, + id-privateMessage, + id-UEInactivityNotification, + id-InitialULRRCMessageTransfer, + id-SystemInformationDeliveryCommand, + id-Paging, + id-Notify, + id-WriteReplaceWarning, + id-PWSCancel, + id-PWSRestartIndication, + id-PWSFailureIndication, + id-GNBDUStatusIndication, + id-RRCDeliveryReport, + id-F1Removal, + id-NetworkAccessRateReduction, + id-TraceStart, + id-DeactivateTrace, + id-DUCURadioInformationTransfer, + id-CUDURadioInformationTransfer, + id-BAPMappingConfiguration, + id-GNBDUResourceConfiguration, + id-IABTNLAddressAllocation, + id-IABUPConfigurationUpdate, + id-resourceStatusReportingInitiation, + id-resourceStatusReporting, + id-accessAndMobilityIndication, + id-ReferenceTimeInformationReportingControl, + id-ReferenceTimeInformationReport, + id-accessSuccess, + id-cellTrafficTrace, + id-PositioningMeasurementExchange, + id-PositioningAssistanceInformationControl, + id-PositioningAssistanceInformationFeedback, + id-PositioningMeasurementReport, + id-PositioningMeasurementAbort, + id-PositioningMeasurementFailureIndication, + id-PositioningMeasurementUpdate, + id-TRPInformationExchange, + id-PositioningInformationExchange, + id-PositioningActivation, + id-PositioningDeactivation, + id-PositioningInformationUpdate, + id-E-CIDMeasurementInitiation, + id-E-CIDMeasurementFailureIndication, + id-E-CIDMeasurementReport, + id-E-CIDMeasurementTermination, + id-PosSystemInformationDeliveryCommand + + +FROM F1AP-Constants + + ProtocolIE-SingleContainer{}, + F1AP-PROTOCOL-IES + +FROM F1AP-Containers; + + +-- ************************************************************** +-- +-- Interface Elementary Procedure Class +-- +-- ************************************************************** + +F1AP-ELEMENTARY-PROCEDURE ::= CLASS { + &InitiatingMessage , + &SuccessfulOutcome OPTIONAL, + &UnsuccessfulOutcome OPTIONAL, + &procedureCode ProcedureCode UNIQUE, + &criticality Criticality DEFAULT ignore +} +WITH SYNTAX { + INITIATING MESSAGE &InitiatingMessage + [SUCCESSFUL OUTCOME &SuccessfulOutcome] + [UNSUCCESSFUL OUTCOME &UnsuccessfulOutcome] + PROCEDURE CODE &procedureCode + [CRITICALITY &criticality] +} + +-- ************************************************************** +-- +-- Interface PDU Definition +-- +-- ************************************************************** + +F1AP-PDU ::= CHOICE { + initiatingMessage InitiatingMessage, + successfulOutcome SuccessfulOutcome, + unsuccessfulOutcome UnsuccessfulOutcome, + choice-extension ProtocolIE-SingleContainer { { F1AP-PDU-ExtIEs} } +} + +F1AP-PDU-ExtIEs F1AP-PROTOCOL-IES ::= { -- this extension is not used + ... +} + +InitiatingMessage ::= SEQUENCE { + procedureCode F1AP-ELEMENTARY-PROCEDURE.&procedureCode ({F1AP-ELEMENTARY-PROCEDURES}), + criticality F1AP-ELEMENTARY-PROCEDURE.&criticality ({F1AP-ELEMENTARY-PROCEDURES}{@procedureCode}), + value F1AP-ELEMENTARY-PROCEDURE.&InitiatingMessage ({F1AP-ELEMENTARY-PROCEDURES}{@procedureCode}) +} + +SuccessfulOutcome ::= SEQUENCE { + procedureCode F1AP-ELEMENTARY-PROCEDURE.&procedureCode ({F1AP-ELEMENTARY-PROCEDURES}), + criticality F1AP-ELEMENTARY-PROCEDURE.&criticality ({F1AP-ELEMENTARY-PROCEDURES}{@procedureCode}), + value F1AP-ELEMENTARY-PROCEDURE.&SuccessfulOutcome ({F1AP-ELEMENTARY-PROCEDURES}{@procedureCode}) +} + +UnsuccessfulOutcome ::= SEQUENCE { + procedureCode F1AP-ELEMENTARY-PROCEDURE.&procedureCode ({F1AP-ELEMENTARY-PROCEDURES}), + criticality F1AP-ELEMENTARY-PROCEDURE.&criticality ({F1AP-ELEMENTARY-PROCEDURES}{@procedureCode}), + value F1AP-ELEMENTARY-PROCEDURE.&UnsuccessfulOutcome ({F1AP-ELEMENTARY-PROCEDURES}{@procedureCode}) +} + +-- ************************************************************** +-- +-- Interface Elementary Procedure List +-- +-- ************************************************************** + +F1AP-ELEMENTARY-PROCEDURES F1AP-ELEMENTARY-PROCEDURE ::= { + F1AP-ELEMENTARY-PROCEDURES-CLASS-1 | + F1AP-ELEMENTARY-PROCEDURES-CLASS-2, + ... +} + + +F1AP-ELEMENTARY-PROCEDURES-CLASS-1 F1AP-ELEMENTARY-PROCEDURE ::= { + reset | + f1Setup | + gNBDUConfigurationUpdate | + gNBCUConfigurationUpdate | + uEContextSetup | + uEContextRelease | + uEContextModification | + uEContextModificationRequired | + writeReplaceWarning | + pWSCancel | + gNBDUResourceCoordination | + f1Removal | + bAPMappingConfiguration | + gNBDUResourceConfiguration | + iABTNLAddressAllocation | + iABUPConfigurationUpdate | + resourceStatusReportingInitiation | + positioningMeasurementExchange | + tRPInformationExchange | + positioningInformationExchange | + positioningActivation | + e-CIDMeasurementInitiation, + ... +} + +F1AP-ELEMENTARY-PROCEDURES-CLASS-2 F1AP-ELEMENTARY-PROCEDURE ::= { + errorIndication | + uEContextReleaseRequest | + dLRRCMessageTransfer | + uLRRCMessageTransfer | + uEInactivityNotification | + privateMessage | + initialULRRCMessageTransfer | + systemInformationDelivery | + paging | + notify | + pWSRestartIndication | + pWSFailureIndication | + gNBDUStatusIndication | + rRCDeliveryReport | + networkAccessRateReduction | + traceStart | + deactivateTrace | + dUCURadioInformationTransfer | + cUDURadioInformationTransfer | + resourceStatusReporting | + accessAndMobilityIndication | + referenceTimeInformationReportingControl| + referenceTimeInformationReport | + accessSuccess | + cellTrafficTrace | + positioningAssistanceInformationControl | + positioningAssistanceInformationFeedback | + positioningMeasurementReport | + positioningMeasurementAbort | + positioningMeasurementFailureIndication | + positioningMeasurementUpdate | + positioningDeactivation | + e-CIDMeasurementFailureIndication | + e-CIDMeasurementReport | + e-CIDMeasurementTermination | + positioningInformationUpdate | + posSystemInformationDelivery , + ... +} +-- ************************************************************** +-- +-- Interface Elementary Procedures +-- +-- ************************************************************** + +reset F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE Reset + SUCCESSFUL OUTCOME ResetAcknowledge + PROCEDURE CODE id-Reset + CRITICALITY reject +} + +f1Setup F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE F1SetupRequest + SUCCESSFUL OUTCOME F1SetupResponse + UNSUCCESSFUL OUTCOME F1SetupFailure + PROCEDURE CODE id-F1Setup + CRITICALITY reject +} + +gNBDUConfigurationUpdate F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE GNBDUConfigurationUpdate + SUCCESSFUL OUTCOME GNBDUConfigurationUpdateAcknowledge + UNSUCCESSFUL OUTCOME GNBDUConfigurationUpdateFailure + PROCEDURE CODE id-gNBDUConfigurationUpdate + CRITICALITY reject +} + +gNBCUConfigurationUpdate F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE GNBCUConfigurationUpdate + SUCCESSFUL OUTCOME GNBCUConfigurationUpdateAcknowledge + UNSUCCESSFUL OUTCOME GNBCUConfigurationUpdateFailure + PROCEDURE CODE id-gNBCUConfigurationUpdate + CRITICALITY reject +} + +uEContextSetup F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE UEContextSetupRequest + SUCCESSFUL OUTCOME UEContextSetupResponse + UNSUCCESSFUL OUTCOME UEContextSetupFailure + PROCEDURE CODE id-UEContextSetup + CRITICALITY reject +} + +uEContextRelease F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE UEContextReleaseCommand + SUCCESSFUL OUTCOME UEContextReleaseComplete + PROCEDURE CODE id-UEContextRelease + CRITICALITY reject +} + +uEContextModification F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE UEContextModificationRequest + SUCCESSFUL OUTCOME UEContextModificationResponse + UNSUCCESSFUL OUTCOME UEContextModificationFailure + PROCEDURE CODE id-UEContextModification + CRITICALITY reject +} + +uEContextModificationRequired F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE UEContextModificationRequired + SUCCESSFUL OUTCOME UEContextModificationConfirm + UNSUCCESSFUL OUTCOME UEContextModificationRefuse + PROCEDURE CODE id-UEContextModificationRequired + CRITICALITY reject +} + +writeReplaceWarning F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE WriteReplaceWarningRequest + SUCCESSFUL OUTCOME WriteReplaceWarningResponse + PROCEDURE CODE id-WriteReplaceWarning + CRITICALITY reject +} + +pWSCancel F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE PWSCancelRequest + SUCCESSFUL OUTCOME PWSCancelResponse + PROCEDURE CODE id-PWSCancel + CRITICALITY reject +} + +errorIndication F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE ErrorIndication + PROCEDURE CODE id-ErrorIndication + CRITICALITY ignore +} + +uEContextReleaseRequest F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE UEContextReleaseRequest + PROCEDURE CODE id-UEContextReleaseRequest + CRITICALITY ignore +} + + +initialULRRCMessageTransfer F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE InitialULRRCMessageTransfer + PROCEDURE CODE id-InitialULRRCMessageTransfer + CRITICALITY ignore +} + +dLRRCMessageTransfer F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE DLRRCMessageTransfer + PROCEDURE CODE id-DLRRCMessageTransfer + CRITICALITY ignore +} + +uLRRCMessageTransfer F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE ULRRCMessageTransfer + PROCEDURE CODE id-ULRRCMessageTransfer + CRITICALITY ignore +} + + +uEInactivityNotification F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE UEInactivityNotification + PROCEDURE CODE id-UEInactivityNotification + CRITICALITY ignore +} + +gNBDUResourceCoordination F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE GNBDUResourceCoordinationRequest + SUCCESSFUL OUTCOME GNBDUResourceCoordinationResponse + PROCEDURE CODE id-GNBDUResourceCoordination + CRITICALITY reject +} + +privateMessage F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE PrivateMessage + PROCEDURE CODE id-privateMessage + CRITICALITY ignore +} + +systemInformationDelivery F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE SystemInformationDeliveryCommand + PROCEDURE CODE id-SystemInformationDeliveryCommand + CRITICALITY ignore +} + + +paging F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE Paging + PROCEDURE CODE id-Paging + CRITICALITY ignore +} + +notify F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE Notify + PROCEDURE CODE id-Notify + CRITICALITY ignore +} + +networkAccessRateReduction F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE NetworkAccessRateReduction + PROCEDURE CODE id-NetworkAccessRateReduction + CRITICALITY ignore +} + + +pWSRestartIndication F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE PWSRestartIndication + PROCEDURE CODE id-PWSRestartIndication + CRITICALITY ignore +} + +pWSFailureIndication F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE PWSFailureIndication + PROCEDURE CODE id-PWSFailureIndication + CRITICALITY ignore +} + +gNBDUStatusIndication F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE GNBDUStatusIndication + PROCEDURE CODE id-GNBDUStatusIndication + CRITICALITY ignore +} + + +rRCDeliveryReport F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE RRCDeliveryReport + PROCEDURE CODE id-RRCDeliveryReport + CRITICALITY ignore +} + +f1Removal F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE F1RemovalRequest + SUCCESSFUL OUTCOME F1RemovalResponse + UNSUCCESSFUL OUTCOME F1RemovalFailure + PROCEDURE CODE id-F1Removal + CRITICALITY reject +} + +traceStart F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE TraceStart + PROCEDURE CODE id-TraceStart + CRITICALITY ignore +} + +deactivateTrace F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE DeactivateTrace + PROCEDURE CODE id-DeactivateTrace + CRITICALITY ignore +} + +dUCURadioInformationTransfer F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE DUCURadioInformationTransfer + PROCEDURE CODE id-DUCURadioInformationTransfer + CRITICALITY ignore +} + +cUDURadioInformationTransfer F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE CUDURadioInformationTransfer + PROCEDURE CODE id-CUDURadioInformationTransfer + CRITICALITY ignore +} + +bAPMappingConfiguration F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE BAPMappingConfiguration + SUCCESSFUL OUTCOME BAPMappingConfigurationAcknowledge + UNSUCCESSFUL OUTCOME BAPMappingConfigurationFailure + PROCEDURE CODE id-BAPMappingConfiguration + CRITICALITY reject +} + +gNBDUResourceConfiguration F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE GNBDUResourceConfiguration + SUCCESSFUL OUTCOME GNBDUResourceConfigurationAcknowledge + UNSUCCESSFUL OUTCOME GNBDUResourceConfigurationFailure + PROCEDURE CODE id-GNBDUResourceConfiguration + CRITICALITY reject +} + +iABTNLAddressAllocation F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE IABTNLAddressRequest + SUCCESSFUL OUTCOME IABTNLAddressResponse + UNSUCCESSFUL OUTCOME IABTNLAddressFailure + PROCEDURE CODE id-IABTNLAddressAllocation + CRITICALITY reject +} + +iABUPConfigurationUpdate F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE IABUPConfigurationUpdateRequest + SUCCESSFUL OUTCOME IABUPConfigurationUpdateResponse + UNSUCCESSFUL OUTCOME IABUPConfigurationUpdateFailure + PROCEDURE CODE id-IABUPConfigurationUpdate + CRITICALITY reject +} + +resourceStatusReportingInitiation F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE ResourceStatusRequest + SUCCESSFUL OUTCOME ResourceStatusResponse + UNSUCCESSFUL OUTCOME ResourceStatusFailure + PROCEDURE CODE id-resourceStatusReportingInitiation + CRITICALITY reject +} + +resourceStatusReporting F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE ResourceStatusUpdate + PROCEDURE CODE id-resourceStatusReporting + CRITICALITY ignore +} + +accessAndMobilityIndication F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE AccessAndMobilityIndication + PROCEDURE CODE id-accessAndMobilityIndication + CRITICALITY ignore +} + +referenceTimeInformationReportingControl F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE ReferenceTimeInformationReportingControl + PROCEDURE CODE id-ReferenceTimeInformationReportingControl + CRITICALITY ignore +} + +referenceTimeInformationReport F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE ReferenceTimeInformationReport + PROCEDURE CODE id-ReferenceTimeInformationReport + CRITICALITY ignore +} + +accessSuccess F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE AccessSuccess + PROCEDURE CODE id-accessSuccess + CRITICALITY ignore +} + +cellTrafficTrace F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE CellTrafficTrace + PROCEDURE CODE id-cellTrafficTrace + CRITICALITY ignore +} + +positioningAssistanceInformationControl F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE PositioningAssistanceInformationControl + PROCEDURE CODE id-PositioningAssistanceInformationControl + CRITICALITY ignore +} + +positioningAssistanceInformationFeedback F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE PositioningAssistanceInformationFeedback + PROCEDURE CODE id-PositioningAssistanceInformationFeedback + CRITICALITY ignore +} + +positioningMeasurementExchange F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE PositioningMeasurementRequest + SUCCESSFUL OUTCOME PositioningMeasurementResponse + UNSUCCESSFUL OUTCOME PositioningMeasurementFailure + PROCEDURE CODE id-PositioningMeasurementExchange + CRITICALITY reject +} + +positioningMeasurementReport F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE PositioningMeasurementReport + PROCEDURE CODE id-PositioningMeasurementReport + CRITICALITY ignore +} + +positioningMeasurementAbort F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE PositioningMeasurementAbort + PROCEDURE CODE id-PositioningMeasurementAbort + CRITICALITY ignore +} + +positioningMeasurementFailureIndication F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE PositioningMeasurementFailureIndication + PROCEDURE CODE id-PositioningMeasurementFailureIndication + CRITICALITY ignore +} + +positioningMeasurementUpdate F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE PositioningMeasurementUpdate + PROCEDURE CODE id-PositioningMeasurementUpdate + CRITICALITY ignore +} + + +tRPInformationExchange F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE TRPInformationRequest + SUCCESSFUL OUTCOME TRPInformationResponse + UNSUCCESSFUL OUTCOME TRPInformationFailure + PROCEDURE CODE id-TRPInformationExchange + CRITICALITY reject +} + +positioningInformationExchange F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE PositioningInformationRequest + SUCCESSFUL OUTCOME PositioningInformationResponse + UNSUCCESSFUL OUTCOME PositioningInformationFailure + PROCEDURE CODE id-PositioningInformationExchange + CRITICALITY reject +} + +positioningActivation F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE PositioningActivationRequest + SUCCESSFUL OUTCOME PositioningActivationResponse + UNSUCCESSFUL OUTCOME PositioningActivationFailure + PROCEDURE CODE id-PositioningActivation + CRITICALITY reject +} + +positioningDeactivation F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE PositioningDeactivation + PROCEDURE CODE id-PositioningDeactivation + CRITICALITY ignore +} + +e-CIDMeasurementInitiation F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE E-CIDMeasurementInitiationRequest + SUCCESSFUL OUTCOME E-CIDMeasurementInitiationResponse + UNSUCCESSFUL OUTCOME E-CIDMeasurementInitiationFailure + PROCEDURE CODE id-E-CIDMeasurementInitiation + CRITICALITY reject +} + +e-CIDMeasurementFailureIndication F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE E-CIDMeasurementFailureIndication + PROCEDURE CODE id-E-CIDMeasurementFailureIndication + CRITICALITY ignore +} + +e-CIDMeasurementReport F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE E-CIDMeasurementReport + PROCEDURE CODE id-E-CIDMeasurementReport + CRITICALITY ignore +} + +e-CIDMeasurementTermination F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE E-CIDMeasurementTerminationCommand + PROCEDURE CODE id-E-CIDMeasurementTermination + CRITICALITY ignore +} + +positioningInformationUpdate F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE PositioningInformationUpdate + PROCEDURE CODE id-PositioningInformationUpdate + CRITICALITY ignore +} + +posSystemInformationDelivery F1AP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE PosSystemInformationDeliveryCommand + PROCEDURE CODE id-PosSystemInformationDeliveryCommand + CRITICALITY ignore +} + +END +-- ASN1STOP +-- ASN1START +-- ************************************************************** +-- +-- PDU definitions for F1AP. +-- +-- ************************************************************** + +F1AP-PDU-Contents { +itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) +ngran-access (22) modules (3) f1ap (3) version1 (1) f1ap-PDU-Contents (1) } + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +-- ************************************************************** +-- +-- IE parameter types from other modules. +-- +-- ************************************************************** + +IMPORTS + Candidate-SpCell-Item, + Cause, + Cells-Failed-to-be-Activated-List-Item, + Cells-Status-Item, + Cells-to-be-Activated-List-Item, + Cells-to-be-Deactivated-List-Item, + CellULConfigured, + CriticalityDiagnostics, + C-RNTI, + CUtoDURRCInformation, + DRB-Activity-Item, + DRBID, + DRBs-FailedToBeModified-Item, + DRBs-FailedToBeSetup-Item, + DRBs-FailedToBeSetupMod-Item, + DRB-Notify-Item, + DRBs-ModifiedConf-Item, + DRBs-Modified-Item, + DRBs-Required-ToBeModified-Item, + DRBs-Required-ToBeReleased-Item, + DRBs-Setup-Item, + DRBs-SetupMod-Item, + DRBs-ToBeModified-Item, + DRBs-ToBeReleased-Item, + DRBs-ToBeSetup-Item, + DRBs-ToBeSetupMod-Item, + DRXCycle, + DRXConfigurationIndicator, + DUtoCURRCInformation, + EUTRANQoS, + ExecuteDuplication, + FullConfiguration, + GNB-CU-UE-F1AP-ID, + GNB-DU-UE-F1AP-ID, + GNB-DU-ID, + GNB-DU-Served-Cells-Item, + GNB-DU-System-Information, + GNB-CU-Name, + GNB-DU-Name, + InactivityMonitoringRequest, + InactivityMonitoringResponse, + LowerLayerPresenceStatusChange, + NotificationControl, + NRCGI, + NRPCI, + UEContextNotRetrievable, + Potential-SpCell-Item, + RAT-FrequencyPriorityInformation, + RequestedSRSTransmissionCharacteristics, + ResourceCoordinationTransferContainer, + RRCContainer, + RRCContainer-RRCSetupComplete, + RRCReconfigurationCompleteIndicator, + SCellIndex, + SCell-ToBeRemoved-Item, + SCell-ToBeSetup-Item, + SCell-ToBeSetupMod-Item, + SCell-FailedtoSetup-Item, + SCell-FailedtoSetupMod-Item, + ServCellIndex, + Served-Cell-Information, + Served-Cells-To-Add-Item, + Served-Cells-To-Delete-Item, + Served-Cells-To-Modify-Item, + ServingCellMO, + SRBID, + SRBs-FailedToBeSetup-Item, + SRBs-FailedToBeSetupMod-Item, + SRBs-Required-ToBeReleased-Item, + SRBs-ToBeReleased-Item, + SRBs-ToBeSetup-Item, + SRBs-ToBeSetupMod-Item, + SRBs-Modified-Item, + SRBs-Setup-Item, + SRBs-SetupMod-Item, + TimeToWait, + TransactionID, + TransmissionActionIndicator, + UE-associatedLogicalF1-ConnectionItem, + DUtoCURRCContainer, + PagingCell-Item, + SItype-List, + UEIdentityIndexValue, + GNB-CU-TNL-Association-Setup-Item, + GNB-CU-TNL-Association-Failed-To-Setup-Item, + GNB-CU-TNL-Association-To-Add-Item, + GNB-CU-TNL-Association-To-Remove-Item, + GNB-CU-TNL-Association-To-Update-Item, + MaskedIMEISV, + PagingDRX, + PagingPriority, + PagingIdentity, + Cells-to-be-Barred-Item, + PWSSystemInformation, + Broadcast-To-Be-Cancelled-Item, + Cells-Broadcast-Cancelled-Item, + NR-CGI-List-For-Restart-Item, + PWS-Failed-NR-CGI-Item, + RepetitionPeriod, + NumberofBroadcastRequest, + Cells-To-Be-Broadcast-Item, + Cells-Broadcast-Completed-Item, + Cancel-all-Warning-Messages-Indicator, + EUTRA-NR-CellResourceCoordinationReq-Container, + EUTRA-NR-CellResourceCoordinationReqAck-Container, + RequestType, + PLMN-Identity, + RLCFailureIndication, + UplinkTxDirectCurrentListInformation, + SULAccessIndication, + Protected-EUTRA-Resources-Item, + GNB-DUConfigurationQuery, + BitRate, + RRC-Version, + GNBDUOverloadInformation, + RRCDeliveryStatusRequest, + NeedforGap, + RRCDeliveryStatus, + ResourceCoordinationTransferInformation, + Dedicated-SIDelivery-NeededUE-Item, + Associated-SCell-Item, + IgnoreResourceCoordinationContainer, + PagingOrigin, + UAC-Assistance-Info, + RANUEID, + GNB-DU-TNL-Association-To-Remove-Item, + NotificationInformation, + TraceActivation, + TraceID, + Neighbour-Cell-Information-Item, + SymbolAllocInSlot, + NumDLULSymbols, + AdditionalRRMPriorityIndex, + DUCURadioInformationType, + CUDURadioInformationType, + Transport-Layer-Address-Info, + BHChannels-ToBeSetup-Item, + BHChannels-Setup-Item, + BHChannels-FailedToBeSetup-Item, + BHChannels-ToBeModified-Item, + BHChannels-ToBeReleased-Item, + BHChannels-ToBeSetupMod-Item, + BHChannels-FailedToBeModified-Item, + BHChannels-FailedToBeSetupMod-Item, + BHChannels-Modified-Item, + BHChannels-SetupMod-Item, + BHChannels-Required-ToBeReleased-Item, + BAPAddress, + BAPPathID, + BAPRoutingID, + BH-Routing-Information-Added-List-Item, + BH-Routing-Information-Removed-List-Item, + Child-Nodes-List, + Child-Nodes-List-Item, + Child-Node-Cells-List, + Child-Node-Cells-List-Item, + Activated-Cells-to-be-Updated-List, + Activated-Cells-to-be-Updated-List-Item, + UL-BH-Non-UP-Traffic-Mapping, + IABTNLAddressesRequested, + IABIPv6RequestType, + IAB-TNL-Addresses-To-Remove-Item, + IABTNLAddress, + IAB-Allocated-TNL-Address-Item, + IABv4AddressesRequested, + TrafficMappingInfo, + UL-UP-TNL-Information-to-Update-List-Item, + UL-UP-TNL-Address-to-Update-List-Item, + DL-UP-TNL-Address-to-Update-List-Item, + NRV2XServicesAuthorized, + LTEV2XServicesAuthorized, + NRUESidelinkAggregateMaximumBitrate, + LTEUESidelinkAggregateMaximumBitrate, + SLDRBs-SetupMod-Item, + SLDRBs-ModifiedConf-Item, + SLDRBID, + SLDRBs-FailedToBeModified-Item, + SLDRBs-FailedToBeSetup-Item, + SLDRBs-FailedToBeSetupMod-Item, + SLDRBs-Modified-Item, + SLDRBs-Required-ToBeModified-Item, + SLDRBs-Required-ToBeReleased-Item, + SLDRBs-Setup-Item, + SLDRBs-ToBeModified-Item, + SLDRBs-ToBeReleased-Item, + SLDRBs-ToBeSetup-Item, + SLDRBs-ToBeSetupMod-Item, + GNBCUMeasurementID, + GNBDUMeasurementID, + RegistrationRequest, + ReportCharacteristics, + CellToReportList, + HardwareLoadIndicator, + CellMeasurementResultList, + ReportingPeriodicity, + TNLCapacityIndicator, + RACHReportInformationList, + RLFReportInformationList, + ReportingRequestType, + TimeReferenceInformation, + ConditionalInterDUMobilityInformation, + ConditionalIntraDUMobilityInformation, + TargetCellList, + MDTPLMNList, + PrivacyIndicator, + TransportLayerAddress, + URI-address, + NID, + PosAssistance-Information, + PosBroadcast, + PositioningBroadcastCells, + RoutingID, + PosAssistanceInformationFailureList, + PosMeasurementQuantities, + PosMeasurementResultList, + PosReportCharacteristics, + TRPInformationTypeItem, + TRPInformationItem, + LMF-MeasurementID, + RAN-MeasurementID, + SRSResourceSetID, + SpatialRelationInfo, + SRSResourceTrigger, + SRSConfiguration, + TRPList, + E-CID-MeasurementQuantities, + MeasurementPeriodicity, + E-CID-MeasurementResult, + Cell-Portion-ID, + LMF-UE-MeasurementID, + RAN-UE-MeasurementID, + RelativeTime1900, + SystemFrameNumber, + SlotNumber, + AbortTransmission, + TRP-MeasurementRequestList, + MeasurementBeamInfoRequest, + E-CID-ReportCharacteristics, + Extended-GNB-CU-Name, + Extended-GNB-DU-Name, + F1CTransferPath, + SCGIndicator, + SpatialRelationPerSRSResource, + MeasurementPeriodicityExtended, + PosMeasurementPeriodicityNR-AoA, + PosSItypeList, + DAPS-HO-Status, + UplinkTxDirectCurrentTwoCarrierListInfo + + + +FROM F1AP-IEs + + PrivateIE-Container{}, + ProtocolExtensionContainer{}, + ProtocolIE-Container{}, + ProtocolIE-ContainerPair{}, + ProtocolIE-SingleContainer{}, + F1AP-PRIVATE-IES, + F1AP-PROTOCOL-EXTENSION, + F1AP-PROTOCOL-IES, + F1AP-PROTOCOL-IES-PAIR + +FROM F1AP-Containers + + id-Candidate-SpCell-Item, + id-Candidate-SpCell-List, + id-Cause, + id-Cancel-all-Warning-Messages-Indicator, + id-Cells-Failed-to-be-Activated-List, + id-Cells-Failed-to-be-Activated-List-Item, + id-Cells-Status-Item, + id-Cells-Status-List, + id-Cells-to-be-Activated-List, + id-Cells-to-be-Activated-List-Item, + id-Cells-to-be-Deactivated-List, + id-Cells-to-be-Deactivated-List-Item, + id-ConfirmedUEID, + id-CriticalityDiagnostics, + id-C-RNTI, + id-CUtoDURRCInformation, + id-DRB-Activity-Item, + id-DRB-Activity-List, + id-DRBs-FailedToBeModified-Item, + id-DRBs-FailedToBeModified-List, + id-DRBs-FailedToBeSetup-Item, + id-DRBs-FailedToBeSetup-List, + id-DRBs-FailedToBeSetupMod-Item, + id-DRBs-FailedToBeSetupMod-List, + id-DRBs-ModifiedConf-Item, + id-DRBs-ModifiedConf-List, + id-DRBs-Modified-Item, + id-DRBs-Modified-List, + id-DRB-Notify-Item, + id-DRB-Notify-List, + id-DRBs-Required-ToBeModified-Item, + id-DRBs-Required-ToBeModified-List, + id-DRBs-Required-ToBeReleased-Item, + id-DRBs-Required-ToBeReleased-List, + id-DRBs-Setup-Item, + id-DRBs-Setup-List, + id-DRBs-SetupMod-Item, + id-DRBs-SetupMod-List, + id-DRBs-ToBeModified-Item, + id-DRBs-ToBeModified-List, + id-DRBs-ToBeReleased-Item, + id-DRBs-ToBeReleased-List, + id-DRBs-ToBeSetup-Item, + id-DRBs-ToBeSetup-List, + id-DRBs-ToBeSetupMod-Item, + id-DRBs-ToBeSetupMod-List, + id-DRXCycle, + id-DUtoCURRCInformation, + id-ExecuteDuplication, + id-FullConfiguration, + id-gNB-CU-UE-F1AP-ID, + id-gNB-DU-UE-F1AP-ID, + id-gNB-DU-ID, + id-GNB-DU-Served-Cells-Item, + id-gNB-DU-Served-Cells-List, + id-gNB-CU-Name, + id-gNB-DU-Name, + id-Extended-GNB-CU-Name, + id-Extended-GNB-DU-Name, + id-InactivityMonitoringRequest, + id-InactivityMonitoringResponse, + id-new-gNB-CU-UE-F1AP-ID, + id-new-gNB-DU-UE-F1AP-ID, + id-oldgNB-DU-UE-F1AP-ID, + id-PLMNAssistanceInfoForNetShar, + id-Potential-SpCell-Item, + id-Potential-SpCell-List, + id-RAT-FrequencyPriorityInformation, + id-RedirectedRRCmessage, + id-ResetType, + id-RequestedSRSTransmissionCharacteristics, + id-ResourceCoordinationTransferContainer, + id-RRCContainer, + id-RRCContainer-RRCSetupComplete, + id-RRCReconfigurationCompleteIndicator, + id-SCell-FailedtoSetup-List, + id-SCell-FailedtoSetup-Item, + id-SCell-FailedtoSetupMod-List, + id-SCell-FailedtoSetupMod-Item, + id-SCell-ToBeRemoved-Item, + id-SCell-ToBeRemoved-List, + id-SCell-ToBeSetup-Item, + id-SCell-ToBeSetup-List, + id-SCell-ToBeSetupMod-Item, + id-SCell-ToBeSetupMod-List, + id-SelectedPLMNID, + id-Served-Cells-To-Add-Item, + id-Served-Cells-To-Add-List, + id-Served-Cells-To-Delete-Item, + id-Served-Cells-To-Delete-List, + id-Served-Cells-To-Modify-Item, + id-Served-Cells-To-Modify-List, + id-ServCellIndex, + id-ServingCellMO, + id-SpCell-ID, + id-SpCellULConfigured, + id-SRBID, + id-SRBs-FailedToBeSetup-Item, + id-SRBs-FailedToBeSetup-List, + id-SRBs-FailedToBeSetupMod-Item, + id-SRBs-FailedToBeSetupMod-List, + id-SRBs-Required-ToBeReleased-Item, + id-SRBs-Required-ToBeReleased-List, + id-SRBs-ToBeReleased-Item, + id-SRBs-ToBeReleased-List, + id-SRBs-ToBeSetup-Item, + id-SRBs-ToBeSetup-List, + id-SRBs-ToBeSetupMod-Item, + id-SRBs-ToBeSetupMod-List, + id-SRBs-Modified-Item, + id-SRBs-Modified-List, + id-SRBs-Setup-Item, + id-SRBs-Setup-List, + id-SRBs-SetupMod-Item, + id-SRBs-SetupMod-List, + id-TimeToWait, + id-TransactionID, + id-TransmissionActionIndicator, + id-UEContextNotRetrievable, + id-UE-associatedLogicalF1-ConnectionItem, + id-UE-associatedLogicalF1-ConnectionListResAck, + id-DUtoCURRCContainer, + id-NRCGI, + id-PagingCell-Item, + id-PagingCell-List, + id-PagingDRX, + id-PagingPriority, + id-SItype-List, + id-UEIdentityIndexValue, + id-GNB-CU-TNL-Association-Setup-List, + id-GNB-CU-TNL-Association-Setup-Item, + id-GNB-CU-TNL-Association-Failed-To-Setup-List, + id-GNB-CU-TNL-Association-Failed-To-Setup-Item, + id-GNB-CU-TNL-Association-To-Add-Item, + id-GNB-CU-TNL-Association-To-Add-List, + id-GNB-CU-TNL-Association-To-Remove-Item, + id-GNB-CU-TNL-Association-To-Remove-List, + id-GNB-CU-TNL-Association-To-Update-Item, + id-GNB-CU-TNL-Association-To-Update-List, + id-MaskedIMEISV, + id-PagingIdentity, + id-Cells-to-be-Barred-List, + id-Cells-to-be-Barred-Item, + id-PWSSystemInformation, + id-RepetitionPeriod, + id-NumberofBroadcastRequest, + id-Cells-To-Be-Broadcast-List, + id-Cells-To-Be-Broadcast-Item, + id-Cells-Broadcast-Completed-List, + id-Cells-Broadcast-Completed-Item, + id-Broadcast-To-Be-Cancelled-List, + id-Broadcast-To-Be-Cancelled-Item, + id-Cells-Broadcast-Cancelled-List, + id-Cells-Broadcast-Cancelled-Item, + id-NR-CGI-List-For-Restart-List, + id-NR-CGI-List-For-Restart-Item, + id-PWS-Failed-NR-CGI-List, + id-PWS-Failed-NR-CGI-Item, + id-EUTRA-NR-CellResourceCoordinationReq-Container, + id-EUTRA-NR-CellResourceCoordinationReqAck-Container, + id-Protected-EUTRA-Resources-List, + id-RequestType, + id-ServingPLMN, + id-DRXConfigurationIndicator, + id-RLCFailureIndication, + id-UplinkTxDirectCurrentListInformation, + id-SULAccessIndication, + id-Protected-EUTRA-Resources-Item, + id-GNB-DUConfigurationQuery, + id-GNB-DU-UE-AMBR-UL, + id-GNB-CU-RRC-Version, + id-GNB-DU-RRC-Version, + id-GNBDUOverloadInformation, + id-NeedforGap, + id-RRCDeliveryStatusRequest, + id-RRCDeliveryStatus, + id-Dedicated-SIDelivery-NeededUE-List, + id-Dedicated-SIDelivery-NeededUE-Item, + id-ResourceCoordinationTransferInformation, + id-Associated-SCell-List, + id-Associated-SCell-Item, + id-IgnoreResourceCoordinationContainer, + id-UAC-Assistance-Info, + id-RANUEID, + id-PagingOrigin, + id-GNB-DU-TNL-Association-To-Remove-Item, + id-GNB-DU-TNL-Association-To-Remove-List, + id-NotificationInformation, + id-TraceActivation, + id-TraceID, + id-Neighbour-Cell-Information-List, + id-Neighbour-Cell-Information-Item, + id-SymbolAllocInSlot, + id-NumDLULSymbols, + id-AdditionalRRMPriorityIndex, + id-DUCURadioInformationType, + id-CUDURadioInformationType, + id-LowerLayerPresenceStatusChange, + id-Transport-Layer-Address-Info, + id-BHChannels-ToBeSetup-List, + id-BHChannels-ToBeSetup-Item, + id-BHChannels-Setup-List, + id-BHChannels-Setup-Item, + id-BHChannels-ToBeModified-Item, + id-BHChannels-ToBeModified-List, + id-BHChannels-ToBeReleased-Item, + id-BHChannels-ToBeReleased-List, + id-BHChannels-ToBeSetupMod-Item, + id-BHChannels-ToBeSetupMod-List, + id-BHChannels-FailedToBeSetup-Item, + id-BHChannels-FailedToBeSetup-List, + id-BHChannels-FailedToBeModified-Item, + id-BHChannels-FailedToBeModified-List, + id-BHChannels-FailedToBeSetupMod-Item, + id-BHChannels-FailedToBeSetupMod-List, + id-BHChannels-Modified-Item, + id-BHChannels-Modified-List, + id-BHChannels-SetupMod-Item, + id-BHChannels-SetupMod-List, + id-BHChannels-Required-ToBeReleased-Item, + id-BHChannels-Required-ToBeReleased-List, + id-BAPAddress, + id-ConfiguredBAPAddress, + id-BH-Routing-Information-Added-List, + id-BH-Routing-Information-Added-List-Item, + id-BH-Routing-Information-Removed-List, + id-BH-Routing-Information-Removed-List-Item, + id-UL-BH-Non-UP-Traffic-Mapping, + id-Child-Nodes-List, + id-Activated-Cells-to-be-Updated-List, + id-IABIPv6RequestType, + id-IAB-TNL-Addresses-To-Remove-List, + id-IAB-TNL-Addresses-To-Remove-Item, + id-IAB-Allocated-TNL-Address-List, + id-IAB-Allocated-TNL-Address-Item, + id-IABv4AddressesRequested, + id-TrafficMappingInformation, + id-UL-UP-TNL-Information-to-Update-List, + id-UL-UP-TNL-Information-to-Update-List-Item, + id-UL-UP-TNL-Address-to-Update-List, + id-UL-UP-TNL-Address-to-Update-List-Item, + id-DL-UP-TNL-Address-to-Update-List, + id-DL-UP-TNL-Address-to-Update-List-Item, + id-NRV2XServicesAuthorized, + id-LTEV2XServicesAuthorized, + id-NRUESidelinkAggregateMaximumBitrate, + id-LTEUESidelinkAggregateMaximumBitrate, + id-PC5LinkAMBR, + id-SLDRBs-FailedToBeModified-Item, + id-SLDRBs-FailedToBeModified-List, + id-SLDRBs-FailedToBeSetup-Item, + id-SLDRBs-FailedToBeSetup-List, + id-SLDRBs-Modified-Item, + id-SLDRBs-Modified-List, + id-SLDRBs-Required-ToBeModified-Item, + id-SLDRBs-Required-ToBeModified-List, + id-SLDRBs-Required-ToBeReleased-Item, + id-SLDRBs-Required-ToBeReleased-List, + id-SLDRBs-Setup-Item, + id-SLDRBs-Setup-List, + id-SLDRBs-ToBeModified-Item, + id-SLDRBs-ToBeModified-List, + id-SLDRBs-ToBeReleased-Item, + id-SLDRBs-ToBeReleased-List, + id-SLDRBs-ToBeSetup-Item, + id-SLDRBs-ToBeSetup-List, + id-SLDRBs-ToBeSetupMod-Item, + id-SLDRBs-ToBeSetupMod-List, + id-SLDRBs-SetupMod-List, + id-SLDRBs-FailedToBeSetupMod-List, + id-SLDRBs-SetupMod-Item, + id-SLDRBs-FailedToBeSetupMod-Item, + id-SLDRBs-ModifiedConf-List, + id-SLDRBs-ModifiedConf-Item, + id-gNBCUMeasurementID, + id-gNBDUMeasurementID, + id-RegistrationRequest, + id-ReportCharacteristics, + id-CellToReportList, + id-CellMeasurementResultList, + id-HardwareLoadIndicator, + id-ReportingPeriodicity, + id-TNLCapacityIndicator, + id-RACHReportInformationList, + id-RLFReportInformationList, + id-ReportingRequestType, + id-TimeReferenceInformation, + id-ConditionalInterDUMobilityInformation, + id-ConditionalIntraDUMobilityInformation, + id-targetCellsToCancel, + id-requestedTargetCellGlobalID, + id-TraceCollectionEntityIPAddress, + id-ManagementBasedMDTPLMNList, + id-PrivacyIndicator, + id-TraceCollectionEntityURI, + id-ServingNID, + id-PosAssistance-Information, + id-PosBroadcast, + id-PositioningBroadcastCells, + id-RoutingID, + id-PosAssistanceInformationFailureList, + id-PosMeasurementQuantities, + id-PosMeasurementResultList, + id-PosMeasurementPeriodicity, + id-PosReportCharacteristics, + id-TRPInformationTypeListTRPReq, + id-TRPInformationTypeItem, + id-TRPInformationListTRPResp, + id-TRPInformationItem, + id-LMF-MeasurementID, + id-RAN-MeasurementID, + id-SRSType, + id-ActivationTime, + id-AbortTransmission, + id-SRSConfiguration, + id-TRPList, + id-E-CID-MeasurementQuantities, + id-E-CID-MeasurementPeriodicity, + id-E-CID-MeasurementResult, + id-Cell-Portion-ID, + id-LMF-UE-MeasurementID, + id-RAN-UE-MeasurementID, + id-SFNInitialisationTime, + id-SystemFrameNumber, + id-SlotNumber, + id-TRP-MeasurementRequestList, + id-MeasurementBeamInfoRequest, + id-E-CID-ReportCharacteristics, + id-F1CTransferPath, + id-SCGIndicator, + id-SRSSpatialRelationPerSRSResource, + id-PosMeasurementPeriodicityExtended, + id-PosMeasurementPeriodicityNR-AoA, + id-PosSItypeList, + id-DAPS-HO-Status, + id-UplinkTxDirectCurrentTwoCarrierListInfo, + maxCellingNBDU, + maxnoofCandidateSpCells, + maxnoofDRBs, + maxnoofErrors, + maxnoofIndividualF1ConnectionsToReset, + maxnoofPotentialSpCells, + maxnoofSCells, + maxnoofSRBs, + maxnoofPagingCells, + maxnoofTNLAssociations, + maxCellineNB, + maxnoofUEIDs, + maxnoofBHRLCChannels, + maxnoofRoutingEntries, + maxnoofChildIABNodes, + maxnoofServedCellsIAB, + maxnoofTLAsIAB, + maxnoofULUPTNLInformationforIAB, + maxnoofUPTNLAddresses, + maxnoofSLDRBs, + maxnoofTRPInfoTypes, + maxnoofTRPs + + + +FROM F1AP-Constants; + + +-- ************************************************************** +-- +-- RESET ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- Reset +-- +-- ************************************************************** + +Reset ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {ResetIEs} }, + ... +} + +ResetIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-ResetType CRITICALITY reject TYPE ResetType PRESENCE mandatory }, + ... +} + +ResetType ::= CHOICE { + f1-Interface ResetAll, + partOfF1-Interface UE-associatedLogicalF1-ConnectionListRes, + choice-extension ProtocolIE-SingleContainer { { ResetType-ExtIEs} } +} + +ResetType-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + + +ResetAll ::= ENUMERATED { + reset-all, + ... +} + +UE-associatedLogicalF1-ConnectionListRes ::= SEQUENCE (SIZE(1.. maxnoofIndividualF1ConnectionsToReset)) OF ProtocolIE-SingleContainer { { UE-associatedLogicalF1-ConnectionItemRes } } + +UE-associatedLogicalF1-ConnectionItemRes F1AP-PROTOCOL-IES ::= { + { ID id-UE-associatedLogicalF1-ConnectionItem CRITICALITY reject TYPE UE-associatedLogicalF1-ConnectionItem PRESENCE mandatory}, + ... +} + + +-- ************************************************************** +-- +-- Reset Acknowledge +-- +-- ************************************************************** + +ResetAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {ResetAcknowledgeIEs} }, + ... +} + +ResetAcknowledgeIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-UE-associatedLogicalF1-ConnectionListResAck CRITICALITY ignore TYPE UE-associatedLogicalF1-ConnectionListResAck PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +UE-associatedLogicalF1-ConnectionListResAck ::= SEQUENCE (SIZE(1.. maxnoofIndividualF1ConnectionsToReset)) OF ProtocolIE-SingleContainer { { UE-associatedLogicalF1-ConnectionItemResAck } } + +UE-associatedLogicalF1-ConnectionItemResAck F1AP-PROTOCOL-IES ::= { + { ID id-UE-associatedLogicalF1-ConnectionItem CRITICALITY ignore TYPE UE-associatedLogicalF1-ConnectionItem PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- ERROR INDICATION ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- Error Indication +-- +-- ************************************************************** + +ErrorIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ErrorIndicationIEs}}, + ... +} + +ErrorIndicationIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory}| + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY ignore TYPE GNB-CU-UE-F1AP-ID PRESENCE optional }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY ignore TYPE GNB-DU-UE-F1AP-ID PRESENCE optional }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- F1 SETUP ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- F1 Setup Request +-- +-- ************************************************************** + +F1SetupRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {F1SetupRequestIEs} }, + ... +} + +F1SetupRequestIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-gNB-DU-ID CRITICALITY reject TYPE GNB-DU-ID PRESENCE mandatory }| + { ID id-gNB-DU-Name CRITICALITY ignore TYPE GNB-DU-Name PRESENCE optional }| + { ID id-gNB-DU-Served-Cells-List CRITICALITY reject TYPE GNB-DU-Served-Cells-List PRESENCE optional }| + { ID id-GNB-DU-RRC-Version CRITICALITY reject TYPE RRC-Version PRESENCE mandatory }| + { ID id-Transport-Layer-Address-Info CRITICALITY ignore TYPE Transport-Layer-Address-Info PRESENCE optional }| + { ID id-BAPAddress CRITICALITY ignore TYPE BAPAddress PRESENCE optional }| + { ID id-Extended-GNB-DU-Name CRITICALITY ignore TYPE Extended-GNB-DU-Name PRESENCE optional }, + ... +} + + +GNB-DU-Served-Cells-List ::= SEQUENCE (SIZE(1.. maxCellingNBDU)) OF ProtocolIE-SingleContainer { { GNB-DU-Served-Cells-ItemIEs } } + +GNB-DU-Served-Cells-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-GNB-DU-Served-Cells-Item CRITICALITY reject TYPE GNB-DU-Served-Cells-Item PRESENCE mandatory }, + ... +} + + +-- ************************************************************** +-- +-- F1 Setup Response +-- +-- ************************************************************** + +F1SetupResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {F1SetupResponseIEs} }, + ... +} + + +F1SetupResponseIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-gNB-CU-Name CRITICALITY ignore TYPE GNB-CU-Name PRESENCE optional }| + { ID id-Cells-to-be-Activated-List CRITICALITY reject TYPE Cells-to-be-Activated-List PRESENCE optional }| + { ID id-GNB-CU-RRC-Version CRITICALITY reject TYPE RRC-Version PRESENCE mandatory }| + { ID id-Transport-Layer-Address-Info CRITICALITY ignore TYPE Transport-Layer-Address-Info PRESENCE optional }| + { ID id-UL-BH-Non-UP-Traffic-Mapping CRITICALITY reject TYPE UL-BH-Non-UP-Traffic-Mapping PRESENCE optional }| + { ID id-BAPAddress CRITICALITY ignore TYPE BAPAddress PRESENCE optional }| + { ID id-Extended-GNB-CU-Name CRITICALITY ignore TYPE Extended-GNB-CU-Name PRESENCE optional }, + ... +} + + +Cells-to-be-Activated-List ::= SEQUENCE (SIZE(1.. maxCellingNBDU)) OF ProtocolIE-SingleContainer { { Cells-to-be-Activated-List-ItemIEs } } + +Cells-to-be-Activated-List-ItemIEs F1AP-PROTOCOL-IES::= { + { ID id-Cells-to-be-Activated-List-Item CRITICALITY reject TYPE Cells-to-be-Activated-List-Item PRESENCE mandatory}, + ... +} + + + +-- ************************************************************** +-- +-- F1 Setup Failure +-- +-- ************************************************************** + +F1SetupFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {F1SetupFailureIEs} }, + ... +} + +F1SetupFailureIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + + +-- ************************************************************** +-- +-- GNB-DU CONFIGURATION UPDATE ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- GNB-DU CONFIGURATION UPDATE +-- +-- ************************************************************** + +GNBDUConfigurationUpdate::= SEQUENCE { + protocolIEs ProtocolIE-Container { {GNBDUConfigurationUpdateIEs} }, + ... +} + +GNBDUConfigurationUpdateIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-Served-Cells-To-Add-List CRITICALITY reject TYPE Served-Cells-To-Add-List PRESENCE optional }| + { ID id-Served-Cells-To-Modify-List CRITICALITY reject TYPE Served-Cells-To-Modify-List PRESENCE optional }| + { ID id-Served-Cells-To-Delete-List CRITICALITY reject TYPE Served-Cells-To-Delete-List PRESENCE optional }| + { ID id-Cells-Status-List CRITICALITY reject TYPE Cells-Status-List PRESENCE optional }| + { ID id-Dedicated-SIDelivery-NeededUE-List CRITICALITY ignore TYPE Dedicated-SIDelivery-NeededUE-List PRESENCE optional }| + { ID id-gNB-DU-ID CRITICALITY reject TYPE GNB-DU-ID PRESENCE optional }| + { ID id-GNB-DU-TNL-Association-To-Remove-List CRITICALITY reject TYPE GNB-DU-TNL-Association-To-Remove-List PRESENCE optional }| + { ID id-Transport-Layer-Address-Info CRITICALITY ignore TYPE Transport-Layer-Address-Info PRESENCE optional }| + { ID id-gNB-DU-Name CRITICALITY ignore TYPE GNB-DU-Name PRESENCE optional }| + { ID id-Extended-GNB-DU-Name CRITICALITY ignore TYPE Extended-GNB-DU-Name PRESENCE optional }, + ... +} + +Served-Cells-To-Add-List ::= SEQUENCE (SIZE(1.. maxCellingNBDU)) OF ProtocolIE-SingleContainer { { Served-Cells-To-Add-ItemIEs } } +Served-Cells-To-Modify-List ::= SEQUENCE (SIZE(1.. maxCellingNBDU)) OF ProtocolIE-SingleContainer { { Served-Cells-To-Modify-ItemIEs } } +Served-Cells-To-Delete-List ::= SEQUENCE (SIZE(1.. maxCellingNBDU)) OF ProtocolIE-SingleContainer { { Served-Cells-To-Delete-ItemIEs } } +Cells-Status-List ::= SEQUENCE (SIZE(0.. maxCellingNBDU)) OF ProtocolIE-SingleContainer { { Cells-Status-ItemIEs } } + +Dedicated-SIDelivery-NeededUE-List::= SEQUENCE (SIZE(1.. maxnoofUEIDs)) OF ProtocolIE-SingleContainer { { Dedicated-SIDelivery-NeededUE-ItemIEs } } + +GNB-DU-TNL-Association-To-Remove-List ::= SEQUENCE (SIZE(1.. maxnoofTNLAssociations)) OF ProtocolIE-SingleContainer { { GNB-DU-TNL-Association-To-Remove-ItemIEs } } + + +Served-Cells-To-Add-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-Served-Cells-To-Add-Item CRITICALITY reject TYPE Served-Cells-To-Add-Item PRESENCE mandatory }, + ... +} + +Served-Cells-To-Modify-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-Served-Cells-To-Modify-Item CRITICALITY reject TYPE Served-Cells-To-Modify-Item PRESENCE mandatory }, + ... +} + +Served-Cells-To-Delete-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-Served-Cells-To-Delete-Item CRITICALITY reject TYPE Served-Cells-To-Delete-Item PRESENCE mandatory }, + ... +} + +Cells-Status-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-Cells-Status-Item CRITICALITY reject TYPE Cells-Status-Item PRESENCE mandatory }, + ... +} + +Dedicated-SIDelivery-NeededUE-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-Dedicated-SIDelivery-NeededUE-Item CRITICALITY ignore TYPE Dedicated-SIDelivery-NeededUE-Item PRESENCE mandatory }, + ... +} + +GNB-DU-TNL-Association-To-Remove-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-GNB-DU-TNL-Association-To-Remove-Item CRITICALITY reject TYPE GNB-DU-TNL-Association-To-Remove-Item PRESENCE mandatory }, + ... +} + + +-- ************************************************************** +-- +-- GNB-DU CONFIGURATION UPDATE ACKNOWLEDGE +-- +-- ************************************************************** + +GNBDUConfigurationUpdateAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {GNBDUConfigurationUpdateAcknowledgeIEs} }, + ... +} + + +GNBDUConfigurationUpdateAcknowledgeIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-Cells-to-be-Activated-List CRITICALITY reject TYPE Cells-to-be-Activated-List PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-Cells-to-be-Deactivated-List CRITICALITY reject TYPE Cells-to-be-Deactivated-List PRESENCE optional }| + { ID id-Transport-Layer-Address-Info CRITICALITY ignore TYPE Transport-Layer-Address-Info PRESENCE optional }| + { ID id-UL-BH-Non-UP-Traffic-Mapping CRITICALITY reject TYPE UL-BH-Non-UP-Traffic-Mapping PRESENCE optional }| + { ID id-BAPAddress CRITICALITY ignore TYPE BAPAddress PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- GNB-DU CONFIGURATION UPDATE FAILURE +-- +-- ************************************************************** + +GNBDUConfigurationUpdateFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {GNBDUConfigurationUpdateFailureIEs} }, + ... +} + +GNBDUConfigurationUpdateFailureIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- GNB-CU CONFIGURATION UPDATE ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- GNB-CU CONFIGURATION UPDATE +-- +-- ************************************************************** + +GNBCUConfigurationUpdate ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { GNBCUConfigurationUpdateIEs} }, + ... +} + +GNBCUConfigurationUpdateIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-Cells-to-be-Activated-List CRITICALITY reject TYPE Cells-to-be-Activated-List PRESENCE optional }| + { ID id-Cells-to-be-Deactivated-List CRITICALITY reject TYPE Cells-to-be-Deactivated-List PRESENCE optional }| + { ID id-GNB-CU-TNL-Association-To-Add-List CRITICALITY ignore TYPE GNB-CU-TNL-Association-To-Add-List PRESENCE optional }| + { ID id-GNB-CU-TNL-Association-To-Remove-List CRITICALITY ignore TYPE GNB-CU-TNL-Association-To-Remove-List PRESENCE optional }| + { ID id-GNB-CU-TNL-Association-To-Update-List CRITICALITY ignore TYPE GNB-CU-TNL-Association-To-Update-List PRESENCE optional }| + { ID id-Cells-to-be-Barred-List CRITICALITY ignore TYPE Cells-to-be-Barred-List PRESENCE optional }| + { ID id-Protected-EUTRA-Resources-List CRITICALITY reject TYPE Protected-EUTRA-Resources-List PRESENCE optional }| + { ID id-Neighbour-Cell-Information-List CRITICALITY ignore TYPE Neighbour-Cell-Information-List PRESENCE optional }| + { ID id-Transport-Layer-Address-Info CRITICALITY ignore TYPE Transport-Layer-Address-Info PRESENCE optional }| + { ID id-UL-BH-Non-UP-Traffic-Mapping CRITICALITY reject TYPE UL-BH-Non-UP-Traffic-Mapping PRESENCE optional }| + { ID id-BAPAddress CRITICALITY ignore TYPE BAPAddress PRESENCE optional }| + { ID id-gNB-CU-Name CRITICALITY ignore TYPE GNB-CU-Name PRESENCE optional }| + { ID id-Extended-GNB-CU-Name CRITICALITY ignore TYPE Extended-GNB-CU-Name PRESENCE optional }, + ... +} + +Cells-to-be-Deactivated-List ::= SEQUENCE (SIZE(1.. maxCellingNBDU)) OF ProtocolIE-SingleContainer { { Cells-to-be-Deactivated-List-ItemIEs } } +GNB-CU-TNL-Association-To-Add-List ::= SEQUENCE (SIZE(1.. maxnoofTNLAssociations)) OF ProtocolIE-SingleContainer { { GNB-CU-TNL-Association-To-Add-ItemIEs } } +GNB-CU-TNL-Association-To-Remove-List ::= SEQUENCE (SIZE(1.. maxnoofTNLAssociations)) OF ProtocolIE-SingleContainer { { GNB-CU-TNL-Association-To-Remove-ItemIEs } } +GNB-CU-TNL-Association-To-Update-List ::= SEQUENCE (SIZE(1.. maxnoofTNLAssociations)) OF ProtocolIE-SingleContainer { { GNB-CU-TNL-Association-To-Update-ItemIEs } } +Cells-to-be-Barred-List ::= SEQUENCE(SIZE(1.. maxCellingNBDU)) OF ProtocolIE-SingleContainer { { Cells-to-be-Barred-ItemIEs } } + + +Cells-to-be-Deactivated-List-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-Cells-to-be-Deactivated-List-Item CRITICALITY reject TYPE Cells-to-be-Deactivated-List-Item PRESENCE mandatory }, + ... +} + + +GNB-CU-TNL-Association-To-Add-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-GNB-CU-TNL-Association-To-Add-Item CRITICALITY ignore TYPE GNB-CU-TNL-Association-To-Add-Item PRESENCE mandatory }, + ... +} + +GNB-CU-TNL-Association-To-Remove-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-GNB-CU-TNL-Association-To-Remove-Item CRITICALITY ignore TYPE GNB-CU-TNL-Association-To-Remove-Item PRESENCE mandatory }, + ... +} + +GNB-CU-TNL-Association-To-Update-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-GNB-CU-TNL-Association-To-Update-Item CRITICALITY ignore TYPE GNB-CU-TNL-Association-To-Update-Item PRESENCE mandatory }, + ... +} + +Cells-to-be-Barred-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-Cells-to-be-Barred-Item CRITICALITY ignore TYPE Cells-to-be-Barred-Item PRESENCE mandatory }, + ... +} + +Protected-EUTRA-Resources-List ::= SEQUENCE (SIZE(1.. maxCellineNB)) OF ProtocolIE-SingleContainer { { Protected-EUTRA-Resources-ItemIEs } } +Protected-EUTRA-Resources-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-Protected-EUTRA-Resources-Item CRITICALITY reject TYPE Protected-EUTRA-Resources-Item PRESENCE mandatory}, + ... +} + +Neighbour-Cell-Information-List ::= SEQUENCE (SIZE(1.. maxCellingNBDU)) OF ProtocolIE-SingleContainer { { Neighbour-Cell-Information-ItemIEs } } +Neighbour-Cell-Information-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-Neighbour-Cell-Information-Item CRITICALITY ignore TYPE Neighbour-Cell-Information-Item PRESENCE mandatory}, + ... +} + +-- ************************************************************** +-- +-- GNB-CU CONFIGURATION UPDATE ACKNOWLEDGE +-- +-- ************************************************************** + +GNBCUConfigurationUpdateAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { GNBCUConfigurationUpdateAcknowledgeIEs} }, + ... +} + + +GNBCUConfigurationUpdateAcknowledgeIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-Cells-Failed-to-be-Activated-List CRITICALITY reject TYPE Cells-Failed-to-be-Activated-List PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-GNB-CU-TNL-Association-Setup-List CRITICALITY ignore TYPE GNB-CU-TNL-Association-Setup-List PRESENCE optional }| + { ID id-GNB-CU-TNL-Association-Failed-To-Setup-List CRITICALITY ignore TYPE GNB-CU-TNL-Association-Failed-To-Setup-List PRESENCE optional }| + { ID id-Dedicated-SIDelivery-NeededUE-List CRITICALITY ignore TYPE Dedicated-SIDelivery-NeededUE-List PRESENCE optional }| + { ID id-Transport-Layer-Address-Info CRITICALITY ignore TYPE Transport-Layer-Address-Info PRESENCE optional }, + ... +} + +Cells-Failed-to-be-Activated-List ::= SEQUENCE (SIZE(1.. maxCellingNBDU)) OF ProtocolIE-SingleContainer { { Cells-Failed-to-be-Activated-List-ItemIEs } } +GNB-CU-TNL-Association-Setup-List ::= SEQUENCE (SIZE(1.. maxnoofTNLAssociations)) OF ProtocolIE-SingleContainer { { GNB-CU-TNL-Association-Setup-ItemIEs } } +GNB-CU-TNL-Association-Failed-To-Setup-List ::= SEQUENCE (SIZE(1.. maxnoofTNLAssociations)) OF ProtocolIE-SingleContainer { { GNB-CU-TNL-Association-Failed-To-Setup-ItemIEs } } + +Cells-Failed-to-be-Activated-List-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-Cells-Failed-to-be-Activated-List-Item CRITICALITY reject TYPE Cells-Failed-to-be-Activated-List-Item PRESENCE mandatory }, + ... +} + +GNB-CU-TNL-Association-Setup-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-GNB-CU-TNL-Association-Setup-Item CRITICALITY ignore TYPE GNB-CU-TNL-Association-Setup-Item PRESENCE mandatory }, + ... +} + + +GNB-CU-TNL-Association-Failed-To-Setup-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-GNB-CU-TNL-Association-Failed-To-Setup-Item CRITICALITY ignore TYPE GNB-CU-TNL-Association-Failed-To-Setup-Item PRESENCE mandatory }, + ... +} + + +-- ************************************************************** +-- +-- GNB-CU CONFIGURATION UPDATE FAILURE +-- +-- ************************************************************** + +GNBCUConfigurationUpdateFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { GNBCUConfigurationUpdateFailureIEs} }, + ... +} + +GNBCUConfigurationUpdateFailureIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + + +-- ************************************************************** +-- +-- GNB-DU RESOURCE COORDINATION REQUEST +-- +-- ************************************************************** + +GNBDUResourceCoordinationRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{GNBDUResourceCoordinationRequest-IEs}}, + ... +} + +GNBDUResourceCoordinationRequest-IEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-RequestType CRITICALITY reject TYPE RequestType PRESENCE mandatory }| + { ID id-EUTRA-NR-CellResourceCoordinationReq-Container CRITICALITY reject TYPE EUTRA-NR-CellResourceCoordinationReq-Container PRESENCE mandatory}| + { ID id-IgnoreResourceCoordinationContainer CRITICALITY reject TYPE IgnoreResourceCoordinationContainer PRESENCE optional }, + ... +} + + +-- ************************************************************** +-- +-- GNB-DU RESOURCE COORDINATION RESPONSE +-- +-- ************************************************************** + +GNBDUResourceCoordinationResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{GNBDUResourceCoordinationResponse-IEs}}, + ... +} + +GNBDUResourceCoordinationResponse-IEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-EUTRA-NR-CellResourceCoordinationReqAck-Container CRITICALITY reject TYPE EUTRA-NR-CellResourceCoordinationReqAck-Container PRESENCE mandatory}, + ... +} + +-- ************************************************************** +-- +-- UE Context Setup ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- UE CONTEXT SETUP REQUEST +-- +-- ************************************************************** + +UEContextSetupRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { UEContextSetupRequestIEs} }, + ... +} + +UEContextSetupRequestIEs F1AP-PROTOCOL-IES ::= { + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY ignore TYPE GNB-DU-UE-F1AP-ID PRESENCE optional }| + { ID id-SpCell-ID CRITICALITY reject TYPE NRCGI PRESENCE mandatory }| + { ID id-ServCellIndex CRITICALITY reject TYPE ServCellIndex PRESENCE mandatory }| + { ID id-SpCellULConfigured CRITICALITY ignore TYPE CellULConfigured PRESENCE optional }| + { ID id-CUtoDURRCInformation CRITICALITY reject TYPE CUtoDURRCInformation PRESENCE mandatory}| + { ID id-Candidate-SpCell-List CRITICALITY ignore TYPE Candidate-SpCell-List PRESENCE optional }| + { ID id-DRXCycle CRITICALITY ignore TYPE DRXCycle PRESENCE optional }| + { ID id-ResourceCoordinationTransferContainer CRITICALITY ignore TYPE ResourceCoordinationTransferContainer PRESENCE optional }| + { ID id-SCell-ToBeSetup-List CRITICALITY ignore TYPE SCell-ToBeSetup-List PRESENCE optional }| + { ID id-SRBs-ToBeSetup-List CRITICALITY reject TYPE SRBs-ToBeSetup-List PRESENCE optional }| + { ID id-DRBs-ToBeSetup-List CRITICALITY reject TYPE DRBs-ToBeSetup-List PRESENCE optional }| + { ID id-InactivityMonitoringRequest CRITICALITY reject TYPE InactivityMonitoringRequest PRESENCE optional }| + { ID id-RAT-FrequencyPriorityInformation CRITICALITY reject TYPE RAT-FrequencyPriorityInformation PRESENCE optional }| + { ID id-RRCContainer CRITICALITY ignore TYPE RRCContainer PRESENCE optional }| + { ID id-MaskedIMEISV CRITICALITY ignore TYPE MaskedIMEISV PRESENCE optional }| + { ID id-ServingPLMN CRITICALITY ignore TYPE PLMN-Identity PRESENCE optional }| + { ID id-GNB-DU-UE-AMBR-UL CRITICALITY ignore TYPE BitRate PRESENCE conditional }| + { ID id-RRCDeliveryStatusRequest CRITICALITY ignore TYPE RRCDeliveryStatusRequest PRESENCE optional }| + { ID id-ResourceCoordinationTransferInformation CRITICALITY ignore TYPE ResourceCoordinationTransferInformation PRESENCE optional }| + { ID id-ServingCellMO CRITICALITY ignore TYPE ServingCellMO PRESENCE optional }| + { ID id-new-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE optional }| + { ID id-RANUEID CRITICALITY ignore TYPE RANUEID PRESENCE optional }| + { ID id-TraceActivation CRITICALITY ignore TYPE TraceActivation PRESENCE optional }| + { ID id-AdditionalRRMPriorityIndex CRITICALITY ignore TYPE AdditionalRRMPriorityIndex PRESENCE optional }| + { ID id-BHChannels-ToBeSetup-List CRITICALITY reject TYPE BHChannels-ToBeSetup-List PRESENCE optional }| + { ID id-ConfiguredBAPAddress CRITICALITY reject TYPE BAPAddress PRESENCE optional }| + { ID id-NRV2XServicesAuthorized CRITICALITY ignore TYPE NRV2XServicesAuthorized PRESENCE optional }| + { ID id-LTEV2XServicesAuthorized CRITICALITY ignore TYPE LTEV2XServicesAuthorized PRESENCE optional }| + { ID id-NRUESidelinkAggregateMaximumBitrate CRITICALITY ignore TYPE NRUESidelinkAggregateMaximumBitrate PRESENCE optional }| + { ID id-LTEUESidelinkAggregateMaximumBitrate CRITICALITY ignore TYPE LTEUESidelinkAggregateMaximumBitrate PRESENCE optional }| + { ID id-PC5LinkAMBR CRITICALITY ignore TYPE BitRate PRESENCE optional}| + { ID id-SLDRBs-ToBeSetup-List CRITICALITY reject TYPE SLDRBs-ToBeSetup-List PRESENCE optional }| + { ID id-ConditionalInterDUMobilityInformation CRITICALITY reject TYPE ConditionalInterDUMobilityInformation PRESENCE optional}| + { ID id-ManagementBasedMDTPLMNList CRITICALITY ignore TYPE MDTPLMNList PRESENCE optional }| + { ID id-ServingNID CRITICALITY reject TYPE NID PRESENCE optional }| + { ID id-F1CTransferPath CRITICALITY reject TYPE F1CTransferPath PRESENCE optional }, + ... +} + +Candidate-SpCell-List::= SEQUENCE (SIZE(1..maxnoofCandidateSpCells)) OF ProtocolIE-SingleContainer { { Candidate-SpCell-ItemIEs} } +SCell-ToBeSetup-List::= SEQUENCE (SIZE(1..maxnoofSCells)) OF ProtocolIE-SingleContainer { { SCell-ToBeSetup-ItemIEs} } +SRBs-ToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofSRBs)) OF ProtocolIE-SingleContainer { { SRBs-ToBeSetup-ItemIEs} } +DRBs-ToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-ToBeSetup-ItemIEs} } +BHChannels-ToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofBHRLCChannels)) OF ProtocolIE-SingleContainer { { BHChannels-ToBeSetup-ItemIEs} } +SLDRBs-ToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-ToBeSetup-ItemIEs} } + +Candidate-SpCell-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-Candidate-SpCell-Item CRITICALITY ignore TYPE Candidate-SpCell-Item PRESENCE mandatory }, + ... +} + + +SCell-ToBeSetup-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-SCell-ToBeSetup-Item CRITICALITY ignore TYPE SCell-ToBeSetup-Item PRESENCE mandatory }, + ... +} + +SRBs-ToBeSetup-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-SRBs-ToBeSetup-Item CRITICALITY reject TYPE SRBs-ToBeSetup-Item PRESENCE mandatory}, + ... +} + +DRBs-ToBeSetup-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-DRBs-ToBeSetup-Item CRITICALITY reject TYPE DRBs-ToBeSetup-Item PRESENCE mandatory}, + ... +} + +BHChannels-ToBeSetup-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-BHChannels-ToBeSetup-Item CRITICALITY reject TYPE BHChannels-ToBeSetup-Item PRESENCE mandatory}, + ... +} + +SLDRBs-ToBeSetup-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-SLDRBs-ToBeSetup-Item CRITICALITY reject TYPE SLDRBs-ToBeSetup-Item PRESENCE mandatory}, + ... +} + +-- ************************************************************** +-- +-- UE CONTEXT SETUP RESPONSE +-- +-- ************************************************************** + +UEContextSetupResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { UEContextSetupResponseIEs} }, + ... +} + + +UEContextSetupResponseIEs F1AP-PROTOCOL-IES ::= { + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-DUtoCURRCInformation CRITICALITY reject TYPE DUtoCURRCInformation PRESENCE mandatory }| + { ID id-C-RNTI CRITICALITY ignore TYPE C-RNTI PRESENCE optional }| + { ID id-ResourceCoordinationTransferContainer CRITICALITY ignore TYPE ResourceCoordinationTransferContainer PRESENCE optional }| + { ID id-FullConfiguration CRITICALITY reject TYPE FullConfiguration PRESENCE optional }| + { ID id-DRBs-Setup-List CRITICALITY ignore TYPE DRBs-Setup-List PRESENCE optional }| + { ID id-SRBs-FailedToBeSetup-List CRITICALITY ignore TYPE SRBs-FailedToBeSetup-List PRESENCE optional }| + { ID id-DRBs-FailedToBeSetup-List CRITICALITY ignore TYPE DRBs-FailedToBeSetup-List PRESENCE optional }| + { ID id-SCell-FailedtoSetup-List CRITICALITY ignore TYPE SCell-FailedtoSetup-List PRESENCE optional }| + { ID id-InactivityMonitoringResponse CRITICALITY reject TYPE InactivityMonitoringResponse PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-SRBs-Setup-List CRITICALITY ignore TYPE SRBs-Setup-List PRESENCE optional }| + { ID id-BHChannels-Setup-List CRITICALITY ignore TYPE BHChannels-Setup-List PRESENCE optional }| + { ID id-BHChannels-FailedToBeSetup-List CRITICALITY ignore TYPE BHChannels-FailedToBeSetup-List PRESENCE optional }| + { ID id-SLDRBs-Setup-List CRITICALITY ignore TYPE SLDRBs-Setup-List PRESENCE optional }| + { ID id-SLDRBs-FailedToBeSetup-List CRITICALITY ignore TYPE SLDRBs-FailedToBeSetup-List PRESENCE optional }| + { ID id-requestedTargetCellGlobalID CRITICALITY reject TYPE NRCGI PRESENCE optional}, + ... +} + +DRBs-Setup-List ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-Setup-ItemIEs} } + + +SRBs-FailedToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofSRBs)) OF ProtocolIE-SingleContainer { { SRBs-FailedToBeSetup-ItemIEs} } +DRBs-FailedToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-FailedToBeSetup-ItemIEs} } +SCell-FailedtoSetup-List ::= SEQUENCE (SIZE(1..maxnoofSCells)) OF ProtocolIE-SingleContainer { { SCell-FailedtoSetup-ItemIEs} } +SRBs-Setup-List ::= SEQUENCE (SIZE(1..maxnoofSRBs)) OF ProtocolIE-SingleContainer { { SRBs-Setup-ItemIEs} } +BHChannels-Setup-List ::= SEQUENCE (SIZE(1..maxnoofBHRLCChannels)) OF ProtocolIE-SingleContainer { { BHChannels-Setup-ItemIEs} } +BHChannels-FailedToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofBHRLCChannels)) OF ProtocolIE-SingleContainer { { BHChannels-FailedToBeSetup-ItemIEs} } + +DRBs-Setup-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-DRBs-Setup-Item CRITICALITY ignore TYPE DRBs-Setup-Item PRESENCE mandatory}, + ... +} + +SRBs-Setup-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-SRBs-Setup-Item CRITICALITY ignore TYPE SRBs-Setup-Item PRESENCE mandatory}, + ... +} + +SRBs-FailedToBeSetup-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-SRBs-FailedToBeSetup-Item CRITICALITY ignore TYPE SRBs-FailedToBeSetup-Item PRESENCE mandatory}, + ... +} + + +DRBs-FailedToBeSetup-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-DRBs-FailedToBeSetup-Item CRITICALITY ignore TYPE DRBs-FailedToBeSetup-Item PRESENCE mandatory}, + ... +} + +SCell-FailedtoSetup-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-SCell-FailedtoSetup-Item CRITICALITY ignore TYPE SCell-FailedtoSetup-Item PRESENCE mandatory}, + ... +} + +BHChannels-Setup-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-BHChannels-Setup-Item CRITICALITY ignore TYPE BHChannels-Setup-Item PRESENCE mandatory}, + ... +} + +BHChannels-FailedToBeSetup-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-BHChannels-FailedToBeSetup-Item CRITICALITY ignore TYPE BHChannels-FailedToBeSetup-Item PRESENCE mandatory}, + ... +} + +SLDRBs-Setup-List ::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-Setup-ItemIEs} } + +SLDRBs-FailedToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-FailedToBeSetup-ItemIEs} } + +SLDRBs-Setup-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-SLDRBs-Setup-Item CRITICALITY ignore TYPE SLDRBs-Setup-Item PRESENCE mandatory}, + ... +} + +SLDRBs-FailedToBeSetup-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-SLDRBs-FailedToBeSetup-Item CRITICALITY ignore TYPE SLDRBs-FailedToBeSetup-Item PRESENCE mandatory}, + ... +} + +-- ************************************************************** +-- +-- UE CONTEXT SETUP FAILURE +-- +-- ************************************************************** + +UEContextSetupFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { UEContextSetupFailureIEs} }, + ... +} + +UEContextSetupFailureIEs F1AP-PROTOCOL-IES ::= { + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY ignore TYPE GNB-DU-UE-F1AP-ID PRESENCE optional }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-Potential-SpCell-List CRITICALITY ignore TYPE Potential-SpCell-List PRESENCE optional }| + { ID id-requestedTargetCellGlobalID CRITICALITY reject TYPE NRCGI PRESENCE optional}, + ... +} + +Potential-SpCell-List::= SEQUENCE (SIZE(0..maxnoofPotentialSpCells)) OF ProtocolIE-SingleContainer { { Potential-SpCell-ItemIEs} } + +Potential-SpCell-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-Potential-SpCell-Item CRITICALITY ignore TYPE Potential-SpCell-Item PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- UE Context Release Request ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- UE Context Release Request +-- +-- ************************************************************** + +UEContextReleaseRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ UEContextReleaseRequestIEs}}, + ... +} + +UEContextReleaseRequestIEs F1AP-PROTOCOL-IES ::= { + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-targetCellsToCancel CRITICALITY reject TYPE TargetCellList PRESENCE optional }, + ... +} + + +-- ************************************************************** +-- +-- UE Context Release (gNB-CU initiated) ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- UE CONTEXT RELEASE COMMAND +-- +-- ************************************************************** + +UEContextReleaseCommand ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { UEContextReleaseCommandIEs} }, + ... +} + +UEContextReleaseCommandIEs F1AP-PROTOCOL-IES ::= { + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-RRCContainer CRITICALITY ignore TYPE RRCContainer PRESENCE optional }| + { ID id-SRBID CRITICALITY ignore TYPE SRBID PRESENCE conditional }| + { ID id-oldgNB-DU-UE-F1AP-ID CRITICALITY ignore TYPE GNB-DU-UE-F1AP-ID PRESENCE optional }| + { ID id-ExecuteDuplication CRITICALITY ignore TYPE ExecuteDuplication PRESENCE optional}| + { ID id-RRCDeliveryStatusRequest CRITICALITY ignore TYPE RRCDeliveryStatusRequest PRESENCE optional }| + { ID id-targetCellsToCancel CRITICALITY reject TYPE TargetCellList PRESENCE optional}, + ... +} + +-- ************************************************************** +-- +-- UE CONTEXT RELEASE COMPLETE +-- +-- ************************************************************** + +UEContextReleaseComplete ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { UEContextReleaseCompleteIEs} }, + ... +} + + +UEContextReleaseCompleteIEs F1AP-PROTOCOL-IES ::= { + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- UE Context Modification ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- UE CONTEXT MODIFICATION REQUEST +-- +-- ************************************************************** + +UEContextModificationRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { UEContextModificationRequestIEs} }, + ... +} + +UEContextModificationRequestIEs F1AP-PROTOCOL-IES ::= { + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-SpCell-ID CRITICALITY ignore TYPE NRCGI PRESENCE optional }| + { ID id-ServCellIndex CRITICALITY reject TYPE ServCellIndex PRESENCE optional }| + { ID id-SpCellULConfigured CRITICALITY ignore TYPE CellULConfigured PRESENCE optional }| + { ID id-DRXCycle CRITICALITY ignore TYPE DRXCycle PRESENCE optional }| + { ID id-CUtoDURRCInformation CRITICALITY reject TYPE CUtoDURRCInformation PRESENCE optional }| + { ID id-TransmissionActionIndicator CRITICALITY ignore TYPE TransmissionActionIndicator PRESENCE optional }| + { ID id-ResourceCoordinationTransferContainer CRITICALITY ignore TYPE ResourceCoordinationTransferContainer PRESENCE optional }| + { ID id-RRCReconfigurationCompleteIndicator CRITICALITY ignore TYPE RRCReconfigurationCompleteIndicator PRESENCE optional }| + { ID id-RRCContainer CRITICALITY reject TYPE RRCContainer PRESENCE optional }| + { ID id-SCell-ToBeSetupMod-List CRITICALITY ignore TYPE SCell-ToBeSetupMod-List PRESENCE optional }| + { ID id-SCell-ToBeRemoved-List CRITICALITY ignore TYPE SCell-ToBeRemoved-List PRESENCE optional }| + { ID id-SRBs-ToBeSetupMod-List CRITICALITY reject TYPE SRBs-ToBeSetupMod-List PRESENCE optional }| + { ID id-DRBs-ToBeSetupMod-List CRITICALITY reject TYPE DRBs-ToBeSetupMod-List PRESENCE optional }| + { ID id-DRBs-ToBeModified-List CRITICALITY reject TYPE DRBs-ToBeModified-List PRESENCE optional }| + { ID id-SRBs-ToBeReleased-List CRITICALITY reject TYPE SRBs-ToBeReleased-List PRESENCE optional }| + { ID id-DRBs-ToBeReleased-List CRITICALITY reject TYPE DRBs-ToBeReleased-List PRESENCE optional }| + { ID id-InactivityMonitoringRequest CRITICALITY reject TYPE InactivityMonitoringRequest PRESENCE optional }| + { ID id-RAT-FrequencyPriorityInformation CRITICALITY reject TYPE RAT-FrequencyPriorityInformation PRESENCE optional }| + { ID id-DRXConfigurationIndicator CRITICALITY ignore TYPE DRXConfigurationIndicator PRESENCE optional }| + { ID id-RLCFailureIndication CRITICALITY ignore TYPE RLCFailureIndication PRESENCE optional }| + { ID id-UplinkTxDirectCurrentListInformation CRITICALITY ignore TYPE UplinkTxDirectCurrentListInformation PRESENCE optional }| + { ID id-GNB-DUConfigurationQuery CRITICALITY reject TYPE GNB-DUConfigurationQuery PRESENCE optional }| + { ID id-GNB-DU-UE-AMBR-UL CRITICALITY ignore TYPE BitRate PRESENCE optional }| + { ID id-ExecuteDuplication CRITICALITY ignore TYPE ExecuteDuplication PRESENCE optional}| + { ID id-RRCDeliveryStatusRequest CRITICALITY ignore TYPE RRCDeliveryStatusRequest PRESENCE optional }| + { ID id-ResourceCoordinationTransferInformation CRITICALITY ignore TYPE ResourceCoordinationTransferInformation PRESENCE optional }| + { ID id-ServingCellMO CRITICALITY ignore TYPE ServingCellMO PRESENCE optional }| + { ID id-NeedforGap CRITICALITY ignore TYPE NeedforGap PRESENCE optional }| + { ID id-FullConfiguration CRITICALITY reject TYPE FullConfiguration PRESENCE optional }| + { ID id-AdditionalRRMPriorityIndex CRITICALITY ignore TYPE AdditionalRRMPriorityIndex PRESENCE optional }| + { ID id-LowerLayerPresenceStatusChange CRITICALITY ignore TYPE LowerLayerPresenceStatusChange PRESENCE optional }| + { ID id-BHChannels-ToBeSetupMod-List CRITICALITY reject TYPE BHChannels-ToBeSetupMod-List PRESENCE optional }| + { ID id-BHChannels-ToBeModified-List CRITICALITY reject TYPE BHChannels-ToBeModified-List PRESENCE optional }| + { ID id-BHChannels-ToBeReleased-List CRITICALITY reject TYPE BHChannels-ToBeReleased-List PRESENCE optional }| + { ID id-NRV2XServicesAuthorized CRITICALITY ignore TYPE NRV2XServicesAuthorized PRESENCE optional }| + { ID id-LTEV2XServicesAuthorized CRITICALITY ignore TYPE LTEV2XServicesAuthorized PRESENCE optional }| + { ID id-NRUESidelinkAggregateMaximumBitrate CRITICALITY ignore TYPE NRUESidelinkAggregateMaximumBitrate PRESENCE optional }| + { ID id-LTEUESidelinkAggregateMaximumBitrate CRITICALITY ignore TYPE LTEUESidelinkAggregateMaximumBitrate PRESENCE optional }| + { ID id-PC5LinkAMBR CRITICALITY ignore TYPE BitRate PRESENCE optional}| + { ID id-SLDRBs-ToBeSetupMod-List CRITICALITY reject TYPE SLDRBs-ToBeSetupMod-List PRESENCE optional }| + { ID id-SLDRBs-ToBeModified-List CRITICALITY reject TYPE SLDRBs-ToBeModified-List PRESENCE optional }| + { ID id-SLDRBs-ToBeReleased-List CRITICALITY reject TYPE SLDRBs-ToBeReleased-List PRESENCE optional }| + { ID id-ConditionalIntraDUMobilityInformation CRITICALITY reject TYPE ConditionalIntraDUMobilityInformation PRESENCE optional}| + { ID id-F1CTransferPath CRITICALITY reject TYPE F1CTransferPath PRESENCE optional }| + { ID id-SCGIndicator CRITICALITY ignore TYPE SCGIndicator PRESENCE optional }| + { ID id-DAPS-HO-Status CRITICALITY ignore TYPE DAPS-HO-Status PRESENCE optional }| + { ID id-UplinkTxDirectCurrentTwoCarrierListInfo CRITICALITY ignore TYPE UplinkTxDirectCurrentTwoCarrierListInfo PRESENCE optional }, + ... +} + +SCell-ToBeSetupMod-List::= SEQUENCE (SIZE(1..maxnoofSCells)) OF ProtocolIE-SingleContainer { { SCell-ToBeSetupMod-ItemIEs} } +SCell-ToBeRemoved-List::= SEQUENCE (SIZE(1..maxnoofSCells)) OF ProtocolIE-SingleContainer { { SCell-ToBeRemoved-ItemIEs} } +SRBs-ToBeSetupMod-List ::= SEQUENCE (SIZE(1..maxnoofSRBs)) OF ProtocolIE-SingleContainer { { SRBs-ToBeSetupMod-ItemIEs} } +DRBs-ToBeSetupMod-List ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-ToBeSetupMod-ItemIEs} } +BHChannels-ToBeSetupMod-List ::= SEQUENCE (SIZE(1..maxnoofBHRLCChannels)) OF ProtocolIE-SingleContainer { { BHChannels-ToBeSetupMod-ItemIEs} } + +DRBs-ToBeModified-List ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-ToBeModified-ItemIEs} } +BHChannels-ToBeModified-List ::= SEQUENCE (SIZE(1..maxnoofBHRLCChannels)) OF ProtocolIE-SingleContainer { { BHChannels-ToBeModified-ItemIEs} } +SRBs-ToBeReleased-List ::= SEQUENCE (SIZE(1..maxnoofSRBs)) OF ProtocolIE-SingleContainer { { SRBs-ToBeReleased-ItemIEs} } +DRBs-ToBeReleased-List ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-ToBeReleased-ItemIEs} } +BHChannels-ToBeReleased-List ::= SEQUENCE (SIZE(1..maxnoofBHRLCChannels)) OF ProtocolIE-SingleContainer { { BHChannels-ToBeReleased-ItemIEs} } + +SCell-ToBeSetupMod-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-SCell-ToBeSetupMod-Item CRITICALITY ignore TYPE SCell-ToBeSetupMod-Item PRESENCE mandatory }, + ... +} + +SCell-ToBeRemoved-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-SCell-ToBeRemoved-Item CRITICALITY ignore TYPE SCell-ToBeRemoved-Item PRESENCE mandatory }, + ... +} + + +SRBs-ToBeSetupMod-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-SRBs-ToBeSetupMod-Item CRITICALITY reject TYPE SRBs-ToBeSetupMod-Item PRESENCE mandatory}, + ... +} + + +DRBs-ToBeSetupMod-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-DRBs-ToBeSetupMod-Item CRITICALITY reject TYPE DRBs-ToBeSetupMod-Item PRESENCE mandatory}, + ... +} + +DRBs-ToBeModified-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-DRBs-ToBeModified-Item CRITICALITY reject TYPE DRBs-ToBeModified-Item PRESENCE mandatory}, + ... +} + + +SRBs-ToBeReleased-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-SRBs-ToBeReleased-Item CRITICALITY reject TYPE SRBs-ToBeReleased-Item PRESENCE mandatory}, + ... +} + +DRBs-ToBeReleased-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-DRBs-ToBeReleased-Item CRITICALITY reject TYPE DRBs-ToBeReleased-Item PRESENCE mandatory}, + ... +} + +BHChannels-ToBeSetupMod-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-BHChannels-ToBeSetupMod-Item CRITICALITY reject TYPE BHChannels-ToBeSetupMod-Item PRESENCE mandatory}, + ... +} + +BHChannels-ToBeModified-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-BHChannels-ToBeModified-Item CRITICALITY reject TYPE BHChannels-ToBeModified-Item PRESENCE mandatory}, + ... +} + +BHChannels-ToBeReleased-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-BHChannels-ToBeReleased-Item CRITICALITY reject TYPE BHChannels-ToBeReleased-Item PRESENCE mandatory}, + ... +} + +SLDRBs-ToBeSetupMod-List ::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-ToBeSetupMod-ItemIEs} } +SLDRBs-ToBeModified-List ::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-ToBeModified-ItemIEs} } +SLDRBs-ToBeReleased-List ::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-ToBeReleased-ItemIEs} } + +SLDRBs-ToBeSetupMod-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-SLDRBs-ToBeSetupMod-Item CRITICALITY reject TYPE SLDRBs-ToBeSetupMod-Item PRESENCE mandatory}, + ... +} + +SLDRBs-ToBeModified-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-SLDRBs-ToBeModified-Item CRITICALITY reject TYPE SLDRBs-ToBeModified-Item PRESENCE mandatory}, + ... +} + +SLDRBs-ToBeReleased-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-SLDRBs-ToBeReleased-Item CRITICALITY reject TYPE SLDRBs-ToBeReleased-Item PRESENCE mandatory}, + ... +} + +-- ************************************************************** +-- +-- UE CONTEXT MODIFICATION RESPONSE +-- +-- ************************************************************** + +UEContextModificationResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { UEContextModificationResponseIEs} }, + ... +} + + +UEContextModificationResponseIEs F1AP-PROTOCOL-IES ::= { + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-ResourceCoordinationTransferContainer CRITICALITY ignore TYPE ResourceCoordinationTransferContainer PRESENCE optional }| + { ID id-DUtoCURRCInformation CRITICALITY reject TYPE DUtoCURRCInformation PRESENCE optional}| + { ID id-DRBs-SetupMod-List CRITICALITY ignore TYPE DRBs-SetupMod-List PRESENCE optional}| + { ID id-DRBs-Modified-List CRITICALITY ignore TYPE DRBs-Modified-List PRESENCE optional}| + { ID id-SRBs-FailedToBeSetupMod-List CRITICALITY ignore TYPE SRBs-FailedToBeSetupMod-List PRESENCE optional }| + { ID id-DRBs-FailedToBeSetupMod-List CRITICALITY ignore TYPE DRBs-FailedToBeSetupMod-List PRESENCE optional }| + { ID id-SCell-FailedtoSetupMod-List CRITICALITY ignore TYPE SCell-FailedtoSetupMod-List PRESENCE optional }| + { ID id-DRBs-FailedToBeModified-List CRITICALITY ignore TYPE DRBs-FailedToBeModified-List PRESENCE optional }| + { ID id-InactivityMonitoringResponse CRITICALITY reject TYPE InactivityMonitoringResponse PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-C-RNTI CRITICALITY ignore TYPE C-RNTI PRESENCE optional }| + { ID id-Associated-SCell-List CRITICALITY ignore TYPE Associated-SCell-List PRESENCE optional }| + { ID id-SRBs-SetupMod-List CRITICALITY ignore TYPE SRBs-SetupMod-List PRESENCE optional }| + { ID id-SRBs-Modified-List CRITICALITY ignore TYPE SRBs-Modified-List PRESENCE optional }| + { ID id-FullConfiguration CRITICALITY reject TYPE FullConfiguration PRESENCE optional }| + { ID id-BHChannels-SetupMod-List CRITICALITY ignore TYPE BHChannels-SetupMod-List PRESENCE optional}| + { ID id-BHChannels-Modified-List CRITICALITY ignore TYPE BHChannels-Modified-List PRESENCE optional}| + { ID id-BHChannels-FailedToBeSetupMod-List CRITICALITY ignore TYPE BHChannels-FailedToBeSetupMod-List PRESENCE optional }| + { ID id-BHChannels-FailedToBeModified-List CRITICALITY ignore TYPE BHChannels-FailedToBeModified-List PRESENCE optional }| + { ID id-SLDRBs-SetupMod-List CRITICALITY ignore TYPE SLDRBs-SetupMod-List PRESENCE optional }| + { ID id-SLDRBs-Modified-List CRITICALITY ignore TYPE SLDRBs-Modified-List PRESENCE optional }| + { ID id-SLDRBs-FailedToBeSetupMod-List CRITICALITY ignore TYPE SLDRBs-FailedToBeSetupMod-List PRESENCE optional }| + { ID id-SLDRBs-FailedToBeModified-List CRITICALITY ignore TYPE SLDRBs-FailedToBeModified-List PRESENCE optional }| + { ID id-requestedTargetCellGlobalID CRITICALITY reject TYPE NRCGI PRESENCE optional}, + ... +} + + +DRBs-SetupMod-List ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-SetupMod-ItemIEs} } +DRBs-Modified-List::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-Modified-ItemIEs } } +SRBs-SetupMod-List ::= SEQUENCE (SIZE(1..maxnoofSRBs)) OF ProtocolIE-SingleContainer { { SRBs-SetupMod-ItemIEs} } +SRBs-Modified-List ::= SEQUENCE (SIZE(1..maxnoofSRBs)) OF ProtocolIE-SingleContainer { { SRBs-Modified-ItemIEs } } +DRBs-FailedToBeModified-List ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-FailedToBeModified-ItemIEs} } +SRBs-FailedToBeSetupMod-List ::= SEQUENCE (SIZE(1..maxnoofSRBs)) OF ProtocolIE-SingleContainer { { SRBs-FailedToBeSetupMod-ItemIEs} } +DRBs-FailedToBeSetupMod-List ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-FailedToBeSetupMod-ItemIEs} } +SCell-FailedtoSetupMod-List ::= SEQUENCE (SIZE(1..maxnoofSCells)) OF ProtocolIE-SingleContainer { { SCell-FailedtoSetupMod-ItemIEs} } +BHChannels-SetupMod-List ::= SEQUENCE (SIZE(1..maxnoofBHRLCChannels)) OF ProtocolIE-SingleContainer { { BHChannels-SetupMod-ItemIEs} } +BHChannels-Modified-List ::= SEQUENCE (SIZE(1..maxnoofBHRLCChannels)) OF ProtocolIE-SingleContainer { { BHChannels-Modified-ItemIEs } } +BHChannels-FailedToBeModified-List ::= SEQUENCE (SIZE(1..maxnoofBHRLCChannels)) OF ProtocolIE-SingleContainer { { BHChannels-FailedToBeModified-ItemIEs} } +BHChannels-FailedToBeSetupMod-List ::= SEQUENCE (SIZE(1..maxnoofBHRLCChannels)) OF ProtocolIE-SingleContainer { { BHChannels-FailedToBeSetupMod-ItemIEs} } + +Associated-SCell-List ::= SEQUENCE (SIZE(1.. maxnoofSCells)) OF ProtocolIE-SingleContainer { { Associated-SCell-ItemIEs} } + +DRBs-SetupMod-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-DRBs-SetupMod-Item CRITICALITY ignore TYPE DRBs-SetupMod-Item PRESENCE mandatory}, + ... +} + + +DRBs-Modified-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-DRBs-Modified-Item CRITICALITY ignore TYPE DRBs-Modified-Item PRESENCE mandatory}, + ... +} + +SRBs-SetupMod-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-SRBs-SetupMod-Item CRITICALITY ignore TYPE SRBs-SetupMod-Item PRESENCE mandatory}, + ... +} + + +SRBs-Modified-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-SRBs-Modified-Item CRITICALITY ignore TYPE SRBs-Modified-Item PRESENCE mandatory}, + ... +} + +SRBs-FailedToBeSetupMod-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-SRBs-FailedToBeSetupMod-Item CRITICALITY ignore TYPE SRBs-FailedToBeSetupMod-Item PRESENCE mandatory}, + ... +} + + +DRBs-FailedToBeSetupMod-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-DRBs-FailedToBeSetupMod-Item CRITICALITY ignore TYPE DRBs-FailedToBeSetupMod-Item PRESENCE mandatory}, + ... +} + + +DRBs-FailedToBeModified-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-DRBs-FailedToBeModified-Item CRITICALITY ignore TYPE DRBs-FailedToBeModified-Item PRESENCE mandatory}, + ... +} + +SCell-FailedtoSetupMod-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-SCell-FailedtoSetupMod-Item CRITICALITY ignore TYPE SCell-FailedtoSetupMod-Item PRESENCE mandatory}, + ... +} + +Associated-SCell-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-Associated-SCell-Item CRITICALITY ignore TYPE Associated-SCell-Item PRESENCE mandatory}, + ... +} + +BHChannels-SetupMod-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-BHChannels-SetupMod-Item CRITICALITY ignore TYPE BHChannels-SetupMod-Item PRESENCE mandatory}, + ... +} + + +BHChannels-Modified-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-BHChannels-Modified-Item CRITICALITY ignore TYPE BHChannels-Modified-Item PRESENCE mandatory}, + ... +} + +BHChannels-FailedToBeSetupMod-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-BHChannels-FailedToBeSetupMod-Item CRITICALITY ignore TYPE BHChannels-FailedToBeSetupMod-Item PRESENCE mandatory}, + ... +} + +BHChannels-FailedToBeModified-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-BHChannels-FailedToBeModified-Item CRITICALITY ignore TYPE BHChannels-FailedToBeModified-Item PRESENCE mandatory}, + ... +} + +SLDRBs-SetupMod-List ::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-SetupMod-ItemIEs} } +SLDRBs-Modified-List ::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-Modified-ItemIEs } } +SLDRBs-FailedToBeModified-List ::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-FailedToBeModified-ItemIEs} } +SLDRBs-FailedToBeSetupMod-List ::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-FailedToBeSetupMod-ItemIEs} } + +SLDRBs-SetupMod-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-SLDRBs-SetupMod-Item CRITICALITY ignore TYPE SLDRBs-SetupMod-Item PRESENCE mandatory}, + ... +} + +SLDRBs-Modified-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-SLDRBs-Modified-Item CRITICALITY ignore TYPE SLDRBs-Modified-Item PRESENCE mandatory}, + ... +} + +SLDRBs-FailedToBeSetupMod-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-SLDRBs-FailedToBeSetupMod-Item CRITICALITY ignore TYPE SLDRBs-FailedToBeSetupMod-Item PRESENCE mandatory}, + ... +} + +SLDRBs-FailedToBeModified-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-SLDRBs-FailedToBeModified-Item CRITICALITY ignore TYPE SLDRBs-FailedToBeModified-Item PRESENCE mandatory}, + ... +} + +-- ************************************************************** +-- +-- UE CONTEXT MODIFICATION FAILURE +-- +-- ************************************************************** + +UEContextModificationFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { UEContextModificationFailureIEs} }, + ... +} + +UEContextModificationFailureIEs F1AP-PROTOCOL-IES ::= { + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-requestedTargetCellGlobalID CRITICALITY reject TYPE NRCGI PRESENCE optional}, + ... +} + + +-- ************************************************************** +-- +-- UE Context Modification Required (gNB-DU initiated) ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- UE CONTEXT MODIFICATION REQUIRED +-- +-- ************************************************************** + +UEContextModificationRequired ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { UEContextModificationRequiredIEs} }, + ... +} + +UEContextModificationRequiredIEs F1AP-PROTOCOL-IES ::= { + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-ResourceCoordinationTransferContainer CRITICALITY ignore TYPE ResourceCoordinationTransferContainer PRESENCE optional }| + { ID id-DUtoCURRCInformation CRITICALITY reject TYPE DUtoCURRCInformation PRESENCE optional}| + { ID id-DRBs-Required-ToBeModified-List CRITICALITY reject TYPE DRBs-Required-ToBeModified-List PRESENCE optional}| + { ID id-SRBs-Required-ToBeReleased-List CRITICALITY reject TYPE SRBs-Required-ToBeReleased-List PRESENCE optional}| + { ID id-DRBs-Required-ToBeReleased-List CRITICALITY reject TYPE DRBs-Required-ToBeReleased-List PRESENCE optional}| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-BHChannels-Required-ToBeReleased-List CRITICALITY reject TYPE BHChannels-Required-ToBeReleased-List PRESENCE optional}| + { ID id-SLDRBs-Required-ToBeModified-List CRITICALITY reject TYPE SLDRBs-Required-ToBeModified-List PRESENCE optional}| + { ID id-SLDRBs-Required-ToBeReleased-List CRITICALITY reject TYPE SLDRBs-Required-ToBeReleased-List PRESENCE optional}| + { ID id-targetCellsToCancel CRITICALITY reject TYPE TargetCellList PRESENCE optional}, + ... +} + +DRBs-Required-ToBeModified-List::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-Required-ToBeModified-ItemIEs } } +DRBs-Required-ToBeReleased-List::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-Required-ToBeReleased-ItemIEs } } + +SRBs-Required-ToBeReleased-List::= SEQUENCE (SIZE(1..maxnoofSRBs)) OF ProtocolIE-SingleContainer { { SRBs-Required-ToBeReleased-ItemIEs } } + +BHChannels-Required-ToBeReleased-List ::= SEQUENCE (SIZE(1..maxnoofBHRLCChannels)) OF ProtocolIE-SingleContainer { { BHChannels-Required-ToBeReleased-ItemIEs } } + +DRBs-Required-ToBeModified-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-DRBs-Required-ToBeModified-Item CRITICALITY reject TYPE DRBs-Required-ToBeModified-Item PRESENCE mandatory}, + ... +} + +DRBs-Required-ToBeReleased-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-DRBs-Required-ToBeReleased-Item CRITICALITY reject TYPE DRBs-Required-ToBeReleased-Item PRESENCE mandatory}, + ... +} + +SRBs-Required-ToBeReleased-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-SRBs-Required-ToBeReleased-Item CRITICALITY reject TYPE SRBs-Required-ToBeReleased-Item PRESENCE mandatory}, + ... +} + +BHChannels-Required-ToBeReleased-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-BHChannels-Required-ToBeReleased-Item CRITICALITY reject TYPE BHChannels-Required-ToBeReleased-Item PRESENCE mandatory}, + ... +} + +SLDRBs-Required-ToBeModified-List::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-Required-ToBeModified-ItemIEs } } +SLDRBs-Required-ToBeReleased-List::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-Required-ToBeReleased-ItemIEs } } + +SLDRBs-Required-ToBeModified-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-SLDRBs-Required-ToBeModified-Item CRITICALITY reject TYPE SLDRBs-Required-ToBeModified-Item PRESENCE mandatory}, + ... +} + +SLDRBs-Required-ToBeReleased-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-SLDRBs-Required-ToBeReleased-Item CRITICALITY reject TYPE SLDRBs-Required-ToBeReleased-Item PRESENCE mandatory}, + ... +} + +-- ************************************************************** +-- +-- UE CONTEXT MODIFICATION CONFIRM +-- +-- ************************************************************** + +UEContextModificationConfirm::= SEQUENCE { + protocolIEs ProtocolIE-Container { { UEContextModificationConfirmIEs} }, + ... +} + + +UEContextModificationConfirmIEs F1AP-PROTOCOL-IES ::= { + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-ResourceCoordinationTransferContainer CRITICALITY ignore TYPE ResourceCoordinationTransferContainer PRESENCE optional }| + { ID id-DRBs-ModifiedConf-List CRITICALITY ignore TYPE DRBs-ModifiedConf-List PRESENCE optional}| + { ID id-RRCContainer CRITICALITY ignore TYPE RRCContainer PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-ExecuteDuplication CRITICALITY ignore TYPE ExecuteDuplication PRESENCE optional}| + { ID id-ResourceCoordinationTransferInformation CRITICALITY ignore TYPE ResourceCoordinationTransferInformation PRESENCE optional }| + { ID id-SLDRBs-ModifiedConf-List CRITICALITY ignore TYPE SLDRBs-ModifiedConf-List PRESENCE optional}, + ... +} + +DRBs-ModifiedConf-List::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-ModifiedConf-ItemIEs } } + +DRBs-ModifiedConf-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-DRBs-ModifiedConf-Item CRITICALITY ignore TYPE DRBs-ModifiedConf-Item PRESENCE mandatory}, + ... +} + +SLDRBs-ModifiedConf-List::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-ModifiedConf-ItemIEs } } + +SLDRBs-ModifiedConf-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-SLDRBs-ModifiedConf-Item CRITICALITY ignore TYPE SLDRBs-ModifiedConf-Item PRESENCE mandatory}, + ... +} + +-- ************************************************************** +-- +-- UE CONTEXT MODIFICATION REFUSE +-- +-- ************************************************************** + +UEContextModificationRefuse::= SEQUENCE { + protocolIEs ProtocolIE-Container { { UEContextModificationRefuseIEs} }, + ... +} + + +UEContextModificationRefuseIEs F1AP-PROTOCOL-IES ::= { + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + + +-- ************************************************************** +-- +-- WRITE-REPLACE WARNING ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- Write-Replace Warning Request +-- +-- ************************************************************** + +WriteReplaceWarningRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {WriteReplaceWarningRequestIEs} }, + ... +} + +WriteReplaceWarningRequestIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-PWSSystemInformation CRITICALITY reject TYPE PWSSystemInformation PRESENCE mandatory }| + { ID id-RepetitionPeriod CRITICALITY reject TYPE RepetitionPeriod PRESENCE mandatory }| + { ID id-NumberofBroadcastRequest CRITICALITY reject TYPE NumberofBroadcastRequest PRESENCE mandatory }| + { ID id-Cells-To-Be-Broadcast-List CRITICALITY reject TYPE Cells-To-Be-Broadcast-List PRESENCE optional }, + ... +} + +Cells-To-Be-Broadcast-List ::= SEQUENCE (SIZE(1.. maxCellingNBDU)) OF ProtocolIE-SingleContainer { { Cells-To-Be-Broadcast-List-ItemIEs } } + +Cells-To-Be-Broadcast-List-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-Cells-To-Be-Broadcast-Item CRITICALITY reject TYPE Cells-To-Be-Broadcast-Item PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- Write-Replace Warning Response +-- +-- ************************************************************** + +WriteReplaceWarningResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {WriteReplaceWarningResponseIEs} }, + ... +} + +WriteReplaceWarningResponseIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-Cells-Broadcast-Completed-List CRITICALITY reject TYPE Cells-Broadcast-Completed-List PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-Dedicated-SIDelivery-NeededUE-List CRITICALITY ignore TYPE Dedicated-SIDelivery-NeededUE-List PRESENCE optional }, + ... +} + +Cells-Broadcast-Completed-List ::= SEQUENCE (SIZE(1.. maxCellingNBDU)) OF ProtocolIE-SingleContainer { { Cells-Broadcast-Completed-List-ItemIEs } } + +Cells-Broadcast-Completed-List-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-Cells-Broadcast-Completed-Item CRITICALITY reject TYPE Cells-Broadcast-Completed-Item PRESENCE mandatory }, + ... +} + + +-- ************************************************************** +-- +-- PWS CANCEL ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- PWS Cancel Request +-- +-- ************************************************************** + +PWSCancelRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {PWSCancelRequestIEs} }, + ... +} + +PWSCancelRequestIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-NumberofBroadcastRequest CRITICALITY reject TYPE NumberofBroadcastRequest PRESENCE mandatory }| + { ID id-Broadcast-To-Be-Cancelled-List CRITICALITY reject TYPE Broadcast-To-Be-Cancelled-List PRESENCE optional }| + { ID id-Cancel-all-Warning-Messages-Indicator CRITICALITY reject TYPE Cancel-all-Warning-Messages-Indicator PRESENCE optional }| + { ID id-NotificationInformation CRITICALITY reject TYPE NotificationInformation PRESENCE optional}, + ... +} + +Broadcast-To-Be-Cancelled-List ::= SEQUENCE (SIZE(1.. maxCellingNBDU)) OF ProtocolIE-SingleContainer { { Broadcast-To-Be-Cancelled-List-ItemIEs } } + +Broadcast-To-Be-Cancelled-List-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-Broadcast-To-Be-Cancelled-Item CRITICALITY reject TYPE Broadcast-To-Be-Cancelled-Item PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- PWS Cancel Response +-- +-- ************************************************************** + +PWSCancelResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {PWSCancelResponseIEs} }, + ... +} + +PWSCancelResponseIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-Cells-Broadcast-Cancelled-List CRITICALITY reject TYPE Cells-Broadcast-Cancelled-List PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +Cells-Broadcast-Cancelled-List ::= SEQUENCE (SIZE(1.. maxCellingNBDU)) OF ProtocolIE-SingleContainer { { Cells-Broadcast-Cancelled-List-ItemIEs } } + +Cells-Broadcast-Cancelled-List-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-Cells-Broadcast-Cancelled-Item CRITICALITY reject TYPE Cells-Broadcast-Cancelled-Item PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- UE Inactivity Notification ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- UE Inactivity Notification +-- +-- ************************************************************** + +UEInactivityNotification ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ UEInactivityNotificationIEs}}, + ... +} + +UEInactivityNotificationIEs F1AP-PROTOCOL-IES ::= { + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-DRB-Activity-List CRITICALITY reject TYPE DRB-Activity-List PRESENCE mandatory } , + ... +} + +DRB-Activity-List::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRB-Activity-ItemIEs } } + +DRB-Activity-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-DRB-Activity-Item CRITICALITY reject TYPE DRB-Activity-Item PRESENCE mandatory}, + ... +} + +-- ************************************************************** +-- +-- Initial UL RRC Message Transfer ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- INITIAL UL RRC Message Transfer +-- +-- ************************************************************** + +InitialULRRCMessageTransfer ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ InitialULRRCMessageTransferIEs}}, + ... +} + +InitialULRRCMessageTransferIEs F1AP-PROTOCOL-IES ::= { + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-NRCGI CRITICALITY reject TYPE NRCGI PRESENCE mandatory }| + { ID id-C-RNTI CRITICALITY reject TYPE C-RNTI PRESENCE mandatory }| + { ID id-RRCContainer CRITICALITY reject TYPE RRCContainer PRESENCE mandatory }| + { ID id-DUtoCURRCContainer CRITICALITY reject TYPE DUtoCURRCContainer PRESENCE optional }| + { ID id-SULAccessIndication CRITICALITY ignore TYPE SULAccessIndication PRESENCE optional }| + { ID id-TransactionID CRITICALITY ignore TYPE TransactionID PRESENCE mandatory }| + { ID id-RANUEID CRITICALITY ignore TYPE RANUEID PRESENCE optional }| + { ID id-RRCContainer-RRCSetupComplete CRITICALITY ignore TYPE RRCContainer-RRCSetupComplete PRESENCE optional }, + ... +} + + +-- ************************************************************** +-- +-- DL RRC Message Transfer ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- DL RRC Message Transfer +-- +-- ************************************************************** + +DLRRCMessageTransfer ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ DLRRCMessageTransferIEs}}, + ... +} + +DLRRCMessageTransferIEs F1AP-PROTOCOL-IES ::= { + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-oldgNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE optional }| + { ID id-SRBID CRITICALITY reject TYPE SRBID PRESENCE mandatory }| + { ID id-ExecuteDuplication CRITICALITY ignore TYPE ExecuteDuplication PRESENCE optional}| + { ID id-RRCContainer CRITICALITY reject TYPE RRCContainer PRESENCE mandatory }| + { ID id-RAT-FrequencyPriorityInformation CRITICALITY reject TYPE RAT-FrequencyPriorityInformation PRESENCE optional }| + { ID id-RRCDeliveryStatusRequest CRITICALITY ignore TYPE RRCDeliveryStatusRequest PRESENCE optional }| + { ID id-UEContextNotRetrievable CRITICALITY reject TYPE UEContextNotRetrievable PRESENCE optional }| + { ID id-RedirectedRRCmessage CRITICALITY reject TYPE OCTET STRING PRESENCE optional }| + { ID id-PLMNAssistanceInfoForNetShar CRITICALITY ignore TYPE PLMN-Identity PRESENCE optional }| + { ID id-new-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE optional }| + { ID id-AdditionalRRMPriorityIndex CRITICALITY ignore TYPE AdditionalRRMPriorityIndex PRESENCE optional }, + ... +} +-- ************************************************************** +-- +-- UL RRC Message Transfer ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- UL RRC Message Transfer +-- +-- ************************************************************** + +ULRRCMessageTransfer ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ ULRRCMessageTransferIEs}}, + ... +} + +ULRRCMessageTransferIEs F1AP-PROTOCOL-IES ::= { + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-SRBID CRITICALITY reject TYPE SRBID PRESENCE mandatory }| + { ID id-RRCContainer CRITICALITY reject TYPE RRCContainer PRESENCE mandatory }| + { ID id-SelectedPLMNID CRITICALITY reject TYPE PLMN-Identity PRESENCE optional }| + { ID id-new-gNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- PRIVATE MESSAGE +-- +-- ************************************************************** + +PrivateMessage ::= SEQUENCE { + privateIEs PrivateIE-Container {{PrivateMessage-IEs}}, + ... +} + +PrivateMessage-IEs F1AP-PRIVATE-IES ::= { + ... +} + + +-- ************************************************************** +-- +-- System Information ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- System information Delivery Command +-- +-- ************************************************************** + +SystemInformationDeliveryCommand ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ SystemInformationDeliveryCommandIEs}}, + ... +} + +SystemInformationDeliveryCommandIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-NRCGI CRITICALITY reject TYPE NRCGI PRESENCE mandatory }| + { ID id-SItype-List CRITICALITY reject TYPE SItype-List PRESENCE mandatory }| + { ID id-ConfirmedUEID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }, + ... +} + + +-- ************************************************************** +-- +-- Paging PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- Paging +-- +-- ************************************************************** + +Paging ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ PagingIEs}}, + ... +} + +PagingIEs F1AP-PROTOCOL-IES ::= { + { ID id-UEIdentityIndexValue CRITICALITY reject TYPE UEIdentityIndexValue PRESENCE mandatory }| + { ID id-PagingIdentity CRITICALITY reject TYPE PagingIdentity PRESENCE mandatory }| + { ID id-PagingDRX CRITICALITY ignore TYPE PagingDRX PRESENCE optional }| + { ID id-PagingPriority CRITICALITY ignore TYPE PagingPriority PRESENCE optional }| + { ID id-PagingCell-List CRITICALITY ignore TYPE PagingCell-list PRESENCE mandatory }| + { ID id-PagingOrigin CRITICALITY ignore TYPE PagingOrigin PRESENCE optional }, + ... +} + +PagingCell-list::= SEQUENCE (SIZE(1.. maxnoofPagingCells)) OF ProtocolIE-SingleContainer { { PagingCell-ItemIEs } } + +PagingCell-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-PagingCell-Item CRITICALITY ignore TYPE PagingCell-Item PRESENCE mandatory} , + ... +} + + + +-- ************************************************************** +-- +-- Notify +-- +-- ************************************************************** + +Notify ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ NotifyIEs}}, + ... +} + +NotifyIEs F1AP-PROTOCOL-IES ::= { + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-DRB-Notify-List CRITICALITY reject TYPE DRB-Notify-List PRESENCE mandatory }, + ... +} + +DRB-Notify-List::= SEQUENCE (SIZE(1.. maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRB-Notify-ItemIEs } } + +DRB-Notify-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-DRB-Notify-Item CRITICALITY reject TYPE DRB-Notify-Item PRESENCE mandatory}, + ... +} + + +-- ************************************************************** +-- +-- NETWORK ACCESS RATE REDUCTION ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- Network Access Rate Reduction +-- +-- ************************************************************** + +NetworkAccessRateReduction ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ NetworkAccessRateReductionIEs }}, + ... +} + +NetworkAccessRateReductionIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-UAC-Assistance-Info CRITICALITY reject TYPE UAC-Assistance-Info PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- PWS RESTART INDICATION ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- PWS Restart Indication +-- +-- ************************************************************** + +PWSRestartIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { PWSRestartIndicationIEs} }, + ... +} + +PWSRestartIndicationIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-NR-CGI-List-For-Restart-List CRITICALITY reject TYPE NR-CGI-List-For-Restart-List PRESENCE mandatory }, + ... +} + +NR-CGI-List-For-Restart-List ::= SEQUENCE (SIZE(1.. maxCellingNBDU)) OF ProtocolIE-SingleContainer { { NR-CGI-List-For-Restart-List-ItemIEs } } + +NR-CGI-List-For-Restart-List-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-NR-CGI-List-For-Restart-Item CRITICALITY reject TYPE NR-CGI-List-For-Restart-Item PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- PWS FAILURE INDICATION ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- PWS Failure Indication +-- +-- ************************************************************** + +PWSFailureIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { PWSFailureIndicationIEs} }, + ... +} + +PWSFailureIndicationIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-PWS-Failed-NR-CGI-List CRITICALITY reject TYPE PWS-Failed-NR-CGI-List PRESENCE optional }, + ... +} + +PWS-Failed-NR-CGI-List ::= SEQUENCE (SIZE(1.. maxCellingNBDU)) OF ProtocolIE-SingleContainer { { PWS-Failed-NR-CGI-List-ItemIEs } } + +PWS-Failed-NR-CGI-List-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-PWS-Failed-NR-CGI-Item CRITICALITY reject TYPE PWS-Failed-NR-CGI-Item PRESENCE mandatory }, + ... +} + + +-- ************************************************************** +-- +-- gNB-DU STATUS INDICATION ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- gNB-DU Status Indication +-- +-- ************************************************************** + +GNBDUStatusIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {GNBDUStatusIndicationIEs} }, + ... +} + +GNBDUStatusIndicationIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-GNBDUOverloadInformation CRITICALITY reject TYPE GNBDUOverloadInformation PRESENCE mandatory }, + ... +} + + + +-- ************************************************************** +-- +-- RRC Delivery Report ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- RRC Delivery Report +-- +-- ************************************************************** + +RRCDeliveryReport ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ RRCDeliveryReportIEs}}, + ... +} + +RRCDeliveryReportIEs F1AP-PROTOCOL-IES ::= { + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-RRCDeliveryStatus CRITICALITY ignore TYPE RRCDeliveryStatus PRESENCE mandatory }| + { ID id-SRBID CRITICALITY ignore TYPE SRBID PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- F1 Removal ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- F1 Removal Request +-- +-- ************************************************************** + +F1RemovalRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ F1RemovalRequestIEs }}, + ... +} + +F1RemovalRequestIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- F1 Removal Response +-- +-- ************************************************************** + +F1RemovalResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ F1RemovalResponseIEs }}, + ... +} + +F1RemovalResponseIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + + ... +} + +-- ************************************************************** +-- +-- F1 Removal Failure +-- +-- ************************************************************** + +F1RemovalFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ F1RemovalFailureIEs }}, + ... +} + +F1RemovalFailureIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + + ... +} + + +-- ************************************************************** +-- +-- TRACE ELEMENTARY PROCEDURES +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- TRACE START +-- +-- ************************************************************** + +TraceStart ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {TraceStartIEs} }, + ... +} + +TraceStartIEs F1AP-PROTOCOL-IES ::= { + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-TraceActivation CRITICALITY ignore TYPE TraceActivation PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- DEACTIVATE TRACE +-- +-- ************************************************************** + +DeactivateTrace ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {DeactivateTraceIEs} }, + ... +} + +DeactivateTraceIEs F1AP-PROTOCOL-IES ::= { + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-TraceID CRITICALITY ignore TYPE TraceID PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- CELL TRAFFIC TRACE +-- +-- ************************************************************** + +CellTrafficTrace ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {CellTrafficTraceIEs} }, + ... +} + +CellTrafficTraceIEs F1AP-PROTOCOL-IES ::= { + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }| + {ID id-TraceID CRITICALITY ignore TYPE TraceID PRESENCE mandatory }| + {ID id-TraceCollectionEntityIPAddress CRITICALITY ignore TYPE TransportLayerAddress PRESENCE mandatory }| + {ID id-PrivacyIndicator CRITICALITY ignore TYPE PrivacyIndicator PRESENCE optional }| + + {ID id-TraceCollectionEntityURI CRITICALITY ignore TYPE URI-address PRESENCE optional }, + ... + +} + +-- ************************************************************** +-- +-- DU-CU Radio Information Transfer ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- DU-CU Radio Information Transfer +-- +-- ************************************************************** + +DUCURadioInformationTransfer ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ DUCURadioInformationTransferIEs}}, + ... +} + +DUCURadioInformationTransferIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-DUCURadioInformationType CRITICALITY ignore TYPE DUCURadioInformationType PRESENCE mandatory }, + ... +} + + + +-- ************************************************************** +-- +-- CU-DU Radio Information Transfer ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- CU-DU Radio Information Transfer +-- +-- ************************************************************** + +CUDURadioInformationTransfer ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ CUDURadioInformationTransferIEs}}, + ... +} + +CUDURadioInformationTransferIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-CUDURadioInformationType CRITICALITY ignore TYPE CUDURadioInformationType PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- IAB PROCEDURES +-- +-- ************************************************************** +-- ************************************************************** +-- +-- BAP Mapping Configuration ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- BAP MAPPING CONFIGURATION +-- ************************************************************** + + +BAPMappingConfiguration ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {BAPMappingConfiguration-IEs} }, + ... + } + +BAPMappingConfiguration-IEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory}| + { ID id-BH-Routing-Information-Added-List CRITICALITY ignore TYPE BH-Routing-Information-Added-List PRESENCE optional}| + { ID id-BH-Routing-Information-Removed-List CRITICALITY ignore TYPE BH-Routing-Information-Removed-List PRESENCE optional}| + { ID id-TrafficMappingInformation CRITICALITY ignore TYPE TrafficMappingInfo PRESENCE optional}, + ... +} + +BH-Routing-Information-Added-List ::= SEQUENCE (SIZE(1.. maxnoofRoutingEntries)) OF ProtocolIE-SingleContainer { { BH-Routing-Information-Added-List-ItemIEs } } +BH-Routing-Information-Removed-List ::= SEQUENCE (SIZE(1.. maxnoofRoutingEntries)) OF ProtocolIE-SingleContainer { { BH-Routing-Information-Removed-List-ItemIEs } } + +BH-Routing-Information-Added-List-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-BH-Routing-Information-Added-List-Item CRITICALITY ignore TYPE BH-Routing-Information-Added-List-Item PRESENCE mandatory }, + ... +} + +BH-Routing-Information-Removed-List-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-BH-Routing-Information-Removed-List-Item CRITICALITY ignore TYPE BH-Routing-Information-Removed-List-Item PRESENCE mandatory }, + ... +} + + +-- ************************************************************** +-- +-- BAP MAPPING CONFIGURATION ACKNOWLEDGE +-- ************************************************************** + +BAPMappingConfigurationAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {BAPMappingConfigurationAcknowledge-IEs} }, + ... +} + +BAPMappingConfigurationAcknowledge-IEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} + +-- ************************************************************** +-- +-- BAP MAPPING CONFIGURATION FAILURE +-- +-- ************************************************************** + +BAPMappingConfigurationFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { BAPMappingConfigurationFailureIEs} }, + ... +} + +BAPMappingConfigurationFailureIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + + +-- ************************************************************** +-- +-- GNB-DU Configuration ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- GNB-DU RESOURCE CONFIGURATION +-- ************************************************************** + + +GNBDUResourceConfiguration ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ GNBDUResourceConfigurationIEs}}, + ... +} + + +GNBDUResourceConfigurationIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-Activated-Cells-to-be-Updated-List CRITICALITY reject TYPE Activated-Cells-to-be-Updated-List PRESENCE optional}| + { ID id-Child-Nodes-List CRITICALITY reject TYPE Child-Nodes-List PRESENCE optional}, + ... +} + + + + +-- ************************************************************** +-- +-- GNB-DU RESOURCE CONFIGURATION ACKNOWLEDGE +-- ************************************************************** + + +GNBDUResourceConfigurationAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { GNBDUResourceConfigurationAcknowledgeIEs} }, + ... +} + + +GNBDUResourceConfigurationAcknowledgeIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- GNB-DU RESOURCE CONFIGURATION FAILURE +-- +-- ************************************************************** + +GNBDUResourceConfigurationFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { GNBDUResourceConfigurationFailureIEs} }, + ... +} + +GNBDUResourceConfigurationFailureIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + + +-- ************************************************************** +-- +-- IAB TNL Address Allocation ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- IAB TNL ADDRESS REQUEST +-- ************************************************************** + + + +IABTNLAddressRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {IABTNLAddressRequestIEs} }, + ... +} + +IABTNLAddressRequestIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-IABv4AddressesRequested CRITICALITY reject TYPE IABv4AddressesRequested PRESENCE optional }| + { ID id-IABIPv6RequestType CRITICALITY reject TYPE IABIPv6RequestType PRESENCE optional }| + { ID id-IAB-TNL-Addresses-To-Remove-List CRITICALITY reject TYPE IAB-TNL-Addresses-To-Remove-List PRESENCE optional }, + ... +} + + +IAB-TNL-Addresses-To-Remove-List ::= SEQUENCE (SIZE(1..maxnoofTLAsIAB)) OF ProtocolIE-SingleContainer { { IAB-TNL-Addresses-To-Remove-ItemIEs } } + +IAB-TNL-Addresses-To-Remove-ItemIEs F1AP-PROTOCOL-IES::= { + { ID id-IAB-TNL-Addresses-To-Remove-Item CRITICALITY reject TYPE IAB-TNL-Addresses-To-Remove-Item PRESENCE mandatory}, + ... +} + + +-- ************************************************************** +-- +-- IAB TNL ADDRESS RESPONSE +-- ************************************************************** + + +IABTNLAddressResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {IABTNLAddressResponseIEs} }, + ... +} + + +IABTNLAddressResponseIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-IAB-Allocated-TNL-Address-List CRITICALITY reject TYPE IAB-Allocated-TNL-Address-List PRESENCE mandatory }, + ... +} + + +IAB-Allocated-TNL-Address-List ::= SEQUENCE (SIZE(1.. maxnoofTLAsIAB)) OF ProtocolIE-SingleContainer { { IAB-Allocated-TNL-Address-List-ItemIEs } } + + +IAB-Allocated-TNL-Address-List-ItemIEs F1AP-PROTOCOL-IES::= { + { ID id-IAB-Allocated-TNL-Address-Item CRITICALITY reject TYPE IAB-Allocated-TNL-Address-Item PRESENCE mandatory}, + ... +} + +-- ************************************************************** +-- +-- IAB TNL ADDRESS FAILURE +-- +-- ************************************************************** + +IABTNLAddressFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { IABTNLAddressFailureIEs} }, + ... +} + +IABTNLAddressFailureIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- IAB UP Configuration Update ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- IAB UP Configuration Update Request +-- +-- ************************************************************** + +IABUPConfigurationUpdateRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { IABUPConfigurationUpdateRequestIEs} }, + ... +} + +IABUPConfigurationUpdateRequestIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-UL-UP-TNL-Information-to-Update-List CRITICALITY ignore TYPE UL-UP-TNL-Information-to-Update-List PRESENCE optional }| + { ID id-UL-UP-TNL-Address-to-Update-List CRITICALITY ignore TYPE UL-UP-TNL-Address-to-Update-List PRESENCE optional }, + ... +} + +UL-UP-TNL-Information-to-Update-List ::= SEQUENCE (SIZE(1.. maxnoofULUPTNLInformationforIAB)) OF ProtocolIE-SingleContainer { { UL-UP-TNL-Information-to-Update-List-ItemIEs } } + +UL-UP-TNL-Information-to-Update-List-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-UL-UP-TNL-Information-to-Update-List-Item CRITICALITY ignore TYPE UL-UP-TNL-Information-to-Update-List-Item PRESENCE mandatory }, + ... +} + +UL-UP-TNL-Address-to-Update-List ::= SEQUENCE (SIZE(1.. maxnoofUPTNLAddresses)) OF ProtocolIE-SingleContainer { { UL-UP-TNL-Address-to-Update-List-ItemIEs } } + +UL-UP-TNL-Address-to-Update-List-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-UL-UP-TNL-Address-to-Update-List-Item CRITICALITY ignore TYPE UL-UP-TNL-Address-to-Update-List-Item PRESENCE mandatory }, + ... +} + + +-- ************************************************************** +-- +-- IAB UP Configuration Update Response +-- +-- ************************************************************** + +IABUPConfigurationUpdateResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { IABUPConfigurationUpdateResponseIEs} }, + ... +} + +IABUPConfigurationUpdateResponseIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-DL-UP-TNL-Address-to-Update-List CRITICALITY reject TYPE DL-UP-TNL-Address-to-Update-List PRESENCE optional }, + ... +} + +DL-UP-TNL-Address-to-Update-List ::= SEQUENCE (SIZE(1.. maxnoofUPTNLAddresses)) OF ProtocolIE-SingleContainer { { DL-UP-TNL-Address-to-Update-List-ItemIEs } } + +DL-UP-TNL-Address-to-Update-List-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-DL-UP-TNL-Address-to-Update-List-Item CRITICALITY ignore TYPE DL-UP-TNL-Address-to-Update-List-Item PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- IAB UP Configuration Update Failure +-- +-- ************************************************************** + +IABUPConfigurationUpdateFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { IABUPConfigurationUpdateFailureIEs} }, + ... +} + +IABUPConfigurationUpdateFailureIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- Resource Status Reporting Initiation ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- Resource Status Request +-- +-- ************************************************************** + +ResourceStatusRequest::= SEQUENCE { + protocolIEs ProtocolIE-Container { {ResourceStatusRequestIEs} }, + ... +} + +ResourceStatusRequestIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-gNBCUMeasurementID CRITICALITY reject TYPE GNBCUMeasurementID PRESENCE mandatory }| + { ID id-gNBDUMeasurementID CRITICALITY ignore TYPE GNBDUMeasurementID PRESENCE conditional }| + { ID id-RegistrationRequest CRITICALITY ignore TYPE RegistrationRequest PRESENCE mandatory }| + { ID id-ReportCharacteristics CRITICALITY ignore TYPE ReportCharacteristics PRESENCE conditional }| + { ID id-CellToReportList CRITICALITY ignore TYPE CellToReportList PRESENCE optional }| + { ID id-ReportingPeriodicity CRITICALITY ignore TYPE ReportingPeriodicity PRESENCE optional }, + ... +} + + +-- ************************************************************** +-- +-- Resource Status Response +-- +-- ************************************************************** + +ResourceStatusResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { ResourceStatusResponseIEs} }, + ... +} + + +ResourceStatusResponseIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-gNBCUMeasurementID CRITICALITY reject TYPE GNBCUMeasurementID PRESENCE mandatory }| + { ID id-gNBDUMeasurementID CRITICALITY ignore TYPE GNBDUMeasurementID PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + + +-- ************************************************************** +-- +-- Resource Status Failure +-- +-- ************************************************************** + +ResourceStatusFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { ResourceStatusFailureIEs} }, + ... +} + +ResourceStatusFailureIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-gNBCUMeasurementID CRITICALITY reject TYPE GNBCUMeasurementID PRESENCE mandatory }| + { ID id-gNBDUMeasurementID CRITICALITY ignore TYPE GNBDUMeasurementID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- Resource Status Reporting ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- Resource Status Update +-- +-- ************************************************************** + +ResourceStatusUpdate ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ ResourceStatusUpdateIEs}}, + ... +} + +ResourceStatusUpdateIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-gNBCUMeasurementID CRITICALITY reject TYPE GNBCUMeasurementID PRESENCE mandatory }| + { ID id-gNBDUMeasurementID CRITICALITY ignore TYPE GNBDUMeasurementID PRESENCE mandatory }| + { ID id-HardwareLoadIndicator CRITICALITY ignore TYPE HardwareLoadIndicator PRESENCE optional }| + { ID id-TNLCapacityIndicator CRITICALITY ignore TYPE TNLCapacityIndicator PRESENCE optional }| + { ID id-CellMeasurementResultList CRITICALITY ignore TYPE CellMeasurementResultList PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- Access And Mobility Indication ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- Access And Mobility Indication +-- +-- ************************************************************** + +AccessAndMobilityIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { AccessAndMobilityIndicationIEs} }, + ... +} + +AccessAndMobilityIndicationIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-RACHReportInformationList CRITICALITY ignore TYPE RACHReportInformationList PRESENCE optional }| + { ID id-RLFReportInformationList CRITICALITY ignore TYPE RLFReportInformationList PRESENCE optional }, + ... +} + + +-- ************************************************************** +-- +-- REFERENCE TIME INFORMATION REPORTING CONTROL +-- +-- ************************************************************** + +ReferenceTimeInformationReportingControl::= SEQUENCE { + protocolIEs ProtocolIE-Container { { ReferenceTimeInformationReportingControlIEs} }, + ... +} + +ReferenceTimeInformationReportingControlIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-ReportingRequestType CRITICALITY reject TYPE ReportingRequestType PRESENCE mandatory }, + ... +} + + +-- ************************************************************** +-- +-- REFERENCE TIME INFORMATION REPORT +-- +-- ************************************************************** + +ReferenceTimeInformationReport::= SEQUENCE { + protocolIEs ProtocolIE-Container { { ReferenceTimeInformationReportIEs} }, + ... +} + +ReferenceTimeInformationReportIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY ignore TYPE TransactionID PRESENCE mandatory }| + { ID id-TimeReferenceInformation CRITICALITY ignore TYPE TimeReferenceInformation PRESENCE mandatory }, + ... +} + + +-- ************************************************************** +-- +-- Access Success +-- +-- ************************************************************** + +AccessSuccess ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ AccessSuccessIEs}}, + ... +} + +AccessSuccessIEs F1AP-PROTOCOL-IES ::= { + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-NRCGI CRITICALITY reject TYPE NRCGI PRESENCE mandatory }, + ... +} + + +-- ************************************************************** +-- +-- POSITIONING ASSISTANCE INFORMATION CONTROL ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- Positioning Assistance Information Control +-- +-- ************************************************************** + +PositioningAssistanceInformationControl ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ PositioningAssistanceInformationControlIEs}}, + ... +} + +PositioningAssistanceInformationControlIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-PosAssistance-Information CRITICALITY reject TYPE PosAssistance-Information PRESENCE optional}| + { ID id-PosBroadcast CRITICALITY reject TYPE PosBroadcast PRESENCE optional}| + { ID id-PositioningBroadcastCells CRITICALITY reject TYPE PositioningBroadcastCells PRESENCE optional}| + { ID id-RoutingID CRITICALITY reject TYPE RoutingID PRESENCE optional}, + ... +} + +-- ************************************************************** +-- +-- POSITIONING ASSISTANCE INFORMATION FEEDBACK ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- Positioning Assistance Information Feedback +-- +-- ************************************************************** + +PositioningAssistanceInformationFeedback ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ PositioningAssistanceInformationFeedbackIEs}}, + ... +} + +PositioningAssistanceInformationFeedbackIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-PosAssistanceInformationFailureList CRITICALITY reject TYPE PosAssistanceInformationFailureList PRESENCE optional}| + { ID id-PositioningBroadcastCells CRITICALITY reject TYPE PositioningBroadcastCells PRESENCE optional}| + { ID id-RoutingID CRITICALITY reject TYPE RoutingID PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} + +-- ************************************************************** +-- +-- POSITONING MEASUREMENT EXCHANGE ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- Positioning Measurement Request +-- +-- ************************************************************** + +PositioningMeasurementRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { PositioningMeasurementRequestIEs} }, + ... +} + +PositioningMeasurementRequestIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory}| + { ID id-LMF-MeasurementID CRITICALITY reject TYPE LMF-MeasurementID PRESENCE mandatory}| + { ID id-RAN-MeasurementID CRITICALITY reject TYPE RAN-MeasurementID PRESENCE mandatory}| + { ID id-TRP-MeasurementRequestList CRITICALITY reject TYPE TRP-MeasurementRequestList PRESENCE mandatory}| + { ID id-PosReportCharacteristics CRITICALITY reject TYPE PosReportCharacteristics PRESENCE mandatory}| + { ID id-PosMeasurementPeriodicity CRITICALITY reject TYPE MeasurementPeriodicity PRESENCE conditional }| + -- The above IE shall be present if the PosReportCharacteristics IE is set to “periodic” -- + { ID id-PosMeasurementQuantities CRITICALITY reject TYPE PosMeasurementQuantities PRESENCE mandatory}| + { ID id-SFNInitialisationTime CRITICALITY ignore TYPE RelativeTime1900 PRESENCE optional }| + { ID id-SRSConfiguration CRITICALITY ignore TYPE SRSConfiguration PRESENCE optional}| + { ID id-MeasurementBeamInfoRequest CRITICALITY ignore TYPE MeasurementBeamInfoRequest PRESENCE optional }| + { ID id-SystemFrameNumber CRITICALITY ignore TYPE SystemFrameNumber PRESENCE optional}| + { ID id-SlotNumber CRITICALITY ignore TYPE SlotNumber PRESENCE optional}| + { ID id-PosMeasurementPeriodicityExtended CRITICALITY reject TYPE MeasurementPeriodicityExtended PRESENCE conditional } + -- The IE shall be present the MeasurementPeriodicity IE is set to the value "extended" +, + ... +} + + +-- ************************************************************** +-- +-- Positioning Measurement Response +-- +-- ************************************************************** + +PositioningMeasurementResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { PositioningMeasurementResponseIEs} }, + ... +} + + +PositioningMeasurementResponseIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory}| + { ID id-LMF-MeasurementID CRITICALITY reject TYPE LMF-MeasurementID PRESENCE mandatory}| + { ID id-RAN-MeasurementID CRITICALITY reject TYPE RAN-MeasurementID PRESENCE mandatory}| + { ID id-PosMeasurementResultList CRITICALITY reject TYPE PosMeasurementResultList PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + + +-- ************************************************************** +-- +-- Positioning Measurement Failure +-- +-- ************************************************************** + +PositioningMeasurementFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { PositioningMeasurementFailureIEs} }, + ... +} + +PositioningMeasurementFailureIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-LMF-MeasurementID CRITICALITY reject TYPE LMF-MeasurementID PRESENCE mandatory }| + { ID id-RAN-MeasurementID CRITICALITY reject TYPE RAN-MeasurementID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + + +-- ************************************************************** +-- +-- POSITIONING MEASUREMENT REPORT ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- Positioning Measurement Report +-- +-- ************************************************************** + +PositioningMeasurementReport ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { PositioningMeasurementReportIEs} }, + ... +} + +PositioningMeasurementReportIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-LMF-MeasurementID CRITICALITY reject TYPE LMF-MeasurementID PRESENCE mandatory }| + { ID id-RAN-MeasurementID CRITICALITY reject TYPE RAN-MeasurementID PRESENCE mandatory }| + { ID id-PosMeasurementResultList CRITICALITY reject TYPE PosMeasurementResultList PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- POSITIONING MEASUREMENT ABORT ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- Positioning Measurement Abort +-- +-- ************************************************************** + +PositioningMeasurementAbort ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { PositioningMeasurementAbortIEs} }, + ... +} + +PositioningMeasurementAbortIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-LMF-MeasurementID CRITICALITY reject TYPE LMF-MeasurementID PRESENCE mandatory }| + { ID id-RAN-MeasurementID CRITICALITY reject TYPE RAN-MeasurementID PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- POSITIONING MEASUREMENT FAILURE INDICATION ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- Positioning Measurement Failure Indication +-- +-- ************************************************************** + +PositioningMeasurementFailureIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { PositioningMeasurementFailureIndicationIEs} }, + ... +} + +PositioningMeasurementFailureIndicationIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-LMF-MeasurementID CRITICALITY reject TYPE LMF-MeasurementID PRESENCE mandatory }| + { ID id-RAN-MeasurementID CRITICALITY reject TYPE RAN-MeasurementID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- POSITIONING MEASUREMENT UPDATE ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- Positioning Measurement Update +-- +-- ************************************************************** + +PositioningMeasurementUpdate ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { PositioningMeasurementUpdateIEs} }, + ... +} + +PositioningMeasurementUpdateIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-LMF-MeasurementID CRITICALITY reject TYPE LMF-MeasurementID PRESENCE mandatory }| + { ID id-RAN-MeasurementID CRITICALITY reject TYPE RAN-MeasurementID PRESENCE mandatory }| + { ID id-SRSConfiguration CRITICALITY ignore TYPE SRSConfiguration PRESENCE optional}, + ... +} + + +-- ************************************************************** +-- +-- TRP INFORMATION EXCHANGE ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- TRP Information Request +-- +-- ************************************************************** + +TRPInformationRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { TRPInformationRequestIEs} }, + ... +} + +TRPInformationRequestIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-TRPList CRITICALITY ignore TYPE TRPList PRESENCE optional }| + { ID id-TRPInformationTypeListTRPReq CRITICALITY reject TYPE TRPInformationTypeListTRPReq PRESENCE mandatory }, + ... +} + +TRPInformationTypeListTRPReq ::= SEQUENCE (SIZE(1.. maxnoofTRPInfoTypes)) OF ProtocolIE-SingleContainer { { TRPInformationTypeItemTRPReq } } + +TRPInformationTypeItemTRPReq F1AP-PROTOCOL-IES ::= { + { ID id-TRPInformationTypeItem CRITICALITY reject TYPE TRPInformationTypeItem PRESENCE mandatory }, + ... +} + + +-- ************************************************************** +-- +-- TRP Information Response +-- +-- ************************************************************** + +TRPInformationResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { TRPInformationResponseIEs} }, + ... +} + +TRPInformationResponseIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-TRPInformationListTRPResp CRITICALITY ignore TYPE TRPInformationListTRPResp PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +TRPInformationListTRPResp ::= SEQUENCE (SIZE(1.. maxnoofTRPs)) OF ProtocolIE-SingleContainer { { TRPInformationItemTRPResp } } + +TRPInformationItemTRPResp F1AP-PROTOCOL-IES ::= { + { ID id-TRPInformationItem CRITICALITY ignore TYPE TRPInformationItem PRESENCE mandatory }, + ... +} + + +-- ************************************************************** +-- +-- TRP Information Failure +-- +-- ************************************************************** + +TRPInformationFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { TRPInformationFailureIEs} }, + ... +} + +TRPInformationFailureIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + + +-- ************************************************************** +-- +-- POSITIONING INFORMATION EXCHANGE ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- Positioning Information Request +-- +-- ************************************************************** + +PositioningInformationRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { PositioningInformationRequestIEs} }, + ... +} + +PositioningInformationRequestIEs F1AP-PROTOCOL-IES ::= { + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-RequestedSRSTransmissionCharacteristics CRITICALITY ignore TYPE RequestedSRSTransmissionCharacteristics PRESENCE optional}, + ... +} + + +-- ************************************************************** +-- +-- Positioning Information Response +-- +-- ************************************************************** + +PositioningInformationResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { PositioningInformationResponseIEs} }, + ... +} + + +PositioningInformationResponseIEs F1AP-PROTOCOL-IES ::= { + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-SRSConfiguration CRITICALITY ignore TYPE SRSConfiguration PRESENCE optional}| + { ID id-SFNInitialisationTime CRITICALITY ignore TYPE RelativeTime1900 PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + + +-- ************************************************************** +-- +-- Positioning Information Failure +-- +-- ************************************************************** + +PositioningInformationFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { PositioningInformationFailureIEs} }, + ... +} + +PositioningInformationFailureIEs F1AP-PROTOCOL-IES ::= { + + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + + +-- ************************************************************** +-- +-- POSITIONING ACTIVATION PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- Positioning Activation Request +-- +-- ************************************************************** + +PositioningActivationRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { PositioningActivationRequestIEs} }, + ... +} + +PositioningActivationRequestIEs F1AP-PROTOCOL-IES ::= { + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-SRSType CRITICALITY reject TYPE SRSType PRESENCE mandatory }| + { ID id-ActivationTime CRITICALITY ignore TYPE RelativeTime1900 PRESENCE optional }, + ... +} + +SRSType ::= CHOICE { + semipersistentSRS SemipersistentSRS, + aperiodicSRS AperiodicSRS, + choice-extension ProtocolIE-SingleContainer { { SRSType-ExtIEs} } +} + +SRSType-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +SemipersistentSRS ::= SEQUENCE { + sRSResourceSetID SRSResourceSetID, + sRSSpatialRelation SpatialRelationInfo OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {SemipersistentSRS-ExtIEs} } OPTIONAL, + ... +} + +SemipersistentSRS-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-SRSSpatialRelationPerSRSResource CRITICALITY ignore EXTENSION SpatialRelationPerSRSResource PRESENCE optional}, + ... +} + +AperiodicSRS ::= SEQUENCE { + aperiodic ENUMERATED {true, ...}, + sRSResourceTrigger SRSResourceTrigger OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {AperiodicSRS-ExtIEs} } OPTIONAL, + ... +} + +AperiodicSRS-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + + +-- ************************************************************** +-- +-- Positioning Activation Response +-- +-- ************************************************************** + +PositioningActivationResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { PositioningActivationResponseIEs} }, + ... +} + + +PositioningActivationResponseIEs F1AP-PROTOCOL-IES ::= { + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-SystemFrameNumber CRITICALITY ignore TYPE SystemFrameNumber PRESENCE optional }| + { ID id-SlotNumber CRITICALITY ignore TYPE SlotNumber PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + + + + +-- ************************************************************** +-- +-- Positioning Activation Failure +-- +-- ************************************************************** + +PositioningActivationFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { PositioningActivationFailureIEs} }, + ... +} + +PositioningActivationFailureIEs F1AP-PROTOCOL-IES ::= { + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + + +-- ************************************************************** +-- +-- POSITIONING DEACTIVATION PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- Positioning Deactivation +-- +-- ************************************************************** + +PositioningDeactivation ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { PositioningDeactivationIEs} }, + ... +} + +PositioningDeactivationIEs F1AP-PROTOCOL-IES ::= { + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-AbortTransmission CRITICALITY ignore TYPE AbortTransmission PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- POSITIONING INFORMATION UPDATE PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- Positioning Information Update +-- +-- ************************************************************** + +PositioningInformationUpdate ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { PositioningInformationUpdateIEs} }, + ... +} + + +PositioningInformationUpdateIEs F1AP-PROTOCOL-IES ::= { + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-SRSConfiguration CRITICALITY ignore TYPE SRSConfiguration PRESENCE optional}| + { ID id-SFNInitialisationTime CRITICALITY ignore TYPE RelativeTime1900 PRESENCE optional}, + ... +} + +-- ************************************************************** +-- +-- E-CID MEASUREMENT PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- E-CID Measurement Initiation Request +-- +-- ************************************************************** + +E-CIDMeasurementInitiationRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{E-CIDMeasurementInitiationRequest-IEs}}, + ... +} + +E-CIDMeasurementInitiationRequest-IEs F1AP-PROTOCOL-IES ::= { + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-LMF-UE-MeasurementID CRITICALITY reject TYPE LMF-UE-MeasurementID PRESENCE mandatory }| + { ID id-RAN-UE-MeasurementID CRITICALITY reject TYPE RAN-UE-MeasurementID PRESENCE mandatory }| + { ID id-E-CID-ReportCharacteristics CRITICALITY reject TYPE E-CID-ReportCharacteristics PRESENCE mandatory }| + { ID id-E-CID-MeasurementPeriodicity CRITICALITY reject TYPE MeasurementPeriodicity PRESENCE conditional }| +-- The above IE shall be present if the E-CID-ReportCharacteristics IE is set to “periodic” –- + { ID id-E-CID-MeasurementQuantities CRITICALITY reject TYPE E-CID-MeasurementQuantities PRESENCE mandatory }| + { ID id-PosMeasurementPeriodicityNR-AoA CRITICALITY reject TYPE PosMeasurementPeriodicityNR-AoA PRESENCE conditional }, +-- The IE shall be present if the E-CID-ReportCharacteristics IE is set to “periodic” and the E-CID-MeasurementQuantities-Item IE in the E-CID-MeasurementQuantities IE is set to the value "angleOfArrivalNR"-- + ... +} + +-- ************************************************************** +-- +-- E-CID Measurement Initiation Response +-- +-- ************************************************************** + +E-CIDMeasurementInitiationResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{E-CIDMeasurementInitiationResponse-IEs}}, + ... +} + +E-CIDMeasurementInitiationResponse-IEs F1AP-PROTOCOL-IES ::= { + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-LMF-UE-MeasurementID CRITICALITY reject TYPE LMF-UE-MeasurementID PRESENCE mandatory }| + { ID id-RAN-UE-MeasurementID CRITICALITY reject TYPE RAN-UE-MeasurementID PRESENCE mandatory }| + { ID id-E-CID-MeasurementResult CRITICALITY ignore TYPE E-CID-MeasurementResult PRESENCE optional}| + { ID id-Cell-Portion-ID CRITICALITY ignore TYPE Cell-Portion-ID PRESENCE optional}| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} + +-- ************************************************************** +-- +-- E-CID Measurement Initiation Failure +-- +-- ************************************************************** + +E-CIDMeasurementInitiationFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{E-CIDMeasurementInitiationFailure-IEs}}, + ... +} + + +E-CIDMeasurementInitiationFailure-IEs F1AP-PROTOCOL-IES ::= { + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-LMF-UE-MeasurementID CRITICALITY reject TYPE LMF-UE-MeasurementID PRESENCE mandatory }| + { ID id-RAN-UE-MeasurementID CRITICALITY reject TYPE RAN-UE-MeasurementID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, + ... +} + +-- ************************************************************** +-- +-- E-CID MEASUREMENT FAILURE INDICATION PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- E-CID Measurement Failure Indication +-- +-- ************************************************************** + +E-CIDMeasurementFailureIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{E-CIDMeasurementFailureIndication-IEs}}, + ... +} + + +E-CIDMeasurementFailureIndication-IEs F1AP-PROTOCOL-IES ::= { + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-LMF-UE-MeasurementID CRITICALITY reject TYPE LMF-UE-MeasurementID PRESENCE mandatory }| + { ID id-RAN-UE-MeasurementID CRITICALITY reject TYPE RAN-UE-MeasurementID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}, + ... +} + +-- ************************************************************** +-- +-- E-CID MEASUREMENT REPORT PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- E-CID Measurement Report +-- +-- ************************************************************** + +E-CIDMeasurementReport ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{E-CIDMeasurementReport-IEs}}, + ... +} + + +E-CIDMeasurementReport-IEs F1AP-PROTOCOL-IES ::= { + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-LMF-UE-MeasurementID CRITICALITY reject TYPE LMF-UE-MeasurementID PRESENCE mandatory }| + { ID id-RAN-UE-MeasurementID CRITICALITY reject TYPE RAN-UE-MeasurementID PRESENCE mandatory }| + { ID id-E-CID-MeasurementResult CRITICALITY ignore TYPE E-CID-MeasurementResult PRESENCE mandatory }| + { ID id-Cell-Portion-ID CRITICALITY ignore TYPE Cell-Portion-ID PRESENCE optional}, + + ... +} + +-- ************************************************************** +-- +-- E-CID MEASUREMENT TERMINATION PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- E-CID Measurement Termination Command +-- +-- ************************************************************** + + +E-CIDMeasurementTerminationCommand ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{E-CIDMeasurementTerminationCommand-IEs}}, + ... +} + + +E-CIDMeasurementTerminationCommand-IEs F1AP-PROTOCOL-IES ::= { + { ID id-gNB-CU-UE-F1AP-ID CRITICALITY reject TYPE GNB-CU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-gNB-DU-UE-F1AP-ID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }| + { ID id-LMF-UE-MeasurementID CRITICALITY reject TYPE LMF-UE-MeasurementID PRESENCE mandatory }| + { ID id-RAN-UE-MeasurementID CRITICALITY reject TYPE RAN-UE-MeasurementID PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- Positioning System information Delivery Command +-- +-- ************************************************************** + +PosSystemInformationDeliveryCommand ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{ PosSystemInformationDeliveryCommandIEs}}, + ... +} + +PosSystemInformationDeliveryCommandIEs F1AP-PROTOCOL-IES ::= { + { ID id-TransactionID CRITICALITY reject TYPE TransactionID PRESENCE mandatory }| + { ID id-NRCGI CRITICALITY reject TYPE NRCGI PRESENCE mandatory }| + { ID id-PosSItypeList CRITICALITY reject TYPE PosSItypeList PRESENCE mandatory }| + { ID id-ConfirmedUEID CRITICALITY reject TYPE GNB-DU-UE-F1AP-ID PRESENCE mandatory }, + ... +} + + + +END +-- ASN1STOP +-- ASN1START +-- ************************************************************** +-- +-- Information Element Definitions +-- +-- ************************************************************** + +F1AP-IEs { +itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) +ngran-access (22) modules (3) f1ap (3) version1 (1) f1ap-IEs (2) } + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +IMPORTS + id-gNB-CUSystemInformation, + id-HandoverPreparationInformation, + id-TAISliceSupportList, + id-RANAC, + id-BearerTypeChange, + id-Cell-Direction, + id-Cell-Type, + id-CellGroupConfig, + id-AvailablePLMNList, + id-PDUSessionID, + id-ULPDUSessionAggregateMaximumBitRate, + id-DC-Based-Duplication-Configured, + id-DC-Based-Duplication-Activation, + id-Duplication-Activation, + id-DLPDCPSNLength, + id-ULPDCPSNLength, + id-RLC-Status, + id-MeasurementTimingConfiguration, + id-DRB-Information, + id-QoSFlowMappingIndication, + id-ServingCellMO, + id-RLCMode, + id-ExtendedServedPLMNs-List, + id-ExtendedAvailablePLMN-List, + id-DRX-LongCycleStartOffset, + id-SelectedBandCombinationIndex, + id-SelectedFeatureSetEntryIndex, + id-Ph-InfoSCG, + id-latest-RRC-Version-Enhanced, + id-RequestedBandCombinationIndex, + id-RequestedFeatureSetEntryIndex, + id-DRX-Config, + id-UEAssistanceInformation, + id-PDCCH-BlindDetectionSCG, + id-Requested-PDCCH-BlindDetectionSCG, + id-BPLMN-ID-Info-List, + id-NotificationInformation, + id-TNLAssociationTransportLayerAddressgNBDU, + id-portNumber, + id-AdditionalSIBMessageList, + id-IgnorePRACHConfiguration, + id-CG-Config, + id-Ph-InfoMCG, + id-AggressorgNBSetID, + id-VictimgNBSetID, + id-MeasGapSharingConfig, + id-systemInformationAreaID, + id-areaScope, + id-IntendedTDD-DL-ULConfig, + id-QosMonitoringRequest, + id-BHInfo, + id-IAB-Info-IAB-DU, + id-IAB-Info-IAB-donor-CU, + id-IAB-Barred, + id-SIB12-message, + id-SIB13-message, + id-SIB14-message, + id-UEAssistanceInformationEUTRA, + id-SL-PHY-MAC-RLC-Config, + id-SL-ConfigDedicatedEUTRA-Info, + id-AlternativeQoSParaSetList, + id-CurrentQoSParaSetIndex, + id-CarrierList, + id-ULCarrierList, + id-FrequencyShift7p5khz, + id-SSB-PositionsInBurst, + id-NRPRACHConfig, + id-TDD-UL-DLConfigCommonNR, + id-CNPacketDelayBudgetDownlink, + id-CNPacketDelayBudgetUplink, + id-ExtendedPacketDelayBudget, + id-TSCTrafficCharacteristics, + id-AdditionalPDCPDuplicationTNL-List, + id-RLCDuplicationInformation, + id-AdditionalDuplicationIndication, + id-mdtConfiguration, + id-TraceCollectionEntityURI, + id-NID, + id-NPNSupportInfo, + id-NPNBroadcastInformation, + id-AvailableSNPN-ID-List, + id-SIB10-message, + id-RequestedP-MaxFR2, + id-DLCarrierList, + id-ExtendedTAISliceSupportList, + id-E-CID-MeasurementQuantities-Item, + id-ConfiguredTACIndication, + id-NRCGI, + id-SFN-Offset, + id-TransmissionStopIndicator, + id-SrsFrequency, + id-EstimatedArrivalProbability, + id-TRPType, + id-SRSSpatialRelationPerSRSResource, + id-PDCPTerminatingNodeDLTNLAddrInfo, + id-ENBDLTNLAddress, + id-PRS-Resource-ID, + id-LocationMeasurementInformation, + id-InterFrequencyConfig-NoGap, + id-NeedForGapsInfoNR, + id-ConfigRestrictInfoDAPS, + id-L571Info, + id-L1151Info, + id-ServCellInfoList, + id-Transmission-Bandwidth-asymmetric, + maxNRARFCN, + maxnoofErrors, + maxnoofBPLMNs, + maxnoofBPLMNsNR, + maxnoofDLUPTNLInformation, + maxnoofNrCellBands, + maxnoofULUPTNLInformation, + maxnoofQoSFlows, + maxnoofSliceItems, + maxnoofSIBTypes, + maxnoofSITypes, + maxCellineNB, + maxnoofExtendedBPLMNs, + maxnoofAdditionalSIBs, + maxnoofUACPLMNs, + maxnoofUACperPLMN, + maxCellingNBDU, + maxnoofTLAs, + maxnoofGTPTLAs, + maxnoofslots, + maxnoofNonUPTrafficMappings, + maxnoofServingCells, + maxnoofServedCellsIAB, + maxnoofChildIABNodes, + maxnoofIABSTCInfo, + maxnoofSymbols, + maxnoofDUFSlots, + maxnoofHSNASlots, + maxnoofEgressLinks, + maxnoofMappingEntries, + maxnoofDSInfo, + maxnoofQoSParaSets, + maxnoofPC5QoSFlows, + maxnoofSSBAreas, + maxnoofNRSCSs, + maxnoofPhysicalResourceBlocks, + maxnoofPhysicalResourceBlocks-1, + maxnoofPRACHconfigs, + maxnoofRACHReports, + maxnoofRLFReports, + maxnoofAdditionalPDCPDuplicationTNL, + maxnoofRLCDuplicationState, + maxnoofCHOcells, + maxnoofMDTPLMNs, + maxnoofCAGsupported, + maxnoofNIDsupported, + maxnoofExtSliceItems, + maxnoofPosMeas, + maxnoofTRPInfoTypes, + maxnoofSRSTriggerStates, + maxnoofSpatialRelations, + maxnoBcastCell, + maxnoofTRPs, + maxnoofAngleInfo, + maxnooflcs-gcs-translation, + maxnoofPath, + maxnoofMeasE-CID, + maxnoofSSBs, + maxnoSRS-ResourceSets, + maxnoSRS-ResourcePerSet, + maxnoSRS-Carriers, + maxnoSCSs, + maxnoSRS-Resources, + maxnoSRS-PosResources, + maxnoSRS-PosResourceSets, + maxnoSRS-PosResourcePerSet, + maxnoofPRS-ResourceSets, + maxnoofPRS-ResourcesPerSet, + maxNoOfMeasTRPs, + maxnoofPRSresourceSets, + maxnoofPRSresources, + maxnoofPosSITypes + + + +FROM F1AP-Constants + + Criticality, + ProcedureCode, + ProtocolIE-ID, + TriggeringMessage + +FROM F1AP-CommonDataTypes + + ProtocolExtensionContainer{}, + F1AP-PROTOCOL-EXTENSION, + ProtocolIE-SingleContainer{}, + F1AP-PROTOCOL-IES + +FROM F1AP-Containers; + +-- A + +AbortTransmission ::= CHOICE { + sRSResourceSetID SRSResourceSetID, + releaseALL NULL, + choice-extension ProtocolIE-SingleContainer { { AbortTransmission-ExtIEs } } +} + +AbortTransmission-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +AccessPointPosition ::= SEQUENCE { + latitudeSign ENUMERATED {north, south}, + latitude INTEGER (0..8388607), + longitude INTEGER (-8388608..8388607), + directionOfAltitude ENUMERATED {height, depth}, + altitude INTEGER (0..32767), + uncertaintySemi-major INTEGER (0..127), + uncertaintySemi-minor INTEGER (0..127), + orientationOfMajorAxis INTEGER (0..179), + uncertaintyAltitude INTEGER (0..127), + confidence INTEGER (0..100), + iE-Extensions ProtocolExtensionContainer { { AccessPointPosition-ExtIEs} } OPTIONAL +} + +AccessPointPosition-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +Activated-Cells-to-be-Updated-List ::= SEQUENCE (SIZE(1..maxnoofServedCellsIAB)) OF Activated-Cells-to-be-Updated-List-Item + +Activated-Cells-to-be-Updated-List-Item ::= SEQUENCE{ + nRCGI NRCGI, + iAB-DU-Cell-Resource-Configuration-Mode-Info IAB-DU-Cell-Resource-Configuration-Mode-Info, + iE-Extensions ProtocolExtensionContainer { { Activated-Cells-to-be-Updated-List-Item-ExtIEs} } OPTIONAL +} + +Activated-Cells-to-be-Updated-List-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +ActiveULBWP ::= SEQUENCE { + locationAndBandwidth INTEGER (0..37949,...), + subcarrierSpacing ENUMERATED {kHz15, kHz30, kHz60, kHz120,...}, + cyclicPrefix ENUMERATED {normal, extended}, + txDirectCurrentLocation INTEGER (0..3301,...), + shift7dot5kHz ENUMERATED {true, ...} OPTIONAL, + sRSConfig SRSConfig, + iE-Extensions ProtocolExtensionContainer { { ActiveULBWP-ExtIEs} } OPTIONAL +} + +ActiveULBWP-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +AdditionalDuplicationIndication ::= ENUMERATED { + three, + four, + ... +} + + +AdditionalPath-List::= SEQUENCE (SIZE(1..maxnoofPath)) OF AdditionalPath-Item + +AdditionalPath-Item ::=SEQUENCE { + relativePathDelay RelativePathDelay, + pathQuality TRPMeasurementQuality OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { AdditionalPath-Item-ExtIEs } } OPTIONAL +} + +AdditionalPath-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + + +AdditionalPDCPDuplicationTNL-List ::= SEQUENCE (SIZE(1..maxnoofAdditionalPDCPDuplicationTNL)) OF AdditionalPDCPDuplicationTNL-Item + +AdditionalPDCPDuplicationTNL-Item ::=SEQUENCE { + additionalPDCPDuplicationUPTNLInformation UPTransportLayerInformation, + iE-Extensions ProtocolExtensionContainer { { AdditionalPDCPDuplicationTNL-ItemExtIEs } } OPTIONAL, + ... +} + +AdditionalPDCPDuplicationTNL-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { +{ ID id-BHInfo CRITICALITY ignore EXTENSION BHInfo PRESENCE optional }, + ... +} + +AdditionalSIBMessageList ::= SEQUENCE (SIZE(1..maxnoofAdditionalSIBs)) OF AdditionalSIBMessageList-Item + +AdditionalSIBMessageList-Item ::= SEQUENCE { + additionalSIB OCTET STRING, + iE-Extensions ProtocolExtensionContainer { { AdditionalSIBMessageList-Item-ExtIEs} } OPTIONAL +} + +AdditionalSIBMessageList-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +AdditionalRRMPriorityIndex ::= BIT STRING (SIZE(32)) + +AggressorCellList ::= SEQUENCE (SIZE(1..maxCellingNBDU)) OF AggressorCellList-Item + +AggressorCellList-Item ::= SEQUENCE { + aggressorCell-ID NRCGI, + iE-Extensions ProtocolExtensionContainer { { AggressorCellList-Item-ExtIEs } } OPTIONAL +} + +AggressorCellList-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +AggressorgNBSetID ::= SEQUENCE { + aggressorgNBSetID GNBSetID, + iE-Extensions ProtocolExtensionContainer { { AggressorgNBSetID-ExtIEs } } OPTIONAL +} + +AggressorgNBSetID-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +AllocationAndRetentionPriority ::= SEQUENCE { + priorityLevel PriorityLevel, + pre-emptionCapability Pre-emptionCapability, + pre-emptionVulnerability Pre-emptionVulnerability, + iE-Extensions ProtocolExtensionContainer { {AllocationAndRetentionPriority-ExtIEs} } OPTIONAL, + ... +} + +AllocationAndRetentionPriority-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +AlternativeQoSParaSetList ::= SEQUENCE (SIZE(1..maxnoofQoSParaSets)) OF AlternativeQoSParaSetItem + +AlternativeQoSParaSetItem ::= SEQUENCE { + alternativeQoSParaSetIndex QoSParaSetIndex, + guaranteedFlowBitRateDL BitRate OPTIONAL, + guaranteedFlowBitRateUL BitRate OPTIONAL, + packetDelayBudget PacketDelayBudget OPTIONAL, + packetErrorRate PacketErrorRate OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {AlternativeQoSParaSetItem-ExtIEs} } OPTIONAL, + ... +} + +AlternativeQoSParaSetItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + + +AngleMeasurementQuality ::= SEQUENCE { + azimuthQuality INTEGER(0..255), + zenithQuality INTEGER(0..255) OPTIONAL, + resolution ENUMERATED{deg0dot1,...}, + iE-Extensions ProtocolExtensionContainer { { AngleMeasurementQuality-ExtIEs } } OPTIONAL +} + +AngleMeasurementQuality-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + + +AperiodicSRSResourceTriggerList ::= SEQUENCE (SIZE(1..maxnoofSRSTriggerStates)) OF AperiodicSRSResourceTrigger + +AperiodicSRSResourceTrigger ::= INTEGER (1..3) + +Associated-SCell-Item ::= SEQUENCE { + sCell-ID NRCGI, + iE-Extensions ProtocolExtensionContainer { { Associated-SCell-ItemExtIEs } } OPTIONAL +} + +Associated-SCell-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +AvailablePLMNList ::= SEQUENCE (SIZE(1..maxnoofBPLMNs)) OF AvailablePLMNList-Item + +AvailablePLMNList-Item ::= SEQUENCE { + pLMNIdentity PLMN-Identity, + iE-Extensions ProtocolExtensionContainer { { AvailablePLMNList-Item-ExtIEs} } OPTIONAL +} + +AvailablePLMNList-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +AvailableSNPN-ID-List ::= SEQUENCE (SIZE(1..maxnoofNIDsupported)) OF AvailableSNPN-ID-List-Item + +AvailableSNPN-ID-List-Item ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + availableNIDList BroadcastNIDList, + iE-Extensions ProtocolExtensionContainer { { AvailableSNPN-ID-List-ItemExtIEs} } OPTIONAL, + ... +} + +AvailableSNPN-ID-List-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +AveragingWindow ::= INTEGER (0..4095, ...) + +AreaScope ::= ENUMERATED {true, ...} + +-- B + +BandwidthSRS ::= CHOICE { + fR1 FR1-Bandwidth, + fR2 FR2-Bandwidth, + choice-extension ProtocolIE-SingleContainer {{ BandwidthSRS-ExtIEs }} +} + +BandwidthSRS-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + + +BAPAddress ::= BIT STRING (SIZE(10)) + +BAPCtrlPDUChannel ::= ENUMERATED {true, ...} + +BAPlayerBHRLCchannelMappingInfo ::= SEQUENCE { + bAPlayerBHRLCchannelMappingInfoToAdd BAPlayerBHRLCchannelMappingInfoList OPTIONAL, + bAPlayerBHRLCchannelMappingInfoToRemove MappingInformationtoRemove OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { BAPlayerBHRLCchannelMappingInfo-ExtIEs} } OPTIONAL, + ... +} + +BAPlayerBHRLCchannelMappingInfo-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +BAPlayerBHRLCchannelMappingInfoList ::= SEQUENCE (SIZE(1..maxnoofMappingEntries)) OF BAPlayerBHRLCchannelMappingInfo-Item + +BAPlayerBHRLCchannelMappingInfo-Item ::= SEQUENCE { + mappingInformationIndex MappingInformationIndex, + priorHopBAPAddress BAPAddress OPTIONAL, + ingressbHRLCChannelID BHRLCChannelID OPTIONAL, + nextHopBAPAddress BAPAddress OPTIONAL, + egressbHRLCChannelID BHRLCChannelID OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { BAPlayerBHRLCchannelMappingInfo-ItemExtIEs} } OPTIONAL, + ... +} + +BAPlayerBHRLCchannelMappingInfo-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +BAPPathID ::= BIT STRING (SIZE(10)) + +BAPRoutingID ::= SEQUENCE { + bAPAddress BAPAddress, + bAPPathID BAPPathID, + iE-Extensions ProtocolExtensionContainer { { BAPRoutingIDExtIEs } } OPTIONAL +} + +BAPRoutingIDExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +BitRate ::= INTEGER (0..4000000000000,...) + +BearerTypeChange ::= ENUMERATED {true, ...} + +BHRLCChannelID ::= BIT STRING (SIZE(16)) + +BHChannels-FailedToBeModified-Item ::= SEQUENCE { + bHRLCChannelID BHRLCChannelID, + cause Cause OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { BHChannels-FailedToBeModified-ItemExtIEs } } OPTIONAL +} + +BHChannels-FailedToBeModified-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +BHChannels-FailedToBeSetup-Item ::= SEQUENCE { + bHRLCChannelID BHRLCChannelID, + cause Cause OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { BHChannels-FailedToBeSetup-ItemExtIEs } } OPTIONAL +} + +BHChannels-FailedToBeSetup-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +BHChannels-FailedToBeSetupMod-Item ::= SEQUENCE { + bHRLCChannelID BHRLCChannelID, + cause Cause OPTIONAL , + iE-Extensions ProtocolExtensionContainer { { BHChannels-FailedToBeSetupMod-ItemExtIEs } } OPTIONAL +} + +BHChannels-FailedToBeSetupMod-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +BHChannels-Modified-Item ::= SEQUENCE { + bHRLCChannelID BHRLCChannelID, + iE-Extensions ProtocolExtensionContainer { { BHChannels-Modified-ItemExtIEs } } OPTIONAL +} + +BHChannels-Modified-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +BHChannels-Required-ToBeReleased-Item ::= SEQUENCE { + bHRLCChannelID BHRLCChannelID, + iE-Extensions ProtocolExtensionContainer { { BHChannels-Required-ToBeReleased-ItemExtIEs } } OPTIONAL +} + +BHChannels-Required-ToBeReleased-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +BHChannels-Setup-Item ::= SEQUENCE { + bHRLCChannelID BHRLCChannelID, + iE-Extensions ProtocolExtensionContainer { { BHChannels-Setup-ItemExtIEs } } OPTIONAL +} + +BHChannels-Setup-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +BHChannels-SetupMod-Item ::= SEQUENCE { + bHRLCChannelID BHRLCChannelID, + iE-Extensions ProtocolExtensionContainer { { BHChannels-SetupMod-ItemExtIEs } } OPTIONAL +} + +BHChannels-SetupMod-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +BHChannels-ToBeModified-Item ::= SEQUENCE { + bHRLCChannelID BHRLCChannelID, + bHQoSInformation BHQoSInformation, + rLCmode RLCMode OPTIONAL, + bAPCtrlPDUChannel BAPCtrlPDUChannel OPTIONAL, + trafficMappingInfo TrafficMappingInfo OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { BHChannels-ToBeModified-ItemExtIEs } } OPTIONAL +} + +BHChannels-ToBeModified-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +BHChannels-ToBeReleased-Item ::= SEQUENCE { + bHRLCChannelID BHRLCChannelID, + iE-Extensions ProtocolExtensionContainer { { BHChannels-ToBeReleased-ItemExtIEs } } OPTIONAL +} + +BHChannels-ToBeReleased-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +BHChannels-ToBeSetup-Item ::= SEQUENCE { + bHRLCChannelID BHRLCChannelID, + bHQoSInformation BHQoSInformation, + rLCmode RLCMode, + bAPCtrlPDUChannel BAPCtrlPDUChannel OPTIONAL, + trafficMappingInfo TrafficMappingInfo OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { BHChannels-ToBeSetup-ItemExtIEs } } OPTIONAL +} + +BHChannels-ToBeSetup-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +BHChannels-ToBeSetupMod-Item ::= SEQUENCE { + bHRLCChannelID BHRLCChannelID, + bHQoSInformation BHQoSInformation, + rLCmode RLCMode, + bAPCtrlPDUChannel BAPCtrlPDUChannel OPTIONAL, + trafficMappingInfo TrafficMappingInfo OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { BHChannels-ToBeSetupMod-ItemExtIEs } } OPTIONAL +} + +BHChannels-ToBeSetupMod-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +BHInfo ::= SEQUENCE { + bAProutingID BAPRoutingID OPTIONAL, + egressBHRLCCHList EgressBHRLCCHList OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { BHInfo-ExtIEs} } OPTIONAL +} + +BHInfo-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +BHQoSInformation ::= CHOICE { + bHRLCCHQoS QoSFlowLevelQoSParameters, + eUTRANBHRLCCHQoS EUTRANQoS, + cPTrafficType CPTrafficType, + choice-extension ProtocolIE-SingleContainer { { BHQoSInformation-ExtIEs} } +} + +BHQoSInformation-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +BH-Routing-Information-Added-List-Item ::= SEQUENCE { + bAPRoutingID BAPRoutingID, + nextHopBAPAddress BAPAddress, + iE-Extensions ProtocolExtensionContainer { { BH-Routing-Information-Added-List-ItemExtIEs} } OPTIONAL +} + +BH-Routing-Information-Added-List-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +BH-Routing-Information-Removed-List-Item ::= SEQUENCE { + bAPRoutingID BAPRoutingID, + iE-Extensions ProtocolExtensionContainer { { BH-Routing-Information-Removed-List-ItemExtIEs} } OPTIONAL +} + +BH-Routing-Information-Removed-List-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +BPLMN-ID-Info-List ::= SEQUENCE (SIZE(1..maxnoofBPLMNsNR)) OF BPLMN-ID-Info-Item + +BPLMN-ID-Info-Item ::= SEQUENCE { + pLMN-Identity-List AvailablePLMNList, + extended-PLMN-Identity-List ExtendedAvailablePLMN-List OPTIONAL, + fiveGS-TAC FiveGS-TAC OPTIONAL, + nr-cell-ID NRCellIdentity, + ranac RANAC OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { BPLMN-ID-Info-ItemExtIEs} } OPTIONAL, + ... +} + +BPLMN-ID-Info-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-ConfiguredTACIndication CRITICALITY ignore EXTENSION ConfiguredTACIndication PRESENCE optional }| + { ID id-NPNBroadcastInformation CRITICALITY reject EXTENSION NPNBroadcastInformation PRESENCE optional}, + ... +} + +ServedPLMNs-List ::= SEQUENCE (SIZE(1..maxnoofBPLMNs)) OF ServedPLMNs-Item + +ServedPLMNs-Item ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + iE-Extensions ProtocolExtensionContainer { { ServedPLMNs-ItemExtIEs} } OPTIONAL, + ... +} + +ServedPLMNs-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { +{ ID id-TAISliceSupportList CRITICALITY ignore EXTENSION SliceSupportList PRESENCE optional }| +{ ID id-NPNSupportInfo CRITICALITY reject EXTENSION NPNSupportInfo PRESENCE optional }| +{ ID id-ExtendedTAISliceSupportList CRITICALITY reject EXTENSION ExtendedSliceSupportList PRESENCE optional }, + ... +} + +BroadcastCAGList ::= SEQUENCE (SIZE(1..maxnoofCAGsupported)) OF CAGID + +BroadcastNIDList ::= SEQUENCE (SIZE(1..maxnoofNIDsupported)) OF NID + +BroadcastSNPN-ID-List ::= SEQUENCE (SIZE(1..maxnoofNIDsupported)) OF BroadcastSNPN-ID-List-Item + +BroadcastSNPN-ID-List-Item ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + broadcastNIDList BroadcastNIDList, + iE-Extensions ProtocolExtensionContainer { { BroadcastSNPN-ID-List-ItemExtIEs} } OPTIONAL, + ... +} + +BroadcastSNPN-ID-List-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +BroadcastPNI-NPN-ID-List ::= SEQUENCE (SIZE(1..maxnoofCAGsupported)) OF BroadcastPNI-NPN-ID-List-Item + +BroadcastPNI-NPN-ID-List-Item ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + broadcastCAGList BroadcastCAGList, + iE-Extensions ProtocolExtensionContainer { { BroadcastPNI-NPN-ID-List-ItemExtIEs} } OPTIONAL, + ... +} + +BroadcastPNI-NPN-ID-List-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} +BurstArrivalTime ::= OCTET STRING + +-- C +CAGID ::= BIT STRING (SIZE(32)) + +Cancel-all-Warning-Messages-Indicator ::= ENUMERATED {true, ...} + +Candidate-SpCell-Item ::= SEQUENCE { + candidate-SpCell-ID NRCGI , + iE-Extensions ProtocolExtensionContainer { { Candidate-SpCell-ItemExtIEs } } OPTIONAL, + ... +} + +Candidate-SpCell-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +CapacityValue::= SEQUENCE { + capacityValue INTEGER (0..100), + sSBAreaCapacityValueList SSBAreaCapacityValueList OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { CapacityValue-ExtIEs} } OPTIONAL +} + +CapacityValue-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +Cause ::= CHOICE { + radioNetwork CauseRadioNetwork, + transport CauseTransport, + protocol CauseProtocol, + misc CauseMisc, + choice-extension ProtocolIE-SingleContainer { { Cause-ExtIEs} } +} + +Cause-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +CauseMisc ::= ENUMERATED { + control-processing-overload, + not-enough-user-plane-processing-resources, + hardware-failure, + om-intervention, + unspecified, + ... +} + +CauseProtocol ::= ENUMERATED { + transfer-syntax-error, + abstract-syntax-error-reject, + abstract-syntax-error-ignore-and-notify, + message-not-compatible-with-receiver-state, + semantic-error, + abstract-syntax-error-falsely-constructed-message, + unspecified, + ... +} + +CauseRadioNetwork ::= ENUMERATED { + unspecified, + rl-failure-rlc, + unknown-or-already-allocated-gnb-cu-ue-f1ap-id, + unknown-or-already-allocated-gnb-du-ue-f1ap-id, + unknown-or-inconsistent-pair-of-ue-f1ap-id, + interaction-with-other-procedure, + not-supported-qci-Value, + action-desirable-for-radio-reasons, + no-radio-resources-available, + procedure-cancelled, + normal-release, + ..., + cell-not-available, + rl-failure-others, + ue-rejection, + resources-not-available-for-the-slice, + amf-initiated-abnormal-release, + release-due-to-pre-emption, + plmn-not-served-by-the-gNB-CU, + multiple-drb-id-instances, + unknown-drb-id, + multiple-bh-rlc-ch-id-instances, + unknown-bh-rlc-ch-id, + cho-cpc-resources-tobechanged, + nPN-not-supported, + nPN-access-denied, + gNB-CU-Cell-Capacity-Exceeded, + report-characteristics-empty, + existing-measurement-ID, + measurement-temporarily-not-available, + measurement-not-supported-for-the-object, + unknown-bh-address, + unknown-bap-routing-id, + insufficient-ue-capabilities + +} + +CauseTransport ::= ENUMERATED { + unspecified, + transport-resource-unavailable, + ..., + unknown-TNL-address-for-IAB, + unknown-UP-TNL-information-for-IAB +} + +CellGroupConfig ::= OCTET STRING + +CellCapacityClassValue ::= INTEGER (1..100,...) + +Cell-Direction ::= ENUMERATED {dl-only, ul-only} + +CellMeasurementResultList ::= SEQUENCE (SIZE(1.. maxCellingNBDU)) OF CellMeasurementResultItem + +CellMeasurementResultItem ::= SEQUENCE { + cellID NRCGI, + radioResourceStatus RadioResourceStatus OPTIONAL, + compositeAvailableCapacityGroup CompositeAvailableCapacityGroup OPTIONAL, + sliceAvailableCapacity SliceAvailableCapacity OPTIONAL, + numberofActiveUEs NumberofActiveUEs OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { CellMeasurementResultItem-ExtIEs} } OPTIONAL +} + +CellMeasurementResultItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +Cell-Portion-ID ::= INTEGER (0..4095,...) + +Cells-Failed-to-be-Activated-List-Item ::= SEQUENCE { + nRCGI NRCGI, + cause Cause, + iE-Extensions ProtocolExtensionContainer { { Cells-Failed-to-be-Activated-List-ItemExtIEs } } OPTIONAL, + ... +} + +Cells-Failed-to-be-Activated-List-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +Cells-Status-Item ::= SEQUENCE { + nRCGI NRCGI, + service-status Service-Status, + iE-Extensions ProtocolExtensionContainer { { Cells-Status-ItemExtIEs } } OPTIONAL, + ... +} + +Cells-Status-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +Cells-To-Be-Broadcast-Item ::= SEQUENCE { + nRCGI NRCGI, + iE-Extensions ProtocolExtensionContainer { { Cells-To-Be-Broadcast-ItemExtIEs } } OPTIONAL, + ... +} + +Cells-To-Be-Broadcast-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +Cells-Broadcast-Completed-Item ::= SEQUENCE { + nRCGI NRCGI, + iE-Extensions ProtocolExtensionContainer { { Cells-Broadcast-Completed-ItemExtIEs } } OPTIONAL, + ... +} + +Cells-Broadcast-Completed-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +Broadcast-To-Be-Cancelled-Item ::= SEQUENCE { + nRCGI NRCGI, + iE-Extensions ProtocolExtensionContainer { { Broadcast-To-Be-Cancelled-ItemExtIEs } } OPTIONAL, + ... +} + +Broadcast-To-Be-Cancelled-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + + +Cells-Broadcast-Cancelled-Item ::= SEQUENCE { + nRCGI NRCGI, + numberOfBroadcasts NumberOfBroadcasts, + iE-Extensions ProtocolExtensionContainer { { Cells-Broadcast-Cancelled-ItemExtIEs } } OPTIONAL, + ... +} + +Cells-Broadcast-Cancelled-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +Cells-to-be-Activated-List-Item ::= SEQUENCE { + nRCGI NRCGI, + nRPCI NRPCI OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { Cells-to-be-Activated-List-ItemExtIEs} } OPTIONAL, + ... +} + +Cells-to-be-Activated-List-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-gNB-CUSystemInformation CRITICALITY reject EXTENSION GNB-CUSystemInformation PRESENCE optional }| + { ID id-AvailablePLMNList CRITICALITY ignore EXTENSION AvailablePLMNList PRESENCE optional }| + { ID id-ExtendedAvailablePLMN-List CRITICALITY ignore EXTENSION ExtendedAvailablePLMN-List PRESENCE optional }| + { ID id-IAB-Info-IAB-donor-CU CRITICALITY ignore EXTENSION IAB-Info-IAB-donor-CU PRESENCE optional}| + { ID id-AvailableSNPN-ID-List CRITICALITY ignore EXTENSION AvailableSNPN-ID-List PRESENCE optional }, + ... +} + +Cells-to-be-Deactivated-List-Item ::= SEQUENCE { + nRCGI NRCGI , + iE-Extensions ProtocolExtensionContainer { { Cells-to-be-Deactivated-List-ItemExtIEs } } OPTIONAL, + ... +} + +Cells-to-be-Deactivated-List-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +Cells-to-be-Barred-Item::= SEQUENCE { + nRCGI NRCGI , + cellBarred CellBarred, + iE-Extensions ProtocolExtensionContainer { { Cells-to-be-Barred-Item-ExtIEs } } OPTIONAL +} + +Cells-to-be-Barred-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-IAB-Barred CRITICALITY ignore EXTENSION IAB-Barred PRESENCE optional }, + + ... +} + + +CellBarred ::= ENUMERATED {barred, not-barred, ...} + +CellSize ::= ENUMERATED {verysmall, small, medium, large, ...} + +CellToReportList ::= SEQUENCE (SIZE(1.. maxCellingNBDU)) OF CellToReportItem + +CellToReportItem ::= SEQUENCE { + cellID NRCGI, + sSBToReportList SSBToReportList OPTIONAL, + sliceToReportList SliceToReportList OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { CellToReportItem-ExtIEs} } OPTIONAL +} + +CellToReportItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +CellType ::= SEQUENCE { + cellSize CellSize, + iE-Extensions ProtocolExtensionContainer { {CellType-ExtIEs} } OPTIONAL, + ... +} + +CellType-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +CellULConfigured ::= ENUMERATED {none, ul, sul, ul-and-sul, ...} + +Child-Node-Cells-List ::= SEQUENCE (SIZE(1..maxnoofChildIABNodes)) OF Child-Node-Cells-List-Item + +Child-Node-Cells-List-Item ::= SEQUENCE{ + nRCGI NRCGI, + iAB-DU-Cell-Resource-Configuration-Mode-Info IAB-DU-Cell-Resource-Configuration-Mode-Info OPTIONAL, + iAB-STC-Info IAB-STC-Info OPTIONAL, + rACH-Config-Common RACH-Config-Common OPTIONAL, + rACH-Config-Common-IAB RACH-Config-Common-IAB OPTIONAL, + cSI-RS-Configuration OCTET STRING OPTIONAL, + sR-Configuration OCTET STRING OPTIONAL, + pDCCH-ConfigSIB1 OCTET STRING OPTIONAL, + sCS-Common OCTET STRING OPTIONAL, + multiplexingInfo MultiplexingInfo OPTIONAL, + iE-Extensions ProtocolExtensionContainer {{Child-Node-Cells-List-Item-ExtIEs}} OPTIONAL +} + +Child-Node-Cells-List-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +Child-Nodes-List ::= SEQUENCE (SIZE(1..maxnoofChildIABNodes)) OF Child-Nodes-List-Item + +Child-Nodes-List-Item ::= SEQUENCE{ + gNB-CU-UE-F1AP-ID GNB-CU-UE-F1AP-ID, + gNB-DU-UE-F1AP-ID GNB-DU-UE-F1AP-ID, + child-Node-Cells-List Child-Node-Cells-List OPTIONAL, + iE-Extensions ProtocolExtensionContainer {{Child-Nodes-List-Item-ExtIEs}} OPTIONAL +} + +Child-Nodes-List-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +CHOtrigger-InterDU ::= ENUMERATED { + cho-initiation, + cho-replace, + ... +} + +CHOtrigger-IntraDU ::= ENUMERATED { + cho-initiation, + cho-replace, + cho-cancel, + ... +} + +CNUEPagingIdentity ::= CHOICE { + fiveG-S-TMSI BIT STRING (SIZE(48)), + choice-extension ProtocolIE-SingleContainer { { CNUEPagingIdentity-ExtIEs } } +} + +CNUEPagingIdentity-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +CompositeAvailableCapacityGroup ::= SEQUENCE { + compositeAvailableCapacityDownlink CompositeAvailableCapacity, + compositeAvailableCapacityUplink CompositeAvailableCapacity, + iE-Extensions ProtocolExtensionContainer { { CompositeAvailableCapacityGroup-ExtIEs} } OPTIONAL +} + +CompositeAvailableCapacityGroup-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +CompositeAvailableCapacity ::= SEQUENCE { + cellCapacityClassValue CellCapacityClassValue OPTIONAL, + capacityValue CapacityValue, + iE-Extensions ProtocolExtensionContainer { { CompositeAvailableCapacity-ExtIEs} } OPTIONAL +} + +CompositeAvailableCapacity-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +CHO-Probability ::= INTEGER (1..100) + +ConditionalInterDUMobilityInformation ::= SEQUENCE { + cho-trigger CHOtrigger-InterDU, + targetgNB-DUUEF1APID GNB-DU-UE-F1AP-ID OPTIONAL + -- This IE shall be present if the cho-trigger IE is present and set to "cho-replace" --, + iE-Extensions ProtocolExtensionContainer { { ConditionalInterDUMobilityInformation-ExtIEs} } OPTIONAL, + ... +} + +ConditionalInterDUMobilityInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::={ + { ID id-EstimatedArrivalProbability CRITICALITY ignore EXTENSION CHO-Probability PRESENCE optional }, + ... +} + +ConditionalIntraDUMobilityInformation ::= SEQUENCE { + cho-trigger CHOtrigger-IntraDU, + targetCellsTocancel TargetCellList OPTIONAL, + -- This IE may be present if the cho-trigger IE is present and set to "cho-cancel" + iE-Extensions ProtocolExtensionContainer { { ConditionalIntraDUMobilityInformation-ExtIEs} } OPTIONAL, + ... +} + +ConditionalIntraDUMobilityInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::={ + { ID id-EstimatedArrivalProbability CRITICALITY ignore EXTENSION CHO-Probability PRESENCE optional }, + ... +} + + +ConfigRestrictInfoDAPS ::= OCTET STRING + +ConfiguredTACIndication ::= ENUMERATED { + true, + ... +} + + +CoordinateID ::= INTEGER (0..511, ...) + +CP-TransportLayerAddress ::= CHOICE { + endpoint-IP-address TransportLayerAddress, + endpoint-IP-address-and-port Endpoint-IP-address-and-port, + choice-extension ProtocolIE-SingleContainer { { CP-TransportLayerAddress-ExtIEs } } +} + +CP-TransportLayerAddress-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +CPTrafficType ::= INTEGER (1..3,...) + +CriticalityDiagnostics ::= SEQUENCE { + procedureCode ProcedureCode OPTIONAL, + triggeringMessage TriggeringMessage OPTIONAL, + procedureCriticality Criticality OPTIONAL, + transactionID TransactionID OPTIONAL, + iEsCriticalityDiagnostics CriticalityDiagnostics-IE-List OPTIONAL, + iE-Extensions ProtocolExtensionContainer {{CriticalityDiagnostics-ExtIEs}} OPTIONAL, + ... +} + +CriticalityDiagnostics-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +CriticalityDiagnostics-IE-List ::= SEQUENCE (SIZE (1.. maxnoofErrors)) OF CriticalityDiagnostics-IE-Item + +CriticalityDiagnostics-IE-Item ::= SEQUENCE { + iECriticality Criticality, + iE-ID ProtocolIE-ID, + typeOfError TypeOfError, + iE-Extensions ProtocolExtensionContainer {{CriticalityDiagnostics-IE-Item-ExtIEs}} OPTIONAL, + ... +} + +CriticalityDiagnostics-IE-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +C-RNTI ::= INTEGER (0..65535, ...) + +CUDURadioInformationType ::= CHOICE { + rIM CUDURIMInformation, + choice-extension ProtocolIE-SingleContainer { { CUDURadioInformationType-ExtIEs} } +} + +CUDURadioInformationType-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +CUDURIMInformation ::= SEQUENCE { + victimgNBSetID GNBSetID, + rIMRSDetectionStatus RIMRSDetectionStatus, + iE-Extensions ProtocolExtensionContainer { { CUDURIMInformation-ExtIEs} } OPTIONAL +} + +CUDURIMInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +CUtoDURRCInformation ::= SEQUENCE { + cG-ConfigInfo CG-ConfigInfo OPTIONAL, + uE-CapabilityRAT-ContainerList UE-CapabilityRAT-ContainerList OPTIONAL, + measConfig MeasConfig OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { CUtoDURRCInformation-ExtIEs} } OPTIONAL, + ... +} + +CUtoDURRCInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-HandoverPreparationInformation CRITICALITY ignore EXTENSION HandoverPreparationInformation PRESENCE optional }| + { ID id-CellGroupConfig CRITICALITY ignore EXTENSION CellGroupConfig PRESENCE optional }| + { ID id-MeasurementTimingConfiguration CRITICALITY ignore EXTENSION MeasurementTimingConfiguration PRESENCE optional }| + { ID id-UEAssistanceInformation CRITICALITY ignore EXTENSION UEAssistanceInformation PRESENCE optional }| + { ID id-CG-Config CRITICALITY ignore EXTENSION CG-Config PRESENCE optional }| + { ID id-UEAssistanceInformationEUTRA CRITICALITY ignore EXTENSION UEAssistanceInformationEUTRA PRESENCE optional }| + { ID id-LocationMeasurementInformation CRITICALITY ignore EXTENSION LocationMeasurementInformation PRESENCE optional }| + { ID id-NeedForGapsInfoNR CRITICALITY ignore EXTENSION NeedForGapsInfoNR PRESENCE optional }| + { ID id-ConfigRestrictInfoDAPS CRITICALITY ignore EXTENSION ConfigRestrictInfoDAPS PRESENCE optional }, + ... +} + +-- D + +DAPS-HO-Status::= ENUMERATED{initiation, ... } + +DCBasedDuplicationConfigured::= ENUMERATED{true,..., false} + +Dedicated-SIDelivery-NeededUE-Item ::= SEQUENCE { + gNB-CU-UE-F1AP-ID GNB-CU-UE-F1AP-ID, + nRCGI NRCGI, + iE-Extensions ProtocolExtensionContainer { { DedicatedSIDeliveryNeededUE-Item-ExtIEs} } OPTIONAL, + ... +} + +DedicatedSIDeliveryNeededUE-Item-ExtIEs F1AP-PROTOCOL-EXTENSION::={ + ... +} + + +DL-PRS ::= SEQUENCE { + prsid INTEGER (0..255), + dl-PRSResourceSetID PRS-Resource-Set-ID, + dl-PRSResourceID PRS-Resource-ID OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {DL-PRS-ExtIEs} } OPTIONAL +} + +DL-PRS-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +DL-PRSMutingPattern ::= CHOICE { + two BIT STRING (SIZE(2)), + four BIT STRING (SIZE(4)), + six BIT STRING (SIZE(6)), + eight BIT STRING (SIZE(8)), + sixteen BIT STRING (SIZE(16)), + thirty-two BIT STRING (SIZE(32)), + choice-extension ProtocolIE-SingleContainer { { DL-PRSMutingPattern-ExtIEs } } +} + +DL-PRSMutingPattern-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +DLPRSResourceCoordinates ::= SEQUENCE { + listofDL-PRSResourceSetARP SEQUENCE (SIZE(1.. maxnoofPRS-ResourceSets)) OF DLPRSResourceSetARP, + iE-Extensions ProtocolExtensionContainer { { DLPRSResourceCoordinates-ExtIEs } } OPTIONAL +} + +DLPRSResourceCoordinates-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +DLPRSResourceSetARP ::= SEQUENCE { + dl-PRSResourceSetID PRS-Resource-Set-ID, + dL-PRSResourceSetARPLocation DL-PRSResourceSetARPLocation, + listofDL-PRSResourceARP SEQUENCE (SIZE(1.. maxnoofPRS-ResourcesPerSet)) OF DLPRSResourceARP, + iE-Extensions ProtocolExtensionContainer { { DLPRSResourceSetARP-ExtIEs } } OPTIONAL +} + +DLPRSResourceSetARP-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + + +DL-PRSResourceSetARPLocation ::= CHOICE { + relativeGeodeticLocation RelativeGeodeticLocation, + relativeCartesianLocation RelativeCartesianLocation, + choice-Extension ProtocolIE-SingleContainer { { DL-PRSResourceSetARPLocation-ExtIEs } } +} + +DL-PRSResourceSetARPLocation-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + + +DLPRSResourceARP ::= SEQUENCE { + dl-PRSResourceID PRS-Resource-ID, + dL-PRSResourceARPLocation DL-PRSResourceARPLocation, + iE-Extensions ProtocolExtensionContainer { { DLPRSResourceARP-ExtIEs } } OPTIONAL +} + +DLPRSResourceARP-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +DL-PRSResourceARPLocation ::= CHOICE { + relativeGeodeticLocation RelativeGeodeticLocation, + relativeCartesianLocation RelativeCartesianLocation, + choice-Extension ProtocolIE-SingleContainer { { DL-PRSResourceARPLocation-ExtIEs } } +} + +DL-PRSResourceARPLocation-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +DL-UP-TNL-Address-to-Update-List-Item ::= SEQUENCE { + oldIPAdress TransportLayerAddress, + newIPAdress TransportLayerAddress, + iE-Extensions ProtocolExtensionContainer { { DL-UP-TNL-Address-to-Update-List-ItemExtIEs } } OPTIONAL, + ... +} + +DL-UP-TNL-Address-to-Update-List-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +DLUPTNLInformation-ToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofDLUPTNLInformation)) OF DLUPTNLInformation-ToBeSetup-Item + +DLUPTNLInformation-ToBeSetup-Item ::= SEQUENCE { + dLUPTNLInformation UPTransportLayerInformation , + iE-Extensions ProtocolExtensionContainer { { DLUPTNLInformation-ToBeSetup-ItemExtIEs } } OPTIONAL, + ... +} + +DLUPTNLInformation-ToBeSetup-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +DRB-Activity-Item ::= SEQUENCE { + dRBID DRBID, + dRB-Activity DRB-Activity OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { DRB-Activity-ItemExtIEs } } OPTIONAL, + ... +} + +DRB-Activity-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +DRB-Activity ::= ENUMERATED {active, not-active} + +DRBID ::= INTEGER (1..32, ...) + +DRBs-FailedToBeModified-Item ::= SEQUENCE { + dRBID DRBID , + cause Cause OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { DRBs-FailedToBeModified-ItemExtIEs } } OPTIONAL, + ... +} + +DRBs-FailedToBeModified-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +DRBs-FailedToBeSetup-Item ::= SEQUENCE { + dRBID DRBID, + cause Cause OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { DRBs-FailedToBeSetup-ItemExtIEs } } OPTIONAL, + ... +} + +DRBs-FailedToBeSetup-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + + +DRBs-FailedToBeSetupMod-Item ::= SEQUENCE { + dRBID DRBID , + cause Cause OPTIONAL , + iE-Extensions ProtocolExtensionContainer { { DRBs-FailedToBeSetupMod-ItemExtIEs } } OPTIONAL, + ... +} + +DRBs-FailedToBeSetupMod-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +DRB-Information ::= SEQUENCE { + dRB-QoS QoSFlowLevelQoSParameters, + sNSSAI SNSSAI, + notificationControl NotificationControl OPTIONAL, + flows-Mapped-To-DRB-List Flows-Mapped-To-DRB-List, + iE-Extensions ProtocolExtensionContainer { { DRB-Information-ItemExtIEs } } OPTIONAL +} + +DRB-Information-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +DRBs-Modified-Item ::= SEQUENCE { + dRBID DRBID, + lCID LCID OPTIONAL, + dLUPTNLInformation-ToBeSetup-List DLUPTNLInformation-ToBeSetup-List, + iE-Extensions ProtocolExtensionContainer { { DRBs-Modified-ItemExtIEs } } OPTIONAL, + ... +} + +DRBs-Modified-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-RLC-Status CRITICALITY ignore EXTENSION RLC-Status PRESENCE optional }| + { ID id-AdditionalPDCPDuplicationTNL-List CRITICALITY ignore EXTENSION AdditionalPDCPDuplicationTNL-List PRESENCE optional }| + { ID id-CurrentQoSParaSetIndex CRITICALITY ignore EXTENSION QoSParaSetIndex PRESENCE optional }, + ... +} + +DRBs-ModifiedConf-Item ::= SEQUENCE { + dRBID DRBID, + uLUPTNLInformation-ToBeSetup-List ULUPTNLInformation-ToBeSetup-List , + iE-Extensions ProtocolExtensionContainer { { DRBs-ModifiedConf-ItemExtIEs } } OPTIONAL, + ... +} + +DRBs-ModifiedConf-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-AdditionalPDCPDuplicationTNL-List CRITICALITY ignore EXTENSION AdditionalPDCPDuplicationTNL-List PRESENCE optional }, + ... +} + +DRB-Notify-Item ::= SEQUENCE { + dRBID DRBID, + notification-Cause Notification-Cause, + iE-Extensions ProtocolExtensionContainer { { DRB-Notify-ItemExtIEs } } OPTIONAL, + ... +} + +DRB-Notify-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-CurrentQoSParaSetIndex CRITICALITY ignore EXTENSION QoSParaSetNotifyIndex PRESENCE optional }, + ... +} + +DRBs-Required-ToBeModified-Item ::= SEQUENCE { + dRBID DRBID, + dLUPTNLInformation-ToBeSetup-List DLUPTNLInformation-ToBeSetup-List , + iE-Extensions ProtocolExtensionContainer { { DRBs-Required-ToBeModified-ItemExtIEs } } OPTIONAL, + ... +} + +DRBs-Required-ToBeModified-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-RLC-Status CRITICALITY ignore EXTENSION RLC-Status PRESENCE optional }| + { ID id-AdditionalPDCPDuplicationTNL-List CRITICALITY ignore EXTENSION AdditionalPDCPDuplicationTNL-List PRESENCE optional }, + ... +} + +DRBs-Required-ToBeReleased-Item ::= SEQUENCE { + dRBID DRBID, + iE-Extensions ProtocolExtensionContainer { { DRBs-Required-ToBeReleased-ItemExtIEs } } OPTIONAL, + ... +} + +DRBs-Required-ToBeReleased-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +DRBs-Setup-Item ::= SEQUENCE { + dRBID DRBID, + lCID LCID OPTIONAL, + dLUPTNLInformation-ToBeSetup-List DLUPTNLInformation-ToBeSetup-List , + iE-Extensions ProtocolExtensionContainer { { DRBs-Setup-ItemExtIEs } } OPTIONAL, + ... +} + +DRBs-Setup-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-AdditionalPDCPDuplicationTNL-List CRITICALITY ignore EXTENSION AdditionalPDCPDuplicationTNL-List PRESENCE optional }| + { ID id-CurrentQoSParaSetIndex CRITICALITY ignore EXTENSION QoSParaSetIndex PRESENCE optional }, + ... +} + +DRBs-SetupMod-Item ::= SEQUENCE { + dRBID DRBID, + lCID LCID OPTIONAL, + dLUPTNLInformation-ToBeSetup-List DLUPTNLInformation-ToBeSetup-List , + iE-Extensions ProtocolExtensionContainer { { DRBs-SetupMod-ItemExtIEs } } OPTIONAL, + ... +} + +DRBs-SetupMod-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-AdditionalPDCPDuplicationTNL-List CRITICALITY ignore EXTENSION AdditionalPDCPDuplicationTNL-List PRESENCE optional }| + { ID id-CurrentQoSParaSetIndex CRITICALITY ignore EXTENSION QoSParaSetIndex PRESENCE optional }, + ... +} + + +DRBs-ToBeModified-Item ::= SEQUENCE { + dRBID DRBID, + qoSInformation QoSInformation OPTIONAL, + uLUPTNLInformation-ToBeSetup-List ULUPTNLInformation-ToBeSetup-List , + uLConfiguration ULConfiguration OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { DRBs-ToBeModified-ItemExtIEs } } OPTIONAL, + ... +} + +DRBs-ToBeModified-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-DLPDCPSNLength CRITICALITY ignore EXTENSION PDCPSNLength PRESENCE optional }| + { ID id-ULPDCPSNLength CRITICALITY ignore EXTENSION PDCPSNLength PRESENCE optional }| + {ID id-BearerTypeChange CRITICALITY ignore EXTENSION BearerTypeChange PRESENCE optional}| + { ID id-RLCMode CRITICALITY ignore EXTENSION RLCMode PRESENCE optional }| + { ID id-Duplication-Activation CRITICALITY reject EXTENSION DuplicationActivation PRESENCE optional }| + { ID id-DC-Based-Duplication-Configured CRITICALITY reject EXTENSION DCBasedDuplicationConfigured PRESENCE optional }| + { ID id-DC-Based-Duplication-Activation CRITICALITY reject EXTENSION DuplicationActivation PRESENCE optional }| + { ID id-AdditionalPDCPDuplicationTNL-List CRITICALITY ignore EXTENSION AdditionalPDCPDuplicationTNL-List PRESENCE optional }| + { ID id-RLCDuplicationInformation CRITICALITY ignore EXTENSION RLCDuplicationInformation PRESENCE optional}| + { ID id-TransmissionStopIndicator CRITICALITY ignore EXTENSION TransmissionStopIndicator PRESENCE optional}, + ... +} + +DRBs-ToBeReleased-Item ::= SEQUENCE { + dRBID DRBID, + iE-Extensions ProtocolExtensionContainer { { DRBs-ToBeReleased-ItemExtIEs } } OPTIONAL, + ... +} + +DRBs-ToBeReleased-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +DRBs-ToBeSetup-Item ::= SEQUENCE { + dRBID DRBID, + qoSInformation QoSInformation, + uLUPTNLInformation-ToBeSetup-List ULUPTNLInformation-ToBeSetup-List , + rLCMode RLCMode, + uLConfiguration ULConfiguration OPTIONAL, + duplicationActivation DuplicationActivation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { DRBs-ToBeSetup-ItemExtIEs } } OPTIONAL, + ... +} + +DRBs-ToBeSetup-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-DC-Based-Duplication-Configured CRITICALITY reject EXTENSION DCBasedDuplicationConfigured PRESENCE optional }| + { ID id-DC-Based-Duplication-Activation CRITICALITY reject EXTENSION DuplicationActivation PRESENCE optional }| + { ID id-DLPDCPSNLength CRITICALITY ignore EXTENSION PDCPSNLength PRESENCE mandatory }| + { ID id-ULPDCPSNLength CRITICALITY ignore EXTENSION PDCPSNLength PRESENCE optional }| + { ID id-AdditionalPDCPDuplicationTNL-List CRITICALITY ignore EXTENSION AdditionalPDCPDuplicationTNL-List PRESENCE optional }| + { ID id-RLCDuplicationInformation CRITICALITY ignore EXTENSION RLCDuplicationInformation PRESENCE optional}, + ... +} + + +DRBs-ToBeSetupMod-Item ::= SEQUENCE { + dRBID DRBID, + qoSInformation QoSInformation, + uLUPTNLInformation-ToBeSetup-List ULUPTNLInformation-ToBeSetup-List, + rLCMode RLCMode, + uLConfiguration ULConfiguration OPTIONAL, + duplicationActivation DuplicationActivation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { DRBs-ToBeSetupMod-ItemExtIEs } } OPTIONAL, + ... +} + +DRBs-ToBeSetupMod-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-DC-Based-Duplication-Configured CRITICALITY reject EXTENSION DCBasedDuplicationConfigured PRESENCE optional }| + { ID id-DC-Based-Duplication-Activation CRITICALITY reject EXTENSION DuplicationActivation PRESENCE optional }| + { ID id-DLPDCPSNLength CRITICALITY ignore EXTENSION PDCPSNLength PRESENCE optional }| + { ID id-ULPDCPSNLength CRITICALITY ignore EXTENSION PDCPSNLength PRESENCE optional }| + { ID id-AdditionalPDCPDuplicationTNL-List CRITICALITY ignore EXTENSION AdditionalPDCPDuplicationTNL-List PRESENCE optional }| + { ID id-RLCDuplicationInformation CRITICALITY ignore EXTENSION RLCDuplicationInformation PRESENCE optional}, + ... +} + +DRXCycle ::= SEQUENCE { + longDRXCycleLength LongDRXCycleLength, + shortDRXCycleLength ShortDRXCycleLength OPTIONAL, + shortDRXCycleTimer ShortDRXCycleTimer OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { DRXCycle-ExtIEs} } OPTIONAL, + ... +} + +DRXCycle-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +DRX-Config ::= OCTET STRING + +DRXConfigurationIndicator ::= ENUMERATED{ release, ...} + +DRX-LongCycleStartOffset ::= INTEGER (0..10239) + +DSInformationList ::= SEQUENCE (SIZE(0..maxnoofDSInfo)) OF DSCP + +DSCP ::= BIT STRING (SIZE (6)) + +DUtoCURRCContainer ::= OCTET STRING + +DUCURadioInformationType ::= CHOICE { + rIM DUCURIMInformation, + choice-extension ProtocolIE-SingleContainer { { DUCURadioInformationType-ExtIEs} } +} + +DUCURadioInformationType-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +DUCURIMInformation ::= SEQUENCE { + victimgNBSetID GNBSetID, + rIMRSDetectionStatus RIMRSDetectionStatus, + aggressorCellList AggressorCellList, + iE-Extensions ProtocolExtensionContainer { { DUCURIMInformation-ExtIEs} } OPTIONAL +} + +DUCURIMInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +DUF-Slot-Config-Item ::= CHOICE { + explicitFormat ExplicitFormat, + implicitFormat ImplicitFormat, + choice-extension ProtocolIE-SingleContainer { { DUF-Slot-Config-Item-ExtIEs} } +} + +DUF-Slot-Config-Item-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} +DUF-Slot-Config-List ::= SEQUENCE (SIZE(1..maxnoofDUFSlots)) OF DUF-Slot-Config-Item + +DUFSlotformatIndex ::= INTEGER(0..254) + +DUFTransmissionPeriodicity ::= ENUMERATED { ms0p5, ms0p625, ms1, ms1p25, ms2, ms2p5, ms5, ms10, ...} + +DU-RX-MT-RX ::= ENUMERATED {supported, not-supported} + +DU-TX-MT-TX ::= ENUMERATED {supported, not-supported} + +DU-RX-MT-TX ::= ENUMERATED {supported, not-supported} + +DU-TX-MT-RX ::= ENUMERATED {supported, not-supported} + +DUtoCURRCInformation ::= SEQUENCE { + cellGroupConfig CellGroupConfig, + measGapConfig MeasGapConfig OPTIONAL, + requestedP-MaxFR1 OCTET STRING OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { DUtoCURRCInformation-ExtIEs} } OPTIONAL, + ... +} + +DUtoCURRCInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-DRX-LongCycleStartOffset CRITICALITY ignore EXTENSION DRX-LongCycleStartOffset PRESENCE optional }| + { ID id-SelectedBandCombinationIndex CRITICALITY ignore EXTENSION SelectedBandCombinationIndex PRESENCE optional }| + { ID id-SelectedFeatureSetEntryIndex CRITICALITY ignore EXTENSION SelectedFeatureSetEntryIndex PRESENCE optional }| + { ID id-Ph-InfoSCG CRITICALITY ignore EXTENSION Ph-InfoSCG PRESENCE optional }| + { ID id-RequestedBandCombinationIndex CRITICALITY ignore EXTENSION RequestedBandCombinationIndex PRESENCE optional }| + { ID id-RequestedFeatureSetEntryIndex CRITICALITY ignore EXTENSION RequestedFeatureSetEntryIndex PRESENCE optional }| + { ID id-DRX-Config CRITICALITY ignore EXTENSION DRX-Config PRESENCE optional }| + { ID id-PDCCH-BlindDetectionSCG CRITICALITY ignore EXTENSION PDCCH-BlindDetectionSCG PRESENCE optional }| + { ID id-Requested-PDCCH-BlindDetectionSCG CRITICALITY ignore EXTENSION Requested-PDCCH-BlindDetectionSCG PRESENCE optional }| + { ID id-Ph-InfoMCG CRITICALITY ignore EXTENSION Ph-InfoMCG PRESENCE optional }| + { ID id-MeasGapSharingConfig CRITICALITY ignore EXTENSION MeasGapSharingConfig PRESENCE optional }| + { ID id-SL-PHY-MAC-RLC-Config CRITICALITY ignore EXTENSION SL-PHY-MAC-RLC-Config PRESENCE optional }| + { ID id-SL-ConfigDedicatedEUTRA-Info CRITICALITY ignore EXTENSION SL-ConfigDedicatedEUTRA-Info PRESENCE optional }| + { ID id-RequestedP-MaxFR2 CRITICALITY ignore EXTENSION RequestedP-MaxFR2 PRESENCE optional }| + { ID id-InterFrequencyConfig-NoGap CRITICALITY ignore EXTENSION InterFrequencyConfig-NoGap PRESENCE optional }| + { ID id-ServCellInfoList CRITICALITY ignore EXTENSION ServCellInfoList PRESENCE optional }, + ... +} + +DuplicationActivation ::= ENUMERATED{active,inactive,... } + +DuplicationIndication ::= ENUMERATED {true, ... , false } + +DuplicationState ::= ENUMERATED { + active, + inactive, + ... +} + +Dynamic5QIDescriptor ::= SEQUENCE { + qoSPriorityLevel INTEGER (1..127), + packetDelayBudget PacketDelayBudget, + packetErrorRate PacketErrorRate, + fiveQI INTEGER (0..255, ...) OPTIONAL, + delayCritical ENUMERATED {delay-critical, non-delay-critical} OPTIONAL, + -- C-ifGBRflow: This IE shall be present if the GBR QoS Flow Information IE is present in the QoS Flow Level QoS Parameters IE. + averagingWindow AveragingWindow OPTIONAL, + -- C-ifGBRflow: This IE shall be present if the GBR QoS Flow Information IE is present in the QoS Flow Level QoS Parameters IE. + maxDataBurstVolume MaxDataBurstVolume OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { Dynamic5QIDescriptor-ExtIEs } } OPTIONAL +} + +Dynamic5QIDescriptor-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-ExtendedPacketDelayBudget CRITICALITY ignore EXTENSION ExtendedPacketDelayBudget PRESENCE optional }| + { ID id-CNPacketDelayBudgetDownlink CRITICALITY ignore EXTENSION ExtendedPacketDelayBudget PRESENCE optional }| + { ID id-CNPacketDelayBudgetUplink CRITICALITY ignore EXTENSION ExtendedPacketDelayBudget PRESENCE optional }, + ... +} + +DynamicPQIDescriptor ::= SEQUENCE { + resourceType ENUMERATED {gbr, non-gbr, delay-critical-grb, ...} OPTIONAL, + qoSPriorityLevel INTEGER (1..8, ...), + packetDelayBudget PacketDelayBudget, + packetErrorRate PacketErrorRate, + averagingWindow AveragingWindow OPTIONAL, + -- C-ifGBRflow: This IE shall be present if the GBR QoS Flow Information IE is present in the QoS Flow Level QoS Parameters IE. + maxDataBurstVolume MaxDataBurstVolume OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { DynamicPQIDescriptor-ExtIEs } } OPTIONAL +} + +DynamicPQIDescriptor-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +-- E + + +E-CID-MeasurementQuantities ::= SEQUENCE (SIZE (1.. maxnoofMeasE-CID)) OF ProtocolIE-SingleContainer { {E-CID-MeasurementQuantities-ItemIEs} } + +E-CID-MeasurementQuantities-ItemIEs F1AP-PROTOCOL-IES ::= { + { ID id-E-CID-MeasurementQuantities-Item CRITICALITY reject TYPE E-CID-MeasurementQuantities-Item PRESENCE mandatory} +} + +E-CID-MeasurementQuantities-Item ::= SEQUENCE { + e-CIDmeasurementQuantitiesValue E-CID-MeasurementQuantitiesValue, + iE-Extensions ProtocolExtensionContainer { { E-CID-MeasurementQuantitiesValue-ExtIEs} } OPTIONAL +} + +E-CID-MeasurementQuantitiesValue-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +E-CID-MeasurementQuantitiesValue ::= ENUMERATED { + default, + angleOfArrivalNR, + ... +} + +E-CID-MeasurementResult ::= SEQUENCE { + geographicalCoordinates GeographicalCoordinates OPTIONAL, + measuredResults-List E-CID-MeasuredResults-List OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { E-CID-MeasurementResult-ExtIEs} } OPTIONAL +} + +E-CID-MeasurementResult-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +E-CID-MeasuredResults-List ::= SEQUENCE (SIZE(1..maxnoofMeasE-CID)) OF E-CID-MeasuredResults-Item + +E-CID-MeasuredResults-Item ::= SEQUENCE { + e-CID-MeasuredResults-Value E-CID-MeasuredResults-Value, + iE-Extensions ProtocolExtensionContainer {{ E-CID-MeasuredResults-Item-ExtIEs }} OPTIONAL +} + +E-CID-MeasuredResults-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +E-CID-MeasuredResults-Value ::= CHOICE { + valueAngleofArrivalNR UL-AoA, + choice-extension ProtocolIE-SingleContainer { { E-CID-MeasuredResults-Value-ExtIEs} } +} + +E-CID-MeasuredResults-Value-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +E-CID-ReportCharacteristics ::= ENUMERATED { + onDemand, + periodic, + ... +} + +EgressBHRLCCHList ::= SEQUENCE (SIZE(1..maxnoofEgressLinks)) OF EgressBHRLCCHItem + +EgressBHRLCCHItem ::= SEQUENCE { + nextHopBAPAddress BAPAddress, + bHRLCChannelID BHRLCChannelID, + iE-Extensions ProtocolExtensionContainer {{EgressBHRLCCHItemExtIEs }} OPTIONAL +} + +EgressBHRLCCHItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +Endpoint-IP-address-and-port ::=SEQUENCE { + endpointIPAddress TransportLayerAddress, + iE-Extensions ProtocolExtensionContainer { { Endpoint-IP-address-and-port-ExtIEs} } OPTIONAL +} + +Endpoint-IP-address-and-port-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-portNumber CRITICALITY reject EXTENSION PortNumber PRESENCE optional}, + ... +} + +ExtendedAvailablePLMN-List ::= SEQUENCE (SIZE(1..maxnoofExtendedBPLMNs)) OF ExtendedAvailablePLMN-Item + +ExtendedAvailablePLMN-Item ::= SEQUENCE { + pLMNIdentity PLMN-Identity, + iE-Extensions ProtocolExtensionContainer { { ExtendedAvailablePLMN-Item-ExtIEs} } OPTIONAL +} + +ExplicitFormat ::= SEQUENCE { + permutation Permutation, + noofDownlinkSymbols NoofDownlinkSymbols OPTIONAL, + noofUplinkSymbols NoofUplinkSymbols OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { ExplicitFormat-ExtIEs} } OPTIONAL +} + +ExplicitFormat-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +ExtendedAvailablePLMN-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +ExtendedServedPLMNs-List ::= SEQUENCE (SIZE(1.. maxnoofExtendedBPLMNs)) OF ExtendedServedPLMNs-Item + +ExtendedServedPLMNs-Item ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + tAISliceSupportList SliceSupportList OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { ExtendedServedPLMNs-ItemExtIEs} } OPTIONAL, + ... +} + +ExtendedServedPLMNs-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-NPNSupportInfo CRITICALITY reject EXTENSION NPNSupportInfo PRESENCE optional }| +{ ID id-ExtendedTAISliceSupportList CRITICALITY reject EXTENSION ExtendedSliceSupportList PRESENCE optional }, + ... +} + +ExtendedSliceSupportList ::= SEQUENCE (SIZE(1.. maxnoofExtSliceItems)) OF SliceSupportItem + +EUTRACells-List ::= SEQUENCE (SIZE (1.. maxCellineNB)) OF EUTRACells-List-item + +EUTRACells-List-item ::= SEQUENCE { + eUTRA-Cell-ID EUTRA-Cell-ID, + served-EUTRA-Cells-Information Served-EUTRA-Cells-Information, + iE-Extensions ProtocolExtensionContainer { { EUTRACells-List-itemExtIEs } } OPTIONAL +} + +EUTRACells-List-itemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + + +EUTRA-Cell-ID ::= BIT STRING (SIZE(28)) + +EUTRA-Coex-FDD-Info ::= SEQUENCE { + uL-EARFCN ExtendedEARFCN OPTIONAL, + dL-EARFCN ExtendedEARFCN, + uL-Transmission-Bandwidth EUTRA-Transmission-Bandwidth OPTIONAL, + dL-Transmission-Bandwidth EUTRA-Transmission-Bandwidth, + iE-Extensions ProtocolExtensionContainer { {EUTRA-Coex-FDD-Info-ExtIEs} } OPTIONAL, + ... +} + +EUTRA-Coex-FDD-Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +EUTRA-Coex-Mode-Info ::= CHOICE { + fDD EUTRA-Coex-FDD-Info, + tDD EUTRA-Coex-TDD-Info, + ... +} + +EUTRA-Coex-TDD-Info ::= SEQUENCE { + eARFCN ExtendedEARFCN, + transmission-Bandwidth EUTRA-Transmission-Bandwidth, + subframeAssignment EUTRA-SubframeAssignment, + specialSubframe-Info EUTRA-SpecialSubframe-Info, + iE-Extensions ProtocolExtensionContainer { {EUTRA-Coex-TDD-Info-ExtIEs} } OPTIONAL, + ... +} +EUTRA-Coex-TDD-Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} +EUTRA-CyclicPrefixDL ::= ENUMERATED { + normal, + extended, + ... +} + +EUTRA-CyclicPrefixUL ::= ENUMERATED { + normal, + extended, + ... +} + +EUTRA-PRACH-Configuration ::= SEQUENCE { + rootSequenceIndex INTEGER (0..837), + zeroCorrelationIndex INTEGER (0..15), + highSpeedFlag BOOLEAN, + prach-FreqOffset INTEGER (0..94), + prach-ConfigIndex INTEGER (0..63) OPTIONAL, + -- C-ifTDD: This IE shall be present if the EUTRA-Mode-Info IE in the Resource Coordination E-UTRA Cell Information IE is set to the value "TDD" + iE-Extensions ProtocolExtensionContainer { {EUTRA-PRACH-Configuration-ExtIEs} } OPTIONAL, + ... +} + +EUTRA-PRACH-Configuration-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + + +EUTRA-SpecialSubframe-Info ::= SEQUENCE { + specialSubframePatterns EUTRA-SpecialSubframePatterns, + cyclicPrefixDL EUTRA-CyclicPrefixDL, + cyclicPrefixUL EUTRA-CyclicPrefixUL, + iE-Extensions ProtocolExtensionContainer { { EUTRA-SpecialSubframe-Info-ExtIEs} } OPTIONAL, + ... +} + +EUTRA-SpecialSubframe-Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +EUTRA-SpecialSubframePatterns ::= ENUMERATED { + ssp0, + ssp1, + ssp2, + ssp3, + ssp4, + ssp5, + ssp6, + ssp7, + ssp8, + ssp9, + ssp10, + ... +} + +EUTRA-SubframeAssignment ::= ENUMERATED { + sa0, + sa1, + sa2, + sa3, + sa4, + sa5, + sa6, + ... +} + +EUTRA-Transmission-Bandwidth ::= ENUMERATED { + bw6, + bw15, + bw25, + bw50, + bw75, + bw100, + ... +} + +EUTRANQoS ::= SEQUENCE { + qCI QCI, + allocationAndRetentionPriority AllocationAndRetentionPriority, + gbrQosInformation GBR-QosInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { EUTRANQoS-ExtIEs} } OPTIONAL, + ... +} + +EUTRANQoS-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { +{ ID id-ENBDLTNLAddress CRITICALITY ignore EXTENSION TransportLayerAddress PRESENCE optional }, + ... +} + +ExecuteDuplication ::= ENUMERATED{true,...} + +ExtendedEARFCN ::= INTEGER (0..262143) + +EUTRA-Mode-Info ::= CHOICE { + eUTRAFDD EUTRA-FDD-Info, + eUTRATDD EUTRA-TDD-Info, + choice-extension ProtocolIE-SingleContainer { { EUTRA-Mode-Info-ExtIEs} } +} + +EUTRA-Mode-Info-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +EUTRA-NR-CellResourceCoordinationReq-Container ::= OCTET STRING + +EUTRA-NR-CellResourceCoordinationReqAck-Container ::= OCTET STRING + +EUTRA-FDD-Info ::= SEQUENCE { + uL-offsetToPointA OffsetToPointA, + dL-offsetToPointA OffsetToPointA, + iE-Extensions ProtocolExtensionContainer { {EUTRA-FDD-Info-ExtIEs} } OPTIONAL, + ... +} + +EUTRA-FDD-Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +EUTRA-TDD-Info ::= SEQUENCE { + offsetToPointA OffsetToPointA, + iE-Extensions ProtocolExtensionContainer { {EUTRA-TDD-Info-ExtIEs} } OPTIONAL, + ... +} + +EUTRA-TDD-Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +EventType ::= ENUMERATED { + on-demand, + periodic, + stop, + ... +} + +ExtendedPacketDelayBudget ::= INTEGER (1..65535, ...) + +-- F + +F1CPathNSA ::= ENUMERATED {lte, nr, both} + +F1CTransferPath ::= SEQUENCE { + f1CPathNSA F1CPathNSA, + iE-Extensions ProtocolExtensionContainer { { F1CTransferPath-ExtIEs} } OPTIONAL, + ... +} + +F1CTransferPath-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +FDD-Info ::= SEQUENCE { + uL-NRFreqInfo NRFreqInfo, + dL-NRFreqInfo NRFreqInfo, + uL-Transmission-Bandwidth Transmission-Bandwidth, + dL-Transmission-Bandwidth Transmission-Bandwidth, + iE-Extensions ProtocolExtensionContainer { {FDD-Info-ExtIEs} } OPTIONAL, + ... +} + +FDD-Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-ULCarrierList CRITICALITY ignore EXTENSION NRCarrierList PRESENCE optional }| + { ID id-DLCarrierList CRITICALITY ignore EXTENSION NRCarrierList PRESENCE optional }, + ... +} + + +Flows-Mapped-To-DRB-List ::= SEQUENCE (SIZE(1.. maxnoofQoSFlows)) OF Flows-Mapped-To-DRB-Item + +Flows-Mapped-To-DRB-Item ::= SEQUENCE { + qoSFlowIdentifier QoSFlowIdentifier, + qoSFlowLevelQoSParameters QoSFlowLevelQoSParameters, + iE-Extensions ProtocolExtensionContainer { { Flows-Mapped-To-DRB-ItemExtIEs} } OPTIONAL +} + +Flows-Mapped-To-DRB-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + {ID id-QoSFlowMappingIndication CRITICALITY ignore EXTENSION QoSFlowMappingIndication PRESENCE optional}| + {ID id-TSCTrafficCharacteristics CRITICALITY ignore EXTENSION TSCTrafficCharacteristics PRESENCE optional}, + ... +} + +FR1-Bandwidth ::= ENUMERATED {bw5, bw10, bw20, bw40, bw50, bw80, bw100, ..., bw15, bw25, bw30, bw60} + +FR2-Bandwidth ::= ENUMERATED {bw50, bw100, bw200, bw400, ...} + +FreqBandNrItem ::= SEQUENCE { + freqBandIndicatorNr INTEGER (1..1024,...), + supportedSULBandList SEQUENCE (SIZE(0..maxnoofNrCellBands)) OF SupportedSULFreqBandItem, + iE-Extensions ProtocolExtensionContainer { {FreqBandNrItem-ExtIEs} } OPTIONAL, + ... +} + +FreqBandNrItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +FreqDomainLength ::= CHOICE { + l839 L839Info, + l139 L139Info, + choice-extension ProtocolIE-SingleContainer { {FreqDomainLength-ExtIEs} } +} + +FreqDomainLength-ExtIEs F1AP-PROTOCOL-IES ::= { + { ID id-L571Info CRITICALITY reject TYPE L571Info PRESENCE mandatory}| + { ID id-L1151Info CRITICALITY reject TYPE L1151Info PRESENCE mandatory}, + ... +} + +FrequencyShift7p5khz ::= ENUMERATED {false, true, ...} + +FullConfiguration ::= ENUMERATED {full, ...} + +FlowsMappedToSLDRB-List ::= SEQUENCE (SIZE(1.. maxnoofPC5QoSFlows)) OF FlowsMappedToSLDRB-Item + +FlowsMappedToSLDRB-Item ::= SEQUENCE { + pc5QoSFlowIdentifier PC5QoSFlowIdentifier, + iE-Extensions ProtocolExtensionContainer { {FlowsMappedToSLDRB-Item-ExtIEs} } OPTIONAL, + ... +} + +FlowsMappedToSLDRB-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +-- G + + +GBR-QosInformation ::= SEQUENCE { + e-RAB-MaximumBitrateDL BitRate, + e-RAB-MaximumBitrateUL BitRate, + e-RAB-GuaranteedBitrateDL BitRate, + e-RAB-GuaranteedBitrateUL BitRate, + iE-Extensions ProtocolExtensionContainer { { GBR-QosInformation-ExtIEs} } OPTIONAL, + ... +} + +GBR-QosInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +GBR-QoSFlowInformation::= SEQUENCE { + maxFlowBitRateDownlink BitRate, + maxFlowBitRateUplink BitRate, + guaranteedFlowBitRateDownlink BitRate, + guaranteedFlowBitRateUplink BitRate, + maxPacketLossRateDownlink MaxPacketLossRate OPTIONAL, + maxPacketLossRateUplink MaxPacketLossRate OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { GBR-QosFlowInformation-ExtIEs} } OPTIONAL, + ... +} + +GBR-QosFlowInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-AlternativeQoSParaSetList CRITICALITY ignore EXTENSION AlternativeQoSParaSetList PRESENCE optional }, + ... +} + +CG-Config ::= OCTET STRING + +GeographicalCoordinates ::= SEQUENCE { + tRPPositionDefinitionType TRPPositionDefinitionType, + dLPRSResourceCoordinates DLPRSResourceCoordinates OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { GeographicalCoordinates-ExtIEs } } OPTIONAL +} + +GeographicalCoordinates-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +GNBCUMeasurementID ::= INTEGER (0.. 4095, ...) + +GNBDUMeasurementID ::= INTEGER (0.. 4095, ...) + +GNB-CUSystemInformation::= SEQUENCE { + sibtypetobeupdatedlist SEQUENCE (SIZE(1.. maxnoofSIBTypes)) OF SibtypetobeupdatedListItem, + iE-Extensions ProtocolExtensionContainer { { GNB-CUSystemInformation-ExtIEs} } OPTIONAL, + ... +} + +GNB-CUSystemInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + {ID id-systemInformationAreaID CRITICALITY ignore EXTENSION SystemInformationAreaID PRESENCE optional}, + ... +} + +GNB-CU-TNL-Association-Setup-Item::= SEQUENCE { + tNLAssociationTransportLayerAddress CP-TransportLayerAddress , + iE-Extensions ProtocolExtensionContainer { { GNB-CU-TNL-Association-Setup-Item-ExtIEs} } OPTIONAL +} + +GNB-CU-TNL-Association-Setup-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +GNB-CU-TNL-Association-Failed-To-Setup-Item ::= SEQUENCE { + tNLAssociationTransportLayerAddress CP-TransportLayerAddress , + cause Cause, + iE-Extensions ProtocolExtensionContainer { { GNB-CU-TNL-Association-Failed-To-Setup-Item-ExtIEs} } OPTIONAL +} + +GNB-CU-TNL-Association-Failed-To-Setup-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + + +GNB-CU-TNL-Association-To-Add-Item ::= SEQUENCE { + tNLAssociationTransportLayerAddress CP-TransportLayerAddress , + tNLAssociationUsage TNLAssociationUsage, + iE-Extensions ProtocolExtensionContainer { { GNB-CU-TNL-Association-To-Add-Item-ExtIEs} } OPTIONAL +} + +GNB-CU-TNL-Association-To-Add-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +GNB-CU-TNL-Association-To-Remove-Item::= SEQUENCE { + tNLAssociationTransportLayerAddress CP-TransportLayerAddress , + iE-Extensions ProtocolExtensionContainer { { GNB-CU-TNL-Association-To-Remove-Item-ExtIEs} } OPTIONAL +} + +GNB-CU-TNL-Association-To-Remove-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + {ID id-TNLAssociationTransportLayerAddressgNBDU CRITICALITY reject EXTENSION CP-TransportLayerAddress PRESENCE optional}, + ... +} + + +GNB-CU-TNL-Association-To-Update-Item::= SEQUENCE { + tNLAssociationTransportLayerAddress CP-TransportLayerAddress , + tNLAssociationUsage TNLAssociationUsage OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { GNB-CU-TNL-Association-To-Update-Item-ExtIEs} } OPTIONAL +} + +GNB-CU-TNL-Association-To-Update-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +GNB-CU-UE-F1AP-ID ::= INTEGER (0..4294967295) + +GNB-DU-Cell-Resource-Configuration ::= SEQUENCE { + subcarrierSpacing SubcarrierSpacing, + dUFTransmissionPeriodicity DUFTransmissionPeriodicity OPTIONAL, + dUF-Slot-Config-List DUF-Slot-Config-List OPTIONAL, + hSNATransmissionPeriodicity HSNATransmissionPeriodicity, + hNSASlotConfigList HSNASlotConfigList OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { GNB-DU-Cell-Resource-Configuration-ExtIEs } } OPTIONAL +} + +GNB-DU-Cell-Resource-Configuration-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +GNB-DU-UE-F1AP-ID ::= INTEGER (0..4294967295) + +GNB-DU-ID ::= INTEGER (0..68719476735) + +GNB-CU-Name ::= PrintableString(SIZE(1..150,...)) + +GNB-DU-Name ::= PrintableString(SIZE(1..150,...)) + +Extended-GNB-CU-Name ::= SEQUENCE { + gNB-CU-NameVisibleString GNB-CU-NameVisibleString OPTIONAL, + gNB-CU-NameUTF8String GNB-CU-NameUTF8String OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { Extended-GNB-CU-Name-ExtIEs } } OPTIONAL, + ... +} + +Extended-GNB-CU-Name-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +GNB-CU-NameVisibleString ::= VisibleString(SIZE(1..150,...)) + +GNB-CU-NameUTF8String ::= UTF8String(SIZE(1..150,...)) + +Extended-GNB-DU-Name ::= SEQUENCE { + gNB-DU-NameVisibleString GNB-DU-NameVisibleString OPTIONAL, + gNB-DU-NameUTF8String GNB-DU-NameUTF8String OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { Extended-GNB-DU-Name-ExtIEs } } OPTIONAL, + ... +} + +Extended-GNB-DU-Name-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +GNB-DU-NameVisibleString ::= VisibleString(SIZE(1..150,...)) + +GNB-DU-NameUTF8String ::= UTF8String(SIZE(1..150,...)) + + +GNB-DU-Served-Cells-Item ::= SEQUENCE { + served-Cell-Information Served-Cell-Information, + gNB-DU-System-Information GNB-DU-System-Information OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { GNB-DU-Served-Cells-ItemExtIEs} } OPTIONAL, + ... +} + +GNB-DU-Served-Cells-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +GNB-DU-System-Information ::= SEQUENCE { + mIB-message MIB-message, + sIB1-message SIB1-message, + iE-Extensions ProtocolExtensionContainer { { GNB-DU-System-Information-ExtIEs } } OPTIONAL, + ... +} + +GNB-DU-System-Information-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-SIB12-message CRITICALITY ignore EXTENSION SIB12-message PRESENCE optional}| + { ID id-SIB13-message CRITICALITY ignore EXTENSION SIB13-message PRESENCE optional}| + { ID id-SIB14-message CRITICALITY ignore EXTENSION SIB14-message PRESENCE optional}| + { ID id-SIB10-message CRITICALITY ignore EXTENSION SIB10-message PRESENCE optional}, + ... +} + +GNB-DUConfigurationQuery ::= ENUMERATED {true, ...} + +GNBDUOverloadInformation ::= ENUMERATED {overloaded, not-overloaded} + +GNB-DU-TNL-Association-To-Remove-Item::= SEQUENCE { + tNLAssociationTransportLayerAddress CP-TransportLayerAddress , + tNLAssociationTransportLayerAddressgNBCU CP-TransportLayerAddress OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { GNB-DU-TNL-Association-To-Remove-Item-ExtIEs} } OPTIONAL +} + +GNB-DU-TNL-Association-To-Remove-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +GNB-RxTxTimeDiff ::= SEQUENCE { + rxTxTimeDiff GNBRxTxTimeDiffMeas, + additionalPath-List AdditionalPath-List OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { GNB-RxTxTimeDiff-ExtIEs} } OPTIONAL +} + +GNB-RxTxTimeDiff-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + + ... +} + +GNBRxTxTimeDiffMeas ::= CHOICE { + k0 INTEGER (0.. 1970049), + k1 INTEGER (0.. 985025), + k2 INTEGER (0.. 492513), + k3 INTEGER (0.. 246257), + k4 INTEGER (0.. 123129), + k5 INTEGER (0.. 61565), + choice-extension ProtocolIE-SingleContainer { { GNBRxTxTimeDiffMeas-ExtIEs } } +} + +GNBRxTxTimeDiffMeas-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +GNBSetID ::= BIT STRING (SIZE(22)) + +GTP-TEID ::= OCTET STRING (SIZE (4)) + +GTPTLAs ::= SEQUENCE (SIZE(1.. maxnoofGTPTLAs)) OF GTPTLA-Item + + +GTPTLA-Item ::= SEQUENCE { + gTPTransportLayerAddress TransportLayerAddress, + iE-Extensions ProtocolExtensionContainer { { GTPTLA-Item-ExtIEs } } OPTIONAL +} + +GTPTLA-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +GTPTunnel ::= SEQUENCE { + transportLayerAddress TransportLayerAddress, + gTP-TEID GTP-TEID, + iE-Extensions ProtocolExtensionContainer { { GTPTunnel-ExtIEs } } OPTIONAL, + ... +} + +GTPTunnel-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +-- H + +HandoverPreparationInformation ::= OCTET STRING + +HardwareLoadIndicator ::= SEQUENCE { + dLHardwareLoadIndicator INTEGER (0..100, ...), + uLHardwareLoadIndicator INTEGER (0..100, ...), + iE-Extensions ProtocolExtensionContainer { { HardwareLoadIndicator-ExtIEs } } OPTIONAL, + ... +} + +HardwareLoadIndicator-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +HSNASlotConfigList ::= SEQUENCE (SIZE(1..maxnoofHSNASlots)) OF HSNASlotConfigItem + +HSNASlotConfigItem ::= SEQUENCE { + hSNADownlink HSNADownlink OPTIONAL, + hSNAUplink HSNAUplink OPTIONAL, + hSNAFlexible HSNAFlexible OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { HSNASlotConfigItem-ExtIEs } } OPTIONAL +} + +HSNASlotConfigItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} +HSNADownlink ::= ENUMERATED { hard, soft, notavailable } + +HSNAFlexible ::= ENUMERATED { hard, soft, notavailable } + +HSNAUplink ::= ENUMERATED { hard, soft, notavailable } + +HSNATransmissionPeriodicity ::= ENUMERATED { ms0p5, ms0p625, ms1, ms1p25, ms2, ms2p5, ms5, ms10, ms20, ms40, ms80, ms160, ...} + +-- I + +IAB-Barred ::= ENUMERATED {barred, not-barred, ...} + +IAB-Info-IAB-donor-CU ::= SEQUENCE{ + iAB-STC-Info IAB-STC-Info OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { IAB-Info-IAB-donor-CU-ExtIEs } } OPTIONAL +} + +IAB-Info-IAB-donor-CU-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +IAB-Info-IAB-DU ::= SEQUENCE{ + multiplexingInfo MultiplexingInfo OPTIONAL, + iAB-STC-Info IAB-STC-Info OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { IAB-Info-IAB-DU-ExtIEs } } OPTIONAL +} + +IAB-Info-IAB-DU-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +IAB-MT-Cell-List ::= SEQUENCE (SIZE(1..maxnoofServingCells)) OF IAB-MT-Cell-List-Item + +IAB-MT-Cell-List-Item ::= SEQUENCE { + nRCellIdentity NRCellIdentity, + dU-RX-MT-RX DU-RX-MT-RX, + dU-TX-MT-TX DU-TX-MT-TX, + dU-RX-MT-TX DU-RX-MT-TX, + dU-TX-MT-RX DU-TX-MT-RX, + iE-Extensions ProtocolExtensionContainer { { IAB-MT-Cell-List-Item-ExtIEs } } OPTIONAL +} + +IAB-MT-Cell-List-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +IAB-STC-Info ::= SEQUENCE{ + iAB-STC-Info-List IAB-STC-Info-List, + iE-Extensions ProtocolExtensionContainer { { IAB-STC-Info-ExtIEs } } OPTIONAL +} + +IAB-STC-Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +IAB-STC-Info-List ::= SEQUENCE (SIZE(1..maxnoofIABSTCInfo)) OF IAB-STC-Info-Item + +IAB-STC-Info-Item::= SEQUENCE { + sSB-freqInfo SSB-freqInfo, + sSB-subcarrierSpacing SSB-subcarrierSpacing, + sSB-transmissionPeriodicity SSB-transmissionPeriodicity, + sSB-transmissionTimingOffset SSB-transmissionTimingOffset, + sSB-transmissionBitmap SSB-transmissionBitmap, + iE-Extensions ProtocolExtensionContainer { { IAB-STC-Info-Item-ExtIEs } } OPTIONAL +} + +IAB-STC-Info-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +IAB-Allocated-TNL-Address-Item ::= SEQUENCE { + iABTNLAddress IABTNLAddress, + iABTNLAddressUsage IABTNLAddressUsage OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { IAB-Allocated-TNL-Address-Item-ExtIEs } } OPTIONAL +} + +IAB-Allocated-TNL-Address-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +IAB-DU-Cell-Resource-Configuration-Mode-Info ::= CHOICE { + fDD IAB-DU-Cell-Resource-Configuration-FDD-Info, + tDD IAB-DU-Cell-Resource-Configuration-TDD-Info, + choice-extension ProtocolIE-SingleContainer { { IAB-DU-Cell-Resource-Configuration-Mode-Info-ExtIEs} } +} + +IAB-DU-Cell-Resource-Configuration-Mode-Info-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +IAB-DU-Cell-Resource-Configuration-FDD-Info ::= SEQUENCE { + gNB-DU-Cell-Resource-Configuration-FDD-UL GNB-DU-Cell-Resource-Configuration, + gNB-DU-Cell-Resource-Configuration-FDD-DL GNB-DU-Cell-Resource-Configuration, + iE-Extensions ProtocolExtensionContainer { {IAB-DU-Cell-Resource-Configuration-FDD-Info-ExtIEs} } OPTIONAL, + ... +} + +IAB-DU-Cell-Resource-Configuration-FDD-Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +IAB-DU-Cell-Resource-Configuration-TDD-Info ::= SEQUENCE { + gNB-DU-Cell-Resourc-Configuration-TDD GNB-DU-Cell-Resource-Configuration, + iE-Extensions ProtocolExtensionContainer { {IAB-DU-Cell-Resource-Configuration-TDD-Info-ExtIEs} } OPTIONAL, + ... +} + +IAB-DU-Cell-Resource-Configuration-TDD-Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +IABIPv6RequestType ::= CHOICE { + iPv6Address IABTNLAddressesRequested, + iPv6Prefix IABTNLAddressesRequested, + choice-extension ProtocolIE-SingleContainer { { IABIPv6RequestType-ExtIEs} } +} + +IABIPv6RequestType-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +IABTNLAddress ::= CHOICE { + iPv4Address BIT STRING (SIZE(32)), + iPv6Address BIT STRING (SIZE(128)), + iPv6Prefix BIT STRING (SIZE(64)), + choice-extension ProtocolIE-SingleContainer { { IABTNLAddress-ExtIEs} } +} + +IABTNLAddress-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +IABTNLAddressesRequested ::= SEQUENCE { + tNLAddressesOrPrefixesRequestedAllTraffic INTEGER (1..256) OPTIONAL, + tNLAddressesOrPrefixesRequestedF1-C INTEGER (1..256) OPTIONAL, + tNLAddressesOrPrefixesRequestedF1-U INTEGER (1..256) OPTIONAL, + tNLAddressesOrPrefixesRequestedNoNF1 INTEGER (1..256) OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { IABTNLAddressesRequested-ExtIEs } } OPTIONAL +} + +IABTNLAddressesRequested-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +IAB-TNL-Addresses-To-Remove-Item ::= SEQUENCE { + iABTNLAddress IABTNLAddress, + iE-Extensions ProtocolExtensionContainer { { IAB-TNL-Addresses-To-Remove-Item-ExtIEs} } OPTIONAL +} + +IAB-TNL-Addresses-To-Remove-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +IABTNLAddressUsage ::= ENUMERATED { + f1-c, + f1-u, + non-f1, + ... +} + + +IABv4AddressesRequested ::= SEQUENCE { + iABv4AddressesRequested IABTNLAddressesRequested, + iE-Extensions ProtocolExtensionContainer { { IABv4AddressesRequested-ExtIEs} } OPTIONAL +} + +IABv4AddressesRequested-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +ImplicitFormat ::= SEQUENCE { + dUFSlotformatIndex DUFSlotformatIndex, + iE-Extensions ProtocolExtensionContainer { { ImplicitFormat-ExtIEs } } OPTIONAL +} + +ImplicitFormat-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +IgnorePRACHConfiguration::= ENUMERATED { true,...} + +IgnoreResourceCoordinationContainer ::= ENUMERATED { yes,...} +InactivityMonitoringRequest ::= ENUMERATED { true,...} +InactivityMonitoringResponse ::= ENUMERATED { not-supported,...} +InterfacesToTrace ::= BIT STRING (SIZE(8)) + +IntendedTDD-DL-ULConfig ::= SEQUENCE { + nRSCS ENUMERATED { scs15, scs30, scs60, scs120,...}, + nRCP ENUMERATED { normal, extended,...}, + nRDLULTxPeriodicity ENUMERATED { ms0p5, ms0p625, ms1, ms1p25, ms2, ms2p5, ms3, ms4, ms5, ms10, ms20, ms40, ms60, ms80, ms100, ms120, ms140, ms160, ...}, + slot-Configuration-List Slot-Configuration-List, + iE-Extensions ProtocolExtensionContainer { {IntendedTDD-DL-ULConfig-ExtIEs} } OPTIONAL +} + +IntendedTDD-DL-ULConfig-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +InterFrequencyConfig-NoGap ::= ENUMERATED { + true, + ... +} + + +IPHeaderInformation ::= SEQUENCE { + destinationIABTNLAddress IABTNLAddress, + dsInformationList DSInformationList OPTIONAL, + iPv6FlowLabel BIT STRING (SIZE (20)) OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { IPHeaderInformation-ItemExtIEs} } OPTIONAL, + ... +} + +IPHeaderInformation-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +IPtolayer2TrafficMappingInfo ::= SEQUENCE { + iPtolayer2TrafficMappingInfoToAdd IPtolayer2TrafficMappingInfoList OPTIONAL, + iPtolayer2TrafficMappingInfoToRemove MappingInformationtoRemove OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { IPtolayer2TrafficMappingInfo-ItemExtIEs} } OPTIONAL, + ... +} + +IPtolayer2TrafficMappingInfoList ::= SEQUENCE (SIZE(1..maxnoofMappingEntries)) OF IPtolayer2TrafficMappingInfo-Item + +IPtolayer2TrafficMappingInfo-Item ::= SEQUENCE { + mappingInformationIndex MappingInformationIndex, + iPHeaderInformation IPHeaderInformation, + bHInfo BHInfo, iE-Extensions ProtocolExtensionContainer { { IPtolayer2TrafficMappingInfo-ItemExtIEs} } OPTIONAL, + ... +} + +IPtolayer2TrafficMappingInfo-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +-- J + +-- K + +-- L + +L139Info ::= SEQUENCE { + msg1SCS ENUMERATED {scs15, scs30, scs60, scs120, ...}, + rootSequenceIndex INTEGER (0..137) OPTIONAL, + iE-Extension ProtocolExtensionContainer { {L139Info-ExtIEs} } OPTIONAL, + ... +} + +L139Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +L839Info ::= SEQUENCE { + rootSequenceIndex INTEGER (0..837), + restrictedSetConfig ENUMERATED {unrestrictedSet, restrictedSetTypeA, + restrictedSetTypeB, ...}, + iE-Extension ProtocolExtensionContainer { {L839Info-ExtIEs} } OPTIONAL, + ... +} + +L839Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +L571Info ::= SEQUENCE { + prachSCSForL571 ENUMERATED { scs30, spare1, ...}, + rootSequenceIndex INTEGER (0..569), + iE-Extension ProtocolExtensionContainer { {L571Info-ExtIEs} } OPTIONAL, + ... +} + +L571Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +L1151Info ::= SEQUENCE { + prachSCSForL1151 ENUMERATED { scs15, spare1, ...}, + rootSequenceIndex INTEGER (0..1149), + iE-Extension ProtocolExtensionContainer { {L1151Info-ExtIEs} } OPTIONAL, + ... +} + +L1151Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + + +LCID ::= INTEGER (1..32, ...) + + +LCS-to-GCS-TranslationAoA::= SEQUENCE { + alpha INTEGER (0..3599), + beta INTEGER (0..3599), + gamma INTEGER (0..3599), + iE-Extensions ProtocolExtensionContainer { { LCS-to-GCS-TranslationAoA-ExtIEs} } OPTIONAL, + ... +} + +LCS-to-GCS-TranslationAoA-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +LCStoGCSTranslationList ::= SEQUENCE (SIZE (1.. maxnooflcs-gcs-translation)) OF LCStoGCSTranslation + +LCStoGCSTranslation ::= SEQUENCE { + alpha INTEGER (0..359), + alpha-fine INTEGER (0..9) OPTIONAL, + beta INTEGER (0..359), + beta-fine INTEGER (0..9) OPTIONAL, + gamma INTEGER (0..359), + gamma-fine INTEGER (0..9) OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {LCStoGCSTranslation-ExtIEs} } OPTIONAL +} + +LCStoGCSTranslation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +LMF-MeasurementID ::= INTEGER (1.. 65536, ...) + +LMF-UE-MeasurementID ::= INTEGER (1.. 256, ...) + +LocationMeasurementInformation ::= OCTET STRING + +LocationUncertainty ::= SEQUENCE { + horizontalUncertainty INTEGER (0..255), + horizontalConfidence INTEGER (0..100), + verticalUncertainty INTEGER (0..255), + verticalConfidence INTEGER (0..100), + iE-Extensions ProtocolExtensionContainer { { LocationUncertainty-ExtIEs} } OPTIONAL +} + +LocationUncertainty-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +LongDRXCycleLength ::= ENUMERATED +{ms10, ms20, ms32, ms40, ms60, ms64, ms70, ms80, ms128, ms160, ms256, ms320, ms512, ms640, ms1024, ms1280, ms2048, ms2560, ms5120, ms10240, ...} + +LowerLayerPresenceStatusChange ::= ENUMERATED { + suspend-lower-layers, + resume-lower-layers, + ... + +} + +LTEUESidelinkAggregateMaximumBitrate ::= SEQUENCE { + uELTESidelinkAggregateMaximumBitrate BitRate, + iE-Extensions ProtocolExtensionContainer { {LTEUESidelinkAggregateMaximumBitrate-ExtIEs} } OPTIONAL +} + +LTEUESidelinkAggregateMaximumBitrate-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +LTEV2XServicesAuthorized ::= SEQUENCE { + vehicleUE VehicleUE OPTIONAL, + pedestrianUE PedestrianUE OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {LTEV2XServicesAuthorized-ExtIEs} } OPTIONAL +} + +LTEV2XServicesAuthorized-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +-- M + +MappingInformationIndex ::= BIT STRING (SIZE (26)) + +MappingInformationtoRemove ::= SEQUENCE (SIZE(1..maxnoofMappingEntries)) OF MappingInformationIndex + +MaskedIMEISV ::= BIT STRING (SIZE (64)) + +MaxDataBurstVolume ::= INTEGER (0..4095, ..., 4096.. 2000000) +MaxPacketLossRate ::= INTEGER (0..1000) + +MIB-message ::= OCTET STRING + +MeasConfig ::= OCTET STRING + +MeasGapConfig ::= OCTET STRING + +MeasGapSharingConfig ::= OCTET STRING + +MeasurementBeamInfoRequest ::= ENUMERATED {true, ...} + +MeasurementBeamInfo ::= SEQUENCE { + pRS-Resource-ID PRS-Resource-ID OPTIONAL, + pRS-Resource-Set-ID PRS-Resource-Set-ID OPTIONAL, + sSB-Index SSB-Index OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { MeasurementBeamInfo-ExtIEs} } OPTIONAL +} + +MeasurementBeamInfo-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + + +MeasurementTimingConfiguration ::= OCTET STRING + +MessageIdentifier ::= BIT STRING (SIZE (16)) + +MultiplexingInfo ::= SEQUENCE{ + iAB-MT-Cell-List IAB-MT-Cell-List, + iE-Extensions ProtocolExtensionContainer { {MultiplexingInfo-ExtIEs} } OPTIONAL +} + +MultiplexingInfo-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +M2Configuration ::= ENUMERATED {true, ...} + + +M5Configuration ::= SEQUENCE { + m5period M5period, + m5-links-to-log M5-Links-to-log, + iE-Extensions ProtocolExtensionContainer { { M5Configuration-ExtIEs} } OPTIONAL, + ... +} + +M5Configuration-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +M5period ::= ENUMERATED { ms1024, ms2048, ms5120, ms10240, min1, ... } + +M5-Links-to-log ::= ENUMERATED {uplink, downlink, both-uplink-and-downlink, ...} + + +M6Configuration ::= SEQUENCE { + m6report-Interval M6report-Interval, + m6-links-to-log M6-Links-to-log, + iE-Extensions ProtocolExtensionContainer { { M6Configuration-ExtIEs} } OPTIONAL, + ... +} + +M6Configuration-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +M6report-Interval ::= ENUMERATED { ms120, ms240, ms640, ms1024, ms2048, ms5120, ms10240, ms20480, ms40960, min1, min6, min12, min30, ..., ms480} + + + +M6-Links-to-log ::= ENUMERATED {uplink, downlink, both-uplink-and-downlink, ...} + + +M7Configuration ::= SEQUENCE { + m7period M7period, + m7-links-to-log M7-Links-to-log, + iE-Extensions ProtocolExtensionContainer { { M7Configuration-ExtIEs} } OPTIONAL, + ... +} + +M7Configuration-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +M7period ::= INTEGER(1..60, ...) + +M7-Links-to-log ::= ENUMERATED {downlink, ...} + +MDT-Activation ::= ENUMERATED { + immediate-MDT-only, + immediate-MDT-and-Trace, + ... +} + +MDTConfiguration ::= SEQUENCE { + mdt-Activation MDT-Activation, + measurementsToActivate MeasurementsToActivate, + m2Configuration M2Configuration OPTIONAL, + -- C-ifM2: This IE shall be present if the Measurements to Activate IE has the second bit set to "1". + m5Configuration M5Configuration OPTIONAL, + -- C-ifM5: This IE shall be present if the Measurements to Activate IE has the fifth bit set to "1". + m6Configuration M6Configuration OPTIONAL, + -- C-ifM6: This IE shall be present if the Measurements to Activate IE has the seventh bit set to "1". + m7Configuration M7Configuration OPTIONAL, + -- C-ifM7: This IE shall be present if the Measurements to Activate IE has the eighth bit set to "1". + iE-Extensions ProtocolExtensionContainer { { MDTConfiguration-ExtIEs} } OPTIONAL, + ... +} +MDTConfiguration-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + + +MDTPLMNList ::= SEQUENCE (SIZE(1..maxnoofMDTPLMNs)) OF PLMN-Identity + + +MeasuredResultsValue ::= CHOICE { + uL-AngleOfArrival UL-AoA, + uL-SRS-RSRP UL-SRS-RSRP, + uL-RTOA UL-RTOA-Measurement, + gNB-RxTxTimeDiff GNB-RxTxTimeDiff, + choice-extension ProtocolIE-SingleContainer { { MeasuredResultsValue-ExtIEs } } +} + +MeasuredResultsValue-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +MeasurementsToActivate ::= BIT STRING (SIZE (8)) + +-- N + +NeedforGap::= ENUMERATED {true, ...} + +NeedForGapsInfoNR ::= OCTET STRING + +Neighbour-Cell-Information-Item ::= SEQUENCE { + nRCGI NRCGI, + intendedTDD-DL-ULConfig IntendedTDD-DL-ULConfig OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { Neighbour-Cell-Information-ItemExtIEs } } OPTIONAL +} + +Neighbour-Cell-Information-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +NGRANAllocationAndRetentionPriority ::= SEQUENCE { + priorityLevel PriorityLevel, + pre-emptionCapability Pre-emptionCapability, + pre-emptionVulnerability Pre-emptionVulnerability, + iE-Extensions ProtocolExtensionContainer { {NGRANAllocationAndRetentionPriority-ExtIEs} } OPTIONAL +} + +NGRANAllocationAndRetentionPriority-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + + +NGRANHighAccuracyAccessPointPosition ::= SEQUENCE { + latitude INTEGER (-2147483648.. 2147483647), + longitude INTEGER (-2147483648.. 2147483647), + altitude INTEGER (-64000..1280000), + uncertaintySemi-major INTEGER (0..255), + uncertaintySemi-minor INTEGER (0..255), + orientationOfMajorAxis INTEGER (0..179), + horizontalConfidence INTEGER (0..100), + uncertaintyAltitude INTEGER (0..255), + verticalConfidence INTEGER (0..100), + + iE-Extensions ProtocolExtensionContainer { { NGRANHighAccuracyAccessPointPosition-ExtIEs} } OPTIONAL +} + +NGRANHighAccuracyAccessPointPosition-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +NID ::= BIT STRING (SIZE(44)) + +NR-CGI-List-For-Restart-Item ::= SEQUENCE { + nRCGI NRCGI, + iE-Extensions ProtocolExtensionContainer { { NR-CGI-List-For-Restart-ItemExtIEs } } OPTIONAL, + ... +} + +NR-CGI-List-For-Restart-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +NR-PRSBeamInformation ::= SEQUENCE { + nR-PRSBeamInformationList NR-PRSBeamInformationList, + lCStoGCSTranslationList LCStoGCSTranslationList OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { NR-PRSBeamInformation-ExtIEs } } OPTIONAL +} + +NR-PRSBeamInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +NR-PRSBeamInformationList ::= SEQUENCE (SIZE(1.. maxnoofPRS-ResourceSets)) OF NR-PRSBeamInformationItem + +NR-PRSBeamInformationItem ::= SEQUENCE { + pRSResourceSetID PRS-Resource-Set-ID, + pRSAngleList PRSAngleList, + iE-Extensions ProtocolExtensionContainer { { NR-PRSBeamInformationItem-ExtIEs } } OPTIONAL +} + +NR-PRSBeamInformationItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +NonDynamic5QIDescriptor ::= SEQUENCE { + fiveQI INTEGER (0..255, ...), + qoSPriorityLevel INTEGER (1..127) OPTIONAL, + averagingWindow AveragingWindow OPTIONAL, + maxDataBurstVolume MaxDataBurstVolume OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { NonDynamic5QIDescriptor-ExtIEs } } OPTIONAL +} + +NonDynamic5QIDescriptor-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-CNPacketDelayBudgetDownlink CRITICALITY ignore EXTENSION ExtendedPacketDelayBudget PRESENCE optional }| + { ID id-CNPacketDelayBudgetUplink CRITICALITY ignore EXTENSION ExtendedPacketDelayBudget PRESENCE optional }, + ... +} + +NonDynamicPQIDescriptor ::= SEQUENCE { + fiveQI INTEGER (0..255, ...), + qoSPriorityLevel INTEGER (1..8, ...) OPTIONAL, + averagingWindow AveragingWindow OPTIONAL, + maxDataBurstVolume MaxDataBurstVolume OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { NonDynamicPQIDescriptor-ExtIEs } } OPTIONAL +} + +NonDynamicPQIDescriptor-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +NonUPTrafficType ::= ENUMERATED {ue-associated, non-ue-associated, non-f1, bap-control-pdu,...} + +NoofDownlinkSymbols ::= INTEGER (0..14) + +NoofUplinkSymbols ::= INTEGER (0..14) + +Notification-Cause ::= ENUMERATED {fulfilled, not-fulfilled, ...} + +NotificationControl ::= ENUMERATED {active, not-active, ...} + +NotificationInformation ::= SEQUENCE { + message-Identifier MessageIdentifier, + serialNumber SerialNumber, + iE-Extensions ProtocolExtensionContainer { { NotificationInformationExtIEs} } OPTIONAL, + ... +} + +NotificationInformationExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +NPNBroadcastInformation ::= CHOICE { + sNPN-Broadcast-Information NPN-Broadcast-Information-SNPN, + pNI-NPN-Broadcast-Information NPN-Broadcast-Information-PNI-NPN, + choice-extension ProtocolIE-SingleContainer { {NPNBroadcastInformation-ExtIEs} } +} + +NPNBroadcastInformation-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +NPN-Broadcast-Information-SNPN ::= SEQUENCE { + broadcastSNPNID-List BroadcastSNPN-ID-List, + iE-Extension ProtocolExtensionContainer { {NPN-Broadcast-Information-SNPN-ExtIEs} } OPTIONAL, + ... +} + +NPN-Broadcast-Information-SNPN-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} +NPN-Broadcast-Information-PNI-NPN ::= SEQUENCE { + broadcastPNI-NPN-ID-Information BroadcastPNI-NPN-ID-List, + iE-Extension ProtocolExtensionContainer { {NPN-Broadcast-Information-PNI-NPN-ExtIEs} } OPTIONAL, + ... +} + +NPN-Broadcast-Information-PNI-NPN-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + + +NPNSupportInfo ::= CHOICE { + sNPN-Information NID, + choice-extension ProtocolIE-SingleContainer { { NPNSupportInfo-ExtIEs } } +} + +NPNSupportInfo-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +NRCarrierList ::= SEQUENCE (SIZE(1..maxnoofNRSCSs)) OF NRCarrierItem + +NRCarrierItem ::= SEQUENCE { + carrierSCS NRSCS, + offsetToCarrier INTEGER (0..2199, ...), + carrierBandwidth INTEGER (0..maxnoofPhysicalResourceBlocks, ...), + iE-Extension ProtocolExtensionContainer { {NRCarrierItem-ExtIEs} } OPTIONAL, + ... +} + +NRCarrierItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +NRFreqInfo ::= SEQUENCE { + nRARFCN INTEGER (0..maxNRARFCN), + sul-Information SUL-Information OPTIONAL, + freqBandListNr SEQUENCE (SIZE(1..maxnoofNrCellBands)) OF FreqBandNrItem, + iE-Extensions ProtocolExtensionContainer { { NRFreqInfoExtIEs} } OPTIONAL, + ... +} + +NRFreqInfoExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-FrequencyShift7p5khz CRITICALITY ignore EXTENSION FrequencyShift7p5khz PRESENCE optional }, + ... +} + +NRCGI ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + nRCellIdentity NRCellIdentity, + iE-Extensions ProtocolExtensionContainer { {NRCGI-ExtIEs} } OPTIONAL, + ... +} + +NRCGI-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +NR-Mode-Info ::= CHOICE { + fDD FDD-Info, + tDD TDD-Info, + choice-extension ProtocolIE-SingleContainer { { NR-Mode-Info-ExtIEs} } +} + +NR-Mode-Info-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + + + +NRPRACHConfig ::= SEQUENCE { + ulPRACHConfigList NRPRACHConfigList OPTIONAL, + sulPRACHConfigList NRPRACHConfigList OPTIONAL, + iE-Extension ProtocolExtensionContainer { {NRPRACHConfig-ExtIEs} } OPTIONAL, + ... +} + +NRPRACHConfig-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +NRCellIdentity ::= BIT STRING (SIZE(36)) + +NRNRB ::= ENUMERATED { nrb11, nrb18, nrb24, nrb25, nrb31, nrb32, nrb38, nrb51, nrb52, nrb65, nrb66, nrb78, nrb79, nrb93, nrb106, nrb107, nrb121, nrb132, nrb133, nrb135, nrb160, nrb162, nrb189, nrb216, nrb217, nrb245, nrb264, nrb270, nrb273, ...} + +NRPCI ::= INTEGER(0..1007) + + +NRPRACHConfigList ::= SEQUENCE (SIZE(0..maxnoofPRACHconfigs)) OF NRPRACHConfigItem + +NRPRACHConfigItem ::= SEQUENCE { + nRSCS NRSCS, + prachFreqStartfromCarrier INTEGER (0..maxnoofPhysicalResourceBlocks-1, ...), + msg1FDM ENUMERATED {one, two, four, eight, ...}, + parchConfigIndex INTEGER (0..255, ..., 256..262), + ssb-perRACH-Occasion ENUMERATED {oneEighth, oneFourth, oneHalf, one, + two, four, eight, sixteen, ...}, + freqDomainLength FreqDomainLength, + zeroCorrelZoneConfig INTEGER (0..15), + iE-Extension ProtocolExtensionContainer { { NRPRACHConfigItem-ExtIEs} } OPTIONAL, + ... +} + +NRPRACHConfigItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +NRSCS ::= ENUMERATED { scs15, scs30, scs60, scs120, ...} + +NRUERLFReportContainer ::= OCTET STRING + +NumberofActiveUEs ::= INTEGER(0..16777215, ...) + +NumberOfBroadcasts ::= INTEGER (0..65535) + +NumberofBroadcastRequest ::= INTEGER (0..65535) + +NumDLULSymbols ::= SEQUENCE { + numDLSymbols INTEGER (0..13, ...), + numULSymbols INTEGER (0..13, ...), + iE-Extensions ProtocolExtensionContainer { { NumDLULSymbols-ExtIEs} } OPTIONAL +} + +NumDLULSymbols-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +NRV2XServicesAuthorized ::= SEQUENCE { + vehicleUE VehicleUE OPTIONAL, + pedestrianUE PedestrianUE OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {NRV2XServicesAuthorized-ExtIEs} } OPTIONAL +} + +NRV2XServicesAuthorized-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +NRUESidelinkAggregateMaximumBitrate ::= SEQUENCE { + uENRSidelinkAggregateMaximumBitrate BitRate, + iE-Extensions ProtocolExtensionContainer { {NRUESidelinkAggregateMaximumBitrate-ExtIEs} } OPTIONAL +} + +NRUESidelinkAggregateMaximumBitrate-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +NZP-CSI-RS-ResourceID::= INTEGER (0..191) + + +-- O + +OffsetToPointA ::= INTEGER (0..2199,...) + + +-- P + +PacketDelayBudget ::= INTEGER (0..1023, ...) + +PacketErrorRate ::= SEQUENCE { + pER-Scalar PER-Scalar, + pER-Exponent PER-Exponent, + iE-Extensions ProtocolExtensionContainer { {PacketErrorRate-ExtIEs} } OPTIONAL, + ... +} + +PacketErrorRate-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +PER-Scalar ::= INTEGER (0..9, ...) +PER-Exponent ::= INTEGER (0..9, ...) + +PagingCell-Item ::= SEQUENCE { + nRCGI NRCGI , + iE-Extensions ProtocolExtensionContainer { { PagingCell-ItemExtIEs } } OPTIONAL +} + +PagingCell-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +PagingDRX ::= ENUMERATED { + v32, + v64, + v128, + v256, + ... +} + +PagingIdentity ::= CHOICE { + rANUEPagingIdentity RANUEPagingIdentity, + cNUEPagingIdentity CNUEPagingIdentity, + choice-extension ProtocolIE-SingleContainer { { PagingIdentity-ExtIEs } } +} + +PagingIdentity-ExtIEs F1AP-PROTOCOL-IES::= { + ... +} + +PagingOrigin ::= ENUMERATED { non-3gpp, ...} + +PagingPriority ::= ENUMERATED { priolevel1, priolevel2, priolevel3, priolevel4, priolevel5, priolevel6, priolevel7, priolevel8,...} + + +RelativePathDelay ::= CHOICE { + k0 INTEGER (0..16351), + k1 INTEGER (0..8176), + k2 INTEGER (0..4088), + k3 INTEGER (0..2044), + k4 INTEGER (0..1022), + k5 INTEGER (0..511), + choice-extension ProtocolIE-SingleContainer { { RelativePathDelay-ExtIEs } } +} + +RelativePathDelay-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +PathlossReferenceInfo ::= SEQUENCE { + pathlossReferenceSignal PathlossReferenceSignal, + iE-Extensions ProtocolExtensionContainer { {PathlossReferenceInfo-ExtIEs} } OPTIONAL +} + +PathlossReferenceInfo-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +PathlossReferenceSignal ::= CHOICE { + sSB SSB, + dL-PRS DL-PRS, + choice-extension ProtocolIE-SingleContainer {{PathlossReferenceSignal-ExtIEs }} +} + +PathlossReferenceSignal-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +PC5QoSFlowIdentifier ::= INTEGER (1..2048) + +PC5-QoS-Characteristics ::= CHOICE { + non-Dynamic-PQI NonDynamicPQIDescriptor, + dynamic-PQI DynamicPQIDescriptor, + choice-extension ProtocolIE-SingleContainer { { PC5-QoS-Characteristics-ExtIEs } } +} + +PC5-QoS-Characteristics-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + + +PC5QoSParameters ::= SEQUENCE { + pC5-QoS-Characteristics PC5-QoS-Characteristics, + pC5-QoS-Flow-Bit-Rates PC5FlowBitRates OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { PC5QoSParameters-ExtIEs } } OPTIONAL, + ... +} + +PC5QoSParameters-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +PC5FlowBitRates ::= SEQUENCE { + guaranteedFlowBitRate BitRate, + maximumFlowBitRate BitRate, + iE-Extensions ProtocolExtensionContainer { { PC5FlowBitRates-ExtIEs } } OPTIONAL, + ... +} + +PC5FlowBitRates-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +PDCCH-BlindDetectionSCG ::= OCTET STRING + +PDCP-SN ::= INTEGER (0..4095) + +PDCPSNLength ::= ENUMERATED { twelve-bits,eighteen-bits,...} + +PDUSessionID ::= INTEGER (0..255) + +ReportingPeriodicityValue ::= INTEGER (0..512, ...) + +Periodicity ::= INTEGER (0..640000, ...) + +PeriodicitySRS ::= ENUMERATED { ms0p125, ms0p25, ms0p5, ms0p625, ms1, ms1p25, ms2, ms2p5, ms4, ms5, ms8, ms10, ms16, ms20, ms32, ms40, ms64, ms80, ms160, ms320, ms640, ms1280, ms2560, ms5120, ms10240, ...} + +PeriodicityList ::= SEQUENCE (SIZE(1.. maxnoSRS-ResourcePerSet)) OF PeriodicityList-Item + +PeriodicityList-Item ::= SEQUENCE { + periodicitySRS PeriodicitySRS, + iE-Extensions ProtocolExtensionContainer { { PeriodicityList-ItemExtIEs} } OPTIONAL +} + +PeriodicityList-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + + +Permutation ::= ENUMERATED {dfu, ufd, ...} + +Ph-InfoMCG ::= OCTET STRING + +Ph-InfoSCG ::= OCTET STRING + +PLMN-Identity ::= OCTET STRING (SIZE(3)) + +PortNumber ::= BIT STRING (SIZE (16)) + + +PosAssistance-Information ::= OCTET STRING + +PosAssistanceInformationFailureList ::= OCTET STRING + +PosBroadcast ::= ENUMERATED { + start, + stop, + ... +} + +PositioningBroadcastCells ::= SEQUENCE (SIZE (1..maxnoBcastCell)) OF NRCGI + +MeasurementPeriodicity ::= ENUMERATED +{ms120, ms240, ms480, ms640, ms1024, ms2048, ms5120, ms10240, min1, min6, min12, min30, ..., ms20480, ms40960, extended } + + +MeasurementPeriodicityExtended ::= ENUMERATED {ms160, ms320, ms1280, ms2560, ms61440, ms81920, ms368640, ms737280, ms1843200, ...} + +PosMeasurementPeriodicityNR-AoA ::= ENUMERATED { + ms160, + ms320, + ms640, + ms1280, + ms2560, + ms5120, + ms10240, + ms20480, + ms40960, + ms61440, + ms81920, + ms368640, + ms737280, + ms1843200, + ... + +} + + +PosMeasurementQuantities ::= SEQUENCE (SIZE(1.. maxnoofPosMeas)) OF PosMeasurementQuantities-Item + +PosMeasurementQuantities-Item ::= SEQUENCE { + posMeasurementType PosMeasurementType, + timingReportingGranularityFactor INTEGER (0..5) OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { PosMeasurementQuantities-ItemExtIEs} } OPTIONAL +} + +PosMeasurementQuantities-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +PosMeasurementResult ::= SEQUENCE (SIZE (1.. maxnoofPosMeas)) OF PosMeasurementResultItem + +PosMeasurementResultItem ::= SEQUENCE { + measuredResultsValue MeasuredResultsValue, + timeStamp TimeStamp, + measurementQuality TRPMeasurementQuality OPTIONAL, + measurementBeamInfo MeasurementBeamInfo OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { PosMeasurementResultItemExtIEs } } OPTIONAL +} + +PosMeasurementResultItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +PosMeasurementResultList ::= SEQUENCE (SIZE(1.. maxNoOfMeasTRPs)) OF PosMeasurementResultList-Item + +PosMeasurementResultList-Item ::= SEQUENCE { + posMeasurementResult PosMeasurementResult, + tRPID TRPID, + iE-Extensions ProtocolExtensionContainer { { PosMeasurementResultList-ItemExtIEs} } OPTIONAL +} + +PosMeasurementResultList-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-NRCGI CRITICALITY ignore EXTENSION NRCGI PRESENCE optional }, + ... +} + +PosMeasurementType ::= ENUMERATED { + gnb-rx-tx, + ul-srs-rsrp, + ul-aoa, + ul-rtoa, + ... +} + +PosReportCharacteristics ::= ENUMERATED { + ondemand, + periodic, + ... +} + +PosResourceSetType ::= CHOICE { + periodic PosResourceSetTypePR, + semi-persistent PosResourceSetTypeSP, + aperiodic PosResourceSetTypeAP, + choice-extension ProtocolIE-SingleContainer {{ PosResourceSetType-ExtIEs }} +} + +PosResourceSetType-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +PosResourceSetTypePR ::= SEQUENCE { + posperiodicSet ENUMERATED{true, ...}, + iE-Extensions ProtocolExtensionContainer { { PosResourceSetTypePR-ExtIEs} } OPTIONAL +} + +PosResourceSetTypePR-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +PosResourceSetTypeSP ::= SEQUENCE { + possemi-persistentSet ENUMERATED{true, ...}, + iE-Extensions ProtocolExtensionContainer { { PosResourceSetTypeSP-ExtIEs} } OPTIONAL +} + +PosResourceSetTypeSP-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +PosResourceSetTypeAP ::= SEQUENCE { + sRSResourceTrigger-List INTEGER(1..3), + iE-Extensions ProtocolExtensionContainer { { PosResourceSetTypeAP-ExtIEs} } OPTIONAL +} + +PosResourceSetTypeAP-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +PosSItypeList ::= SEQUENCE (SIZE(1.. maxnoofPosSITypes)) OF PosSItype-Item +PosSItype-Item ::= SEQUENCE { + posItype PosSItype , + iE-Extensions ProtocolExtensionContainer { { PosSItype-ItemExtIEs } } OPTIONAL +} + +PosSItype-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +PosSItype ::= INTEGER (1..32, ...) + +PosSRSResourceID-List ::= SEQUENCE (SIZE (1..maxnoSRS-PosResourcePerSet)) OF SRSPosResourceID + +PosSRSResource-Item ::= SEQUENCE { + srs-PosResourceId SRSPosResourceID, + transmissionCombPos TransmissionCombPos, + startPosition INTEGER (0..13), + nrofSymbols ENUMERATED {n1, n2, n4, n8, n12}, + freqDomainShift INTEGER (0..268), + c-SRS INTEGER (0..63), + groupOrSequenceHopping ENUMERATED { neither, groupHopping, sequenceHopping }, + resourceTypePos ResourceTypePos, + sequenceId INTEGER (0.. 65535), + spatialRelationPos SpatialRelationPos OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { PosSRSResource-Item-ExtIEs} } OPTIONAL +} + +PosSRSResource-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +PosSRSResource-List ::= SEQUENCE (SIZE (1..maxnoSRS-PosResources)) OF PosSRSResource-Item + +PosSRSResourceSet-Item ::= SEQUENCE { + possrsResourceSetID INTEGER(0..15), + possRSResourceID-List PosSRSResourceID-List, + posresourceSetType PosResourceSetType, + iE-Extensions ProtocolExtensionContainer { { PosSRSResourceSet-Item-ExtIEs} } OPTIONAL +} + +PosSRSResourceSet-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +PosSRSResourceSet-List ::= SEQUENCE (SIZE (1..maxnoSRS-PosResourceSets)) OF PosSRSResourceSet-Item + +PrimaryPathIndication ::= ENUMERATED { + true, + false, + ... +} + +Pre-emptionCapability ::= ENUMERATED { + shall-not-trigger-pre-emption, + may-trigger-pre-emption +} + +Pre-emptionVulnerability ::= ENUMERATED { + not-pre-emptable, + pre-emptable +} + +PriorityLevel ::= INTEGER { spare (0), highest (1), lowest (14), no-priority (15) } (0..15) + +ProtectedEUTRAResourceIndication ::= OCTET STRING + +Protected-EUTRA-Resources-Item ::= SEQUENCE { + spectrumSharingGroupID SpectrumSharingGroupID, + eUTRACells-List EUTRACells-List, + iE-Extensions ProtocolExtensionContainer { { Protected-EUTRA-Resources-ItemExtIEs } } OPTIONAL +} + +Protected-EUTRA-Resources-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +PRSConfiguration ::= SEQUENCE { + pRSResourceSet-List PRSResourceSet-List, + iE-Extensions ProtocolExtensionContainer { { PRSConfiguration-ExtIEs } } OPTIONAL +} + +PRSConfiguration-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +PRSInformationPos ::= SEQUENCE { + pRS-IDPos INTEGER(0..255), + pRS-Resource-Set-IDPos INTEGER(0..7), + pRS-Resource-IDPos INTEGER(0..63) OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { PRSInformationPos-ExtIEs} } OPTIONAL +} + +PRSInformationPos-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +Potential-SpCell-Item ::= SEQUENCE { + potential-SpCell-ID NRCGI , + iE-Extensions ProtocolExtensionContainer { { Potential-SpCell-ItemExtIEs } } OPTIONAL, + ... +} + +Potential-SpCell-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + + +PRSAngleList ::= SEQUENCE (SIZE(1.. maxnoofPRS-ResourcesPerSet)) OF PRSAngleItem + +PRSAngleItem ::= SEQUENCE { + nR-PRS-Azimuth INTEGER (0..359), + nR-PRS-Azimuth-fine INTEGER (0..9) OPTIONAL, + nR-PRS-Elevation INTEGER (0..180) OPTIONAL, + nR-PRS-Elevation-fine INTEGER (0..9) OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { PRSAngleItem-ItemExtIEs } } OPTIONAL +} + +PRSAngleItem-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-PRS-Resource-ID CRITICALITY ignore EXTENSION PRS-Resource-ID PRESENCE optional }, + ... +} + +PRSMuting::= SEQUENCE { + pRSMutingOption1 PRSMutingOption1 OPTIONAL, + pRSMutingOption2 PRSMutingOption2 OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { PRSMuting-ExtIEs} } OPTIONAL +} + +PRSMuting-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +PRSMutingOption1 ::= SEQUENCE { + mutingPattern DL-PRSMutingPattern, + mutingBitRepetitionFactor ENUMERATED{rf1,rf2,rf4,rf8,...}, + iE-Extensions ProtocolExtensionContainer { { PRSMutingOption1-ExtIEs} } OPTIONAL +} + +PRSMutingOption1-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +PRSMutingOption2 ::= SEQUENCE { + mutingPattern DL-PRSMutingPattern, + iE-Extensions ProtocolExtensionContainer { { PRSMutingOption2-ExtIEs} } OPTIONAL +} + +PRSMutingOption2-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +PRS-Resource-ID ::= INTEGER (0..63) + +PRSResource-List::= SEQUENCE (SIZE (1..maxnoofPRSresources)) OF PRSResource-Item + +PRSResource-Item ::= SEQUENCE { + pRSResourceID PRS-Resource-ID, + sequenceID INTEGER(0..4095), + rEOffset INTEGER(0..11,...), + resourceSlotOffset INTEGER(0..511), + resourceSymbolOffset INTEGER(0..12), + qCLInfo PRSResource-QCLInfo OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { PRSResource-Item-ExtIEs} } OPTIONAL +} + +PRSResource-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +PRSResource-QCLInfo ::= CHOICE { + qCLSourceSSB PRSResource-QCLSourceSSB, + qCLSourcePRS PRSResource-QCLSourcePRS, + choice-extension ProtocolIE-SingleContainer { { PRSResource-QCLInfo-ExtIEs } } +} +PRSResource-QCLInfo-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +PRSResource-QCLSourceSSB ::= SEQUENCE { + pCI-NR INTEGER(0..1007), + sSB-Index SSB-Index OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { PRSResource-QCLSourceSSB-ExtIEs} } OPTIONAL, + ... +} + +PRSResource-QCLSourceSSB-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +PRSResource-QCLSourcePRS ::= SEQUENCE { + qCLSourcePRSResourceSetID PRS-Resource-Set-ID, + qCLSourcePRSResourceID PRS-Resource-ID OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { PRSResource-QCLSourcePRS-ExtIEs} } OPTIONAL +} + +PRSResource-QCLSourcePRS-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +PRS-Resource-Set-ID ::= INTEGER(0..7) + +PRSResourceSet-List ::= SEQUENCE (SIZE (1.. maxnoofPRSresourceSets)) OF PRSResourceSet-Item +PRSResourceSet-Item ::= SEQUENCE { + pRSResourceSetID PRS-Resource-Set-ID, + subcarrierSpacing ENUMERATED{kHz15, kHz30, kHz60, kHz120, ...}, + pRSbandwidth INTEGER(1..63), + startPRB INTEGER(0..2176), + pointA INTEGER (0..3279165), + combSize ENUMERATED{n2, n4, n6, n12, ...}, + cPType ENUMERATED{normal, extended, ...}, + resourceSetPeriodicity ENUMERATED{n4,n5,n8,n10,n16,n20,n32,n40,n64,n80,n160,n320,n640,n1280,n2560,n5120,n10240,n20480,n40960, n81920,..., n128, n256, n512}, + resourceSetSlotOffset INTEGER(0..81919,...), + resourceRepetitionFactor ENUMERATED{rf1,rf2,rf4,rf6,rf8,rf16,rf32,...}, + resourceTimeGap ENUMERATED{tg1,tg2,tg4,tg8,tg16,tg32,...}, + resourceNumberofSymbols ENUMERATED{n2,n4,n6,n12,...}, + pRSMuting PRSMuting OPTIONAL, + pRSResourceTransmitPower INTEGER(-60..50), + pRSResource-List PRSResource-List, + iE-Extensions ProtocolExtensionContainer { { PRSResourceSet-Item-ExtIEs} } OPTIONAL +} + +PRSResourceSet-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +PWS-Failed-NR-CGI-Item ::= SEQUENCE { + nRCGI NRCGI, + numberOfBroadcasts NumberOfBroadcasts, + iE-Extensions ProtocolExtensionContainer { { PWS-Failed-NR-CGI-ItemExtIEs } } OPTIONAL, + ... +} + +PWS-Failed-NR-CGI-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +PWSSystemInformation ::= SEQUENCE { + sIBtype SIBType-PWS, + sIBmessage OCTET STRING, + iE-Extensions ProtocolExtensionContainer { { PWSSystemInformationExtIEs } } OPTIONAL, + ... +} + +PWSSystemInformationExtIEs F1AP-PROTOCOL-EXTENSION ::= { + {ID id-NotificationInformation CRITICALITY ignore EXTENSION NotificationInformation PRESENCE optional}| + { ID id-AdditionalSIBMessageList CRITICALITY reject EXTENSION AdditionalSIBMessageList PRESENCE optional}, + ... +} + +PrivacyIndicator ::= ENUMERATED {immediate-MDT, logged-MDT, ...} + +-- Q + +QCI ::= INTEGER (0..255) + +QoS-Characteristics ::= CHOICE { + non-Dynamic-5QI NonDynamic5QIDescriptor, + dynamic-5QI Dynamic5QIDescriptor, + choice-extension ProtocolIE-SingleContainer { { QoS-Characteristics-ExtIEs } } +} + +QoS-Characteristics-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +QoSFlowIdentifier ::= INTEGER (0..63) + +QoSFlowLevelQoSParameters ::= SEQUENCE { + qoS-Characteristics QoS-Characteristics, + nGRANallocationRetentionPriority NGRANAllocationAndRetentionPriority, + gBR-QoS-Flow-Information GBR-QoSFlowInformation OPTIONAL, + reflective-QoS-Attribute ENUMERATED {subject-to, ...} OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { QoSFlowLevelQoSParameters-ExtIEs } } OPTIONAL +} + +QoSFlowLevelQoSParameters-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-PDUSessionID CRITICALITY ignore EXTENSION PDUSessionID PRESENCE optional}| + { ID id-ULPDUSessionAggregateMaximumBitRate CRITICALITY ignore EXTENSION BitRate PRESENCE optional}| + { ID id-QosMonitoringRequest CRITICALITY ignore EXTENSION QosMonitoringRequest PRESENCE optional}| + { ID id-PDCPTerminatingNodeDLTNLAddrInfo CRITICALITY ignore EXTENSION TransportLayerAddress PRESENCE optional }, + ... +} + +QoSFlowMappingIndication ::= ENUMERATED {ul,dl,...} + +QoSInformation ::= CHOICE { + eUTRANQoS EUTRANQoS, + choice-extension ProtocolIE-SingleContainer { { QoSInformation-ExtIEs} } +} + +QoSInformation-ExtIEs F1AP-PROTOCOL-IES ::= { + { ID id-DRB-Information CRITICALITY ignore TYPE DRB-Information PRESENCE mandatory}, + ... +} + +QosMonitoringRequest ::= ENUMERATED {ul, dl, both, ..., stop} + +QoSParaSetIndex ::= INTEGER (1..8, ...) + +QoSParaSetNotifyIndex ::= INTEGER (0..8, ...) + +-- R + +RACH-Config-Common ::= OCTET STRING + +RACH-Config-Common-IAB ::= OCTET STRING + +RACHReportContainer::= OCTET STRING + +RACHReportInformationList ::= SEQUENCE (SIZE(1.. maxnoofRACHReports)) OF RACHReportInformationItem + +RACHReportInformationItem ::= SEQUENCE { + rACHReportContainer RACHReportContainer, + uEAssitantIdentifier GNB-DU-UE-F1AP-ID OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { RACHReportInformationItem-ExtIEs} } OPTIONAL, + ... +} + +RACHReportInformationItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + + + +RadioResourceStatus ::= SEQUENCE { + sSBAreaRadioResourceStatusList SSBAreaRadioResourceStatusList, + iE-Extensions ProtocolExtensionContainer { { RadioResourceStatus-ExtIEs} } OPTIONAL +} + +RadioResourceStatus-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +RANAC ::= INTEGER (0..255) + +RAN-MeasurementID ::= INTEGER (1.. 65536, ...) + +RAN-UE-MeasurementID ::= INTEGER (1.. 256, ...) + +RANUEID ::= OCTET STRING (SIZE (8)) + +RANUEPagingIdentity ::= SEQUENCE { + iRNTI BIT STRING (SIZE(40)), + iE-Extensions ProtocolExtensionContainer { { RANUEPagingIdentity-ExtIEs } } OPTIONAL} + +RANUEPagingIdentity-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +RAT-FrequencyPriorityInformation::= CHOICE { + eNDC SubscriberProfileIDforRFP, + nGRAN RAT-FrequencySelectionPriority, + choice-extension ProtocolIE-SingleContainer { { RAT-FrequencyPriorityInformation-ExtIEs} } +} + +RAT-FrequencyPriorityInformation-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +RAT-FrequencySelectionPriority::= INTEGER (1.. 256, ...) + +Reestablishment-Indication ::= ENUMERATED { + reestablished, + ... +} + +ReferencePoint ::= CHOICE { + coordinateID CoordinateID, + referencePointCoordinate AccessPointPosition, + referencePointCoordinateHA NGRANHighAccuracyAccessPointPosition, + choice-Extension ProtocolIE-SingleContainer { { ReferencePoint-ExtIEs} } +} + +ReferencePoint-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +ReferenceSFN ::= INTEGER (0..1023) + +ReferenceSignal ::= CHOICE { + nZP-CSI-RS NZP-CSI-RS-ResourceID, + sSB SSB, + sRS SRSResourceID, + positioningSRS SRSPosResourceID, + dL-PRS DL-PRS, + choice-extension ProtocolIE-SingleContainer {{ReferenceSignal-ExtIEs }} +} + +ReferenceSignal-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +RelativeCartesianLocation ::= SEQUENCE { + xYZunit ENUMERATED {mm, cm, dm, ...}, + xvalue INTEGER (-65536..65535), + yvalue INTEGER (-65536..65535), + zvalue INTEGER (-32768..32767), + locationUncertainty LocationUncertainty, + iE-Extensions ProtocolExtensionContainer { { RelativeCartesianLocation-ExtIEs} } OPTIONAL +} + +RelativeCartesianLocation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +RelativeGeodeticLocation ::= SEQUENCE { + milli-Arc-SecondUnits ENUMERATED {zerodot03, zerodot3, three, ...}, + heightUnits ENUMERATED {mm, cm, m, ...}, + deltaLatitude INTEGER (-1024.. 1023), + deltaLongitude INTEGER (-1024.. 1023), + deltaHeight INTEGER (-1024.. 1023), + locationUncertainty LocationUncertainty, + iE-extensions ProtocolExtensionContainer {{RelativeGeodeticLocation-ExtIEs }} OPTIONAL +} + +RelativeGeodeticLocation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +ReferenceTime ::= OCTET STRING + +RegistrationRequest ::= ENUMERATED{start, stop, add, ...} + +ReportCharacteristics ::= BIT STRING (SIZE(32)) + +ReportingPeriodicity ::= ENUMERATED{ms500, ms1000, ms2000, ms5000, ms10000, ...} + +RequestedBandCombinationIndex ::= OCTET STRING + +RequestedFeatureSetEntryIndex ::= OCTET STRING + +RequestedP-MaxFR2 ::= OCTET STRING + +Requested-PDCCH-BlindDetectionSCG ::= OCTET STRING + + +RequestedSRSTransmissionCharacteristics ::= SEQUENCE { + numberOfTransmissions INTEGER (0..500, ...) OPTIONAL, +-- The IE shall be present if the Resource Type IE is set to “periodic” -- + resourceType ENUMERATED {periodic, semi-persistent, aperiodic,...}, + bandwidthSRS BandwidthSRS, + sRSResourceSetList SRSResourceSetList OPTIONAL, + sSBInformation SSBInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { RequestedSRSTransmissionCharacteristics-ExtIEs} } OPTIONAL +} + +RequestedSRSTransmissionCharacteristics-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-SrsFrequency CRITICALITY ignore EXTENSION SrsFrequency PRESENCE optional }, + ... +} + +RequestType ::= ENUMERATED {offer, execution, ...} + +ResourceCoordinationEUTRACellInfo ::= SEQUENCE { + eUTRA-Mode-Info EUTRA-Coex-Mode-Info, + eUTRA-PRACH-Configuration EUTRA-PRACH-Configuration, + iE-Extensions ProtocolExtensionContainer { { ResourceCoordinationEUTRACellInfo-ExtIEs } } OPTIONAL, + ... +} + +ResourceCoordinationEUTRACellInfo-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + {ID id-IgnorePRACHConfiguration CRITICALITY reject EXTENSION IgnorePRACHConfiguration PRESENCE optional }, + ... +} + +ResourceCoordinationTransferInformation ::= SEQUENCE { + meNB-Cell-ID EUTRA-Cell-ID, + resourceCoordinationEUTRACellInfo ResourceCoordinationEUTRACellInfo OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { ResourceCoordinationTransferInformation-ExtIEs } } OPTIONAL, + ... +} + +ResourceCoordinationTransferInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +ResourceCoordinationTransferContainer ::= OCTET STRING + +ResourceSetType ::= CHOICE { + periodic ResourceSetTypePeriodic, + semi-persistent ResourceSetTypeSemi-persistent, + aperiodic ResourceSetTypeAperiodic, + choice-extension ProtocolIE-SingleContainer {{ ResourceSetType-ExtIEs }} +} + +ResourceSetType-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +ResourceSetTypePeriodic ::= SEQUENCE { + periodicSet ENUMERATED{true, ...}, + iE-Extensions ProtocolExtensionContainer { { ResourceSetTypePeriodic-ExtIEs} } OPTIONAL +} + +ResourceSetTypePeriodic-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +ResourceSetTypeSemi-persistent ::= SEQUENCE { + semi-persistentSet ENUMERATED{true, ...}, + iE-Extensions ProtocolExtensionContainer { { ResourceSetTypeSemi-persistent-ExtIEs} } OPTIONAL +} + +ResourceSetTypeSemi-persistent-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +ResourceSetTypeAperiodic ::= SEQUENCE { + sRSResourceTrigger-List INTEGER(1..3), + slotoffset INTEGER(0..32), + iE-Extensions ProtocolExtensionContainer { { ResourceSetTypeAperiodic-ExtIEs} } OPTIONAL +} + +ResourceSetTypeAperiodic-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +RepetitionPeriod ::= INTEGER (0..131071, ...) + +ReportingRequestType ::= SEQUENCE { + eventType EventType, + reportingPeriodicityValue ReportingPeriodicityValue OPTIONAL, + -- C-ifEventTypeisPeriodic: This IE shall be present if the Event Type IE is set to "periodic" in the Event Type IE. + iE-Extensions ProtocolExtensionContainer { {ReportingRequestType-ExtIEs} } OPTIONAL +} + +ReportingRequestType-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +ResourceType ::= CHOICE { + periodic ResourceTypePeriodic, + semi-persistent ResourceTypeSemi-persistent, + aperiodic ResourceTypeAperiodic, + choice-extension ProtocolIE-SingleContainer {{ ResourceType-ExtIEs }} +} + +ResourceType-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +ResourceTypePeriodic ::= SEQUENCE { + periodicity ENUMERATED{slot1, slot2, slot4, slot5, slot8, slot10, slot16, slot20, slot32, slot40, slot64, slot80, slot160, slot320, slot640, slot1280, slot2560, ...}, + offset INTEGER(0..2559, ...), + iE-Extensions ProtocolExtensionContainer { { ResourceTypePeriodic-ExtIEs} } OPTIONAL +} + +ResourceTypePeriodic-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +ResourceTypeSemi-persistent ::= SEQUENCE { + periodicity ENUMERATED{slot1, slot2, slot4, slot5, slot8, slot10, slot16, slot20, slot32, slot40, slot64, slot80, slot160, slot320, slot640, slot1280, slot2560, ...}, + offset INTEGER(0..2559, ...), + iE-Extensions ProtocolExtensionContainer { { ResourceTypeSemi-persistent-ExtIEs} } OPTIONAL +} + +ResourceTypeSemi-persistent-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +ResourceTypeAperiodic ::= SEQUENCE { + aperiodicResourceType ENUMERATED{true, ...}, + iE-Extensions ProtocolExtensionContainer { { ResourceTypeAperiodic-ExtIEs} } OPTIONAL +} + +ResourceTypeAperiodic-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +ResourceTypePos ::= CHOICE { + periodic ResourceTypePeriodicPos, + semi-persistent ResourceTypeSemi-persistentPos, + aperiodic ResourceTypeAperiodicPos, + choice-extension ProtocolIE-SingleContainer {{ ResourceTypePos-ExtIEs }} +} + +ResourceTypePos-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +ResourceTypePeriodicPos ::= SEQUENCE { + periodicity ENUMERATED{slot1, slot2, slot4, slot5, slot8, slot10, slot16, slot20, slot32, slot40, slot64, slot80, slot160, slot320, slot640, slot1280, slot2560, slot5120, slot10240, slot40960, slot81920, ..., slot128, slot256, slot512, slot20480}, + offset INTEGER(0..81919, ...), + iE-Extensions ProtocolExtensionContainer { { ResourceTypePeriodicPos-ExtIEs} } OPTIONAL +} + +ResourceTypePeriodicPos-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +ResourceTypeSemi-persistentPos ::= SEQUENCE { + periodicity ENUMERATED{slot1, slot2, slot4, slot5, slot8, slot10, slot16, slot20, slot32, slot40, slot64, slot80, slot160, slot320, slot640, slot1280, slot2560, slot5120, slot10240, slot40960, slot81920, ..., slot128, slot256, slot512, slot20480}, + offset INTEGER(0..81919, ...), + iE-Extensions ProtocolExtensionContainer { { ResourceTypeSemi-persistentPos-ExtIEs} } OPTIONAL +} + +ResourceTypeSemi-persistentPos-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +ResourceTypeAperiodicPos ::= SEQUENCE { + slotOffset INTEGER (0..32), + iE-Extensions ProtocolExtensionContainer { { ResourceTypeAperiodicPos-ExtIEs} } OPTIONAL +} + +ResourceTypeAperiodicPos-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +RLCDuplicationInformation ::= SEQUENCE { + rLCDuplicationStateList RLCDuplicationStateList, + primaryPathIndication PrimaryPathIndication OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {RLCDuplicationInformation-ExtIEs} } OPTIONAL +} + +RLCDuplicationInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +RLCDuplicationStateList ::= SEQUENCE (SIZE(1..maxnoofRLCDuplicationState)) OF RLCDuplicationState-Item + +RLCDuplicationState-Item ::=SEQUENCE { + duplicationState DuplicationState, + iE-Extensions ProtocolExtensionContainer { {RLCDuplicationState-Item-ExtIEs } } OPTIONAL, + ... +} + + +RLCDuplicationState-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +RLCFailureIndication ::= SEQUENCE { + assocatedLCID LCID, + iE-Extensions ProtocolExtensionContainer { {RLCFailureIndication-ExtIEs} } OPTIONAL +} + +RLCFailureIndication-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +RLCMode ::= ENUMERATED { + rlc-am, + rlc-um-bidirectional, + rlc-um-unidirectional-ul, + rlc-um-unidirectional-dl, + ... +} + +RLC-Status ::= SEQUENCE { + reestablishment-Indication Reestablishment-Indication, + iE-Extensions ProtocolExtensionContainer { { RLC-Status-ExtIEs } } OPTIONAL, + ... +} + +RLC-Status-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +RLFReportInformationList ::= SEQUENCE (SIZE(1.. maxnoofRLFReports)) OF RLFReportInformationItem + +RLFReportInformationItem ::= SEQUENCE { + nRUERLFReportContainer NRUERLFReportContainer, + uEAssitantIdentifier GNB-DU-UE-F1AP-ID OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { RLFReportInformationItem-ExtIEs} } OPTIONAL, + ... +} + +RLFReportInformationItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +RIMRSDetectionStatus ::= ENUMERATED {rs-detected, rs-disappeared, ...} + +RRCContainer ::= OCTET STRING + +RRCContainer-RRCSetupComplete ::= OCTET STRING + +RRCDeliveryStatus ::= SEQUENCE { + delivery-status PDCP-SN, + triggering-message PDCP-SN, + iE-Extensions ProtocolExtensionContainer { { RRCDeliveryStatus-ExtIEs } } OPTIONAL} + +RRCDeliveryStatus-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + + +RRCDeliveryStatusRequest ::= ENUMERATED {true, ...} + +RRCReconfigurationCompleteIndicator ::= ENUMERATED { + true, + ..., + failure +} + +RRC-Version ::= SEQUENCE { + latest-RRC-Version BIT STRING (SIZE(3)), + iE-Extensions ProtocolExtensionContainer { { RRC-Version-ExtIEs } } OPTIONAL} + +RRC-Version-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + {ID id-latest-RRC-Version-Enhanced CRITICALITY ignore EXTENSION OCTET STRING (SIZE(3)) PRESENCE optional }, + ... +} + +RoutingID ::= OCTET STRING + +-- S + +SCell-FailedtoSetup-Item ::= SEQUENCE { + sCell-ID NRCGI , + cause Cause OPTIONAL , + iE-Extensions ProtocolExtensionContainer { { SCell-FailedtoSetup-ItemExtIEs } } OPTIONAL, + ... +} + +SCell-FailedtoSetup-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SCell-FailedtoSetupMod-Item ::= SEQUENCE { + sCell-ID NRCGI , + cause Cause OPTIONAL , + iE-Extensions ProtocolExtensionContainer { { SCell-FailedtoSetupMod-ItemExtIEs } } OPTIONAL, + ... +} + +SCell-FailedtoSetupMod-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SCell-ToBeRemoved-Item ::= SEQUENCE { + sCell-ID NRCGI , + iE-Extensions ProtocolExtensionContainer { { SCell-ToBeRemoved-ItemExtIEs } } OPTIONAL, + ... +} + +SCell-ToBeRemoved-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SCell-ToBeSetup-Item ::= SEQUENCE { + sCell-ID NRCGI , + sCellIndex SCellIndex, + sCellULConfigured CellULConfigured OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { SCell-ToBeSetup-ItemExtIEs } } OPTIONAL, + ... +} + +SCell-ToBeSetup-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-ServingCellMO CRITICALITY ignore EXTENSION ServingCellMO PRESENCE optional }, + ... +} + +SCell-ToBeSetupMod-Item ::= SEQUENCE { + sCell-ID NRCGI , + sCellIndex SCellIndex, + sCellULConfigured CellULConfigured OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { SCell-ToBeSetupMod-ItemExtIEs } } OPTIONAL, + ... +} + +SCell-ToBeSetupMod-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-ServingCellMO CRITICALITY ignore EXTENSION ServingCellMO PRESENCE optional }, + ... +} + +SCellIndex ::=INTEGER (1..31, ...) + +SCGIndicator ::= ENUMERATED{released, ...} + +SCS-SpecificCarrier ::= SEQUENCE { + offsetToCarrier INTEGER (0..2199,...), + subcarrierSpacing ENUMERATED {kHz15, kHz30, kHz60, kHz120,...}, + carrierBandwidth INTEGER (1..275,...), + iE-Extensions ProtocolExtensionContainer { { SCS-SpecificCarrier-ExtIEs } } OPTIONAL +} + +SCS-SpecificCarrier-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +Search-window-information ::= SEQUENCE { + expectedPropagationDelay INTEGER (-3841..3841,...), + delayUncertainty INTEGER (1..246,...), + iE-Extensions ProtocolExtensionContainer { { Search-window-information-ExtIEs } } OPTIONAL +} + +Search-window-information-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SerialNumber ::= BIT STRING (SIZE (16)) + +SIBType-PWS ::=INTEGER (6..8, ...) + +SelectedBandCombinationIndex ::= OCTET STRING + +SelectedFeatureSetEntryIndex ::= OCTET STRING + +CG-ConfigInfo ::= OCTET STRING + +ServCellInfoList ::= OCTET STRING + +ServCellIndex ::= INTEGER (0..31, ...) + +ServingCellMO ::= INTEGER (1..64, ...) + +Served-Cell-Information ::= SEQUENCE { + nRCGI NRCGI, + nRPCI NRPCI, + fiveGS-TAC FiveGS-TAC OPTIONAL, + configured-EPS-TAC Configured-EPS-TAC OPTIONAL, + servedPLMNs ServedPLMNs-List, + nR-Mode-Info NR-Mode-Info, + measurementTimingConfiguration OCTET STRING, + iE-Extensions ProtocolExtensionContainer { {Served-Cell-Information-ExtIEs} } OPTIONAL, + ... +} + +Served-Cell-Information-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-RANAC CRITICALITY ignore EXTENSION RANAC PRESENCE optional }| + { ID id-ExtendedServedPLMNs-List CRITICALITY ignore EXTENSION ExtendedServedPLMNs-List PRESENCE optional }| + { ID id-Cell-Direction CRITICALITY ignore EXTENSION Cell-Direction PRESENCE optional }| + { ID id-BPLMN-ID-Info-List CRITICALITY ignore EXTENSION BPLMN-ID-Info-List PRESENCE optional }| + { ID id-Cell-Type CRITICALITY ignore EXTENSION CellType PRESENCE optional}| + { ID id-ConfiguredTACIndication CRITICALITY ignore EXTENSION ConfiguredTACIndication PRESENCE optional }| + { ID id-AggressorgNBSetID CRITICALITY ignore EXTENSION AggressorgNBSetID PRESENCE optional}| + { ID id-VictimgNBSetID CRITICALITY ignore EXTENSION VictimgNBSetID PRESENCE optional}| + { ID id-IAB-Info-IAB-DU CRITICALITY ignore EXTENSION IAB-Info-IAB-DU PRESENCE optional}| + { ID id-SSB-PositionsInBurst CRITICALITY ignore EXTENSION SSB-PositionsInBurst PRESENCE optional }| + { ID id-NRPRACHConfig CRITICALITY ignore EXTENSION NRPRACHConfig PRESENCE optional }| + { ID id-SFN-Offset CRITICALITY ignore EXTENSION SFN-Offset PRESENCE optional }| + { ID id-NPNBroadcastInformation CRITICALITY reject EXTENSION NPNBroadcastInformation PRESENCE optional }, + ... +} + +SFN-Offset ::= SEQUENCE { + sFN-Time-Offset BIT STRING (SIZE(24)), + iE-Extensions ProtocolExtensionContainer { {SFN-Offset-ExtIEs} } OPTIONAL, + ... +} + +SFN-Offset-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +Served-Cells-To-Add-Item ::= SEQUENCE { + served-Cell-Information Served-Cell-Information, + gNB-DU-System-Information GNB-DU-System-Information OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { Served-Cells-To-Add-ItemExtIEs} } OPTIONAL, + ... +} + +Served-Cells-To-Add-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +Served-Cells-To-Delete-Item ::= SEQUENCE { + oldNRCGI NRCGI , + iE-Extensions ProtocolExtensionContainer { { Served-Cells-To-Delete-ItemExtIEs } } OPTIONAL, + ... +} + +Served-Cells-To-Delete-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +Served-Cells-To-Modify-Item ::= SEQUENCE { + oldNRCGI NRCGI , + served-Cell-Information Served-Cell-Information , + gNB-DU-System-Information GNB-DU-System-Information OPTIONAL , + iE-Extensions ProtocolExtensionContainer { { Served-Cells-To-Modify-ItemExtIEs } } OPTIONAL, + ... +} + +Served-Cells-To-Modify-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +Served-EUTRA-Cells-Information::= SEQUENCE { + eUTRA-Mode-Info EUTRA-Mode-Info, + protectedEUTRAResourceIndication ProtectedEUTRAResourceIndication, + iE-Extensions ProtocolExtensionContainer { {Served-EUTRA-Cell-Information-ExtIEs} } OPTIONAL, + ... +} + +Served-EUTRA-Cell-Information-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +Service-State ::= ENUMERATED { + in-service, + out-of-service, + ... +} + +Service-Status ::= SEQUENCE { + service-state Service-State, + switchingOffOngoing ENUMERATED {true, ...} OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { Service-Status-ExtIEs } } OPTIONAL, + ... +} + +Service-Status-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + + +RelativeTime1900 ::= BIT STRING (SIZE (64)) + +ShortDRXCycleLength ::= ENUMERATED {ms2, ms3, ms4, ms5, ms6, ms7, ms8, ms10, ms14, ms16, ms20, ms30, ms32, ms35, ms40, ms64, ms80, ms128, ms160, ms256, ms320, ms512, ms640, ...} + +ShortDRXCycleTimer ::= INTEGER (1..16) + +SIB1-message ::= OCTET STRING + +SIB10-message ::= OCTET STRING + +SIB12-message ::= OCTET STRING + +SIB13-message ::= OCTET STRING + +SIB14-message ::= OCTET STRING + +SItype ::= INTEGER (1..32, ...) + +SItype-List ::= SEQUENCE (SIZE(1.. maxnoofSITypes)) OF SItype-Item + +SItype-Item ::= SEQUENCE { + sItype SItype , + iE-Extensions ProtocolExtensionContainer { { SItype-ItemExtIEs } } OPTIONAL +} + +SItype-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SibtypetobeupdatedListItem ::= SEQUENCE { + sIBtype INTEGER (2..32,...), + sIBmessage OCTET STRING, + valueTag INTEGER (0..31,...), + iE-Extensions ProtocolExtensionContainer { { SibtypetobeupdatedListItem-ExtIEs } } OPTIONAL, + ... +} + +SibtypetobeupdatedListItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + {ID id-areaScope CRITICALITY ignore EXTENSION AreaScope PRESENCE optional}, + ... +} + +SLDRBID ::= INTEGER (1..512, ...) + +SLDRBInformation ::= SEQUENCE { + sLDRB-QoS PC5QoSParameters, + flowsMappedToSLDRB-List FlowsMappedToSLDRB-List, + ... +} + +SLDRBs-FailedToBeModified-Item ::= SEQUENCE { + sLDRBID SLDRBID , + cause Cause OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { SLDRBs-FailedToBeModified-ItemExtIEs } } OPTIONAL +} + +SLDRBs-FailedToBeModified-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SLDRBs-FailedToBeSetup-Item ::= SEQUENCE { + sLDRBID SLDRBID, + cause Cause OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { SLDRBs-FailedToBeSetup-ItemExtIEs } } OPTIONAL +} + +SLDRBs-FailedToBeSetup-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SLDRBs-FailedToBeSetupMod-Item ::= SEQUENCE { + sLDRBID SLDRBID , + cause Cause OPTIONAL , + iE-Extensions ProtocolExtensionContainer { { SLDRBs-FailedToBeSetupMod-ItemExtIEs } } OPTIONAL +} + +SLDRBs-FailedToBeSetupMod-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SLDRBs-Modified-Item ::= SEQUENCE { + sLDRBID SLDRBID, + iE-Extensions ProtocolExtensionContainer { { SLDRBs-Modified-ItemExtIEs } } OPTIONAL +} + +SLDRBs-Modified-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SLDRBs-ModifiedConf-Item ::= SEQUENCE { + sLDRBID SLDRBID, + iE-Extensions ProtocolExtensionContainer { { SLDRBs-ModifiedConf-ItemExtIEs } } OPTIONAL +} + +SLDRBs-ModifiedConf-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SLDRBs-Required-ToBeModified-Item ::= SEQUENCE { + sLDRBID SLDRBID, + iE-Extensions ProtocolExtensionContainer { { SLDRBs-Required-ToBeModified-ItemExtIEs } } OPTIONAL +} + +SLDRBs-Required-ToBeModified-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SLDRBs-Required-ToBeReleased-Item ::= SEQUENCE { + sLDRBID SLDRBID, + iE-Extensions ProtocolExtensionContainer { { SLDRBs-Required-ToBeReleased-ItemExtIEs } } OPTIONAL +} + +SLDRBs-Required-ToBeReleased-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SLDRBs-Setup-Item ::= SEQUENCE { + sLDRBID SLDRBID, + iE-Extensions ProtocolExtensionContainer { { SLDRBs-Setup-ItemExtIEs } } OPTIONAL +} + +SLDRBs-Setup-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SLDRBs-SetupMod-Item ::= SEQUENCE { + sLDRBID SLDRBID, + iE-Extensions ProtocolExtensionContainer { { SLDRBs-SetupMod-ItemExtIEs } } OPTIONAL +} + +SLDRBs-SetupMod-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SLDRBs-ToBeModified-Item ::= SEQUENCE { + sLDRBID SLDRBID, + sLDRBInformation SLDRBInformation OPTIONAL, + rLCMode RLCMode OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { SLDRBs-ToBeModified-ItemExtIEs } } OPTIONAL +} + +SLDRBs-ToBeModified-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SLDRBs-ToBeReleased-Item ::= SEQUENCE { + sLDRBID SLDRBID, + iE-Extensions ProtocolExtensionContainer { { SLDRBs-ToBeReleased-ItemExtIEs } } OPTIONAL +} + +SLDRBs-ToBeReleased-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SLDRBs-ToBeSetup-Item ::= SEQUENCE { + sLDRBID SLDRBID, + sLDRBInformation SLDRBInformation, + rLCMode RLCMode, + + iE-Extensions ProtocolExtensionContainer { { SLDRBs-ToBeSetup-ItemExtIEs } } OPTIONAL +} + +SLDRBs-ToBeSetup-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SLDRBs-ToBeSetupMod-Item ::= SEQUENCE { + sLDRBID SLDRBID, + sLDRBInformation SLDRBInformation, + rLCMode RLCMode OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { SLDRBs-ToBeSetupMod-ItemExtIEs } } OPTIONAL +} + +SLDRBs-ToBeSetupMod-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SL-PHY-MAC-RLC-Config ::= OCTET STRING + +SL-ConfigDedicatedEUTRA-Info ::= OCTET STRING + +SliceAvailableCapacity ::= SEQUENCE { + sliceAvailableCapacityList SliceAvailableCapacityList, + iE-Extensions ProtocolExtensionContainer { { SliceAvailableCapacity-ExtIEs} } OPTIONAL +} + +SliceAvailableCapacity-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SliceAvailableCapacityList ::= SEQUENCE (SIZE(1.. maxnoofBPLMNsNR)) OF SliceAvailableCapacityItem + +SliceAvailableCapacityItem ::= SEQUENCE { + pLMNIdentity PLMN-Identity, + sNSSAIAvailableCapacity-List SNSSAIAvailableCapacity-List, + iE-Extensions ProtocolExtensionContainer { { SliceAvailableCapacityItem-ExtIEs} } OPTIONAL +} + +SliceAvailableCapacityItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SNSSAIAvailableCapacity-List ::= SEQUENCE (SIZE(1.. maxnoofSliceItems)) OF SNSSAIAvailableCapacity-Item + +SNSSAIAvailableCapacity-Item ::= SEQUENCE { + sNSSAI SNSSAI, + sliceAvailableCapacityValueDownlink INTEGER (0..100) OPTIONAL, + sliceAvailableCapacityValueUplink INTEGER (0..100) OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { SNSSAIAvailableCapacity-Item-ExtIEs } } OPTIONAL +} + +SNSSAIAvailableCapacity-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SliceSupportList ::= SEQUENCE (SIZE(1.. maxnoofSliceItems)) OF SliceSupportItem + +SliceSupportItem ::= SEQUENCE { + sNSSAI SNSSAI, + iE-Extensions ProtocolExtensionContainer { { SliceSupportItem-ExtIEs } } OPTIONAL +} + +SliceSupportItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SliceToReportList ::= SEQUENCE (SIZE(1.. maxnoofBPLMNsNR)) OF SliceToReportItem + +SliceToReportItem ::= SEQUENCE { + pLMNIdentity PLMN-Identity, + sNSSAIlist SNSSAI-list, + iE-Extensions ProtocolExtensionContainer { { SliceToReportItem-ExtIEs} } OPTIONAL +} + +SliceToReportItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SlotNumber ::= INTEGER (0..79) + +SNSSAI-list ::= SEQUENCE (SIZE(1.. maxnoofSliceItems)) OF SNSSAI-Item + +SNSSAI-Item ::= SEQUENCE { + sNSSAI SNSSAI, + iE-Extensions ProtocolExtensionContainer { { SNSSAI-Item-ExtIEs } } OPTIONAL +} + +SNSSAI-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +Slot-Configuration-List ::= SEQUENCE (SIZE(1.. maxnoofslots)) OF Slot-Configuration-Item + +Slot-Configuration-Item ::= SEQUENCE { + slotIndex INTEGER (0..5119, ...), + symbolAllocInSlot SymbolAllocInSlot, + iE-Extensions ProtocolExtensionContainer { { Slot-Configuration-ItemExtIEs } } OPTIONAL +} + +Slot-Configuration-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + + +SNSSAI ::= SEQUENCE { + sST OCTET STRING (SIZE(1)), + sD OCTET STRING (SIZE(3)) OPTIONAL , + iE-Extensions ProtocolExtensionContainer { { SNSSAI-ExtIEs } } OPTIONAL +} + +SNSSAI-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SpatialDirectionInformation ::= SEQUENCE { + nR-PRSBeamInformation NR-PRSBeamInformation, + iE-Extensions ProtocolExtensionContainer { { SpatialDirectionInformation-ExtIEs } } OPTIONAL +} + +SpatialDirectionInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SpatialRelationInfo ::= SEQUENCE { + spatialRelationforResourceID SpatialRelationforResourceID, + iE-Extensions ProtocolExtensionContainer { {SpatialRelationInfo-ExtIEs} } OPTIONAL +} + +SpatialRelationInfo-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SpatialRelationforResourceID ::= SEQUENCE (SIZE(1..maxnoofSpatialRelations)) OF SpatialRelationforResourceIDItem + +SpatialRelationforResourceIDItem ::= SEQUENCE { + referenceSignal ReferenceSignal, + iE-Extensions ProtocolExtensionContainer { {SpatialRelationforResourceIDItem-ExtIEs} } OPTIONAL +} + +SpatialRelationforResourceIDItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SpatialRelationPerSRSResource ::= SEQUENCE { + spatialRelationPerSRSResource-List SpatialRelationPerSRSResource-List, + iE-Extensions ProtocolExtensionContainer { { SpatialRelationPerSRSResource-ExtIEs} } OPTIONAL, + ... +} + +SpatialRelationPerSRSResource-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SpatialRelationPerSRSResource-List::= SEQUENCE(SIZE (1.. maxnoSRS-ResourcePerSet)) OF SpatialRelationPerSRSResourceItem + +SpatialRelationPerSRSResourceItem ::= SEQUENCE { + referenceSignal ReferenceSignal, + iE-Extensions ProtocolExtensionContainer { { SpatialRelationPerSRSResourceItem-ExtIEs} } OPTIONAL, + ... +} + +SpatialRelationPerSRSResourceItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SpatialRelationPos ::= CHOICE { + sSBPos SSB, + pRSInformationPos PRSInformationPos, + choice-extension ProtocolIE-SingleContainer {{ SpatialInformationPos-ExtIEs }} +} + +SpatialInformationPos-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +SpectrumSharingGroupID ::= INTEGER (1..maxCellineNB) + +SRBID ::= INTEGER (0..3, ...) + +SRBs-FailedToBeSetup-Item ::= SEQUENCE { + sRBID SRBID , + cause Cause OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { SRBs-FailedToBeSetup-ItemExtIEs } } OPTIONAL, + ... +} + +SRBs-FailedToBeSetup-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SRBs-FailedToBeSetupMod-Item ::= SEQUENCE { + sRBID SRBID , + cause Cause OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { SRBs-FailedToBeSetupMod-ItemExtIEs } } OPTIONAL, + ... +} + +SRBs-FailedToBeSetupMod-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SRBs-Modified-Item ::= SEQUENCE { + sRBID SRBID, + lCID LCID, + iE-Extensions ProtocolExtensionContainer { { SRBs-Modified-ItemExtIEs } } OPTIONAL, + ... +} + +SRBs-Modified-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SRBs-Required-ToBeReleased-Item ::= SEQUENCE { + sRBID SRBID, + iE-Extensions ProtocolExtensionContainer { { SRBs-Required-ToBeReleased-ItemExtIEs } } OPTIONAL, + ... +} + +SRBs-Required-ToBeReleased-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SRBs-Setup-Item ::= SEQUENCE { + sRBID SRBID, + lCID LCID, + iE-Extensions ProtocolExtensionContainer { { SRBs-Setup-ItemExtIEs } } OPTIONAL, + ... +} + +SRBs-Setup-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SRBs-SetupMod-Item ::= SEQUENCE { + sRBID SRBID, + lCID LCID, + iE-Extensions ProtocolExtensionContainer { { SRBs-SetupMod-ItemExtIEs } } OPTIONAL, + ... +} + +SRBs-SetupMod-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SRBs-ToBeReleased-Item ::= SEQUENCE { + sRBID SRBID, + iE-Extensions ProtocolExtensionContainer { { SRBs-ToBeReleased-ItemExtIEs } } OPTIONAL, + ... +} + +SRBs-ToBeReleased-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SRBs-ToBeSetup-Item ::= SEQUENCE { + sRBID SRBID , + duplicationIndication DuplicationIndication OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { SRBs-ToBeSetup-ItemExtIEs } } OPTIONAL, + ... +} + +SRBs-ToBeSetup-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-AdditionalDuplicationIndication CRITICALITY ignore EXTENSION AdditionalDuplicationIndication PRESENCE optional }, + ... +} + +SRBs-ToBeSetupMod-Item ::= SEQUENCE { + sRBID SRBID, + duplicationIndication DuplicationIndication OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { SRBs-ToBeSetupMod-ItemExtIEs } } OPTIONAL, + ... +} + +SRBs-ToBeSetupMod-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-AdditionalDuplicationIndication CRITICALITY ignore EXTENSION AdditionalDuplicationIndication PRESENCE optional }, + ... +} + +SRSCarrier-List ::= SEQUENCE (SIZE(1.. maxnoSRS-Carriers)) OF SRSCarrier-List-Item + +SRSCarrier-List-Item ::= SEQUENCE { + pointA INTEGER (0..3279165), + uplinkChannelBW-PerSCS-List UplinkChannelBW-PerSCS-List, + activeULBWP ActiveULBWP, + pci NRPCI OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { SRSCarrier-List-Item-ExtIEs } } OPTIONAL +} + +SRSCarrier-List-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SRSConfig ::= SEQUENCE { + sRSResource-List SRSResource-List OPTIONAL, + posSRSResource-List PosSRSResource-List OPTIONAL, + sRSResourceSet-List SRSResourceSet-List OPTIONAL, + posSRSResourceSet-List PosSRSResourceSet-List OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { SRSConfig-ExtIEs } } OPTIONAL +} + +SRSConfig-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SRSConfiguration ::= SEQUENCE { + sRSCarrier-List SRSCarrier-List, + iE-Extensions ProtocolExtensionContainer { { SRSConfiguration-ExtIEs } } OPTIONAL +} + +SRSConfiguration-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SrsFrequency ::= INTEGER (0..3279165) + +SRSPosResourceID ::= INTEGER (0..63) + +SRSResource::= SEQUENCE { + sRSResourceID SRSResourceID, + nrofSRS-Ports ENUMERATED {port1, ports2, ports4}, + transmissionComb TransmissionComb, + startPosition INTEGER (0..13), + nrofSymbols ENUMERATED {n1, n2, n4}, + repetitionFactor ENUMERATED {n1, n2, n4}, + freqDomainPosition INTEGER (0..67), + freqDomainShift INTEGER (0..268), + c-SRS INTEGER (0..63), + b-SRS INTEGER (0..3), + b-hop INTEGER (0..3), + groupOrSequenceHopping ENUMERATED { neither, groupHopping, sequenceHopping }, + resourceType ResourceType, + sequenceId INTEGER (0..1023), + iE-Extensions ProtocolExtensionContainer { { SRSResource-ExtIEs } } OPTIONAL +} + +SRSResource-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SRSResourceID ::= INTEGER (0..63) + +SRSResourceID-List::= SEQUENCE (SIZE (1..maxnoSRS-ResourcePerSet)) OF SRSResourceID + +SRSResource-List ::= SEQUENCE (SIZE (1..maxnoSRS-Resources)) OF SRSResource + +SRSResourceSet::= SEQUENCE { + sRSResourceSetID SRSResourceSetID, + sRSResourceID-List SRSResourceID-List, + resourceSetType ResourceSetType, + iE-Extensions ProtocolExtensionContainer { { SRSResourceSet-ExtIEs } } OPTIONAL +} + +SRSResourceSet-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SRSResourceSetID ::= INTEGER (0..15, ...) + +SRSResourceSetList ::= SEQUENCE (SIZE(1.. maxnoSRS-ResourceSets)) OF SRSResourceSetItem + +SRSResourceSetItem ::= SEQUENCE { + numSRSresourcesperset INTEGER (1..16, ...) OPTIONAL, + periodicityList PeriodicityList OPTIONAL, + spatialRelationInfo SpatialRelationInfo OPTIONAL, + pathlossReferenceInfo PathlossReferenceInfo OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { SRSResourceSetItemExtIEs } } OPTIONAL +} + +SRSResourceSetItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-SRSSpatialRelationPerSRSResource CRITICALITY ignore EXTENSION SpatialRelationPerSRSResource PRESENCE optional}, + ... +} + +SRSResourceSet-List ::= SEQUENCE (SIZE (1..maxnoSRS-ResourceSets)) OF SRSResourceSet + +SRSResourceTrigger ::= SEQUENCE { + aperiodicSRSResourceTriggerList AperiodicSRSResourceTriggerList, + iE-Extensions ProtocolExtensionContainer { {SRSResourceTrigger-ExtIEs} } OPTIONAL +} + +SRSResourceTrigger-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + + +SSB ::= SEQUENCE { + pCI-NR NRPCI, + ssb-index SSB-Index OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {SSB-ExtIEs} } OPTIONAL +} + +SSB-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SSB-freqInfo ::= INTEGER (0..maxNRARFCN) + +SSB-Index ::= INTEGER(0..63) + +SSB-subcarrierSpacing ::= ENUMERATED {kHz15, kHz30, kHz120, kHz240, spare3, spare2, spare1, ...} + +SSB-transmissionPeriodicity ::= ENUMERATED {sf10, sf20, sf40, sf80, sf160, sf320, sf640, ..., sf5} + +SSB-transmissionTimingOffset ::= INTEGER (0..127, ...) + +SSB-transmissionBitmap ::= CHOICE { + shortBitmap BIT STRING (SIZE (4)), + mediumBitmap BIT STRING (SIZE (8)), + longBitmap BIT STRING (SIZE (64)), + choice-extension ProtocolIE-SingleContainer { { SSB-transmisisonBitmap-ExtIEs} } +} + +SSB-transmisisonBitmap-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +SSBAreaCapacityValueList ::= SEQUENCE (SIZE(1.. maxnoofSSBAreas)) OF SSBAreaCapacityValueItem + +SSBAreaCapacityValueItem ::= SEQUENCE { + sSBIndex INTEGER(0..63), + sSBAreaCapacityValue INTEGER (0..100), + iE-Extensions ProtocolExtensionContainer { { SSBAreaCapacityValueItem-ExtIEs} } OPTIONAL +} + +SSBAreaCapacityValueItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SSBAreaRadioResourceStatusList::= SEQUENCE (SIZE(1.. maxnoofSSBAreas)) OF SSBAreaRadioResourceStatusItem + +SSBAreaRadioResourceStatusItem::= SEQUENCE { + sSBIndex INTEGER(0..63), + sSBAreaDLGBRPRBusage INTEGER (0..100), + sSBAreaULGBRPRBusage INTEGER (0..100), + sSBAreaDLnon-GBRPRBusage INTEGER (0..100), + sSBAreaULnon-GBRPRBusage INTEGER (0..100), + sSBAreaDLTotalPRBusage INTEGER (0..100), + sSBAreaULTotalPRBusage INTEGER (0..100), + dLschedulingPDCCHCCEusage INTEGER (0..100) OPTIONAL, + uLschedulingPDCCHCCEusage INTEGER (0..100) OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { SSBAreaRadioResourceStatusItem-ExtIEs} } OPTIONAL +} + +SSBAreaRadioResourceStatusItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SSBInformation ::= SEQUENCE { + sSBInformationList SSBInformationList, + iE-Extensions ProtocolExtensionContainer { { SSBInformation-ExtIEs } } OPTIONAL +} + +SSBInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SSBInformationList ::= SEQUENCE (SIZE(1.. maxnoofSSBs)) OF SSBInformationItem + +SSBInformationItem ::= SEQUENCE { + sSB-Configuration SSB-TF-Configuration, + pCI-NR NRPCI, + iE-Extensions ProtocolExtensionContainer { { SSBInformationItem-ExtIEs } } OPTIONAL +} + +SSBInformationItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SSB-PositionsInBurst ::= CHOICE { + shortBitmap BIT STRING (SIZE (4)), + mediumBitmap BIT STRING (SIZE (8)), + longBitmap BIT STRING (SIZE (64)), + choice-extension ProtocolIE-SingleContainer { {SSB-PositionsInBurst-ExtIEs} } +} + +SSB-PositionsInBurst-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +SSB-TF-Configuration ::= SEQUENCE { + sSB-frequency INTEGER (0..3279165), + sSB-subcarrier-spacing ENUMERATED {kHz15, kHz30, kHz60, kHz120, kHz240, ...}, + -- The value kHz60 is not supported in this version of the specification. + sSB-Transmit-power INTEGER (-60..50), + sSB-periodicity ENUMERATED {ms5, ms10, ms20, ms40, ms80, ms160, ...}, + sSB-half-frame-offset INTEGER(0..1), + sSB-SFN-offset INTEGER(0..15), + sSB-position-in-burst SSB-PositionsInBurst OPTIONAL, + sFNInitialisationTime RelativeTime1900 OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { SSB-TF-Configuration-ExtIEs} } OPTIONAL +} + +SSB-TF-Configuration-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + + +SSBToReportList ::= SEQUENCE (SIZE(1.. maxnoofSSBAreas)) OF SSBToReportItem + +SSBToReportItem ::= SEQUENCE { + sSBIndex INTEGER(0..63), + iE-Extensions ProtocolExtensionContainer { { SSBToReportItem-ExtIEs} } OPTIONAL +} + +SSBToReportItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SUL-Information ::= SEQUENCE { + sUL-NRARFCN INTEGER (0..maxNRARFCN), + sUL-transmission-Bandwidth Transmission-Bandwidth, + iE-Extensions ProtocolExtensionContainer { { SUL-InformationExtIEs} } OPTIONAL, + ... +} + +SUL-InformationExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-CarrierList CRITICALITY ignore EXTENSION NRCarrierList PRESENCE optional }| + { ID id-FrequencyShift7p5khz CRITICALITY ignore EXTENSION FrequencyShift7p5khz PRESENCE optional }, + ... +} + +SubcarrierSpacing ::= ENUMERATED { kHz15, kHz30, kHz60, kHz120, kHz240, spare3, spare2, spare1, ...} + +SubscriberProfileIDforRFP ::= INTEGER (1..256, ...) + +SULAccessIndication ::= ENUMERATED {true,...} + + +SupportedSULFreqBandItem ::= SEQUENCE { + freqBandIndicatorNr INTEGER (1..1024,...), + iE-Extensions ProtocolExtensionContainer { { SupportedSULFreqBandItem-ExtIEs} } OPTIONAL, + ... +} + +SupportedSULFreqBandItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +SymbolAllocInSlot ::= CHOICE { + all-DL NULL, + all-UL NULL, + both-DL-and-UL NumDLULSymbols, + choice-extension ProtocolIE-SingleContainer { { SymbolAllocInSlot-ExtIEs } } +} + +SymbolAllocInSlot-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +SystemFrameNumber ::= INTEGER (0..1023) + +SystemInformationAreaID ::=BIT STRING (SIZE (24)) + +-- T + +FiveGS-TAC ::= OCTET STRING (SIZE(3)) + +Configured-EPS-TAC ::= OCTET STRING (SIZE(2)) + +TargetCellList ::= SEQUENCE (SIZE(1..maxnoofCHOcells)) OF TargetCellList-Item + +TargetCellList-Item ::= SEQUENCE { + target-cell NRCGI, + iE-Extensions ProtocolExtensionContainer { { TargetCellList-Item-ExtIEs} } OPTIONAL +} + +TargetCellList-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +TDD-Info ::= SEQUENCE { + nRFreqInfo NRFreqInfo, + transmission-Bandwidth Transmission-Bandwidth, + iE-Extensions ProtocolExtensionContainer { {TDD-Info-ExtIEs} } OPTIONAL, + ... +} + +TDD-Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + {ID id-IntendedTDD-DL-ULConfig CRITICALITY ignore EXTENSION IntendedTDD-DL-ULConfig PRESENCE optional}| + {ID id-TDD-UL-DLConfigCommonNR CRITICALITY ignore EXTENSION TDD-UL-DLConfigCommonNR PRESENCE optional }| + {ID id-CarrierList CRITICALITY ignore EXTENSION NRCarrierList PRESENCE optional }| + {ID id-Transmission-Bandwidth-asymmetric CRITICALITY ignore EXTENSION Transmission-Bandwidth-asymmetric PRESENCE optional }, + ... +} + +TDD-UL-DLConfigCommonNR ::= OCTET STRING + +TimeReferenceInformation ::= SEQUENCE { + referenceTime ReferenceTime, + referenceSFN ReferenceSFN, + uncertainty Uncertainty OPTIONAL, + timeInformationType TimeInformationType OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {TimeReferenceInformation-ExtIEs} } OPTIONAL +} + +TimeReferenceInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +TimeInformationType ::= ENUMERATED {localClock} + +TimeStamp ::= SEQUENCE { + systemFrameNumber SystemFrameNumber, + slotIndex TimeStampSlotIndex, + measurementTime RelativeTime1900 OPTIONAL, + iE-Extension ProtocolExtensionContainer { { TimeStamp-ExtIEs} } OPTIONAL +} + +TimeStamp-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +TimeStampSlotIndex ::= CHOICE { + sCS-15 INTEGER(0..9), + sCS-30 INTEGER(0..19), + sCS-60 INTEGER(0..39), + sCS-120 INTEGER(0..79), + choice-extension ProtocolIE-SingleContainer { { TimeStampSlotIndex-ExtIEs} } +} + +TimeStampSlotIndex-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +TimeToWait ::= ENUMERATED {v1s, v2s, v5s, v10s, v20s, v60s, ...} + +TimingMeasurementQuality ::= SEQUENCE { + measurementQuality INTEGER(0..31), + resolution ENUMERATED{m0dot1, m1, m10, m30, ...}, + iE-Extensions ProtocolExtensionContainer { { TimingMeasurementQuality-ExtIEs} } OPTIONAL +} + +TimingMeasurementQuality-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +TNLAssociationUsage ::= ENUMERATED { + ue, + non-ue, + both, + ... +} + +TNLCapacityIndicator::= SEQUENCE { + dLTNLOfferedCapacity INTEGER (1.. 16777216,...), + dLTNLAvailableCapacity INTEGER (0.. 100,...), + uLTNLOfferedCapacity INTEGER (1.. 16777216,...), + uLTNLAvailableCapacity INTEGER (0.. 100,...), + iE-Extensions ProtocolExtensionContainer { { TNLCapacityIndicator-ExtIEs} } OPTIONAL +} + +TNLCapacityIndicator-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +TraceActivation ::= SEQUENCE { + traceID TraceID, + interfacesToTrace InterfacesToTrace, + traceDepth TraceDepth, + traceCollectionEntityIPAddress TransportLayerAddress, + iE-Extensions ProtocolExtensionContainer { {TraceActivation-ExtIEs} } OPTIONAL +} + +TraceActivation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + {ID id-mdtConfiguration CRITICALITY ignore EXTENSION MDTConfiguration PRESENCE optional}| + {ID id-TraceCollectionEntityURI CRITICALITY ignore EXTENSION URI-address PRESENCE optional }, + ... +} + +TraceDepth ::= ENUMERATED { + minimum, + medium, + maximum, + minimumWithoutVendorSpecificExtension, + mediumWithoutVendorSpecificExtension, + maximumWithoutVendorSpecificExtension, + ... +} + +TraceID ::= OCTET STRING (SIZE(8)) + +TrafficMappingInfo ::= CHOICE { + iPtolayer2TrafficMappingInfo IPtolayer2TrafficMappingInfo, + bAPlayerBHRLCchannelMappingInfo BAPlayerBHRLCchannelMappingInfo, + choice-extension ProtocolIE-SingleContainer { { TrafficMappingInfo-ExtIEs} } +} + +TrafficMappingInfo-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +TransportLayerAddress ::= BIT STRING (SIZE(1..160, ...)) + +TransactionID ::= INTEGER (0..255, ...) + +Transmission-Bandwidth ::= SEQUENCE { + nRSCS NRSCS, + nRNRB NRNRB, + iE-Extensions ProtocolExtensionContainer { { Transmission-Bandwidth-ExtIEs} } OPTIONAL, + ... +} + +Transmission-Bandwidth-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +Transmission-Bandwidth-asymmetric ::= SEQUENCE { + ul-Transmission-Bandwidth Transmission-Bandwidth, + dl-Transmission-Bandwidth Transmission-Bandwidth, + iE-Extensions ProtocolExtensionContainer { { Transmission-Bandwidth-asymmetric-ExtIEs} } OPTIONAL, + ... +} + +Transmission-Bandwidth-asymmetric-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +TransmissionComb ::= CHOICE { + n2 SEQUENCE { + combOffset-n2 INTEGER (0..1), + cyclicShift-n2 INTEGER (0..7) + }, + n4 SEQUENCE { + combOffset-n4 INTEGER (0..3), + cyclicShift-n4 INTEGER (0..11) + }, + choice-extension ProtocolIE-SingleContainer { { TransmissionComb-ExtIEs} } +} +TransmissionComb-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +TransmissionCombPos ::= CHOICE { + n2 SEQUENCE { + combOffset-n2 INTEGER (0..1), + cyclicShift-n2 INTEGER (0..7) + }, + n4 SEQUENCE { + combOffset-n4 INTEGER (0..3), + cyclicShift-n4 INTEGER (0..11) + }, + n8 SEQUENCE { + combOffset-n8 INTEGER (0..7), + cyclicShift-n8 INTEGER (0..5) + }, + + choice-extension ProtocolIE-SingleContainer { { TransmissionCombPos-ExtIEs} } +} +TransmissionCombPos-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +TransmissionStopIndicator ::= ENUMERATED {true, ... } + +Transport-UP-Layer-Address-Info-To-Add-List ::= SEQUENCE (SIZE(1.. maxnoofTLAs)) OF Transport-UP-Layer-Address-Info-To-Add-Item + +Transport-UP-Layer-Address-Info-To-Add-Item ::= SEQUENCE { + iP-SecTransportLayerAddress TransportLayerAddress, + gTPTransportLayerAddressToAdd GTPTLAs OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { Transport-UP-Layer-Address-Info-To-Add-ItemExtIEs } } OPTIONAL +} + +Transport-UP-Layer-Address-Info-To-Add-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +Transport-UP-Layer-Address-Info-To-Remove-List ::= SEQUENCE (SIZE(1.. maxnoofTLAs)) OF Transport-UP-Layer-Address-Info-To-Remove-Item + +Transport-UP-Layer-Address-Info-To-Remove-Item ::= SEQUENCE { + iP-SecTransportLayerAddress TransportLayerAddress, + gTPTransportLayerAddressToRemove GTPTLAs OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { Transport-UP-Layer-Address-Info-To-Remove-ItemExtIEs } } OPTIONAL +} + +Transport-UP-Layer-Address-Info-To-Remove-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +TransmissionActionIndicator ::= ENUMERATED {stop, ..., restart } + +TRPID ::= INTEGER (0.. maxnoofTRPs, ...) + +TRPInformation ::= SEQUENCE { + tRPID TRPID, + tRPInformationTypeResponseList TRPInformationTypeResponseList, + iE-Extensions ProtocolExtensionContainer { { TRPInformation-ExtIEs } } OPTIONAL +} + +TRPInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +TRPInformationItem ::= SEQUENCE { + tRPInformation TRPInformation, + iE-Extensions ProtocolExtensionContainer { { TRPInformationItem-ExtIEs } } OPTIONAL +} + +TRPInformationItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +TRPInformationTypeItem ::= ENUMERATED { + nrPCI, + nG-RAN-CGI, + arfcn, + pRSConfig, + sSBConfig, + sFNInitTime, + spatialDirectInfo, + geoCoord, + ..., + trp-type +} + + +TRPInformationTypeResponseList ::= SEQUENCE (SIZE(1.. maxnoofTRPInfoTypes)) OF TRPInformationTypeResponseItem + +TRPInformationTypeResponseItem ::= CHOICE { + pCI-NR NRPCI, + nG-RAN-CGI NRCGI, + nRARFCN INTEGER (0..maxNRARFCN), + pRSConfiguration PRSConfiguration, + sSBinformation SSBInformation, + sFNInitialisationTime RelativeTime1900, + spatialDirectionInformation SpatialDirectionInformation, + geographicalCoordinates GeographicalCoordinates, + choice-extension ProtocolIE-SingleContainer { { TRPInformationTypeResponseItem-ExtIEs} } +} + +TRPInformationTypeResponseItem-ExtIEs F1AP-PROTOCOL-IES ::= { + { ID id-TRPType CRITICALITY reject TYPE TRPType PRESENCE mandatory }, + ... +} + + +TRPList ::= SEQUENCE (SIZE(1.. maxnoofTRPs)) OF TRPListItem + +TRPListItem ::= SEQUENCE { + tRPID TRPID, + iE-Extensions ProtocolExtensionContainer { { TRPListItem-ExtIEs } } OPTIONAL +} + +TRPListItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +TRPMeasurementQuality ::= SEQUENCE { + tRPmeasurementQuality-Item TRPMeasurementQuality-Item, + iE-Extensions ProtocolExtensionContainer { {TRPMeasurementQuality-ExtIEs} } OPTIONAL +} + +TRPMeasurementQuality-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +TRPMeasurementQuality-Item ::= CHOICE { + timingMeasurementQuality TimingMeasurementQuality, + angleMeasurementQuality AngleMeasurementQuality, + choice-extension ProtocolIE-SingleContainer { { TRPMeasurementQuality-Item-ExtIEs } } +} + +TRPMeasurementQuality-Item-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +TRP-MeasurementRequestList ::= SEQUENCE (SIZE (1..maxNoOfMeasTRPs)) OF TRP-MeasurementRequestItem + +TRP-MeasurementRequestItem ::= SEQUENCE { + tRPID TRPID, + search-window-information Search-window-information OPTIONAL, + iE-extensions ProtocolExtensionContainer { { TRP-MeasurementRequestItem-ExtIEs } } OPTIONAL +} + +TRP-MeasurementRequestItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-NRCGI CRITICALITY ignore EXTENSION NRCGI PRESENCE optional }, + ... +} + +TRPPositionDefinitionType ::= CHOICE { + direct TRPPositionDirect, + referenced TRPPositionReferenced, + choice-extension ProtocolIE-SingleContainer { { TRPPositionDefinitionType-ExtIEs } } +} + +TRPPositionDefinitionType-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +TRPPositionDirect ::= SEQUENCE { + accuracy TRPPositionDirectAccuracy, + iE-extensions ProtocolExtensionContainer { { TRPPositionDirect-ExtIEs } } OPTIONAL +} + +TRPPositionDirect-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +TRPPositionDirectAccuracy ::= CHOICE { + tRPPosition AccessPointPosition, + tRPHAposition NGRANHighAccuracyAccessPointPosition, + choice-extension ProtocolIE-SingleContainer { { TRPPositionDirectAccuracy-ExtIEs } } +} + +TRPPositionDirectAccuracy-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +TRPPositionReferenced ::= SEQUENCE { + referencePoint ReferencePoint, + referencePointType TRPReferencePointType, + iE-extensions ProtocolExtensionContainer { { TRPPositionReferenced-ExtIEs } } OPTIONAL +} + +TRPPositionReferenced-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +TRPReferencePointType ::= CHOICE { + tRPPositionRelativeGeodetic RelativeGeodeticLocation, + tRPPositionRelativeCartesian RelativeCartesianLocation, + choice-extension ProtocolIE-SingleContainer { { TRPReferencePointType-ExtIEs } } +} + +TRPReferencePointType-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +TypeOfError ::= ENUMERATED { + not-understood, + missing, + ... +} + +Transport-Layer-Address-Info ::= SEQUENCE { + transport-UP-Layer-Address-Info-To-Add-List Transport-UP-Layer-Address-Info-To-Add-List OPTIONAL, + transport-UP-Layer-Address-Info-To-Remove-List Transport-UP-Layer-Address-Info-To-Remove-List OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { Transport-Layer-Address-Info-ExtIEs } } OPTIONAL +} + +Transport-Layer-Address-Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +TRPType ::= ENUMERATED { + prsOnlyTP, + srsOnlyRP, + tp, + rp, + trp, + ... +} + +TSCAssistanceInformation ::= SEQUENCE { + periodicity Periodicity, + burstArrivalTime BurstArrivalTime OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {TSCAssistanceInformation-ExtIEs} } OPTIONAL, + ... +} + +TSCAssistanceInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +TSCTrafficCharacteristics ::= SEQUENCE { + tSCAssistanceInformationDL TSCAssistanceInformation OPTIONAL, + tSCAssistanceInformationUL TSCAssistanceInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {TSCTrafficCharacteristics-ExtIEs} } OPTIONAL, + ... +} + +TSCTrafficCharacteristics-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +-- U +UAC-Assistance-Info ::= SEQUENCE { + uACPLMN-List UACPLMN-List, + iE-Extensions ProtocolExtensionContainer { { UAC-Assistance-InfoExtIEs} } OPTIONAL +} + +UAC-Assistance-InfoExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +UACPLMN-List ::= SEQUENCE (SIZE(1..maxnoofUACPLMNs)) OF UACPLMN-Item + +UACPLMN-Item::= SEQUENCE { + pLMNIdentity PLMN-Identity, + uACType-List UACType-List, iE-Extensions ProtocolExtensionContainer { { UACPLMN-Item-ExtIEs} } OPTIONAL +} + +UACPLMN-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-NID CRITICALITY ignore EXTENSION NID PRESENCE optional }, + ... +} + +UACType-List ::= SEQUENCE (SIZE(1..maxnoofUACperPLMN)) OF UACType-Item + +UACType-Item::= SEQUENCE { + uACReductionIndication UACReductionIndication, + uACCategoryType UACCategoryType, + iE-Extensions ProtocolExtensionContainer { { UACType-Item-ExtIEs } } OPTIONAL +} + +UACType-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +UACCategoryType ::= CHOICE { + uACstandardized UACAction, + uACOperatorDefined UACOperatorDefined, + choice-extension ProtocolIE-SingleContainer { { UACCategoryType-ExtIEs } } +} + +UACCategoryType-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +UACOperatorDefined ::= SEQUENCE { + accessCategory INTEGER (32..63,...), + accessIdentity BIT STRING (SIZE(7)), + iE-Extensions ProtocolExtensionContainer { { UACOperatorDefined-ExtIEs} } OPTIONAL +} + +UACOperatorDefined-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + + +UACAction ::= ENUMERATED { + reject-non-emergency-mo-dt, + reject-rrc-cr-signalling, + permit-emergency-sessions-and-mobile-terminated-services-only, + permit-high-priority-sessions-and-mobile-terminated-services-only, + ... +} + +UACReductionIndication ::= INTEGER (0..100) + + +UE-associatedLogicalF1-ConnectionItem ::= SEQUENCE { + gNB-CU-UE-F1AP-ID GNB-CU-UE-F1AP-ID OPTIONAL, + gNB-DU-UE-F1AP-ID GNB-DU-UE-F1AP-ID OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { UE-associatedLogicalF1-ConnectionItemExtIEs} } OPTIONAL, + ... +} + +UEAssistanceInformation ::= OCTET STRING + +UEAssistanceInformationEUTRA ::= OCTET STRING + +UE-associatedLogicalF1-ConnectionItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +UE-CapabilityRAT-ContainerList::= OCTET STRING + +UEContextNotRetrievable ::= ENUMERATED {true, ...} + +UEIdentityIndexValue ::= CHOICE { + indexLength10 BIT STRING (SIZE (10)), + choice-extension ProtocolIE-SingleContainer { {UEIdentityIndexValueChoice-ExtIEs} } +} + +UEIdentityIndexValueChoice-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +UL-AoA ::= SEQUENCE { + azimuthAoA INTEGER (0..3599), + zenithAoA INTEGER (0..1799) OPTIONAL, + lCS-to-GCS-TranslationAoA LCS-to-GCS-TranslationAoA OPTIONAL, + iE-extensions ProtocolExtensionContainer { { UL-AoA-ExtIEs } } OPTIONAL, + ... +} + +UL-AoA-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +UL-BH-Non-UP-Traffic-Mapping ::= SEQUENCE { + uL-BH-Non-UP-Traffic-Mapping-List UL-BH-Non-UP-Traffic-Mapping-List, + iE-Extensions ProtocolExtensionContainer { { UL-BH-Non-UP-Traffic-Mapping-ExtIEs } } OPTIONAL +} + +UL-BH-Non-UP-Traffic-Mapping-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +UL-BH-Non-UP-Traffic-Mapping-List ::= SEQUENCE (SIZE(1..maxnoofNonUPTrafficMappings)) OF UL-BH-Non-UP-Traffic-Mapping-Item + +UL-BH-Non-UP-Traffic-Mapping-Item ::= SEQUENCE { + nonUPTrafficType NonUPTrafficType, + bHInfo BHInfo, + iE-Extensions ProtocolExtensionContainer { { UL-BH-Non-UP-Traffic-Mapping-ItemExtIEs } } OPTIONAL +} + +UL-BH-Non-UP-Traffic-Mapping-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +ULConfiguration ::= SEQUENCE { + uLUEConfiguration ULUEConfiguration, + iE-Extensions ProtocolExtensionContainer { { ULConfigurationExtIEs } } OPTIONAL, + ... +} +ULConfigurationExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +UL-RTOA-Measurement ::= SEQUENCE { + uL-RTOA-MeasurementItem UL-RTOA-MeasurementItem, + additionalPath-List AdditionalPath-List OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { UL-RTOA-Measurement-ExtIEs } } OPTIONAL +} + +UL-RTOA-Measurement-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +UL-RTOA-MeasurementItem ::= CHOICE { + k0 INTEGER (0..1970049), + k1 INTEGER (0..985025), + k2 INTEGER (0..492513), + k3 INTEGER (0..246257), + k4 INTEGER (0..123129), + k5 INTEGER (0..61565), + choice-extension ProtocolIE-SingleContainer { { UL-RTOA-MeasurementItem-ExtIEs } } +} + +UL-RTOA-MeasurementItem-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +UL-SRS-RSRP ::= INTEGER (0..126) + +ULUEConfiguration ::= ENUMERATED {no-data, shared, only, ...} + +UL-UP-TNL-Information-to-Update-List-Item ::= SEQUENCE { + uLUPTNLInformation UPTransportLayerInformation, + newULUPTNLInformation UPTransportLayerInformation OPTIONAL, + bHInfo BHInfo, + iE-Extensions ProtocolExtensionContainer { { UL-UP-TNL-Information-to-Update-List-ItemExtIEs } } OPTIONAL, + ... +} + +UL-UP-TNL-Information-to-Update-List-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +UL-UP-TNL-Address-to-Update-List-Item ::= SEQUENCE { + oldIPAdress TransportLayerAddress, + newIPAdress TransportLayerAddress, + iE-Extensions ProtocolExtensionContainer { { UL-UP-TNL-Address-to-Update-List-ItemExtIEs } } OPTIONAL, + ... +} + +UL-UP-TNL-Address-to-Update-List-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +ULUPTNLInformation-ToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofULUPTNLInformation)) OF ULUPTNLInformation-ToBeSetup-Item + +ULUPTNLInformation-ToBeSetup-Item ::=SEQUENCE { + uLUPTNLInformation UPTransportLayerInformation, + iE-Extensions ProtocolExtensionContainer { { ULUPTNLInformation-ToBeSetup-ItemExtIEs } } OPTIONAL, + ... +} + +ULUPTNLInformation-ToBeSetup-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { + { ID id-BHInfo CRITICALITY ignore EXTENSION BHInfo PRESENCE optional }, + ... +} + +Uncertainty ::= INTEGER (0..32767, ...) + +UplinkChannelBW-PerSCS-List ::= SEQUENCE (SIZE (1..maxnoSCSs)) OF SCS-SpecificCarrier + +UplinkTxDirectCurrentListInformation ::= OCTET STRING + +UplinkTxDirectCurrentTwoCarrierListInfo ::= OCTET STRING + +UPTransportLayerInformation ::= CHOICE { + gTPTunnel GTPTunnel, + choice-extension ProtocolIE-SingleContainer { { UPTransportLayerInformation-ExtIEs} } +} + +UPTransportLayerInformation-ExtIEs F1AP-PROTOCOL-IES ::= { + ... +} + +URI-address ::= VisibleString + +-- V + +VictimgNBSetID ::= SEQUENCE { + victimgNBSetID GNBSetID, + iE-Extensions ProtocolExtensionContainer { { VictimgNBSetID-ExtIEs } } OPTIONAL +} + +VictimgNBSetID-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { + ... +} + +VehicleUE ::= ENUMERATED { + authorized, + not-authorized, + ... +} + +PedestrianUE ::= ENUMERATED { + authorized, + not-authorized, + ... +} + +-- W + +-- X + +-- Y + +-- Z + +END +-- ASN1STOP +-- ASN1START +-- ************************************************************** +-- +-- Common definitions +-- +-- ************************************************************** + +F1AP-CommonDataTypes { +itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) +ngran-access (22) modules (3) f1ap (3) version1 (1) f1ap-CommonDataTypes (3) } + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +Criticality ::= ENUMERATED { reject, ignore, notify } + +Presence ::= ENUMERATED { optional, conditional, mandatory } + +PrivateIE-ID ::= CHOICE { + local INTEGER (0..65535), + global OBJECT IDENTIFIER +} + +ProcedureCode ::= INTEGER (0..255) + +ProtocolExtensionID ::= INTEGER (0..65535) + +ProtocolIE-ID ::= INTEGER (0..65535) + +TriggeringMessage ::= ENUMERATED { initiating-message, successful-outcome, unsuccessful-outcome } + +END +-- ASN1STOP +-- ASN1START +-- ************************************************************** +-- +-- Constant definitions +-- +-- ************************************************************** + +F1AP-Constants { +itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) +ngran-access (22) modules (3) f1ap (3) version1 (1) f1ap-Constants (4) } + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +-- ************************************************************** +-- +-- IE parameter types from other modules. +-- +-- ************************************************************** + +IMPORTS + ProcedureCode, + ProtocolIE-ID + +FROM F1AP-CommonDataTypes; + + +-- ************************************************************** +-- +-- Elementary Procedures +-- +-- ************************************************************** + +id-Reset ProcedureCode ::= 0 +id-F1Setup ProcedureCode ::= 1 +id-ErrorIndication ProcedureCode ::= 2 +id-gNBDUConfigurationUpdate ProcedureCode ::= 3 +id-gNBCUConfigurationUpdate ProcedureCode ::= 4 +id-UEContextSetup ProcedureCode ::= 5 +id-UEContextRelease ProcedureCode ::= 6 +id-UEContextModification ProcedureCode ::= 7 +id-UEContextModificationRequired ProcedureCode ::= 8 +id-UEMobilityCommand ProcedureCode ::= 9 +id-UEContextReleaseRequest ProcedureCode ::= 10 +id-InitialULRRCMessageTransfer ProcedureCode ::= 11 +id-DLRRCMessageTransfer ProcedureCode ::= 12 +id-ULRRCMessageTransfer ProcedureCode ::= 13 +id-privateMessage ProcedureCode ::= 14 +id-UEInactivityNotification ProcedureCode ::= 15 +id-GNBDUResourceCoordination ProcedureCode ::= 16 +id-SystemInformationDeliveryCommand ProcedureCode ::= 17 +id-Paging ProcedureCode ::= 18 +id-Notify ProcedureCode ::= 19 +id-WriteReplaceWarning ProcedureCode ::= 20 +id-PWSCancel ProcedureCode ::= 21 +id-PWSRestartIndication ProcedureCode ::= 22 +id-PWSFailureIndication ProcedureCode ::= 23 +id-GNBDUStatusIndication ProcedureCode ::= 24 +id-RRCDeliveryReport ProcedureCode ::= 25 +id-F1Removal ProcedureCode ::= 26 +id-NetworkAccessRateReduction ProcedureCode ::= 27 +id-TraceStart ProcedureCode ::= 28 +id-DeactivateTrace ProcedureCode ::= 29 +id-DUCURadioInformationTransfer ProcedureCode ::= 30 +id-CUDURadioInformationTransfer ProcedureCode ::= 31 +id-BAPMappingConfiguration ProcedureCode ::= 32 +id-GNBDUResourceConfiguration ProcedureCode ::= 33 +id-IABTNLAddressAllocation ProcedureCode ::= 34 +id-IABUPConfigurationUpdate ProcedureCode ::= 35 +id-resourceStatusReportingInitiation ProcedureCode ::= 36 +id-resourceStatusReporting ProcedureCode ::= 37 +id-accessAndMobilityIndication ProcedureCode ::= 38 +id-accessSuccess ProcedureCode ::= 39 +id-cellTrafficTrace ProcedureCode ::= 40 +id-PositioningMeasurementExchange ProcedureCode ::= 41 +id-PositioningAssistanceInformationControl ProcedureCode ::= 42 +id-PositioningAssistanceInformationFeedback ProcedureCode ::= 43 +id-PositioningMeasurementReport ProcedureCode ::= 44 +id-PositioningMeasurementAbort ProcedureCode ::= 45 +id-PositioningMeasurementFailureIndication ProcedureCode ::= 46 +id-PositioningMeasurementUpdate ProcedureCode ::= 47 +id-TRPInformationExchange ProcedureCode ::= 48 +id-PositioningInformationExchange ProcedureCode ::= 49 +id-PositioningActivation ProcedureCode ::= 50 +id-PositioningDeactivation ProcedureCode ::= 51 +id-E-CIDMeasurementInitiation ProcedureCode ::= 52 +id-E-CIDMeasurementFailureIndication ProcedureCode ::= 53 +id-E-CIDMeasurementReport ProcedureCode ::= 54 +id-E-CIDMeasurementTermination ProcedureCode ::= 55 +id-PositioningInformationUpdate ProcedureCode ::= 56 +id-ReferenceTimeInformationReport ProcedureCode ::= 57 +id-ReferenceTimeInformationReportingControl ProcedureCode ::= 58 +id-PosSystemInformationDeliveryCommand ProcedureCode ::= 81 + + + +-- ************************************************************** +-- +-- Extension constants +-- +-- ************************************************************** + +maxPrivateIEs INTEGER ::= 65535 +maxProtocolExtensions INTEGER ::= 65535 +maxProtocolIEs INTEGER ::= 65535 +-- ************************************************************** +-- +-- Lists +-- +-- ************************************************************** + +maxNRARFCN INTEGER ::= 3279165 +maxnoofErrors INTEGER ::= 256 +maxnoofIndividualF1ConnectionsToReset INTEGER ::= 65536 +maxCellingNBDU INTEGER ::= 512 +maxnoofSCells INTEGER ::= 32 +maxnoofSRBs INTEGER ::= 8 +maxnoofDRBs INTEGER ::= 64 +maxnoofULUPTNLInformation INTEGER ::= 2 +maxnoofDLUPTNLInformation INTEGER ::= 2 +maxnoofBPLMNs INTEGER ::= 6 +maxnoofCandidateSpCells INTEGER ::= 64 +maxnoofPotentialSpCells INTEGER ::= 64 +maxnoofNrCellBands INTEGER ::= 32 +maxnoofSIBTypes INTEGER ::= 32 +maxnoofSITypes INTEGER ::= 32 +maxnoofPagingCells INTEGER ::= 512 +maxnoofTNLAssociations INTEGER ::= 32 +maxnoofQoSFlows INTEGER ::= 64 +maxnoofSliceItems INTEGER ::= 1024 +maxCellineNB INTEGER ::= 256 +maxnoofExtendedBPLMNs INTEGER ::= 6 +maxnoofUEIDs INTEGER ::= 65536 +maxnoofBPLMNsNR INTEGER ::= 12 +maxnoofUACPLMNs INTEGER ::= 12 +maxnoofUACperPLMN INTEGER ::= 64 +maxnoofAdditionalSIBs INTEGER ::= 63 +maxnoofslots INTEGER ::= 5120 +maxnoofTLAs INTEGER ::= 16 +maxnoofGTPTLAs INTEGER ::= 16 +maxnoofBHRLCChannels INTEGER ::= 65536 +maxnoofRoutingEntries INTEGER ::= 1024 +maxnoofIABSTCInfo INTEGER ::= 45 +maxnoofSymbols INTEGER ::= 14 +maxnoofServingCells INTEGER ::= 32 +maxnoofDUFSlots INTEGER ::= 320 +maxnoofHSNASlots INTEGER ::= 5120 +maxnoofServedCellsIAB INTEGER ::= 512 +maxnoofChildIABNodes INTEGER ::= 1024 +maxnoofNonUPTrafficMappings INTEGER ::= 32 +maxnoofTLAsIAB INTEGER ::= 1024 +maxnoofMappingEntries INTEGER ::= 67108864 +maxnoofDSInfo INTEGER ::= 64 +maxnoofEgressLinks INTEGER ::= 2 +maxnoofULUPTNLInformationforIAB INTEGER ::= 32678 +maxnoofUPTNLAddresses INTEGER ::= 8 +maxnoofSLDRBs INTEGER ::= 512 +maxnoofQoSParaSets INTEGER ::= 8 +maxnoofPC5QoSFlows INTEGER ::= 2048 +maxnoofSSBAreas INTEGER ::= 64 +maxnoofPhysicalResourceBlocks INTEGER ::= 275 +maxnoofPhysicalResourceBlocks-1 INTEGER ::= 274 +maxnoofPRACHconfigs INTEGER ::= 16 +maxnoofRACHReports INTEGER ::= 64 +maxnoofRLFReports INTEGER ::= 64 +maxnoofAdditionalPDCPDuplicationTNL INTEGER ::= 2 +maxnoofRLCDuplicationState INTEGER ::= 3 +maxnoofCHOcells INTEGER ::= 8 +maxnoofMDTPLMNs INTEGER ::= 16 +maxnoofCAGsupported INTEGER ::= 12 +maxnoofNIDsupported INTEGER ::= 12 +maxnoofNRSCSs INTEGER ::= 5 +maxnoofExtSliceItems INTEGER ::= 65535 +maxnoofPosMeas INTEGER ::= 16384 +maxnoofTRPInfoTypes INTEGER ::= 64 +maxnoofTRPs INTEGER ::= 65535 +maxnoofSRSTriggerStates INTEGER ::= 3 +maxnoofSpatialRelations INTEGER ::= 64 +maxnoBcastCell INTEGER ::= 16384 +maxnoofAngleInfo INTEGER ::= 65535 +maxnooflcs-gcs-translation INTEGER ::= 3 +maxnoofPath INTEGER ::= 2 +maxnoofMeasE-CID INTEGER ::= 64 +maxnoofSSBs INTEGER ::= 255 +maxnoSRS-ResourceSets INTEGER ::= 16 +maxnoSRS-ResourcePerSet INTEGER ::= 16 +maxnoSRS-Carriers INTEGER ::= 32 +maxnoSCSs INTEGER ::= 5 +maxnoSRS-Resources INTEGER ::= 64 +maxnoSRS-PosResources INTEGER ::= 64 +maxnoSRS-PosResourceSets INTEGER ::= 16 +maxnoSRS-PosResourcePerSet INTEGER ::= 16 +maxnoofPRS-ResourceSets INTEGER ::= 2 +maxnoofPRS-ResourcesPerSet INTEGER ::= 64 +maxNoOfMeasTRPs INTEGER ::= 64 +maxnoofPRSresourceSets INTEGER ::= 8 +maxnoofPRSresources INTEGER ::= 64 +maxnoofPosSITypes INTEGER ::= 32 + + + +-- ************************************************************** +-- +-- IEs +-- +-- ************************************************************** + +id-Cause ProtocolIE-ID ::= 0 +id-Cells-Failed-to-be-Activated-List ProtocolIE-ID ::= 1 +id-Cells-Failed-to-be-Activated-List-Item ProtocolIE-ID ::= 2 +id-Cells-to-be-Activated-List ProtocolIE-ID ::= 3 +id-Cells-to-be-Activated-List-Item ProtocolIE-ID ::= 4 +id-Cells-to-be-Deactivated-List ProtocolIE-ID ::= 5 +id-Cells-to-be-Deactivated-List-Item ProtocolIE-ID ::= 6 +id-CriticalityDiagnostics ProtocolIE-ID ::= 7 +id-CUtoDURRCInformation ProtocolIE-ID ::= 9 +id-DRBs-FailedToBeModified-Item ProtocolIE-ID ::= 12 +id-DRBs-FailedToBeModified-List ProtocolIE-ID ::= 13 +id-DRBs-FailedToBeSetup-Item ProtocolIE-ID ::= 14 +id-DRBs-FailedToBeSetup-List ProtocolIE-ID ::= 15 +id-DRBs-FailedToBeSetupMod-Item ProtocolIE-ID ::= 16 +id-DRBs-FailedToBeSetupMod-List ProtocolIE-ID ::= 17 +id-DRBs-ModifiedConf-Item ProtocolIE-ID ::= 18 +id-DRBs-ModifiedConf-List ProtocolIE-ID ::= 19 +id-DRBs-Modified-Item ProtocolIE-ID ::= 20 +id-DRBs-Modified-List ProtocolIE-ID ::= 21 +id-DRBs-Required-ToBeModified-Item ProtocolIE-ID ::= 22 +id-DRBs-Required-ToBeModified-List ProtocolIE-ID ::= 23 +id-DRBs-Required-ToBeReleased-Item ProtocolIE-ID ::= 24 +id-DRBs-Required-ToBeReleased-List ProtocolIE-ID ::= 25 +id-DRBs-Setup-Item ProtocolIE-ID ::= 26 +id-DRBs-Setup-List ProtocolIE-ID ::= 27 +id-DRBs-SetupMod-Item ProtocolIE-ID ::= 28 +id-DRBs-SetupMod-List ProtocolIE-ID ::= 29 +id-DRBs-ToBeModified-Item ProtocolIE-ID ::= 30 +id-DRBs-ToBeModified-List ProtocolIE-ID ::= 31 +id-DRBs-ToBeReleased-Item ProtocolIE-ID ::= 32 +id-DRBs-ToBeReleased-List ProtocolIE-ID ::= 33 +id-DRBs-ToBeSetup-Item ProtocolIE-ID ::= 34 +id-DRBs-ToBeSetup-List ProtocolIE-ID ::= 35 +id-DRBs-ToBeSetupMod-Item ProtocolIE-ID ::= 36 +id-DRBs-ToBeSetupMod-List ProtocolIE-ID ::= 37 +id-DRXCycle ProtocolIE-ID ::= 38 +id-DUtoCURRCInformation ProtocolIE-ID ::= 39 +id-gNB-CU-UE-F1AP-ID ProtocolIE-ID ::= 40 +id-gNB-DU-UE-F1AP-ID ProtocolIE-ID ::= 41 +id-gNB-DU-ID ProtocolIE-ID ::= 42 +id-GNB-DU-Served-Cells-Item ProtocolIE-ID ::= 43 +id-gNB-DU-Served-Cells-List ProtocolIE-ID ::= 44 +id-gNB-DU-Name ProtocolIE-ID ::= 45 +id-NRCellID ProtocolIE-ID ::= 46 +id-oldgNB-DU-UE-F1AP-ID ProtocolIE-ID ::= 47 +id-ResetType ProtocolIE-ID ::= 48 +id-ResourceCoordinationTransferContainer ProtocolIE-ID ::= 49 +id-RRCContainer ProtocolIE-ID ::= 50 +id-SCell-ToBeRemoved-Item ProtocolIE-ID ::= 51 +id-SCell-ToBeRemoved-List ProtocolIE-ID ::= 52 +id-SCell-ToBeSetup-Item ProtocolIE-ID ::= 53 +id-SCell-ToBeSetup-List ProtocolIE-ID ::= 54 +id-SCell-ToBeSetupMod-Item ProtocolIE-ID ::= 55 +id-SCell-ToBeSetupMod-List ProtocolIE-ID ::= 56 +id-Served-Cells-To-Add-Item ProtocolIE-ID ::= 57 +id-Served-Cells-To-Add-List ProtocolIE-ID ::= 58 +id-Served-Cells-To-Delete-Item ProtocolIE-ID ::= 59 +id-Served-Cells-To-Delete-List ProtocolIE-ID ::= 60 +id-Served-Cells-To-Modify-Item ProtocolIE-ID ::= 61 +id-Served-Cells-To-Modify-List ProtocolIE-ID ::= 62 +id-SpCell-ID ProtocolIE-ID ::= 63 +id-SRBID ProtocolIE-ID ::= 64 +id-SRBs-FailedToBeSetup-Item ProtocolIE-ID ::= 65 +id-SRBs-FailedToBeSetup-List ProtocolIE-ID ::= 66 +id-SRBs-FailedToBeSetupMod-Item ProtocolIE-ID ::= 67 +id-SRBs-FailedToBeSetupMod-List ProtocolIE-ID ::= 68 +id-SRBs-Required-ToBeReleased-Item ProtocolIE-ID ::= 69 +id-SRBs-Required-ToBeReleased-List ProtocolIE-ID ::= 70 +id-SRBs-ToBeReleased-Item ProtocolIE-ID ::= 71 +id-SRBs-ToBeReleased-List ProtocolIE-ID ::= 72 +id-SRBs-ToBeSetup-Item ProtocolIE-ID ::= 73 +id-SRBs-ToBeSetup-List ProtocolIE-ID ::= 74 +id-SRBs-ToBeSetupMod-Item ProtocolIE-ID ::= 75 +id-SRBs-ToBeSetupMod-List ProtocolIE-ID ::= 76 +id-TimeToWait ProtocolIE-ID ::= 77 +id-TransactionID ProtocolIE-ID ::= 78 +id-TransmissionActionIndicator ProtocolIE-ID ::= 79 +id-UE-associatedLogicalF1-ConnectionItem ProtocolIE-ID ::= 80 +id-UE-associatedLogicalF1-ConnectionListResAck ProtocolIE-ID ::= 81 +id-gNB-CU-Name ProtocolIE-ID ::= 82 +id-SCell-FailedtoSetup-List ProtocolIE-ID ::= 83 +id-SCell-FailedtoSetup-Item ProtocolIE-ID ::= 84 +id-SCell-FailedtoSetupMod-List ProtocolIE-ID ::= 85 +id-SCell-FailedtoSetupMod-Item ProtocolIE-ID ::= 86 +id-RRCReconfigurationCompleteIndicator ProtocolIE-ID ::= 87 +id-Cells-Status-Item ProtocolIE-ID ::= 88 +id-Cells-Status-List ProtocolIE-ID ::= 89 +id-Candidate-SpCell-List ProtocolIE-ID ::= 90 +id-Candidate-SpCell-Item ProtocolIE-ID ::= 91 +id-Potential-SpCell-List ProtocolIE-ID ::= 92 +id-Potential-SpCell-Item ProtocolIE-ID ::= 93 +id-FullConfiguration ProtocolIE-ID ::= 94 +id-C-RNTI ProtocolIE-ID ::= 95 +id-SpCellULConfigured ProtocolIE-ID ::= 96 +id-InactivityMonitoringRequest ProtocolIE-ID ::= 97 +id-InactivityMonitoringResponse ProtocolIE-ID ::= 98 +id-DRB-Activity-Item ProtocolIE-ID ::= 99 +id-DRB-Activity-List ProtocolIE-ID ::= 100 +id-EUTRA-NR-CellResourceCoordinationReq-Container ProtocolIE-ID ::= 101 +id-EUTRA-NR-CellResourceCoordinationReqAck-Container ProtocolIE-ID ::= 102 +id-Protected-EUTRA-Resources-List ProtocolIE-ID ::= 105 +id-RequestType ProtocolIE-ID ::= 106 +id-ServCellIndex ProtocolIE-ID ::= 107 +id-RAT-FrequencyPriorityInformation ProtocolIE-ID ::= 108 +id-ExecuteDuplication ProtocolIE-ID ::= 109 +id-NRCGI ProtocolIE-ID ::= 111 +id-PagingCell-Item ProtocolIE-ID ::= 112 +id-PagingCell-List ProtocolIE-ID ::= 113 +id-PagingDRX ProtocolIE-ID ::= 114 +id-PagingPriority ProtocolIE-ID ::= 115 +id-SItype-List ProtocolIE-ID ::= 116 +id-UEIdentityIndexValue ProtocolIE-ID ::= 117 +id-gNB-CUSystemInformation ProtocolIE-ID ::= 118 +id-HandoverPreparationInformation ProtocolIE-ID ::= 119 +id-GNB-CU-TNL-Association-To-Add-Item ProtocolIE-ID ::= 120 +id-GNB-CU-TNL-Association-To-Add-List ProtocolIE-ID ::= 121 +id-GNB-CU-TNL-Association-To-Remove-Item ProtocolIE-ID ::= 122 +id-GNB-CU-TNL-Association-To-Remove-List ProtocolIE-ID ::= 123 +id-GNB-CU-TNL-Association-To-Update-Item ProtocolIE-ID ::= 124 +id-GNB-CU-TNL-Association-To-Update-List ProtocolIE-ID ::= 125 +id-MaskedIMEISV ProtocolIE-ID ::= 126 +id-PagingIdentity ProtocolIE-ID ::= 127 +id-DUtoCURRCContainer ProtocolIE-ID ::= 128 +id-Cells-to-be-Barred-List ProtocolIE-ID ::= 129 +id-Cells-to-be-Barred-Item ProtocolIE-ID ::= 130 +id-TAISliceSupportList ProtocolIE-ID ::= 131 +id-GNB-CU-TNL-Association-Setup-List ProtocolIE-ID ::= 132 +id-GNB-CU-TNL-Association-Setup-Item ProtocolIE-ID ::= 133 +id-GNB-CU-TNL-Association-Failed-To-Setup-List ProtocolIE-ID ::= 134 +id-GNB-CU-TNL-Association-Failed-To-Setup-Item ProtocolIE-ID ::= 135 +id-DRB-Notify-Item ProtocolIE-ID ::= 136 +id-DRB-Notify-List ProtocolIE-ID ::= 137 +id-NotficationControl ProtocolIE-ID ::= 138 +id-RANAC ProtocolIE-ID ::= 139 +id-PWSSystemInformation ProtocolIE-ID ::= 140 +id-RepetitionPeriod ProtocolIE-ID ::= 141 +id-NumberofBroadcastRequest ProtocolIE-ID ::= 142 +id-Cells-To-Be-Broadcast-List ProtocolIE-ID ::= 144 +id-Cells-To-Be-Broadcast-Item ProtocolIE-ID ::= 145 +id-Cells-Broadcast-Completed-List ProtocolIE-ID ::= 146 +id-Cells-Broadcast-Completed-Item ProtocolIE-ID ::= 147 +id-Broadcast-To-Be-Cancelled-List ProtocolIE-ID ::= 148 +id-Broadcast-To-Be-Cancelled-Item ProtocolIE-ID ::= 149 +id-Cells-Broadcast-Cancelled-List ProtocolIE-ID ::= 150 +id-Cells-Broadcast-Cancelled-Item ProtocolIE-ID ::= 151 +id-NR-CGI-List-For-Restart-List ProtocolIE-ID ::= 152 +id-NR-CGI-List-For-Restart-Item ProtocolIE-ID ::= 153 +id-PWS-Failed-NR-CGI-List ProtocolIE-ID ::= 154 +id-PWS-Failed-NR-CGI-Item ProtocolIE-ID ::= 155 +id-ConfirmedUEID ProtocolIE-ID ::= 156 +id-Cancel-all-Warning-Messages-Indicator ProtocolIE-ID ::= 157 +id-GNB-DU-UE-AMBR-UL ProtocolIE-ID ::= 158 +id-DRXConfigurationIndicator ProtocolIE-ID ::= 159 +id-RLC-Status ProtocolIE-ID ::= 160 +id-DLPDCPSNLength ProtocolIE-ID ::= 161 +id-GNB-DUConfigurationQuery ProtocolIE-ID ::= 162 +id-MeasurementTimingConfiguration ProtocolIE-ID ::= 163 +id-DRB-Information ProtocolIE-ID ::= 164 +id-ServingPLMN ProtocolIE-ID ::= 165 +id-Protected-EUTRA-Resources-Item ProtocolIE-ID ::= 168 +id-GNB-CU-RRC-Version ProtocolIE-ID ::= 170 +id-GNB-DU-RRC-Version ProtocolIE-ID ::= 171 +id-GNBDUOverloadInformation ProtocolIE-ID ::= 172 +id-CellGroupConfig ProtocolIE-ID ::= 173 +id-RLCFailureIndication ProtocolIE-ID ::= 174 +id-UplinkTxDirectCurrentListInformation ProtocolIE-ID ::= 175 +id-DC-Based-Duplication-Configured ProtocolIE-ID ::= 176 +id-DC-Based-Duplication-Activation ProtocolIE-ID ::= 177 +id-SULAccessIndication ProtocolIE-ID ::= 178 +id-AvailablePLMNList ProtocolIE-ID ::= 179 +id-PDUSessionID ProtocolIE-ID ::= 180 +id-ULPDUSessionAggregateMaximumBitRate ProtocolIE-ID ::= 181 +id-ServingCellMO ProtocolIE-ID ::= 182 +id-QoSFlowMappingIndication ProtocolIE-ID ::= 183 +id-RRCDeliveryStatusRequest ProtocolIE-ID ::= 184 +id-RRCDeliveryStatus ProtocolIE-ID ::= 185 +id-BearerTypeChange ProtocolIE-ID ::= 186 +id-RLCMode ProtocolIE-ID ::= 187 +id-Duplication-Activation ProtocolIE-ID ::= 188 +id-Dedicated-SIDelivery-NeededUE-List ProtocolIE-ID ::= 189 +id-Dedicated-SIDelivery-NeededUE-Item ProtocolIE-ID ::= 190 +id-DRX-LongCycleStartOffset ProtocolIE-ID ::= 191 +id-ULPDCPSNLength ProtocolIE-ID ::= 192 +id-SelectedBandCombinationIndex ProtocolIE-ID ::= 193 +id-SelectedFeatureSetEntryIndex ProtocolIE-ID ::= 194 +id-ResourceCoordinationTransferInformation ProtocolIE-ID ::= 195 +id-ExtendedServedPLMNs-List ProtocolIE-ID ::= 196 +id-ExtendedAvailablePLMN-List ProtocolIE-ID ::= 197 +id-Associated-SCell-List ProtocolIE-ID ::= 198 +id-latest-RRC-Version-Enhanced ProtocolIE-ID ::= 199 +id-Associated-SCell-Item ProtocolIE-ID ::= 200 +id-Cell-Direction ProtocolIE-ID ::= 201 +id-SRBs-Setup-List ProtocolIE-ID ::= 202 +id-SRBs-Setup-Item ProtocolIE-ID ::= 203 +id-SRBs-SetupMod-List ProtocolIE-ID ::= 204 +id-SRBs-SetupMod-Item ProtocolIE-ID ::= 205 +id-SRBs-Modified-List ProtocolIE-ID ::= 206 +id-SRBs-Modified-Item ProtocolIE-ID ::= 207 +id-Ph-InfoSCG ProtocolIE-ID ::= 208 +id-RequestedBandCombinationIndex ProtocolIE-ID ::= 209 +id-RequestedFeatureSetEntryIndex ProtocolIE-ID ::= 210 +id-RequestedP-MaxFR2 ProtocolIE-ID ::= 211 +id-DRX-Config ProtocolIE-ID ::= 212 +id-IgnoreResourceCoordinationContainer ProtocolIE-ID ::= 213 +id-UEAssistanceInformation ProtocolIE-ID ::= 214 +id-NeedforGap ProtocolIE-ID ::= 215 +id-PagingOrigin ProtocolIE-ID ::= 216 +id-new-gNB-CU-UE-F1AP-ID ProtocolIE-ID ::= 217 +id-RedirectedRRCmessage ProtocolIE-ID ::= 218 +id-new-gNB-DU-UE-F1AP-ID ProtocolIE-ID ::= 219 +id-NotificationInformation ProtocolIE-ID ::= 220 +id-PLMNAssistanceInfoForNetShar ProtocolIE-ID ::= 221 +id-UEContextNotRetrievable ProtocolIE-ID ::= 222 +id-BPLMN-ID-Info-List ProtocolIE-ID ::= 223 +id-SelectedPLMNID ProtocolIE-ID ::= 224 +id-UAC-Assistance-Info ProtocolIE-ID ::= 225 +id-RANUEID ProtocolIE-ID ::= 226 +id-GNB-DU-TNL-Association-To-Remove-Item ProtocolIE-ID ::= 227 +id-GNB-DU-TNL-Association-To-Remove-List ProtocolIE-ID ::= 228 +id-TNLAssociationTransportLayerAddressgNBDU ProtocolIE-ID ::= 229 +id-portNumber ProtocolIE-ID ::= 230 +id-AdditionalSIBMessageList ProtocolIE-ID ::= 231 +id-Cell-Type ProtocolIE-ID ::= 232 +id-IgnorePRACHConfiguration ProtocolIE-ID ::= 233 +id-CG-Config ProtocolIE-ID ::= 234 +id-PDCCH-BlindDetectionSCG ProtocolIE-ID ::= 235 +id-Requested-PDCCH-BlindDetectionSCG ProtocolIE-ID ::= 236 +id-Ph-InfoMCG ProtocolIE-ID ::= 237 +id-MeasGapSharingConfig ProtocolIE-ID ::= 238 +id-systemInformationAreaID ProtocolIE-ID ::= 239 +id-areaScope ProtocolIE-ID ::= 240 +id-RRCContainer-RRCSetupComplete ProtocolIE-ID ::= 241 +id-TraceActivation ProtocolIE-ID ::= 242 +id-TraceID ProtocolIE-ID ::= 243 +id-Neighbour-Cell-Information-List ProtocolIE-ID ::= 244 +id-SymbolAllocInSlot ProtocolIE-ID ::= 246 +id-NumDLULSymbols ProtocolIE-ID ::= 247 +id-AdditionalRRMPriorityIndex ProtocolIE-ID ::= 248 +id-DUCURadioInformationType ProtocolIE-ID ::= 249 +id-CUDURadioInformationType ProtocolIE-ID ::= 250 +id-AggressorgNBSetID ProtocolIE-ID ::= 251 +id-VictimgNBSetID ProtocolIE-ID ::= 252 +id-LowerLayerPresenceStatusChange ProtocolIE-ID ::= 253 +id-Transport-Layer-Address-Info ProtocolIE-ID ::= 254 +id-Neighbour-Cell-Information-Item ProtocolIE-ID ::= 255 +id-IntendedTDD-DL-ULConfig ProtocolIE-ID ::= 256 +id-QosMonitoringRequest ProtocolIE-ID ::= 257 +id-BHChannels-ToBeSetup-List ProtocolIE-ID ::= 258 +id-BHChannels-ToBeSetup-Item ProtocolIE-ID ::= 259 +id-BHChannels-Setup-List ProtocolIE-ID ::= 260 +id-BHChannels-Setup-Item ProtocolIE-ID ::= 261 +id-BHChannels-ToBeModified-Item ProtocolIE-ID ::= 262 +id-BHChannels-ToBeModified-List ProtocolIE-ID ::= 263 +id-BHChannels-ToBeReleased-Item ProtocolIE-ID ::= 264 +id-BHChannels-ToBeReleased-List ProtocolIE-ID ::= 265 +id-BHChannels-ToBeSetupMod-Item ProtocolIE-ID ::= 266 +id-BHChannels-ToBeSetupMod-List ProtocolIE-ID ::= 267 +id-BHChannels-FailedToBeModified-Item ProtocolIE-ID ::= 268 +id-BHChannels-FailedToBeModified-List ProtocolIE-ID ::= 269 +id-BHChannels-FailedToBeSetupMod-Item ProtocolIE-ID ::= 270 +id-BHChannels-FailedToBeSetupMod-List ProtocolIE-ID ::= 271 +id-BHChannels-Modified-Item ProtocolIE-ID ::= 272 +id-BHChannels-Modified-List ProtocolIE-ID ::= 273 +id-BHChannels-SetupMod-Item ProtocolIE-ID ::= 274 +id-BHChannels-SetupMod-List ProtocolIE-ID ::= 275 +id-BHChannels-Required-ToBeReleased-Item ProtocolIE-ID ::= 276 +id-BHChannels-Required-ToBeReleased-List ProtocolIE-ID ::= 277 +id-BHChannels-FailedToBeSetup-Item ProtocolIE-ID ::= 278 +id-BHChannels-FailedToBeSetup-List ProtocolIE-ID ::= 279 +id-BHInfo ProtocolIE-ID ::= 280 +id-BAPAddress ProtocolIE-ID ::= 281 +id-ConfiguredBAPAddress ProtocolIE-ID ::= 282 +id-BH-Routing-Information-Added-List ProtocolIE-ID ::= 283 +id-BH-Routing-Information-Added-List-Item ProtocolIE-ID ::= 284 +id-BH-Routing-Information-Removed-List ProtocolIE-ID ::= 285 +id-BH-Routing-Information-Removed-List-Item ProtocolIE-ID ::= 286 +id-UL-BH-Non-UP-Traffic-Mapping ProtocolIE-ID ::= 287 +id-Activated-Cells-to-be-Updated-List ProtocolIE-ID ::= 288 +id-Child-Nodes-List ProtocolIE-ID ::= 289 +id-IAB-Info-IAB-DU ProtocolIE-ID ::= 290 +id-IAB-Info-IAB-donor-CU ProtocolIE-ID ::= 291 +id-IAB-TNL-Addresses-To-Remove-List ProtocolIE-ID ::= 292 +id-IAB-TNL-Addresses-To-Remove-Item ProtocolIE-ID ::= 293 +id-IAB-Allocated-TNL-Address-List ProtocolIE-ID ::= 294 +id-IAB-Allocated-TNL-Address-Item ProtocolIE-ID ::= 295 +id-IABIPv6RequestType ProtocolIE-ID ::= 296 +id-IABv4AddressesRequested ProtocolIE-ID ::= 297 +id-IAB-Barred ProtocolIE-ID ::= 298 +id-TrafficMappingInformation ProtocolIE-ID ::= 299 +id-UL-UP-TNL-Information-to-Update-List ProtocolIE-ID ::= 300 +id-UL-UP-TNL-Information-to-Update-List-Item ProtocolIE-ID ::= 301 +id-UL-UP-TNL-Address-to-Update-List ProtocolIE-ID ::= 302 +id-UL-UP-TNL-Address-to-Update-List-Item ProtocolIE-ID ::= 303 +id-DL-UP-TNL-Address-to-Update-List ProtocolIE-ID ::= 304 +id-DL-UP-TNL-Address-to-Update-List-Item ProtocolIE-ID ::= 305 +id-NRV2XServicesAuthorized ProtocolIE-ID ::= 306 +id-LTEV2XServicesAuthorized ProtocolIE-ID ::= 307 +id-NRUESidelinkAggregateMaximumBitrate ProtocolIE-ID ::= 308 +id-LTEUESidelinkAggregateMaximumBitrate ProtocolIE-ID ::= 309 +id-SIB12-message ProtocolIE-ID ::= 310 +id-SIB13-message ProtocolIE-ID ::= 311 +id-SIB14-message ProtocolIE-ID ::= 312 +id-SLDRBs-FailedToBeModified-Item ProtocolIE-ID ::= 313 +id-SLDRBs-FailedToBeModified-List ProtocolIE-ID ::= 314 +id-SLDRBs-FailedToBeSetup-Item ProtocolIE-ID ::= 315 +id-SLDRBs-FailedToBeSetup-List ProtocolIE-ID ::= 316 +id-SLDRBs-Modified-Item ProtocolIE-ID ::= 317 +id-SLDRBs-Modified-List ProtocolIE-ID ::= 318 +id-SLDRBs-Required-ToBeModified-Item ProtocolIE-ID ::= 319 +id-SLDRBs-Required-ToBeModified-List ProtocolIE-ID ::= 320 +id-SLDRBs-Required-ToBeReleased-Item ProtocolIE-ID ::= 321 +id-SLDRBs-Required-ToBeReleased-List ProtocolIE-ID ::= 322 +id-SLDRBs-Setup-Item ProtocolIE-ID ::= 323 +id-SLDRBs-Setup-List ProtocolIE-ID ::= 324 +id-SLDRBs-ToBeModified-Item ProtocolIE-ID ::= 325 +id-SLDRBs-ToBeModified-List ProtocolIE-ID ::= 326 +id-SLDRBs-ToBeReleased-Item ProtocolIE-ID ::= 327 +id-SLDRBs-ToBeReleased-List ProtocolIE-ID ::= 328 +id-SLDRBs-ToBeSetup-Item ProtocolIE-ID ::= 329 +id-SLDRBs-ToBeSetup-List ProtocolIE-ID ::= 330 +id-SLDRBs-ToBeSetupMod-Item ProtocolIE-ID ::= 331 +id-SLDRBs-ToBeSetupMod-List ProtocolIE-ID ::= 332 +id-SLDRBs-SetupMod-List ProtocolIE-ID ::= 333 +id-SLDRBs-FailedToBeSetupMod-List ProtocolIE-ID ::= 334 +id-SLDRBs-SetupMod-Item ProtocolIE-ID ::= 335 +id-SLDRBs-FailedToBeSetupMod-Item ProtocolIE-ID ::= 336 +id-SLDRBs-ModifiedConf-List ProtocolIE-ID ::= 337 +id-SLDRBs-ModifiedConf-Item ProtocolIE-ID ::= 338 +id-UEAssistanceInformationEUTRA ProtocolIE-ID ::= 339 +id-PC5LinkAMBR ProtocolIE-ID ::= 340 +id-SL-PHY-MAC-RLC-Config ProtocolIE-ID ::= 341 +id-SL-ConfigDedicatedEUTRA-Info ProtocolIE-ID ::= 342 +id-AlternativeQoSParaSetList ProtocolIE-ID ::= 343 +id-CurrentQoSParaSetIndex ProtocolIE-ID ::= 344 +id-gNBCUMeasurementID ProtocolIE-ID ::= 345 +id-gNBDUMeasurementID ProtocolIE-ID ::= 346 +id-RegistrationRequest ProtocolIE-ID ::= 347 +id-ReportCharacteristics ProtocolIE-ID ::= 348 +id-CellToReportList ProtocolIE-ID ::= 349 +id-CellMeasurementResultList ProtocolIE-ID ::= 350 +id-HardwareLoadIndicator ProtocolIE-ID ::= 351 +id-ReportingPeriodicity ProtocolIE-ID ::= 352 +id-TNLCapacityIndicator ProtocolIE-ID ::= 353 +id-CarrierList ProtocolIE-ID ::= 354 +id-ULCarrierList ProtocolIE-ID ::= 355 +id-FrequencyShift7p5khz ProtocolIE-ID ::= 356 +id-SSB-PositionsInBurst ProtocolIE-ID ::= 357 +id-NRPRACHConfig ProtocolIE-ID ::= 358 +id-RACHReportInformationList ProtocolIE-ID ::= 359 +id-RLFReportInformationList ProtocolIE-ID ::= 360 +id-TDD-UL-DLConfigCommonNR ProtocolIE-ID ::= 361 +id-CNPacketDelayBudgetDownlink ProtocolIE-ID ::= 362 +id-ExtendedPacketDelayBudget ProtocolIE-ID ::= 363 +id-TSCTrafficCharacteristics ProtocolIE-ID ::= 364 +id-ReportingRequestType ProtocolIE-ID ::= 365 +id-TimeReferenceInformation ProtocolIE-ID ::= 366 +id-CNPacketDelayBudgetUplink ProtocolIE-ID ::= 369 +id-AdditionalPDCPDuplicationTNL-List ProtocolIE-ID ::= 370 +id-RLCDuplicationInformation ProtocolIE-ID ::= 371 +id-AdditionalDuplicationIndication ProtocolIE-ID ::= 372 +id-ConditionalInterDUMobilityInformation ProtocolIE-ID ::= 373 +id-ConditionalIntraDUMobilityInformation ProtocolIE-ID ::= 374 +id-targetCellsToCancel ProtocolIE-ID ::= 375 +id-requestedTargetCellGlobalID ProtocolIE-ID ::= 376 +id-ManagementBasedMDTPLMNList ProtocolIE-ID ::= 377 +id-TraceCollectionEntityIPAddress ProtocolIE-ID ::= 378 +id-PrivacyIndicator ProtocolIE-ID ::= 379 +id-TraceCollectionEntityURI ProtocolIE-ID ::= 380 +id-mdtConfiguration ProtocolIE-ID ::= 381 +id-ServingNID ProtocolIE-ID ::= 382 +id-NPNBroadcastInformation ProtocolIE-ID ::= 383 +id-NPNSupportInfo ProtocolIE-ID ::= 384 +id-NID ProtocolIE-ID ::= 385 +id-AvailableSNPN-ID-List ProtocolIE-ID ::= 386 +id-SIB10-message ProtocolIE-ID ::= 387 +id-DLCarrierList ProtocolIE-ID ::= 389 + id-ExtendedTAISliceSupportList ProtocolIE-ID ::= 390 +id-RequestedSRSTransmissionCharacteristics ProtocolIE-ID ::= 391 +id-PosAssistance-Information ProtocolIE-ID ::= 392 +id-PosBroadcast ProtocolIE-ID ::= 393 +id-RoutingID ProtocolIE-ID ::= 394 +id-PosAssistanceInformationFailureList ProtocolIE-ID ::= 395 +id-PosMeasurementQuantities ProtocolIE-ID ::= 396 +id-PosMeasurementResultList ProtocolIE-ID ::= 397 +id-TRPInformationTypeListTRPReq ProtocolIE-ID ::= 398 +id-TRPInformationTypeItem ProtocolIE-ID ::= 399 +id-TRPInformationListTRPResp ProtocolIE-ID ::= 400 +id-TRPInformationItem ProtocolIE-ID ::= 401 +id-LMF-MeasurementID ProtocolIE-ID ::= 402 +id-SRSType ProtocolIE-ID ::= 403 +id-ActivationTime ProtocolIE-ID ::= 404 +id-AbortTransmission ProtocolIE-ID ::= 405 +id-PositioningBroadcastCells ProtocolIE-ID ::= 406 +id-SRSConfiguration ProtocolIE-ID ::= 407 +id-PosReportCharacteristics ProtocolIE-ID ::= 408 +id-PosMeasurementPeriodicity ProtocolIE-ID ::= 409 +id-TRPList ProtocolIE-ID ::= 410 +id-RAN-MeasurementID ProtocolIE-ID ::= 411 +id-LMF-UE-MeasurementID ProtocolIE-ID ::= 412 +id-RAN-UE-MeasurementID ProtocolIE-ID ::= 413 +id-E-CID-MeasurementQuantities ProtocolIE-ID ::= 414 +id-E-CID-MeasurementQuantities-Item ProtocolIE-ID ::= 415 +id-E-CID-MeasurementPeriodicity ProtocolIE-ID ::= 416 +id-E-CID-MeasurementResult ProtocolIE-ID ::= 417 +id-Cell-Portion-ID ProtocolIE-ID ::= 418 +id-SFNInitialisationTime ProtocolIE-ID ::= 419 +id-SystemFrameNumber ProtocolIE-ID ::= 420 +id-SlotNumber ProtocolIE-ID ::= 421 +id-TRP-MeasurementRequestList ProtocolIE-ID ::= 422 +id-MeasurementBeamInfoRequest ProtocolIE-ID ::= 423 +id-E-CID-ReportCharacteristics ProtocolIE-ID ::= 424 +id-ConfiguredTACIndication ProtocolIE-ID ::= 425 +id-Extended-GNB-CU-Name ProtocolIE-ID ::= 426 +id-Extended-GNB-DU-Name ProtocolIE-ID ::= 427 +id-F1CTransferPath ProtocolIE-ID ::= 428 +id-SFN-Offset ProtocolIE-ID ::= 429 +id-TransmissionStopIndicator ProtocolIE-ID ::= 430 +id-SrsFrequency ProtocolIE-ID ::= 431 +id-SCGIndicator ProtocolIE-ID ::= 432 +id-EstimatedArrivalProbability ProtocolIE-ID ::= 433 +id-TRPType ProtocolIE-ID ::= 434 +id-SRSSpatialRelationPerSRSResource ProtocolIE-ID ::= 435 +id-PDCPTerminatingNodeDLTNLAddrInfo ProtocolIE-ID ::= 436 +id-ENBDLTNLAddress ProtocolIE-ID ::= 437 +id-PosMeasurementPeriodicityExtended ProtocolIE-ID ::= 438 +id-PRS-Resource-ID ProtocolIE-ID ::= 439 +id-LocationMeasurementInformation ProtocolIE-ID ::= 440 +id-InterFrequencyConfig-NoGap ProtocolIE-ID ::= 651 +id-L571Info ProtocolIE-ID ::= 659 +id-L1151Info ProtocolIE-ID ::= 660 +id-NeedForGapsInfoNR ProtocolIE-ID ::= 665 +id-PosMeasurementPeriodicityNR-AoA ProtocolIE-ID ::= 672 +id-ConfigRestrictInfoDAPS ProtocolIE-ID ::= 678 +id-PosSItypeList ProtocolIE-ID ::= 682 +id-DAPS-HO-Status ProtocolIE-ID ::= 683 +id-UplinkTxDirectCurrentTwoCarrierListInfo ProtocolIE-ID ::= 684 +id-ServCellInfoList ProtocolIE-ID ::= 707 +id-Transmission-Bandwidth-asymmetric ProtocolIE-ID ::= 852 + + + +END +-- ASN1STOP +-- ASN1START +-- ************************************************************** +-- +-- Container definitions +-- +-- ************************************************************** + +F1AP-Containers { +itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) +ngran-access (22) modules (3) f1ap (3) version1 (1) f1ap-Containers (5) } + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +-- ************************************************************** +-- +-- IE parameter types from other modules. +-- +-- ************************************************************** + +IMPORTS + Criticality, + Presence, + PrivateIE-ID, + ProtocolExtensionID, + ProtocolIE-ID + +FROM F1AP-CommonDataTypes + maxPrivateIEs, + maxProtocolExtensions, + maxProtocolIEs + +FROM F1AP-Constants; + +-- ************************************************************** +-- +-- Class Definition for Protocol IEs +-- +-- ************************************************************** + +F1AP-PROTOCOL-IES ::= CLASS { + &id ProtocolIE-ID UNIQUE, + &criticality Criticality, + &Value, + &presence Presence +} +WITH SYNTAX { + ID &id + CRITICALITY &criticality + TYPE &Value + PRESENCE &presence +} + +-- ************************************************************** +-- +-- Class Definition for Protocol IEs +-- +-- ************************************************************** + +F1AP-PROTOCOL-IES-PAIR ::= CLASS { + &id ProtocolIE-ID UNIQUE, + &firstCriticality Criticality, + &FirstValue, + &secondCriticality Criticality, + &SecondValue, + &presence Presence +} +WITH SYNTAX { + ID &id + FIRST CRITICALITY &firstCriticality + FIRST TYPE &FirstValue + SECOND CRITICALITY &secondCriticality + SECOND TYPE &SecondValue + PRESENCE &presence +} + +-- ************************************************************** +-- +-- Class Definition for Protocol Extensions +-- +-- ************************************************************** + +F1AP-PROTOCOL-EXTENSION ::= CLASS { + &id ProtocolExtensionID UNIQUE, + &criticality Criticality, + &Extension, + &presence Presence +} +WITH SYNTAX { + ID &id + CRITICALITY &criticality + EXTENSION &Extension + PRESENCE &presence +} + +-- ************************************************************** +-- +-- Class Definition for Private IEs +-- +-- ************************************************************** + +F1AP-PRIVATE-IES ::= CLASS { + &id PrivateIE-ID, + &criticality Criticality, + &Value, + &presence Presence +} +WITH SYNTAX { + ID &id + CRITICALITY &criticality + TYPE &Value + PRESENCE &presence +} + +-- ************************************************************** +-- +-- Container for Protocol IEs +-- +-- ************************************************************** + +ProtocolIE-Container {F1AP-PROTOCOL-IES : IEsSetParam} ::= + SEQUENCE (SIZE (0..maxProtocolIEs)) OF + ProtocolIE-Field {{IEsSetParam}} + +ProtocolIE-SingleContainer {F1AP-PROTOCOL-IES : IEsSetParam} ::= + ProtocolIE-Field {{IEsSetParam}} + +ProtocolIE-Field {F1AP-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE { + id F1AP-PROTOCOL-IES.&id ({IEsSetParam}), + criticality F1AP-PROTOCOL-IES.&criticality ({IEsSetParam}{@id}), + value F1AP-PROTOCOL-IES.&Value ({IEsSetParam}{@id}) +} + +-- ************************************************************** +-- +-- Container for Protocol IE Pairs +-- +-- ************************************************************** + +ProtocolIE-ContainerPair {F1AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= + SEQUENCE (SIZE (0..maxProtocolIEs)) OF + ProtocolIE-FieldPair {{IEsSetParam}} + +ProtocolIE-FieldPair {F1AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= SEQUENCE { + id F1AP-PROTOCOL-IES-PAIR.&id ({IEsSetParam}), + firstCriticality F1AP-PROTOCOL-IES-PAIR.&firstCriticality ({IEsSetParam}{@id}), + firstValue F1AP-PROTOCOL-IES-PAIR.&FirstValue ({IEsSetParam}{@id}), + secondCriticality F1AP-PROTOCOL-IES-PAIR.&secondCriticality ({IEsSetParam}{@id}), + secondValue F1AP-PROTOCOL-IES-PAIR.&SecondValue ({IEsSetParam}{@id}) +} + +-- ************************************************************** +-- +-- Container for Protocol Extensions +-- +-- ************************************************************** + +ProtocolExtensionContainer {F1AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= + SEQUENCE (SIZE (1..maxProtocolExtensions)) OF + ProtocolExtensionField {{ExtensionSetParam}} + +ProtocolExtensionField {F1AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= SEQUENCE { + id F1AP-PROTOCOL-EXTENSION.&id ({ExtensionSetParam}), + criticality F1AP-PROTOCOL-EXTENSION.&criticality ({ExtensionSetParam}{@id}), + extensionValue F1AP-PROTOCOL-EXTENSION.&Extension ({ExtensionSetParam}{@id}) +} + +-- ************************************************************** +-- +-- Container for Private IEs +-- +-- ************************************************************** + +PrivateIE-Container {F1AP-PRIVATE-IES : IEsSetParam } ::= + SEQUENCE (SIZE (1.. maxPrivateIEs)) OF + PrivateIE-Field {{IEsSetParam}} + +PrivateIE-Field {F1AP-PRIVATE-IES : IEsSetParam} ::= SEQUENCE { + id F1AP-PRIVATE-IES.&id ({IEsSetParam}), + criticality F1AP-PRIVATE-IES.&criticality ({IEsSetParam}{@id}), + value F1AP-PRIVATE-IES.&Value ({IEsSetParam}{@id}) +} + +END +-- ASN1STOP diff --git a/openair2/F1AP/MESSAGES/ASN1/f1ap-16.21.0.cmake b/openair2/F1AP/MESSAGES/ASN1/f1ap-16.21.0.cmake new file mode 100644 index 0000000000..a066f7446b --- /dev/null +++ b/openair2/F1AP/MESSAGES/ASN1/f1ap-16.21.0.cmake @@ -0,0 +1,2124 @@ +set(F1AP_GRAMMAR ASN1/R16.21.0/f1ap-16.21.0.asn) + +set(f1ap_source + ANY_aper.c + ANY.c + ANY_uper.c + ANY_xer.c + aper_decoder.c + aper_encoder.c + aper_opentype.c + aper_support.c + asn_application.c + asn_bit_data.c + asn_codecs_prim.c + asn_codecs_prim_xer.c + asn_internal.c + asn_random_fill.c + asn_SEQUENCE_OF.c + asn_SET_OF.c + ber_tlv_length.c + ber_tlv_tag.c + BIT_STRING.c + BIT_STRING_print.c + BIT_STRING_rfill.c + BIT_STRING_uper.c + BIT_STRING_xer.c + BOOLEAN_aper.c + BOOLEAN.c + BOOLEAN_print.c + BOOLEAN_rfill.c + BOOLEAN_uper.c + BOOLEAN_xer.c + constraints.c + constr_CHOICE_aper.c + constr_CHOICE.c + constr_CHOICE_print.c + constr_CHOICE_rfill.c + constr_CHOICE_uper.c + constr_CHOICE_xer.c + constr_SEQUENCE_aper.c + constr_SEQUENCE.c + constr_SEQUENCE_OF_aper.c + constr_SEQUENCE_OF.c + constr_SEQUENCE_OF_uper.c + constr_SEQUENCE_OF_xer.c + constr_SEQUENCE_print.c + constr_SEQUENCE_rfill.c + constr_SEQUENCE_uper.c + constr_SEQUENCE_xer.c + constr_SET_OF_aper.c + constr_SET_OF.c + constr_SET_OF_print.c + constr_SET_OF_rfill.c + constr_SET_OF_uper.c + constr_SET_OF_xer.c + constr_TYPE.c + ENUMERATED_aper.c + ENUMERATED.c + ENUMERATED_uper.c + F1AP_AbortTransmission.c + F1AP_AccessAndMobilityIndication.c + F1AP_AccessPointPosition.c + F1AP_AccessSuccess.c + F1AP_Activated-Cells-to-be-Updated-List.c + F1AP_Activated-Cells-to-be-Updated-List-Item.c + F1AP_ActiveULBWP.c + F1AP_AdditionalDuplicationIndication.c + F1AP_AdditionalPath-Item.c + F1AP_AdditionalPath-List.c + F1AP_AdditionalPDCPDuplicationTNL-Item.c + F1AP_AdditionalPDCPDuplicationTNL-List.c + F1AP_AdditionalRRMPriorityIndex.c + F1AP_AdditionalSIBMessageList.c + F1AP_AdditionalSIBMessageList-Item.c + F1AP_AggressorCellList.c + F1AP_AggressorCellList-Item.c + F1AP_AggressorgNBSetID.c + F1AP_AllocationAndRetentionPriority.c + F1AP_AlternativeQoSParaSetItem.c + F1AP_AlternativeQoSParaSetList.c + F1AP_AngleMeasurementQuality.c + F1AP_AperiodicSRS.c + F1AP_AperiodicSRSResourceTrigger.c + F1AP_AperiodicSRSResourceTriggerList.c + F1AP_AreaScope.c + F1AP_Associated-SCell-Item.c + F1AP_Associated-SCell-List.c + F1AP_AvailablePLMNList.c + F1AP_AvailablePLMNList-Item.c + F1AP_AvailableSNPN-ID-List.c + F1AP_AvailableSNPN-ID-List-Item.c + F1AP_AveragingWindow.c + F1AP_BandwidthSRS.c + F1AP_BAPAddress.c + F1AP_BAPCtrlPDUChannel.c + F1AP_BAPlayerBHRLCchannelMappingInfo.c + F1AP_BAPlayerBHRLCchannelMappingInfo-Item.c + F1AP_BAPlayerBHRLCchannelMappingInfoList.c + F1AP_BAPMappingConfigurationAcknowledge.c + F1AP_BAPMappingConfiguration.c + F1AP_BAPMappingConfigurationFailure.c + F1AP_BAPPathID.c + F1AP_BAPRoutingID.c + F1AP_BearerTypeChange.c + F1AP_BHChannels-FailedToBeModified-Item.c + F1AP_BHChannels-FailedToBeModified-List.c + F1AP_BHChannels-FailedToBeSetup-Item.c + F1AP_BHChannels-FailedToBeSetup-List.c + F1AP_BHChannels-FailedToBeSetupMod-Item.c + F1AP_BHChannels-FailedToBeSetupMod-List.c + F1AP_BHChannels-Modified-Item.c + F1AP_BHChannels-Modified-List.c + F1AP_BHChannels-Required-ToBeReleased-Item.c + F1AP_BHChannels-Required-ToBeReleased-List.c + F1AP_BHChannels-Setup-Item.c + F1AP_BHChannels-Setup-List.c + F1AP_BHChannels-SetupMod-Item.c + F1AP_BHChannels-SetupMod-List.c + F1AP_BHChannels-ToBeModified-Item.c + F1AP_BHChannels-ToBeModified-List.c + F1AP_BHChannels-ToBeReleased-Item.c + F1AP_BHChannels-ToBeReleased-List.c + F1AP_BHChannels-ToBeSetup-Item.c + F1AP_BHChannels-ToBeSetup-List.c + F1AP_BHChannels-ToBeSetupMod-Item.c + F1AP_BHChannels-ToBeSetupMod-List.c + F1AP_BHInfo.c + F1AP_BHQoSInformation.c + F1AP_BHRLCChannelID.c + F1AP_BH-Routing-Information-Added-List.c + F1AP_BH-Routing-Information-Added-List-Item.c + F1AP_BH-Routing-Information-Removed-List.c + F1AP_BH-Routing-Information-Removed-List-Item.c + F1AP_BitRate.c + F1AP_BPLMN-ID-Info-Item.c + F1AP_BPLMN-ID-Info-List.c + F1AP_BroadcastCAGList.c + F1AP_BroadcastNIDList.c + F1AP_BroadcastPNI-NPN-ID-List.c + F1AP_BroadcastPNI-NPN-ID-List-Item.c + F1AP_BroadcastSNPN-ID-List.c + F1AP_BroadcastSNPN-ID-List-Item.c + F1AP_Broadcast-To-Be-Cancelled-Item.c + F1AP_Broadcast-To-Be-Cancelled-List.c + F1AP_BurstArrivalTime.c + F1AP_CAGID.c + F1AP_Cancel-all-Warning-Messages-Indicator.c + F1AP_Candidate-SpCell-Item.c + F1AP_Candidate-SpCell-List.c + F1AP_CapacityValue.c + F1AP_Cause.c + F1AP_CauseMisc.c + F1AP_CauseProtocol.c + F1AP_CauseRadioNetwork.c + F1AP_CauseTransport.c + F1AP_CellBarred.c + F1AP_CellCapacityClassValue.c + F1AP_Cell-Direction.c + F1AP_CellGroupConfig.c + F1AP_CellMeasurementResultItem.c + F1AP_CellMeasurementResultList.c + F1AP_Cell-Portion-ID.c + F1AP_Cells-Broadcast-Cancelled-Item.c + F1AP_Cells-Broadcast-Cancelled-List.c + F1AP_Cells-Broadcast-Completed-Item.c + F1AP_Cells-Broadcast-Completed-List.c + F1AP_Cells-Failed-to-be-Activated-List.c + F1AP_Cells-Failed-to-be-Activated-List-Item.c + F1AP_CellSize.c + F1AP_Cells-Status-Item.c + F1AP_Cells-Status-List.c + F1AP_Cells-to-be-Activated-List.c + F1AP_Cells-to-be-Activated-List-Item.c + F1AP_Cells-to-be-Barred-Item.c + F1AP_Cells-to-be-Barred-List.c + F1AP_Cells-To-Be-Broadcast-Item.c + F1AP_Cells-To-Be-Broadcast-List.c + F1AP_Cells-to-be-Deactivated-List.c + F1AP_Cells-to-be-Deactivated-List-Item.c + F1AP_CellToReportItem.c + F1AP_CellToReportList.c + F1AP_CellTrafficTrace.c + F1AP_CellType.c + F1AP_CellULConfigured.c + F1AP_CG-Config.c + F1AP_CG-ConfigInfo.c + F1AP_Child-Node-Cells-List.c + F1AP_Child-Node-Cells-List-Item.c + F1AP_Child-Nodes-List.c + F1AP_Child-Nodes-List-Item.c + F1AP_CHO-Probability.c + F1AP_CHOtrigger-InterDU.c + F1AP_CHOtrigger-IntraDU.c + F1AP_CNUEPagingIdentity.c + F1AP_CompositeAvailableCapacity.c + F1AP_CompositeAvailableCapacityGroup.c + F1AP_ConditionalInterDUMobilityInformation.c + F1AP_ConditionalIntraDUMobilityInformation.c + F1AP_ConfigRestrictInfoDAPS.c + F1AP_Configured-EPS-TAC.c + F1AP_ConfiguredTACIndication.c + F1AP_CoordinateID.c + F1AP_CPTrafficType.c + F1AP_CP-TransportLayerAddress.c + F1AP_Criticality.c + F1AP_CriticalityDiagnostics.c + F1AP_CriticalityDiagnostics-IE-Item.c + F1AP_CriticalityDiagnostics-IE-List.c + F1AP_C-RNTI.c + F1AP_CUDURadioInformationTransfer.c + F1AP_CUDURadioInformationType.c + F1AP_CUDURIMInformation.c + F1AP_CUtoDURRCInformation.c + F1AP_DAPS-HO-Status.c + F1AP_DCBasedDuplicationConfigured.c + F1AP_DeactivateTrace.c + F1AP_Dedicated-SIDelivery-NeededUE-Item.c + F1AP_Dedicated-SIDelivery-NeededUE-List.c + F1AP_DL-PRS.c + F1AP_DL-PRSMutingPattern.c + F1AP_DLPRSResourceARP.c + F1AP_DL-PRSResourceARPLocation.c + F1AP_DLPRSResourceCoordinates.c + F1AP_DLPRSResourceSetARP.c + F1AP_DL-PRSResourceSetARPLocation.c + F1AP_DLRRCMessageTransfer.c + F1AP_DL-UP-TNL-Address-to-Update-List.c + F1AP_DL-UP-TNL-Address-to-Update-List-Item.c + F1AP_DLUPTNLInformation-ToBeSetup-Item.c + F1AP_DLUPTNLInformation-ToBeSetup-List.c + F1AP_DRB-Activity.c + F1AP_DRB-Activity-Item.c + F1AP_DRB-Activity-List.c + F1AP_DRBID.c + F1AP_DRB-Information.c + F1AP_DRB-Notify-Item.c + F1AP_DRB-Notify-List.c + F1AP_DRBs-FailedToBeModified-Item.c + F1AP_DRBs-FailedToBeModified-List.c + F1AP_DRBs-FailedToBeSetup-Item.c + F1AP_DRBs-FailedToBeSetup-List.c + F1AP_DRBs-FailedToBeSetupMod-Item.c + F1AP_DRBs-FailedToBeSetupMod-List.c + F1AP_DRBs-ModifiedConf-Item.c + F1AP_DRBs-ModifiedConf-List.c + F1AP_DRBs-Modified-Item.c + F1AP_DRBs-Modified-List.c + F1AP_DRBs-Required-ToBeModified-Item.c + F1AP_DRBs-Required-ToBeModified-List.c + F1AP_DRBs-Required-ToBeReleased-Item.c + F1AP_DRBs-Required-ToBeReleased-List.c + F1AP_DRBs-Setup-Item.c + F1AP_DRBs-Setup-List.c + F1AP_DRBs-SetupMod-Item.c + F1AP_DRBs-SetupMod-List.c + F1AP_DRBs-ToBeModified-Item.c + F1AP_DRBs-ToBeModified-List.c + F1AP_DRBs-ToBeReleased-Item.c + F1AP_DRBs-ToBeReleased-List.c + F1AP_DRBs-ToBeSetup-Item.c + F1AP_DRBs-ToBeSetup-List.c + F1AP_DRBs-ToBeSetupMod-Item.c + F1AP_DRBs-ToBeSetupMod-List.c + F1AP_DRX-Config.c + F1AP_DRXConfigurationIndicator.c + F1AP_DRXCycle.c + F1AP_DRX-LongCycleStartOffset.c + F1AP_DSCP.c + F1AP_DSInformationList.c + F1AP_DUCURadioInformationTransfer.c + F1AP_DUCURadioInformationType.c + F1AP_DUCURIMInformation.c + F1AP_DUF-Slot-Config-Item.c + F1AP_DUF-Slot-Config-List.c + F1AP_DUFSlotformatIndex.c + F1AP_DUFTransmissionPeriodicity.c + F1AP_DuplicationActivation.c + F1AP_DuplicationIndication.c + F1AP_DuplicationState.c + F1AP_DU-RX-MT-RX.c + F1AP_DU-RX-MT-TX.c + F1AP_DUtoCURRCContainer.c + F1AP_DUtoCURRCInformation.c + F1AP_DU-TX-MT-RX.c + F1AP_DU-TX-MT-TX.c + F1AP_Dynamic5QIDescriptor.c + F1AP_DynamicPQIDescriptor.c + F1AP_E-CID-MeasuredResults-Item.c + F1AP_E-CID-MeasuredResults-List.c + F1AP_E-CID-MeasuredResults-Value.c + F1AP_E-CIDMeasurementFailureIndication.c + F1AP_E-CIDMeasurementInitiationFailure.c + F1AP_E-CIDMeasurementInitiationRequest.c + F1AP_E-CIDMeasurementInitiationResponse.c + F1AP_E-CID-MeasurementQuantities.c + F1AP_E-CID-MeasurementQuantities-Item.c + F1AP_E-CID-MeasurementQuantitiesValue.c + F1AP_E-CIDMeasurementReport.c + F1AP_E-CID-MeasurementResult.c + F1AP_E-CIDMeasurementTerminationCommand.c + F1AP_E-CID-ReportCharacteristics.c + F1AP_EgressBHRLCCHItem.c + F1AP_EgressBHRLCCHList.c + F1AP_Endpoint-IP-address-and-port.c + F1AP_ErrorIndication.c + F1AP_EUTRA-Cell-ID.c + F1AP_EUTRACells-List.c + F1AP_EUTRACells-List-item.c + F1AP_EUTRA-Coex-FDD-Info.c + F1AP_EUTRA-Coex-Mode-Info.c + F1AP_EUTRA-Coex-TDD-Info.c + F1AP_EUTRA-CyclicPrefixDL.c + F1AP_EUTRA-CyclicPrefixUL.c + F1AP_EUTRA-FDD-Info.c + F1AP_EUTRA-Mode-Info.c + F1AP_EUTRANQoS.c + F1AP_EUTRA-NR-CellResourceCoordinationReqAck-Container.c + F1AP_EUTRA-NR-CellResourceCoordinationReq-Container.c + F1AP_EUTRA-PRACH-Configuration.c + F1AP_EUTRA-SpecialSubframe-Info.c + F1AP_EUTRA-SpecialSubframePatterns.c + F1AP_EUTRA-SubframeAssignment.c + F1AP_EUTRA-TDD-Info.c + F1AP_EUTRA-Transmission-Bandwidth.c + F1AP_EventType.c + F1AP_ExecuteDuplication.c + F1AP_ExplicitFormat.c + F1AP_ExtendedAvailablePLMN-Item.c + F1AP_ExtendedAvailablePLMN-List.c + F1AP_ExtendedEARFCN.c + F1AP_Extended-GNB-CU-Name.c + F1AP_Extended-GNB-DU-Name.c + F1AP_ExtendedPacketDelayBudget.c + F1AP_ExtendedServedPLMNs-Item.c + F1AP_ExtendedServedPLMNs-List.c + F1AP_ExtendedSliceSupportList.c + F1AP_EXTERNAL.c + F1AP_F1AP-PDU.c + F1AP_F1CPathNSA.c + F1AP_F1CTransferPath.c + F1AP_F1RemovalFailure.c + F1AP_F1RemovalRequest.c + F1AP_F1RemovalResponse.c + F1AP_F1SetupFailure.c + F1AP_F1SetupRequest.c + F1AP_F1SetupResponse.c + F1AP_FDD-Info.c + F1AP_FiveGS-TAC.c + F1AP_Flows-Mapped-To-DRB-Item.c + F1AP_Flows-Mapped-To-DRB-List.c + F1AP_FlowsMappedToSLDRB-Item.c + F1AP_FlowsMappedToSLDRB-List.c + F1AP_FR1-Bandwidth.c + F1AP_FR2-Bandwidth.c + F1AP_FreqBandNrItem.c + F1AP_FreqDomainLength.c + F1AP_FrequencyShift7p5khz.c + F1AP_FullConfiguration.c + F1AP_GBR-QoSFlowInformation.c + F1AP_GBR-QosInformation.c + F1AP_GeographicalCoordinates.c + F1AP_GNBCUConfigurationUpdateAcknowledge.c + F1AP_GNBCUConfigurationUpdate.c + F1AP_GNBCUConfigurationUpdateFailure.c + F1AP_GNBCUMeasurementID.c + F1AP_GNB-CU-Name.c + F1AP_GNB-CU-NameUTF8String.c + F1AP_GNB-CU-NameVisibleString.c + F1AP_GNB-CUSystemInformation.c + F1AP_GNB-CU-TNL-Association-Failed-To-Setup-Item.c + F1AP_GNB-CU-TNL-Association-Failed-To-Setup-List.c + F1AP_GNB-CU-TNL-Association-Setup-Item.c + F1AP_GNB-CU-TNL-Association-Setup-List.c + F1AP_GNB-CU-TNL-Association-To-Add-Item.c + F1AP_GNB-CU-TNL-Association-To-Add-List.c + F1AP_GNB-CU-TNL-Association-To-Remove-Item.c + F1AP_GNB-CU-TNL-Association-To-Remove-List.c + F1AP_GNB-CU-TNL-Association-To-Update-Item.c + F1AP_GNB-CU-TNL-Association-To-Update-List.c + F1AP_GNB-CU-UE-F1AP-ID.c + F1AP_GNB-DU-Cell-Resource-Configuration.c + F1AP_GNB-DUConfigurationQuery.c + F1AP_GNBDUConfigurationUpdateAcknowledge.c + F1AP_GNBDUConfigurationUpdate.c + F1AP_GNBDUConfigurationUpdateFailure.c + F1AP_GNB-DU-ID.c + F1AP_GNBDUMeasurementID.c + F1AP_GNB-DU-Name.c + F1AP_GNB-DU-NameUTF8String.c + F1AP_GNB-DU-NameVisibleString.c + F1AP_GNBDUOverloadInformation.c + F1AP_GNBDUResourceConfigurationAcknowledge.c + F1AP_GNBDUResourceConfiguration.c + F1AP_GNBDUResourceConfigurationFailure.c + F1AP_GNBDUResourceCoordinationRequest.c + F1AP_GNBDUResourceCoordinationResponse.c + F1AP_GNB-DU-Served-Cells-Item.c + F1AP_GNB-DU-Served-Cells-List.c + F1AP_GNBDUStatusIndication.c + F1AP_GNB-DU-System-Information.c + F1AP_GNB-DU-TNL-Association-To-Remove-Item.c + F1AP_GNB-DU-TNL-Association-To-Remove-List.c + F1AP_GNB-DU-UE-F1AP-ID.c + F1AP_GNB-RxTxTimeDiff.c + F1AP_GNBRxTxTimeDiffMeas.c + F1AP_GNBSetID.c + F1AP_GTP-TEID.c + F1AP_GTPTLA-Item.c + F1AP_GTPTLAs.c + F1AP_GTPTunnel.c + F1AP_HandoverPreparationInformation.c + F1AP_HardwareLoadIndicator.c + F1AP_HSNADownlink.c + F1AP_HSNAFlexible.c + F1AP_HSNASlotConfigItem.c + F1AP_HSNASlotConfigList.c + F1AP_HSNATransmissionPeriodicity.c + F1AP_HSNAUplink.c + F1AP_IAB-Allocated-TNL-Address-Item.c + F1AP_IAB-Allocated-TNL-Address-List.c + F1AP_IAB-Barred.c + F1AP_IAB-DU-Cell-Resource-Configuration-FDD-Info.c + F1AP_IAB-DU-Cell-Resource-Configuration-Mode-Info.c + F1AP_IAB-DU-Cell-Resource-Configuration-TDD-Info.c + F1AP_IAB-Info-IAB-donor-CU.c + F1AP_IAB-Info-IAB-DU.c + F1AP_IABIPv6RequestType.c + F1AP_IAB-MT-Cell-List.c + F1AP_IAB-MT-Cell-List-Item.c + F1AP_IAB-STC-Info.c + F1AP_IAB-STC-Info-Item.c + F1AP_IAB-STC-Info-List.c + F1AP_IABTNLAddress.c + F1AP_IABTNLAddressesRequested.c + F1AP_IAB-TNL-Addresses-To-Remove-Item.c + F1AP_IAB-TNL-Addresses-To-Remove-List.c + F1AP_IABTNLAddressFailure.c + F1AP_IABTNLAddressRequest.c + F1AP_IABTNLAddressResponse.c + F1AP_IABTNLAddressUsage.c + F1AP_IABUPConfigurationUpdateFailure.c + F1AP_IABUPConfigurationUpdateRequest.c + F1AP_IABUPConfigurationUpdateResponse.c + F1AP_IABv4AddressesRequested.c + F1AP_IgnorePRACHConfiguration.c + F1AP_IgnoreResourceCoordinationContainer.c + F1AP_ImplicitFormat.c + F1AP_InactivityMonitoringRequest.c + F1AP_InactivityMonitoringResponse.c + F1AP_InitialULRRCMessageTransfer.c + F1AP_InitiatingMessage.c + F1AP_IntendedTDD-DL-ULConfig.c + F1AP_InterfacesToTrace.c + F1AP_InterFrequencyConfig-NoGap.c + F1AP_IPHeaderInformation.c + F1AP_IPtolayer2TrafficMappingInfo.c + F1AP_IPtolayer2TrafficMappingInfo-Item.c + F1AP_IPtolayer2TrafficMappingInfoList.c + F1AP_L1151Info.c + F1AP_L139Info.c + F1AP_L571Info.c + F1AP_L839Info.c + F1AP_LCID.c + F1AP_LCS-to-GCS-TranslationAoA.c + F1AP_LCStoGCSTranslation.c + F1AP_LCStoGCSTranslationList.c + F1AP_LMF-MeasurementID.c + F1AP_LMF-UE-MeasurementID.c + F1AP_LocationMeasurementInformation.c + F1AP_LocationUncertainty.c + F1AP_LongDRXCycleLength.c + F1AP_LowerLayerPresenceStatusChange.c + F1AP_LTEUESidelinkAggregateMaximumBitrate.c + F1AP_LTEV2XServicesAuthorized.c + F1AP_M2Configuration.c + F1AP_M5Configuration.c + F1AP_M5-Links-to-log.c + F1AP_M5period.c + F1AP_M6Configuration.c + F1AP_M6-Links-to-log.c + F1AP_M6report-Interval.c + F1AP_M7Configuration.c + F1AP_M7-Links-to-log.c + F1AP_M7period.c + F1AP_MappingInformationIndex.c + F1AP_MappingInformationtoRemove.c + F1AP_MaskedIMEISV.c + F1AP_MaxDataBurstVolume.c + F1AP_MaxPacketLossRate.c + F1AP_MDT-Activation.c + F1AP_MDTConfiguration.c + F1AP_MDTPLMNList.c + F1AP_MeasConfig.c + F1AP_MeasGapConfig.c + F1AP_MeasGapSharingConfig.c + F1AP_MeasuredResultsValue.c + F1AP_MeasurementBeamInfo.c + F1AP_MeasurementBeamInfoRequest.c + F1AP_MeasurementPeriodicity.c + F1AP_MeasurementPeriodicityExtended.c + F1AP_MeasurementsToActivate.c + F1AP_MeasurementTimingConfiguration.c + F1AP_MessageIdentifier.c + F1AP_MIB-message.c + F1AP_MultiplexingInfo.c + F1AP_NeedforGap.c + F1AP_NeedForGapsInfoNR.c + F1AP_Neighbour-Cell-Information-Item.c + F1AP_Neighbour-Cell-Information-List.c + F1AP_NetworkAccessRateReduction.c + F1AP_NGRANAllocationAndRetentionPriority.c + F1AP_NGRANHighAccuracyAccessPointPosition.c + F1AP_NID.c + F1AP_NonDynamic5QIDescriptor.c + F1AP_NonDynamicPQIDescriptor.c + F1AP_NonUPTrafficType.c + F1AP_NoofDownlinkSymbols.c + F1AP_NoofUplinkSymbols.c + F1AP_Notification-Cause.c + F1AP_NotificationControl.c + F1AP_NotificationInformation.c + F1AP_Notify.c + F1AP_NPNBroadcastInformation.c + F1AP_NPN-Broadcast-Information-PNI-NPN.c + F1AP_NPN-Broadcast-Information-SNPN.c + F1AP_NPNSupportInfo.c + F1AP_NRCarrierItem.c + F1AP_NRCarrierList.c + F1AP_NRCellIdentity.c + F1AP_NRCGI.c + F1AP_NR-CGI-List-For-Restart-Item.c + F1AP_NR-CGI-List-For-Restart-List.c + F1AP_NRFreqInfo.c + F1AP_NR-Mode-Info.c + F1AP_NRNRB.c + F1AP_NRPCI.c + F1AP_NRPRACHConfig.c + F1AP_NRPRACHConfigItem.c + F1AP_NRPRACHConfigList.c + F1AP_NR-PRSBeamInformation.c + F1AP_NR-PRSBeamInformationItem.c + F1AP_NR-PRSBeamInformationList.c + F1AP_NRSCS.c + F1AP_NRUERLFReportContainer.c + F1AP_NRUESidelinkAggregateMaximumBitrate.c + F1AP_NRV2XServicesAuthorized.c + F1AP_NumberofActiveUEs.c + F1AP_NumberofBroadcastRequest.c + F1AP_NumberOfBroadcasts.c + F1AP_NumDLULSymbols.c + F1AP_NZP-CSI-RS-ResourceID.c + F1AP_OffsetToPointA.c + F1AP_PacketDelayBudget.c + F1AP_PacketErrorRate.c + F1AP_Paging.c + F1AP_PagingCell-Item.c + F1AP_PagingCell-list.c + F1AP_PagingDRX.c + F1AP_PagingIdentity.c + F1AP_PagingOrigin.c + F1AP_PagingPriority.c + F1AP_PathlossReferenceInfo.c + F1AP_PathlossReferenceSignal.c + F1AP_PC5FlowBitRates.c + F1AP_PC5-QoS-Characteristics.c + F1AP_PC5QoSFlowIdentifier.c + F1AP_PC5QoSParameters.c + F1AP_PDCCH-BlindDetectionSCG.c + F1AP_PDCP-SN.c + F1AP_PDCPSNLength.c + F1AP_PDUSessionID.c + F1AP_PedestrianUE.c + F1AP_PER-Exponent.c + F1AP_Periodicity.c + F1AP_PeriodicityList.c + F1AP_PeriodicityList-Item.c + F1AP_PeriodicitySRS.c + F1AP_Permutation.c + F1AP_PER-Scalar.c + F1AP_Ph-InfoMCG.c + F1AP_Ph-InfoSCG.c + F1AP_PLMN-Identity.c + F1AP_PortNumber.c + F1AP_PosAssistance-Information.c + F1AP_PosAssistanceInformationFailureList.c + F1AP_PosBroadcast.c + F1AP_PositioningActivationFailure.c + F1AP_PositioningActivationRequest.c + F1AP_PositioningActivationResponse.c + F1AP_PositioningAssistanceInformationControl.c + F1AP_PositioningAssistanceInformationFeedback.c + F1AP_PositioningBroadcastCells.c + F1AP_PositioningDeactivation.c + F1AP_PositioningInformationFailure.c + F1AP_PositioningInformationRequest.c + F1AP_PositioningInformationResponse.c + F1AP_PositioningInformationUpdate.c + F1AP_PositioningMeasurementAbort.c + F1AP_PositioningMeasurementFailure.c + F1AP_PositioningMeasurementFailureIndication.c + F1AP_PositioningMeasurementReport.c + F1AP_PositioningMeasurementRequest.c + F1AP_PositioningMeasurementResponse.c + F1AP_PositioningMeasurementUpdate.c + F1AP_PosMeasurementPeriodicityNR-AoA.c + F1AP_PosMeasurementQuantities.c + F1AP_PosMeasurementQuantities-Item.c + F1AP_PosMeasurementResult.c + F1AP_PosMeasurementResultItem.c + F1AP_PosMeasurementResultList.c + F1AP_PosMeasurementResultList-Item.c + F1AP_PosMeasurementType.c + F1AP_PosReportCharacteristics.c + F1AP_PosResourceSetTypeAP.c + F1AP_PosResourceSetType.c + F1AP_PosResourceSetTypePR.c + F1AP_PosResourceSetTypeSP.c + F1AP_PosSItype.c + F1AP_PosSItype-Item.c + F1AP_PosSItypeList.c + F1AP_PosSRSResourceID-List.c + F1AP_PosSRSResource-Item.c + F1AP_PosSRSResource-List.c + F1AP_PosSRSResourceSet-Item.c + F1AP_PosSRSResourceSet-List.c + F1AP_PosSystemInformationDeliveryCommand.c + F1AP_Potential-SpCell-Item.c + F1AP_Potential-SpCell-List.c + F1AP_Pre-emptionCapability.c + F1AP_Pre-emptionVulnerability.c + F1AP_Presence.c + F1AP_PrimaryPathIndication.c + F1AP_PriorityLevel.c + F1AP_PrivacyIndicator.c + F1AP_PrivateIE-Container.c + F1AP_PrivateIE-Field.c + F1AP_PrivateIE-ID.c + F1AP_PrivateMessage.c + F1AP_ProcedureCode.c + F1AP_ProtectedEUTRAResourceIndication.c + F1AP_Protected-EUTRA-Resources-Item.c + F1AP_Protected-EUTRA-Resources-List.c + F1AP_ProtocolExtensionContainer.c + F1AP_ProtocolExtensionField.c + F1AP_ProtocolExtensionID.c + F1AP_ProtocolIE-Container.c + F1AP_ProtocolIE-ContainerPair.c + F1AP_ProtocolIE-Field.c + F1AP_ProtocolIE-FieldPair.c + F1AP_ProtocolIE-ID.c + F1AP_ProtocolIE-SingleContainer.c + F1AP_PRSAngleItem.c + F1AP_PRSAngleList.c + F1AP_PRSConfiguration.c + F1AP_PRSInformationPos.c + F1AP_PRSMuting.c + F1AP_PRSMutingOption1.c + F1AP_PRSMutingOption2.c + F1AP_PRS-Resource-ID.c + F1AP_PRSResource-Item.c + F1AP_PRSResource-List.c + F1AP_PRSResource-QCLInfo.c + F1AP_PRSResource-QCLSourcePRS.c + F1AP_PRSResource-QCLSourceSSB.c + F1AP_PRS-Resource-Set-ID.c + F1AP_PRSResourceSet-Item.c + F1AP_PRSResourceSet-List.c + F1AP_PWSCancelRequest.c + F1AP_PWSCancelResponse.c + F1AP_PWS-Failed-NR-CGI-Item.c + F1AP_PWS-Failed-NR-CGI-List.c + F1AP_PWSFailureIndication.c + F1AP_PWSRestartIndication.c + F1AP_PWSSystemInformation.c + F1AP_QCI.c + F1AP_QoS-Characteristics.c + F1AP_QoSFlowIdentifier.c + F1AP_QoSFlowLevelQoSParameters.c + F1AP_QoSFlowMappingIndication.c + F1AP_QoSInformation.c + F1AP_QosMonitoringRequest.c + F1AP_QoSParaSetIndex.c + F1AP_QoSParaSetNotifyIndex.c + F1AP_RACH-Config-Common.c + F1AP_RACH-Config-Common-IAB.c + F1AP_RACHReportContainer.c + F1AP_RACHReportInformationItem.c + F1AP_RACHReportInformationList.c + F1AP_RadioResourceStatus.c + F1AP_RANAC.c + F1AP_RAN-MeasurementID.c + F1AP_RANUEID.c + F1AP_RAN-UE-MeasurementID.c + F1AP_RANUEPagingIdentity.c + F1AP_RAT-FrequencyPriorityInformation.c + F1AP_RAT-FrequencySelectionPriority.c + F1AP_Reestablishment-Indication.c + F1AP_ReferencePoint.c + F1AP_ReferenceSFN.c + F1AP_ReferenceSignal.c + F1AP_ReferenceTime.c + F1AP_ReferenceTimeInformationReport.c + F1AP_ReferenceTimeInformationReportingControl.c + F1AP_RegistrationRequest.c + F1AP_RelativeCartesianLocation.c + F1AP_RelativeGeodeticLocation.c + F1AP_RelativePathDelay.c + F1AP_RelativeTime1900.c + F1AP_RepetitionPeriod.c + F1AP_ReportCharacteristics.c + F1AP_ReportingPeriodicity.c + F1AP_ReportingPeriodicityValue.c + F1AP_ReportingRequestType.c + F1AP_RequestedBandCombinationIndex.c + F1AP_RequestedFeatureSetEntryIndex.c + F1AP_Requested-PDCCH-BlindDetectionSCG.c + F1AP_RequestedP-MaxFR2.c + F1AP_RequestedSRSTransmissionCharacteristics.c + F1AP_RequestType.c + F1AP_ResetAcknowledge.c + F1AP_ResetAll.c + F1AP_Reset.c + F1AP_ResetType.c + F1AP_ResourceCoordinationEUTRACellInfo.c + F1AP_ResourceCoordinationTransferContainer.c + F1AP_ResourceCoordinationTransferInformation.c + F1AP_ResourceSetTypeAperiodic.c + F1AP_ResourceSetType.c + F1AP_ResourceSetTypePeriodic.c + F1AP_ResourceSetTypeSemi-persistent.c + F1AP_ResourceStatusFailure.c + F1AP_ResourceStatusRequest.c + F1AP_ResourceStatusResponse.c + F1AP_ResourceStatusUpdate.c + F1AP_ResourceTypeAperiodic.c + F1AP_ResourceTypeAperiodicPos.c + F1AP_ResourceType.c + F1AP_ResourceTypePeriodic.c + F1AP_ResourceTypePeriodicPos.c + F1AP_ResourceTypePos.c + F1AP_ResourceTypeSemi-persistent.c + F1AP_ResourceTypeSemi-persistentPos.c + F1AP_RIMRSDetectionStatus.c + F1AP_RLCDuplicationInformation.c + F1AP_RLCDuplicationState-Item.c + F1AP_RLCDuplicationStateList.c + F1AP_RLCFailureIndication.c + F1AP_RLCMode.c + F1AP_RLC-Status.c + F1AP_RLFReportInformationItem.c + F1AP_RLFReportInformationList.c + F1AP_RoutingID.c + F1AP_RRCContainer.c + F1AP_RRCContainer-RRCSetupComplete.c + F1AP_RRCDeliveryReport.c + F1AP_RRCDeliveryStatus.c + F1AP_RRCDeliveryStatusRequest.c + F1AP_RRCReconfigurationCompleteIndicator.c + F1AP_RRC-Version.c + F1AP_SCell-FailedtoSetup-Item.c + F1AP_SCell-FailedtoSetup-List.c + F1AP_SCell-FailedtoSetupMod-Item.c + F1AP_SCell-FailedtoSetupMod-List.c + F1AP_SCellIndex.c + F1AP_SCell-ToBeRemoved-Item.c + F1AP_SCell-ToBeRemoved-List.c + F1AP_SCell-ToBeSetup-Item.c + F1AP_SCell-ToBeSetup-List.c + F1AP_SCell-ToBeSetupMod-Item.c + F1AP_SCell-ToBeSetupMod-List.c + F1AP_SCGIndicator.c + F1AP_SCS-SpecificCarrier.c + F1AP_Search-window-information.c + F1AP_SelectedBandCombinationIndex.c + F1AP_SelectedFeatureSetEntryIndex.c + F1AP_SemipersistentSRS.c + F1AP_SerialNumber.c + F1AP_ServCellIndex.c + F1AP_ServCellInfoList.c + F1AP_Served-Cell-Information.c + F1AP_Served-Cells-To-Add-Item.c + F1AP_Served-Cells-To-Add-List.c + F1AP_Served-Cells-To-Delete-Item.c + F1AP_Served-Cells-To-Delete-List.c + F1AP_Served-Cells-To-Modify-Item.c + F1AP_Served-Cells-To-Modify-List.c + F1AP_Served-EUTRA-Cells-Information.c + F1AP_ServedPLMNs-Item.c + F1AP_ServedPLMNs-List.c + F1AP_Service-State.c + F1AP_Service-Status.c + F1AP_ServingCellMO.c + F1AP_SFN-Offset.c + F1AP_ShortDRXCycleLength.c + F1AP_ShortDRXCycleTimer.c + F1AP_SIB10-message.c + F1AP_SIB12-message.c + F1AP_SIB13-message.c + F1AP_SIB14-message.c + F1AP_SIB1-message.c + F1AP_SIBType-PWS.c + F1AP_SibtypetobeupdatedListItem.c + F1AP_SItype.c + F1AP_SItype-Item.c + F1AP_SItype-List.c + F1AP_SL-ConfigDedicatedEUTRA-Info.c + F1AP_SLDRBID.c + F1AP_SLDRBInformation.c + F1AP_SLDRBs-FailedToBeModified-Item.c + F1AP_SLDRBs-FailedToBeModified-List.c + F1AP_SLDRBs-FailedToBeSetup-Item.c + F1AP_SLDRBs-FailedToBeSetup-List.c + F1AP_SLDRBs-FailedToBeSetupMod-Item.c + F1AP_SLDRBs-FailedToBeSetupMod-List.c + F1AP_SLDRBs-ModifiedConf-Item.c + F1AP_SLDRBs-ModifiedConf-List.c + F1AP_SLDRBs-Modified-Item.c + F1AP_SLDRBs-Modified-List.c + F1AP_SLDRBs-Required-ToBeModified-Item.c + F1AP_SLDRBs-Required-ToBeModified-List.c + F1AP_SLDRBs-Required-ToBeReleased-Item.c + F1AP_SLDRBs-Required-ToBeReleased-List.c + F1AP_SLDRBs-Setup-Item.c + F1AP_SLDRBs-Setup-List.c + F1AP_SLDRBs-SetupMod-Item.c + F1AP_SLDRBs-SetupMod-List.c + F1AP_SLDRBs-ToBeModified-Item.c + F1AP_SLDRBs-ToBeModified-List.c + F1AP_SLDRBs-ToBeReleased-Item.c + F1AP_SLDRBs-ToBeReleased-List.c + F1AP_SLDRBs-ToBeSetup-Item.c + F1AP_SLDRBs-ToBeSetup-List.c + F1AP_SLDRBs-ToBeSetupMod-Item.c + F1AP_SLDRBs-ToBeSetupMod-List.c + F1AP_SliceAvailableCapacity.c + F1AP_SliceAvailableCapacityItem.c + F1AP_SliceAvailableCapacityList.c + F1AP_SliceSupportItem.c + F1AP_SliceSupportList.c + F1AP_SliceToReportItem.c + F1AP_SliceToReportList.c + F1AP_Slot-Configuration-Item.c + F1AP_Slot-Configuration-List.c + F1AP_SlotNumber.c + F1AP_SL-PHY-MAC-RLC-Config.c + F1AP_SNSSAIAvailableCapacity-Item.c + F1AP_SNSSAIAvailableCapacity-List.c + F1AP_SNSSAI.c + F1AP_SNSSAI-Item.c + F1AP_SNSSAI-list.c + F1AP_SpatialDirectionInformation.c + F1AP_SpatialRelationforResourceID.c + F1AP_SpatialRelationforResourceIDItem.c + F1AP_SpatialRelationInfo.c + F1AP_SpatialRelationPerSRSResource.c + F1AP_SpatialRelationPerSRSResourceItem.c + F1AP_SpatialRelationPerSRSResource-List.c + F1AP_SpatialRelationPos.c + F1AP_SpectrumSharingGroupID.c + F1AP_SRBID.c + F1AP_SRBs-FailedToBeSetup-Item.c + F1AP_SRBs-FailedToBeSetup-List.c + F1AP_SRBs-FailedToBeSetupMod-Item.c + F1AP_SRBs-FailedToBeSetupMod-List.c + F1AP_SRBs-Modified-Item.c + F1AP_SRBs-Modified-List.c + F1AP_SRBs-Required-ToBeReleased-Item.c + F1AP_SRBs-Required-ToBeReleased-List.c + F1AP_SRBs-Setup-Item.c + F1AP_SRBs-Setup-List.c + F1AP_SRBs-SetupMod-Item.c + F1AP_SRBs-SetupMod-List.c + F1AP_SRBs-ToBeReleased-Item.c + F1AP_SRBs-ToBeReleased-List.c + F1AP_SRBs-ToBeSetup-Item.c + F1AP_SRBs-ToBeSetup-List.c + F1AP_SRBs-ToBeSetupMod-Item.c + F1AP_SRBs-ToBeSetupMod-List.c + F1AP_SRSCarrier-List.c + F1AP_SRSCarrier-List-Item.c + F1AP_SRSConfig.c + F1AP_SRSConfiguration.c + F1AP_SrsFrequency.c + F1AP_SRSPosResourceID.c + F1AP_SRSResource.c + F1AP_SRSResourceID.c + F1AP_SRSResourceID-List.c + F1AP_SRSResource-List.c + F1AP_SRSResourceSet.c + F1AP_SRSResourceSetID.c + F1AP_SRSResourceSetItem.c + F1AP_SRSResourceSet-List.c + F1AP_SRSResourceSetList.c + F1AP_SRSResourceTrigger.c + F1AP_SRSType.c + F1AP_SSBAreaCapacityValueItem.c + F1AP_SSBAreaCapacityValueList.c + F1AP_SSBAreaRadioResourceStatusItem.c + F1AP_SSBAreaRadioResourceStatusList.c + F1AP_SSB.c + F1AP_SSB-freqInfo.c + F1AP_SSB-Index.c + F1AP_SSBInformation.c + F1AP_SSBInformationItem.c + F1AP_SSBInformationList.c + F1AP_SSB-PositionsInBurst.c + F1AP_SSB-subcarrierSpacing.c + F1AP_SSB-TF-Configuration.c + F1AP_SSBToReportItem.c + F1AP_SSBToReportList.c + F1AP_SSB-transmissionBitmap.c + F1AP_SSB-transmissionPeriodicity.c + F1AP_SSB-transmissionTimingOffset.c + F1AP_SubcarrierSpacing.c + F1AP_SubscriberProfileIDforRFP.c + F1AP_SuccessfulOutcome.c + F1AP_SULAccessIndication.c + F1AP_SUL-Information.c + F1AP_SupportedSULFreqBandItem.c + F1AP_SymbolAllocInSlot.c + F1AP_SystemFrameNumber.c + F1AP_SystemInformationAreaID.c + F1AP_SystemInformationDeliveryCommand.c + F1AP_TargetCellList.c + F1AP_TargetCellList-Item.c + F1AP_TDD-Info.c + F1AP_TDD-UL-DLConfigCommonNR.c + F1AP_TimeInformationType.c + F1AP_TimeReferenceInformation.c + F1AP_TimeStamp.c + F1AP_TimeStampSlotIndex.c + F1AP_TimeToWait.c + F1AP_TimingMeasurementQuality.c + F1AP_TNLAssociationUsage.c + F1AP_TNLCapacityIndicator.c + F1AP_TraceActivation.c + F1AP_TraceDepth.c + F1AP_TraceID.c + F1AP_TraceStart.c + F1AP_TrafficMappingInfo.c + F1AP_TransactionID.c + F1AP_TransmissionActionIndicator.c + F1AP_Transmission-Bandwidth-asymmetric.c + F1AP_Transmission-Bandwidth.c + F1AP_TransmissionComb.c + F1AP_TransmissionCombPos.c + F1AP_TransmissionStopIndicator.c + F1AP_TransportLayerAddress.c + F1AP_Transport-Layer-Address-Info.c + F1AP_Transport-UP-Layer-Address-Info-To-Add-Item.c + F1AP_Transport-UP-Layer-Address-Info-To-Add-List.c + F1AP_Transport-UP-Layer-Address-Info-To-Remove-Item.c + F1AP_Transport-UP-Layer-Address-Info-To-Remove-List.c + F1AP_TriggeringMessage.c + F1AP_TRPID.c + F1AP_TRPInformation.c + F1AP_TRPInformationFailure.c + F1AP_TRPInformationItem.c + F1AP_TRPInformationListTRPResp.c + F1AP_TRPInformationRequest.c + F1AP_TRPInformationResponse.c + F1AP_TRPInformationTypeItem.c + F1AP_TRPInformationTypeListTRPReq.c + F1AP_TRPInformationTypeResponseItem.c + F1AP_TRPInformationTypeResponseList.c + F1AP_TRPList.c + F1AP_TRPListItem.c + F1AP_TRPMeasurementQuality.c + F1AP_TRPMeasurementQuality-Item.c + F1AP_TRP-MeasurementRequestItem.c + F1AP_TRP-MeasurementRequestList.c + F1AP_TRPPositionDefinitionType.c + F1AP_TRPPositionDirectAccuracy.c + F1AP_TRPPositionDirect.c + F1AP_TRPPositionReferenced.c + F1AP_TRPReferencePointType.c + F1AP_TRPType.c + F1AP_TSCAssistanceInformation.c + F1AP_TSCTrafficCharacteristics.c + F1AP_TypeOfError.c + F1AP_UACAction.c + F1AP_UAC-Assistance-Info.c + F1AP_UACCategoryType.c + F1AP_UACOperatorDefined.c + F1AP_UACPLMN-Item.c + F1AP_UACPLMN-List.c + F1AP_UACReductionIndication.c + F1AP_UACType-Item.c + F1AP_UACType-List.c + F1AP_UEAssistanceInformation.c + F1AP_UEAssistanceInformationEUTRA.c + F1AP_UE-associatedLogicalF1-ConnectionItem.c + F1AP_UE-associatedLogicalF1-ConnectionListResAck.c + F1AP_UE-associatedLogicalF1-ConnectionListRes.c + F1AP_UE-CapabilityRAT-ContainerList.c + F1AP_UEContextModificationConfirm.c + F1AP_UEContextModificationFailure.c + F1AP_UEContextModificationRefuse.c + F1AP_UEContextModificationRequest.c + F1AP_UEContextModificationRequired.c + F1AP_UEContextModificationResponse.c + F1AP_UEContextNotRetrievable.c + F1AP_UEContextReleaseCommand.c + F1AP_UEContextReleaseComplete.c + F1AP_UEContextReleaseRequest.c + F1AP_UEContextSetupFailure.c + F1AP_UEContextSetupRequest.c + F1AP_UEContextSetupResponse.c + F1AP_UEIdentityIndexValue.c + F1AP_UEInactivityNotification.c + F1AP_UL-AoA.c + F1AP_UL-BH-Non-UP-Traffic-Mapping.c + F1AP_UL-BH-Non-UP-Traffic-Mapping-Item.c + F1AP_UL-BH-Non-UP-Traffic-Mapping-List.c + F1AP_ULConfiguration.c + F1AP_ULRRCMessageTransfer.c + F1AP_UL-RTOA-Measurement.c + F1AP_UL-RTOA-MeasurementItem.c + F1AP_UL-SRS-RSRP.c + F1AP_ULUEConfiguration.c + F1AP_UL-UP-TNL-Address-to-Update-List.c + F1AP_UL-UP-TNL-Address-to-Update-List-Item.c + F1AP_ULUPTNLInformation-ToBeSetup-Item.c + F1AP_ULUPTNLInformation-ToBeSetup-List.c + F1AP_UL-UP-TNL-Information-to-Update-List.c + F1AP_UL-UP-TNL-Information-to-Update-List-Item.c + F1AP_Uncertainty.c + F1AP_UnsuccessfulOutcome.c + F1AP_UplinkChannelBW-PerSCS-List.c + F1AP_UplinkTxDirectCurrentListInformation.c + F1AP_UplinkTxDirectCurrentTwoCarrierListInfo.c + F1AP_UPTransportLayerInformation.c + F1AP_URI-address.c + F1AP_VehicleUE.c + F1AP_VictimgNBSetID.c + F1AP_WriteReplaceWarningRequest.c + F1AP_WriteReplaceWarningResponse.c + GraphicString.c + INTEGER_aper.c + INTEGER.c + INTEGER_print.c + INTEGER_rfill.c + INTEGER_uper.c + INTEGER_xer.c + NativeEnumerated_aper.c + NativeEnumerated.c + NativeEnumerated_uper.c + NativeEnumerated_xer.c + NativeInteger_aper.c + NativeInteger.c + NativeInteger_print.c + NativeInteger_rfill.c + NativeInteger_uper.c + NativeInteger_xer.c + NULL_aper.c + NULL.c + NULL_print.c + NULL_rfill.c + NULL_uper.c + NULL_xer.c + ObjectDescriptor.c + OBJECT_IDENTIFIER.c + OBJECT_IDENTIFIER_print.c + OBJECT_IDENTIFIER_rfill.c + OBJECT_IDENTIFIER_xer.c + OCTET_STRING_aper.c + OCTET_STRING.c + OCTET_STRING_print.c + OCTET_STRING_rfill.c + OCTET_STRING_uper.c + OCTET_STRING_xer.c + OPEN_TYPE_aper.c + OPEN_TYPE.c + OPEN_TYPE_uper.c + OPEN_TYPE_xer.c + per_decoder.c + per_encoder.c + per_opentype.c + per_support.c + PrintableString.c + uper_decoder.c + uper_encoder.c + uper_opentype.c + uper_support.c + UTF8String.c + UTF8String_print.c + UTF8String_rfill.c + VisibleString.c + xer_decoder.c + xer_encoder.c + xer_support.c +) + +set(f1ap_headers + ANY.h + aper_decoder.h + aper_encoder.h + aper_opentype.h + aper_support.h + asn_application.h + asn_bit_data.h + asn_codecs.h + asn_codecs_prim.h + asn_config.h + asn_internal.h + asn_ioc.h + asn_random_fill.h + asn_SEQUENCE_OF.h + asn_SET_OF.h + asn_system.h + ber_tlv_length.h + ber_tlv_tag.h + BIT_STRING.h + BOOLEAN.h + constraints.h + constr_CHOICE.h + constr_SEQUENCE.h + constr_SEQUENCE_OF.h + constr_SET_OF.h + constr_TYPE.h + ENUMERATED.h + F1AP_AbortTransmission.h + F1AP_AccessAndMobilityIndication.h + F1AP_AccessPointPosition.h + F1AP_AccessSuccess.h + F1AP_Activated-Cells-to-be-Updated-List.h + F1AP_Activated-Cells-to-be-Updated-List-Item.h + F1AP_ActiveULBWP.h + F1AP_AdditionalDuplicationIndication.h + F1AP_AdditionalPath-Item.h + F1AP_AdditionalPath-List.h + F1AP_AdditionalPDCPDuplicationTNL-Item.h + F1AP_AdditionalPDCPDuplicationTNL-List.h + F1AP_AdditionalRRMPriorityIndex.h + F1AP_AdditionalSIBMessageList.h + F1AP_AdditionalSIBMessageList-Item.h + F1AP_AggressorCellList.h + F1AP_AggressorCellList-Item.h + F1AP_AggressorgNBSetID.h + F1AP_AllocationAndRetentionPriority.h + F1AP_AlternativeQoSParaSetItem.h + F1AP_AlternativeQoSParaSetList.h + F1AP_AngleMeasurementQuality.h + F1AP_AperiodicSRS.h + F1AP_AperiodicSRSResourceTrigger.h + F1AP_AperiodicSRSResourceTriggerList.h + F1AP_AreaScope.h + F1AP_asn_constant.h + F1AP_Associated-SCell-Item.h + F1AP_Associated-SCell-List.h + F1AP_AvailablePLMNList.h + F1AP_AvailablePLMNList-Item.h + F1AP_AvailableSNPN-ID-List.h + F1AP_AvailableSNPN-ID-List-Item.h + F1AP_AveragingWindow.h + F1AP_BandwidthSRS.h + F1AP_BAPAddress.h + F1AP_BAPCtrlPDUChannel.h + F1AP_BAPlayerBHRLCchannelMappingInfo.h + F1AP_BAPlayerBHRLCchannelMappingInfo-Item.h + F1AP_BAPlayerBHRLCchannelMappingInfoList.h + F1AP_BAPMappingConfigurationAcknowledge.h + F1AP_BAPMappingConfigurationFailure.h + F1AP_BAPMappingConfiguration.h + F1AP_BAPPathID.h + F1AP_BAPRoutingID.h + F1AP_BearerTypeChange.h + F1AP_BHChannels-FailedToBeModified-Item.h + F1AP_BHChannels-FailedToBeModified-List.h + F1AP_BHChannels-FailedToBeSetup-Item.h + F1AP_BHChannels-FailedToBeSetup-List.h + F1AP_BHChannels-FailedToBeSetupMod-Item.h + F1AP_BHChannels-FailedToBeSetupMod-List.h + F1AP_BHChannels-Modified-Item.h + F1AP_BHChannels-Modified-List.h + F1AP_BHChannels-Required-ToBeReleased-Item.h + F1AP_BHChannels-Required-ToBeReleased-List.h + F1AP_BHChannels-Setup-Item.h + F1AP_BHChannels-Setup-List.h + F1AP_BHChannels-SetupMod-Item.h + F1AP_BHChannels-SetupMod-List.h + F1AP_BHChannels-ToBeModified-Item.h + F1AP_BHChannels-ToBeModified-List.h + F1AP_BHChannels-ToBeReleased-Item.h + F1AP_BHChannels-ToBeReleased-List.h + F1AP_BHChannels-ToBeSetup-Item.h + F1AP_BHChannels-ToBeSetup-List.h + F1AP_BHChannels-ToBeSetupMod-Item.h + F1AP_BHChannels-ToBeSetupMod-List.h + F1AP_BHInfo.h + F1AP_BHQoSInformation.h + F1AP_BHRLCChannelID.h + F1AP_BH-Routing-Information-Added-List.h + F1AP_BH-Routing-Information-Added-List-Item.h + F1AP_BH-Routing-Information-Removed-List.h + F1AP_BH-Routing-Information-Removed-List-Item.h + F1AP_BitRate.h + F1AP_BPLMN-ID-Info-Item.h + F1AP_BPLMN-ID-Info-List.h + F1AP_BroadcastCAGList.h + F1AP_BroadcastNIDList.h + F1AP_BroadcastPNI-NPN-ID-List.h + F1AP_BroadcastPNI-NPN-ID-List-Item.h + F1AP_BroadcastSNPN-ID-List.h + F1AP_BroadcastSNPN-ID-List-Item.h + F1AP_Broadcast-To-Be-Cancelled-Item.h + F1AP_Broadcast-To-Be-Cancelled-List.h + F1AP_BurstArrivalTime.h + F1AP_CAGID.h + F1AP_Cancel-all-Warning-Messages-Indicator.h + F1AP_Candidate-SpCell-Item.h + F1AP_Candidate-SpCell-List.h + F1AP_CapacityValue.h + F1AP_Cause.h + F1AP_CauseMisc.h + F1AP_CauseProtocol.h + F1AP_CauseRadioNetwork.h + F1AP_CauseTransport.h + F1AP_CellBarred.h + F1AP_CellCapacityClassValue.h + F1AP_Cell-Direction.h + F1AP_CellGroupConfig.h + F1AP_CellMeasurementResultItem.h + F1AP_CellMeasurementResultList.h + F1AP_Cell-Portion-ID.h + F1AP_Cells-Broadcast-Cancelled-Item.h + F1AP_Cells-Broadcast-Cancelled-List.h + F1AP_Cells-Broadcast-Completed-Item.h + F1AP_Cells-Broadcast-Completed-List.h + F1AP_Cells-Failed-to-be-Activated-List.h + F1AP_Cells-Failed-to-be-Activated-List-Item.h + F1AP_CellSize.h + F1AP_Cells-Status-Item.h + F1AP_Cells-Status-List.h + F1AP_Cells-to-be-Activated-List.h + F1AP_Cells-to-be-Activated-List-Item.h + F1AP_Cells-to-be-Barred-Item.h + F1AP_Cells-to-be-Barred-List.h + F1AP_Cells-To-Be-Broadcast-Item.h + F1AP_Cells-To-Be-Broadcast-List.h + F1AP_Cells-to-be-Deactivated-List.h + F1AP_Cells-to-be-Deactivated-List-Item.h + F1AP_CellToReportItem.h + F1AP_CellToReportList.h + F1AP_CellTrafficTrace.h + F1AP_CellType.h + F1AP_CellULConfigured.h + F1AP_CG-Config.h + F1AP_CG-ConfigInfo.h + F1AP_Child-Node-Cells-List.h + F1AP_Child-Node-Cells-List-Item.h + F1AP_Child-Nodes-List.h + F1AP_Child-Nodes-List-Item.h + F1AP_CHO-Probability.h + F1AP_CHOtrigger-InterDU.h + F1AP_CHOtrigger-IntraDU.h + F1AP_CNUEPagingIdentity.h + F1AP_CompositeAvailableCapacityGroup.h + F1AP_CompositeAvailableCapacity.h + F1AP_ConditionalInterDUMobilityInformation.h + F1AP_ConditionalIntraDUMobilityInformation.h + F1AP_ConfigRestrictInfoDAPS.h + F1AP_Configured-EPS-TAC.h + F1AP_ConfiguredTACIndication.h + F1AP_CoordinateID.h + F1AP_CPTrafficType.h + F1AP_CP-TransportLayerAddress.h + F1AP_CriticalityDiagnostics.h + F1AP_CriticalityDiagnostics-IE-Item.h + F1AP_CriticalityDiagnostics-IE-List.h + F1AP_Criticality.h + F1AP_C-RNTI.h + F1AP_CUDURadioInformationTransfer.h + F1AP_CUDURadioInformationType.h + F1AP_CUDURIMInformation.h + F1AP_CUtoDURRCInformation.h + F1AP_DAPS-HO-Status.h + F1AP_DCBasedDuplicationConfigured.h + F1AP_DeactivateTrace.h + F1AP_Dedicated-SIDelivery-NeededUE-Item.h + F1AP_Dedicated-SIDelivery-NeededUE-List.h + F1AP_DL-PRS.h + F1AP_DL-PRSMutingPattern.h + F1AP_DLPRSResourceARP.h + F1AP_DL-PRSResourceARPLocation.h + F1AP_DLPRSResourceCoordinates.h + F1AP_DLPRSResourceSetARP.h + F1AP_DL-PRSResourceSetARPLocation.h + F1AP_DLRRCMessageTransfer.h + F1AP_DL-UP-TNL-Address-to-Update-List.h + F1AP_DL-UP-TNL-Address-to-Update-List-Item.h + F1AP_DLUPTNLInformation-ToBeSetup-Item.h + F1AP_DLUPTNLInformation-ToBeSetup-List.h + F1AP_DRB-Activity.h + F1AP_DRB-Activity-Item.h + F1AP_DRB-Activity-List.h + F1AP_DRBID.h + F1AP_DRB-Information.h + F1AP_DRB-Notify-Item.h + F1AP_DRB-Notify-List.h + F1AP_DRBs-FailedToBeModified-Item.h + F1AP_DRBs-FailedToBeModified-List.h + F1AP_DRBs-FailedToBeSetup-Item.h + F1AP_DRBs-FailedToBeSetup-List.h + F1AP_DRBs-FailedToBeSetupMod-Item.h + F1AP_DRBs-FailedToBeSetupMod-List.h + F1AP_DRBs-ModifiedConf-Item.h + F1AP_DRBs-ModifiedConf-List.h + F1AP_DRBs-Modified-Item.h + F1AP_DRBs-Modified-List.h + F1AP_DRBs-Required-ToBeModified-Item.h + F1AP_DRBs-Required-ToBeModified-List.h + F1AP_DRBs-Required-ToBeReleased-Item.h + F1AP_DRBs-Required-ToBeReleased-List.h + F1AP_DRBs-Setup-Item.h + F1AP_DRBs-Setup-List.h + F1AP_DRBs-SetupMod-Item.h + F1AP_DRBs-SetupMod-List.h + F1AP_DRBs-ToBeModified-Item.h + F1AP_DRBs-ToBeModified-List.h + F1AP_DRBs-ToBeReleased-Item.h + F1AP_DRBs-ToBeReleased-List.h + F1AP_DRBs-ToBeSetup-Item.h + F1AP_DRBs-ToBeSetup-List.h + F1AP_DRBs-ToBeSetupMod-Item.h + F1AP_DRBs-ToBeSetupMod-List.h + F1AP_DRX-Config.h + F1AP_DRXConfigurationIndicator.h + F1AP_DRXCycle.h + F1AP_DRX-LongCycleStartOffset.h + F1AP_DSCP.h + F1AP_DSInformationList.h + F1AP_DUCURadioInformationTransfer.h + F1AP_DUCURadioInformationType.h + F1AP_DUCURIMInformation.h + F1AP_DUF-Slot-Config-Item.h + F1AP_DUF-Slot-Config-List.h + F1AP_DUFSlotformatIndex.h + F1AP_DUFTransmissionPeriodicity.h + F1AP_DuplicationActivation.h + F1AP_DuplicationIndication.h + F1AP_DuplicationState.h + F1AP_DU-RX-MT-RX.h + F1AP_DU-RX-MT-TX.h + F1AP_DUtoCURRCContainer.h + F1AP_DUtoCURRCInformation.h + F1AP_DU-TX-MT-RX.h + F1AP_DU-TX-MT-TX.h + F1AP_Dynamic5QIDescriptor.h + F1AP_DynamicPQIDescriptor.h + F1AP_E-CID-MeasuredResults-Item.h + F1AP_E-CID-MeasuredResults-List.h + F1AP_E-CID-MeasuredResults-Value.h + F1AP_E-CIDMeasurementFailureIndication.h + F1AP_E-CIDMeasurementInitiationFailure.h + F1AP_E-CIDMeasurementInitiationRequest.h + F1AP_E-CIDMeasurementInitiationResponse.h + F1AP_E-CID-MeasurementQuantities.h + F1AP_E-CID-MeasurementQuantities-Item.h + F1AP_E-CID-MeasurementQuantitiesValue.h + F1AP_E-CIDMeasurementReport.h + F1AP_E-CID-MeasurementResult.h + F1AP_E-CIDMeasurementTerminationCommand.h + F1AP_E-CID-ReportCharacteristics.h + F1AP_EgressBHRLCCHItem.h + F1AP_EgressBHRLCCHList.h + F1AP_Endpoint-IP-address-and-port.h + F1AP_ErrorIndication.h + F1AP_EUTRA-Cell-ID.h + F1AP_EUTRACells-List.h + F1AP_EUTRACells-List-item.h + F1AP_EUTRA-Coex-FDD-Info.h + F1AP_EUTRA-Coex-Mode-Info.h + F1AP_EUTRA-Coex-TDD-Info.h + F1AP_EUTRA-CyclicPrefixDL.h + F1AP_EUTRA-CyclicPrefixUL.h + F1AP_EUTRA-FDD-Info.h + F1AP_EUTRA-Mode-Info.h + F1AP_EUTRANQoS.h + F1AP_EUTRA-NR-CellResourceCoordinationReqAck-Container.h + F1AP_EUTRA-NR-CellResourceCoordinationReq-Container.h + F1AP_EUTRA-PRACH-Configuration.h + F1AP_EUTRA-SpecialSubframe-Info.h + F1AP_EUTRA-SpecialSubframePatterns.h + F1AP_EUTRA-SubframeAssignment.h + F1AP_EUTRA-TDD-Info.h + F1AP_EUTRA-Transmission-Bandwidth.h + F1AP_EventType.h + F1AP_ExecuteDuplication.h + F1AP_ExplicitFormat.h + F1AP_ExtendedAvailablePLMN-Item.h + F1AP_ExtendedAvailablePLMN-List.h + F1AP_ExtendedEARFCN.h + F1AP_Extended-GNB-CU-Name.h + F1AP_Extended-GNB-DU-Name.h + F1AP_ExtendedPacketDelayBudget.h + F1AP_ExtendedServedPLMNs-Item.h + F1AP_ExtendedServedPLMNs-List.h + F1AP_ExtendedSliceSupportList.h + F1AP_EXTERNAL.h + F1AP_F1AP-PDU.h + F1AP_F1CPathNSA.h + F1AP_F1CTransferPath.h + F1AP_F1RemovalFailure.h + F1AP_F1RemovalRequest.h + F1AP_F1RemovalResponse.h + F1AP_F1SetupFailure.h + F1AP_F1SetupRequest.h + F1AP_F1SetupResponse.h + F1AP_FDD-Info.h + F1AP_FiveGS-TAC.h + F1AP_Flows-Mapped-To-DRB-Item.h + F1AP_Flows-Mapped-To-DRB-List.h + F1AP_FlowsMappedToSLDRB-Item.h + F1AP_FlowsMappedToSLDRB-List.h + F1AP_FR1-Bandwidth.h + F1AP_FR2-Bandwidth.h + F1AP_FreqBandNrItem.h + F1AP_FreqDomainLength.h + F1AP_FrequencyShift7p5khz.h + F1AP_FullConfiguration.h + F1AP_GBR-QoSFlowInformation.h + F1AP_GBR-QosInformation.h + F1AP_GeographicalCoordinates.h + F1AP_GNBCUConfigurationUpdateAcknowledge.h + F1AP_GNBCUConfigurationUpdateFailure.h + F1AP_GNBCUConfigurationUpdate.h + F1AP_GNBCUMeasurementID.h + F1AP_GNB-CU-Name.h + F1AP_GNB-CU-NameUTF8String.h + F1AP_GNB-CU-NameVisibleString.h + F1AP_GNB-CUSystemInformation.h + F1AP_GNB-CU-TNL-Association-Failed-To-Setup-Item.h + F1AP_GNB-CU-TNL-Association-Failed-To-Setup-List.h + F1AP_GNB-CU-TNL-Association-Setup-Item.h + F1AP_GNB-CU-TNL-Association-Setup-List.h + F1AP_GNB-CU-TNL-Association-To-Add-Item.h + F1AP_GNB-CU-TNL-Association-To-Add-List.h + F1AP_GNB-CU-TNL-Association-To-Remove-Item.h + F1AP_GNB-CU-TNL-Association-To-Remove-List.h + F1AP_GNB-CU-TNL-Association-To-Update-Item.h + F1AP_GNB-CU-TNL-Association-To-Update-List.h + F1AP_GNB-CU-UE-F1AP-ID.h + F1AP_GNB-DU-Cell-Resource-Configuration.h + F1AP_GNB-DUConfigurationQuery.h + F1AP_GNBDUConfigurationUpdateAcknowledge.h + F1AP_GNBDUConfigurationUpdateFailure.h + F1AP_GNBDUConfigurationUpdate.h + F1AP_GNB-DU-ID.h + F1AP_GNBDUMeasurementID.h + F1AP_GNB-DU-Name.h + F1AP_GNB-DU-NameUTF8String.h + F1AP_GNB-DU-NameVisibleString.h + F1AP_GNBDUOverloadInformation.h + F1AP_GNBDUResourceConfigurationAcknowledge.h + F1AP_GNBDUResourceConfigurationFailure.h + F1AP_GNBDUResourceConfiguration.h + F1AP_GNBDUResourceCoordinationRequest.h + F1AP_GNBDUResourceCoordinationResponse.h + F1AP_GNB-DU-Served-Cells-Item.h + F1AP_GNB-DU-Served-Cells-List.h + F1AP_GNBDUStatusIndication.h + F1AP_GNB-DU-System-Information.h + F1AP_GNB-DU-TNL-Association-To-Remove-Item.h + F1AP_GNB-DU-TNL-Association-To-Remove-List.h + F1AP_GNB-DU-UE-F1AP-ID.h + F1AP_GNB-RxTxTimeDiff.h + F1AP_GNBRxTxTimeDiffMeas.h + F1AP_GNBSetID.h + F1AP_GTP-TEID.h + F1AP_GTPTLA-Item.h + F1AP_GTPTLAs.h + F1AP_GTPTunnel.h + F1AP_HandoverPreparationInformation.h + F1AP_HardwareLoadIndicator.h + F1AP_HSNADownlink.h + F1AP_HSNAFlexible.h + F1AP_HSNASlotConfigItem.h + F1AP_HSNASlotConfigList.h + F1AP_HSNATransmissionPeriodicity.h + F1AP_HSNAUplink.h + F1AP_IAB-Allocated-TNL-Address-Item.h + F1AP_IAB-Allocated-TNL-Address-List.h + F1AP_IAB-Barred.h + F1AP_IAB-DU-Cell-Resource-Configuration-FDD-Info.h + F1AP_IAB-DU-Cell-Resource-Configuration-Mode-Info.h + F1AP_IAB-DU-Cell-Resource-Configuration-TDD-Info.h + F1AP_IAB-Info-IAB-donor-CU.h + F1AP_IAB-Info-IAB-DU.h + F1AP_IABIPv6RequestType.h + F1AP_IAB-MT-Cell-List.h + F1AP_IAB-MT-Cell-List-Item.h + F1AP_IAB-STC-Info.h + F1AP_IAB-STC-Info-Item.h + F1AP_IAB-STC-Info-List.h + F1AP_IABTNLAddressesRequested.h + F1AP_IAB-TNL-Addresses-To-Remove-Item.h + F1AP_IAB-TNL-Addresses-To-Remove-List.h + F1AP_IABTNLAddressFailure.h + F1AP_IABTNLAddress.h + F1AP_IABTNLAddressRequest.h + F1AP_IABTNLAddressResponse.h + F1AP_IABTNLAddressUsage.h + F1AP_IABUPConfigurationUpdateFailure.h + F1AP_IABUPConfigurationUpdateRequest.h + F1AP_IABUPConfigurationUpdateResponse.h + F1AP_IABv4AddressesRequested.h + F1AP_IgnorePRACHConfiguration.h + F1AP_IgnoreResourceCoordinationContainer.h + F1AP_ImplicitFormat.h + F1AP_InactivityMonitoringRequest.h + F1AP_InactivityMonitoringResponse.h + F1AP_InitialULRRCMessageTransfer.h + F1AP_InitiatingMessage.h + F1AP_IntendedTDD-DL-ULConfig.h + F1AP_InterfacesToTrace.h + F1AP_InterFrequencyConfig-NoGap.h + F1AP_IPHeaderInformation.h + F1AP_IPtolayer2TrafficMappingInfo.h + F1AP_IPtolayer2TrafficMappingInfo-Item.h + F1AP_IPtolayer2TrafficMappingInfoList.h + F1AP_L1151Info.h + F1AP_L139Info.h + F1AP_L571Info.h + F1AP_L839Info.h + F1AP_LCID.h + F1AP_LCS-to-GCS-TranslationAoA.h + F1AP_LCStoGCSTranslation.h + F1AP_LCStoGCSTranslationList.h + F1AP_LMF-MeasurementID.h + F1AP_LMF-UE-MeasurementID.h + F1AP_LocationMeasurementInformation.h + F1AP_LocationUncertainty.h + F1AP_LongDRXCycleLength.h + F1AP_LowerLayerPresenceStatusChange.h + F1AP_LTEUESidelinkAggregateMaximumBitrate.h + F1AP_LTEV2XServicesAuthorized.h + F1AP_M2Configuration.h + F1AP_M5Configuration.h + F1AP_M5-Links-to-log.h + F1AP_M5period.h + F1AP_M6Configuration.h + F1AP_M6-Links-to-log.h + F1AP_M6report-Interval.h + F1AP_M7Configuration.h + F1AP_M7-Links-to-log.h + F1AP_M7period.h + F1AP_MappingInformationIndex.h + F1AP_MappingInformationtoRemove.h + F1AP_MaskedIMEISV.h + F1AP_MaxDataBurstVolume.h + F1AP_MaxPacketLossRate.h + F1AP_MDT-Activation.h + F1AP_MDTConfiguration.h + F1AP_MDTPLMNList.h + F1AP_MeasConfig.h + F1AP_MeasGapConfig.h + F1AP_MeasGapSharingConfig.h + F1AP_MeasuredResultsValue.h + F1AP_MeasurementBeamInfo.h + F1AP_MeasurementBeamInfoRequest.h + F1AP_MeasurementPeriodicityExtended.h + F1AP_MeasurementPeriodicity.h + F1AP_MeasurementsToActivate.h + F1AP_MeasurementTimingConfiguration.h + F1AP_MessageIdentifier.h + F1AP_MIB-message.h + F1AP_MultiplexingInfo.h + F1AP_NeedforGap.h + F1AP_NeedForGapsInfoNR.h + F1AP_Neighbour-Cell-Information-Item.h + F1AP_Neighbour-Cell-Information-List.h + F1AP_NetworkAccessRateReduction.h + F1AP_NGRANAllocationAndRetentionPriority.h + F1AP_NGRANHighAccuracyAccessPointPosition.h + F1AP_NID.h + F1AP_NonDynamic5QIDescriptor.h + F1AP_NonDynamicPQIDescriptor.h + F1AP_NonUPTrafficType.h + F1AP_NoofDownlinkSymbols.h + F1AP_NoofUplinkSymbols.h + F1AP_Notification-Cause.h + F1AP_NotificationControl.h + F1AP_NotificationInformation.h + F1AP_Notify.h + F1AP_NPNBroadcastInformation.h + F1AP_NPN-Broadcast-Information-PNI-NPN.h + F1AP_NPN-Broadcast-Information-SNPN.h + F1AP_NPNSupportInfo.h + F1AP_NRCarrierItem.h + F1AP_NRCarrierList.h + F1AP_NRCellIdentity.h + F1AP_NRCGI.h + F1AP_NR-CGI-List-For-Restart-Item.h + F1AP_NR-CGI-List-For-Restart-List.h + F1AP_NRFreqInfo.h + F1AP_NR-Mode-Info.h + F1AP_NRNRB.h + F1AP_NRPCI.h + F1AP_NRPRACHConfig.h + F1AP_NRPRACHConfigItem.h + F1AP_NRPRACHConfigList.h + F1AP_NR-PRSBeamInformation.h + F1AP_NR-PRSBeamInformationItem.h + F1AP_NR-PRSBeamInformationList.h + F1AP_NRSCS.h + F1AP_NRUERLFReportContainer.h + F1AP_NRUESidelinkAggregateMaximumBitrate.h + F1AP_NRV2XServicesAuthorized.h + F1AP_NumberofActiveUEs.h + F1AP_NumberofBroadcastRequest.h + F1AP_NumberOfBroadcasts.h + F1AP_NumDLULSymbols.h + F1AP_NZP-CSI-RS-ResourceID.h + F1AP_OffsetToPointA.h + F1AP_PacketDelayBudget.h + F1AP_PacketErrorRate.h + F1AP_PagingCell-Item.h + F1AP_PagingCell-list.h + F1AP_PagingDRX.h + F1AP_Paging.h + F1AP_PagingIdentity.h + F1AP_PagingOrigin.h + F1AP_PagingPriority.h + F1AP_PathlossReferenceInfo.h + F1AP_PathlossReferenceSignal.h + F1AP_PC5FlowBitRates.h + F1AP_PC5-QoS-Characteristics.h + F1AP_PC5QoSFlowIdentifier.h + F1AP_PC5QoSParameters.h + F1AP_PDCCH-BlindDetectionSCG.h + F1AP_PDCP-SN.h + F1AP_PDCPSNLength.h + F1AP_PDUSessionID.h + F1AP_PedestrianUE.h + F1AP_PER-Exponent.h + F1AP_Periodicity.h + F1AP_PeriodicityList.h + F1AP_PeriodicityList-Item.h + F1AP_PeriodicitySRS.h + F1AP_Permutation.h + F1AP_PER-Scalar.h + F1AP_Ph-InfoMCG.h + F1AP_Ph-InfoSCG.h + F1AP_PLMN-Identity.h + F1AP_PortNumber.h + F1AP_PosAssistanceInformationFailureList.h + F1AP_PosAssistance-Information.h + F1AP_PosBroadcast.h + F1AP_PositioningActivationFailure.h + F1AP_PositioningActivationRequest.h + F1AP_PositioningActivationResponse.h + F1AP_PositioningAssistanceInformationControl.h + F1AP_PositioningAssistanceInformationFeedback.h + F1AP_PositioningBroadcastCells.h + F1AP_PositioningDeactivation.h + F1AP_PositioningInformationFailure.h + F1AP_PositioningInformationRequest.h + F1AP_PositioningInformationResponse.h + F1AP_PositioningInformationUpdate.h + F1AP_PositioningMeasurementAbort.h + F1AP_PositioningMeasurementFailure.h + F1AP_PositioningMeasurementFailureIndication.h + F1AP_PositioningMeasurementReport.h + F1AP_PositioningMeasurementRequest.h + F1AP_PositioningMeasurementResponse.h + F1AP_PositioningMeasurementUpdate.h + F1AP_PosMeasurementPeriodicityNR-AoA.h + F1AP_PosMeasurementQuantities.h + F1AP_PosMeasurementQuantities-Item.h + F1AP_PosMeasurementResult.h + F1AP_PosMeasurementResultItem.h + F1AP_PosMeasurementResultList.h + F1AP_PosMeasurementResultList-Item.h + F1AP_PosMeasurementType.h + F1AP_PosReportCharacteristics.h + F1AP_PosResourceSetTypeAP.h + F1AP_PosResourceSetType.h + F1AP_PosResourceSetTypePR.h + F1AP_PosResourceSetTypeSP.h + F1AP_PosSItype.h + F1AP_PosSItype-Item.h + F1AP_PosSItypeList.h + F1AP_PosSRSResourceID-List.h + F1AP_PosSRSResource-Item.h + F1AP_PosSRSResource-List.h + F1AP_PosSRSResourceSet-Item.h + F1AP_PosSRSResourceSet-List.h + F1AP_PosSystemInformationDeliveryCommand.h + F1AP_Potential-SpCell-Item.h + F1AP_Potential-SpCell-List.h + F1AP_Pre-emptionCapability.h + F1AP_Pre-emptionVulnerability.h + F1AP_Presence.h + F1AP_PrimaryPathIndication.h + F1AP_PriorityLevel.h + F1AP_PrivacyIndicator.h + F1AP_PrivateIE-Container.h + F1AP_PrivateIE-Field.h + F1AP_PrivateIE-ID.h + F1AP_PrivateMessage.h + F1AP_ProcedureCode.h + F1AP_ProtectedEUTRAResourceIndication.h + F1AP_Protected-EUTRA-Resources-Item.h + F1AP_Protected-EUTRA-Resources-List.h + F1AP_ProtocolExtensionContainer.h + F1AP_ProtocolExtensionField.h + F1AP_ProtocolExtensionID.h + F1AP_ProtocolIE-Container.h + F1AP_ProtocolIE-ContainerPair.h + F1AP_ProtocolIE-Field.h + F1AP_ProtocolIE-FieldPair.h + F1AP_ProtocolIE-ID.h + F1AP_ProtocolIE-SingleContainer.h + F1AP_PRSAngleItem.h + F1AP_PRSAngleList.h + F1AP_PRSConfiguration.h + F1AP_PRSInformationPos.h + F1AP_PRSMuting.h + F1AP_PRSMutingOption1.h + F1AP_PRSMutingOption2.h + F1AP_PRS-Resource-ID.h + F1AP_PRSResource-Item.h + F1AP_PRSResource-List.h + F1AP_PRSResource-QCLInfo.h + F1AP_PRSResource-QCLSourcePRS.h + F1AP_PRSResource-QCLSourceSSB.h + F1AP_PRS-Resource-Set-ID.h + F1AP_PRSResourceSet-Item.h + F1AP_PRSResourceSet-List.h + F1AP_PWSCancelRequest.h + F1AP_PWSCancelResponse.h + F1AP_PWS-Failed-NR-CGI-Item.h + F1AP_PWS-Failed-NR-CGI-List.h + F1AP_PWSFailureIndication.h + F1AP_PWSRestartIndication.h + F1AP_PWSSystemInformation.h + F1AP_QCI.h + F1AP_QoS-Characteristics.h + F1AP_QoSFlowIdentifier.h + F1AP_QoSFlowLevelQoSParameters.h + F1AP_QoSFlowMappingIndication.h + F1AP_QoSInformation.h + F1AP_QosMonitoringRequest.h + F1AP_QoSParaSetIndex.h + F1AP_QoSParaSetNotifyIndex.h + F1AP_RACH-Config-Common.h + F1AP_RACH-Config-Common-IAB.h + F1AP_RACHReportContainer.h + F1AP_RACHReportInformationItem.h + F1AP_RACHReportInformationList.h + F1AP_RadioResourceStatus.h + F1AP_RANAC.h + F1AP_RAN-MeasurementID.h + F1AP_RANUEID.h + F1AP_RAN-UE-MeasurementID.h + F1AP_RANUEPagingIdentity.h + F1AP_RAT-FrequencyPriorityInformation.h + F1AP_RAT-FrequencySelectionPriority.h + F1AP_Reestablishment-Indication.h + F1AP_ReferencePoint.h + F1AP_ReferenceSFN.h + F1AP_ReferenceSignal.h + F1AP_ReferenceTime.h + F1AP_ReferenceTimeInformationReport.h + F1AP_ReferenceTimeInformationReportingControl.h + F1AP_RegistrationRequest.h + F1AP_RelativeCartesianLocation.h + F1AP_RelativeGeodeticLocation.h + F1AP_RelativePathDelay.h + F1AP_RelativeTime1900.h + F1AP_RepetitionPeriod.h + F1AP_ReportCharacteristics.h + F1AP_ReportingPeriodicity.h + F1AP_ReportingPeriodicityValue.h + F1AP_ReportingRequestType.h + F1AP_RequestedBandCombinationIndex.h + F1AP_RequestedFeatureSetEntryIndex.h + F1AP_Requested-PDCCH-BlindDetectionSCG.h + F1AP_RequestedP-MaxFR2.h + F1AP_RequestedSRSTransmissionCharacteristics.h + F1AP_RequestType.h + F1AP_ResetAcknowledge.h + F1AP_ResetAll.h + F1AP_Reset.h + F1AP_ResetType.h + F1AP_ResourceCoordinationEUTRACellInfo.h + F1AP_ResourceCoordinationTransferContainer.h + F1AP_ResourceCoordinationTransferInformation.h + F1AP_ResourceSetTypeAperiodic.h + F1AP_ResourceSetType.h + F1AP_ResourceSetTypePeriodic.h + F1AP_ResourceSetTypeSemi-persistent.h + F1AP_ResourceStatusFailure.h + F1AP_ResourceStatusRequest.h + F1AP_ResourceStatusResponse.h + F1AP_ResourceStatusUpdate.h + F1AP_ResourceTypeAperiodic.h + F1AP_ResourceTypeAperiodicPos.h + F1AP_ResourceType.h + F1AP_ResourceTypePeriodic.h + F1AP_ResourceTypePeriodicPos.h + F1AP_ResourceTypePos.h + F1AP_ResourceTypeSemi-persistent.h + F1AP_ResourceTypeSemi-persistentPos.h + F1AP_RIMRSDetectionStatus.h + F1AP_RLCDuplicationInformation.h + F1AP_RLCDuplicationState-Item.h + F1AP_RLCDuplicationStateList.h + F1AP_RLCFailureIndication.h + F1AP_RLCMode.h + F1AP_RLC-Status.h + F1AP_RLFReportInformationItem.h + F1AP_RLFReportInformationList.h + F1AP_RoutingID.h + F1AP_RRCContainer.h + F1AP_RRCContainer-RRCSetupComplete.h + F1AP_RRCDeliveryReport.h + F1AP_RRCDeliveryStatus.h + F1AP_RRCDeliveryStatusRequest.h + F1AP_RRCReconfigurationCompleteIndicator.h + F1AP_RRC-Version.h + F1AP_SCell-FailedtoSetup-Item.h + F1AP_SCell-FailedtoSetup-List.h + F1AP_SCell-FailedtoSetupMod-Item.h + F1AP_SCell-FailedtoSetupMod-List.h + F1AP_SCellIndex.h + F1AP_SCell-ToBeRemoved-Item.h + F1AP_SCell-ToBeRemoved-List.h + F1AP_SCell-ToBeSetup-Item.h + F1AP_SCell-ToBeSetup-List.h + F1AP_SCell-ToBeSetupMod-Item.h + F1AP_SCell-ToBeSetupMod-List.h + F1AP_SCGIndicator.h + F1AP_SCS-SpecificCarrier.h + F1AP_Search-window-information.h + F1AP_SelectedBandCombinationIndex.h + F1AP_SelectedFeatureSetEntryIndex.h + F1AP_SemipersistentSRS.h + F1AP_SerialNumber.h + F1AP_ServCellIndex.h + F1AP_ServCellInfoList.h + F1AP_Served-Cell-Information.h + F1AP_Served-Cells-To-Add-Item.h + F1AP_Served-Cells-To-Add-List.h + F1AP_Served-Cells-To-Delete-Item.h + F1AP_Served-Cells-To-Delete-List.h + F1AP_Served-Cells-To-Modify-Item.h + F1AP_Served-Cells-To-Modify-List.h + F1AP_Served-EUTRA-Cells-Information.h + F1AP_ServedPLMNs-Item.h + F1AP_ServedPLMNs-List.h + F1AP_Service-State.h + F1AP_Service-Status.h + F1AP_ServingCellMO.h + F1AP_SFN-Offset.h + F1AP_ShortDRXCycleLength.h + F1AP_ShortDRXCycleTimer.h + F1AP_SIB10-message.h + F1AP_SIB12-message.h + F1AP_SIB13-message.h + F1AP_SIB14-message.h + F1AP_SIB1-message.h + F1AP_SIBType-PWS.h + F1AP_SibtypetobeupdatedListItem.h + F1AP_SItype.h + F1AP_SItype-Item.h + F1AP_SItype-List.h + F1AP_SL-ConfigDedicatedEUTRA-Info.h + F1AP_SLDRBID.h + F1AP_SLDRBInformation.h + F1AP_SLDRBs-FailedToBeModified-Item.h + F1AP_SLDRBs-FailedToBeModified-List.h + F1AP_SLDRBs-FailedToBeSetup-Item.h + F1AP_SLDRBs-FailedToBeSetup-List.h + F1AP_SLDRBs-FailedToBeSetupMod-Item.h + F1AP_SLDRBs-FailedToBeSetupMod-List.h + F1AP_SLDRBs-ModifiedConf-Item.h + F1AP_SLDRBs-ModifiedConf-List.h + F1AP_SLDRBs-Modified-Item.h + F1AP_SLDRBs-Modified-List.h + F1AP_SLDRBs-Required-ToBeModified-Item.h + F1AP_SLDRBs-Required-ToBeModified-List.h + F1AP_SLDRBs-Required-ToBeReleased-Item.h + F1AP_SLDRBs-Required-ToBeReleased-List.h + F1AP_SLDRBs-Setup-Item.h + F1AP_SLDRBs-Setup-List.h + F1AP_SLDRBs-SetupMod-Item.h + F1AP_SLDRBs-SetupMod-List.h + F1AP_SLDRBs-ToBeModified-Item.h + F1AP_SLDRBs-ToBeModified-List.h + F1AP_SLDRBs-ToBeReleased-Item.h + F1AP_SLDRBs-ToBeReleased-List.h + F1AP_SLDRBs-ToBeSetup-Item.h + F1AP_SLDRBs-ToBeSetup-List.h + F1AP_SLDRBs-ToBeSetupMod-Item.h + F1AP_SLDRBs-ToBeSetupMod-List.h + F1AP_SliceAvailableCapacity.h + F1AP_SliceAvailableCapacityItem.h + F1AP_SliceAvailableCapacityList.h + F1AP_SliceSupportItem.h + F1AP_SliceSupportList.h + F1AP_SliceToReportItem.h + F1AP_SliceToReportList.h + F1AP_Slot-Configuration-Item.h + F1AP_Slot-Configuration-List.h + F1AP_SlotNumber.h + F1AP_SL-PHY-MAC-RLC-Config.h + F1AP_SNSSAIAvailableCapacity-Item.h + F1AP_SNSSAIAvailableCapacity-List.h + F1AP_SNSSAI.h + F1AP_SNSSAI-Item.h + F1AP_SNSSAI-list.h + F1AP_SpatialDirectionInformation.h + F1AP_SpatialRelationforResourceID.h + F1AP_SpatialRelationforResourceIDItem.h + F1AP_SpatialRelationInfo.h + F1AP_SpatialRelationPerSRSResource.h + F1AP_SpatialRelationPerSRSResourceItem.h + F1AP_SpatialRelationPerSRSResource-List.h + F1AP_SpatialRelationPos.h + F1AP_SpectrumSharingGroupID.h + F1AP_SRBID.h + F1AP_SRBs-FailedToBeSetup-Item.h + F1AP_SRBs-FailedToBeSetup-List.h + F1AP_SRBs-FailedToBeSetupMod-Item.h + F1AP_SRBs-FailedToBeSetupMod-List.h + F1AP_SRBs-Modified-Item.h + F1AP_SRBs-Modified-List.h + F1AP_SRBs-Required-ToBeReleased-Item.h + F1AP_SRBs-Required-ToBeReleased-List.h + F1AP_SRBs-Setup-Item.h + F1AP_SRBs-Setup-List.h + F1AP_SRBs-SetupMod-Item.h + F1AP_SRBs-SetupMod-List.h + F1AP_SRBs-ToBeReleased-Item.h + F1AP_SRBs-ToBeReleased-List.h + F1AP_SRBs-ToBeSetup-Item.h + F1AP_SRBs-ToBeSetup-List.h + F1AP_SRBs-ToBeSetupMod-Item.h + F1AP_SRBs-ToBeSetupMod-List.h + F1AP_SRSCarrier-List.h + F1AP_SRSCarrier-List-Item.h + F1AP_SRSConfig.h + F1AP_SRSConfiguration.h + F1AP_SrsFrequency.h + F1AP_SRSPosResourceID.h + F1AP_SRSResource.h + F1AP_SRSResourceID.h + F1AP_SRSResourceID-List.h + F1AP_SRSResource-List.h + F1AP_SRSResourceSet.h + F1AP_SRSResourceSetID.h + F1AP_SRSResourceSetItem.h + F1AP_SRSResourceSet-List.h + F1AP_SRSResourceSetList.h + F1AP_SRSResourceTrigger.h + F1AP_SRSType.h + F1AP_SSBAreaCapacityValueItem.h + F1AP_SSBAreaCapacityValueList.h + F1AP_SSBAreaRadioResourceStatusItem.h + F1AP_SSBAreaRadioResourceStatusList.h + F1AP_SSB-freqInfo.h + F1AP_SSB.h + F1AP_SSB-Index.h + F1AP_SSBInformation.h + F1AP_SSBInformationItem.h + F1AP_SSBInformationList.h + F1AP_SSB-PositionsInBurst.h + F1AP_SSB-subcarrierSpacing.h + F1AP_SSB-TF-Configuration.h + F1AP_SSBToReportItem.h + F1AP_SSBToReportList.h + F1AP_SSB-transmissionBitmap.h + F1AP_SSB-transmissionPeriodicity.h + F1AP_SSB-transmissionTimingOffset.h + F1AP_SubcarrierSpacing.h + F1AP_SubscriberProfileIDforRFP.h + F1AP_SuccessfulOutcome.h + F1AP_SULAccessIndication.h + F1AP_SUL-Information.h + F1AP_SupportedSULFreqBandItem.h + F1AP_SymbolAllocInSlot.h + F1AP_SystemFrameNumber.h + F1AP_SystemInformationAreaID.h + F1AP_SystemInformationDeliveryCommand.h + F1AP_TargetCellList.h + F1AP_TargetCellList-Item.h + F1AP_TDD-Info.h + F1AP_TDD-UL-DLConfigCommonNR.h + F1AP_TimeInformationType.h + F1AP_TimeReferenceInformation.h + F1AP_TimeStamp.h + F1AP_TimeStampSlotIndex.h + F1AP_TimeToWait.h + F1AP_TimingMeasurementQuality.h + F1AP_TNLAssociationUsage.h + F1AP_TNLCapacityIndicator.h + F1AP_TraceActivation.h + F1AP_TraceDepth.h + F1AP_TraceID.h + F1AP_TraceStart.h + F1AP_TrafficMappingInfo.h + F1AP_TransactionID.h + F1AP_TransmissionActionIndicator.h + F1AP_Transmission-Bandwidth-asymmetric.h + F1AP_Transmission-Bandwidth.h + F1AP_TransmissionComb.h + F1AP_TransmissionCombPos.h + F1AP_TransmissionStopIndicator.h + F1AP_TransportLayerAddress.h + F1AP_Transport-Layer-Address-Info.h + F1AP_Transport-UP-Layer-Address-Info-To-Add-Item.h + F1AP_Transport-UP-Layer-Address-Info-To-Add-List.h + F1AP_Transport-UP-Layer-Address-Info-To-Remove-Item.h + F1AP_Transport-UP-Layer-Address-Info-To-Remove-List.h + F1AP_TriggeringMessage.h + F1AP_TRPID.h + F1AP_TRPInformationFailure.h + F1AP_TRPInformation.h + F1AP_TRPInformationItem.h + F1AP_TRPInformationListTRPResp.h + F1AP_TRPInformationRequest.h + F1AP_TRPInformationResponse.h + F1AP_TRPInformationTypeItem.h + F1AP_TRPInformationTypeListTRPReq.h + F1AP_TRPInformationTypeResponseItem.h + F1AP_TRPInformationTypeResponseList.h + F1AP_TRPList.h + F1AP_TRPListItem.h + F1AP_TRPMeasurementQuality.h + F1AP_TRPMeasurementQuality-Item.h + F1AP_TRP-MeasurementRequestItem.h + F1AP_TRP-MeasurementRequestList.h + F1AP_TRPPositionDefinitionType.h + F1AP_TRPPositionDirectAccuracy.h + F1AP_TRPPositionDirect.h + F1AP_TRPPositionReferenced.h + F1AP_TRPReferencePointType.h + F1AP_TRPType.h + F1AP_TSCAssistanceInformation.h + F1AP_TSCTrafficCharacteristics.h + F1AP_TypeOfError.h + F1AP_UACAction.h + F1AP_UAC-Assistance-Info.h + F1AP_UACCategoryType.h + F1AP_UACOperatorDefined.h + F1AP_UACPLMN-Item.h + F1AP_UACPLMN-List.h + F1AP_UACReductionIndication.h + F1AP_UACType-Item.h + F1AP_UACType-List.h + F1AP_UEAssistanceInformationEUTRA.h + F1AP_UEAssistanceInformation.h + F1AP_UE-associatedLogicalF1-ConnectionItem.h + F1AP_UE-associatedLogicalF1-ConnectionListResAck.h + F1AP_UE-associatedLogicalF1-ConnectionListRes.h + F1AP_UE-CapabilityRAT-ContainerList.h + F1AP_UEContextModificationConfirm.h + F1AP_UEContextModificationFailure.h + F1AP_UEContextModificationRefuse.h + F1AP_UEContextModificationRequest.h + F1AP_UEContextModificationRequired.h + F1AP_UEContextModificationResponse.h + F1AP_UEContextNotRetrievable.h + F1AP_UEContextReleaseCommand.h + F1AP_UEContextReleaseComplete.h + F1AP_UEContextReleaseRequest.h + F1AP_UEContextSetupFailure.h + F1AP_UEContextSetupRequest.h + F1AP_UEContextSetupResponse.h + F1AP_UEIdentityIndexValue.h + F1AP_UEInactivityNotification.h + F1AP_UL-AoA.h + F1AP_UL-BH-Non-UP-Traffic-Mapping.h + F1AP_UL-BH-Non-UP-Traffic-Mapping-Item.h + F1AP_UL-BH-Non-UP-Traffic-Mapping-List.h + F1AP_ULConfiguration.h + F1AP_ULRRCMessageTransfer.h + F1AP_UL-RTOA-Measurement.h + F1AP_UL-RTOA-MeasurementItem.h + F1AP_UL-SRS-RSRP.h + F1AP_ULUEConfiguration.h + F1AP_UL-UP-TNL-Address-to-Update-List.h + F1AP_UL-UP-TNL-Address-to-Update-List-Item.h + F1AP_ULUPTNLInformation-ToBeSetup-Item.h + F1AP_ULUPTNLInformation-ToBeSetup-List.h + F1AP_UL-UP-TNL-Information-to-Update-List.h + F1AP_UL-UP-TNL-Information-to-Update-List-Item.h + F1AP_Uncertainty.h + F1AP_UnsuccessfulOutcome.h + F1AP_UplinkChannelBW-PerSCS-List.h + F1AP_UplinkTxDirectCurrentListInformation.h + F1AP_UplinkTxDirectCurrentTwoCarrierListInfo.h + F1AP_UPTransportLayerInformation.h + F1AP_URI-address.h + F1AP_VehicleUE.h + F1AP_VictimgNBSetID.h + F1AP_WriteReplaceWarningRequest.h + F1AP_WriteReplaceWarningResponse.h + GraphicString.h + INTEGER.h + NativeEnumerated.h + NativeInteger.h + NULL.h + ObjectDescriptor.h + OBJECT_IDENTIFIER.h + OCTET_STRING.h + OPEN_TYPE.h + per_decoder.h + per_encoder.h + per_opentype.h + per_support.h + PrintableString.h + uper_decoder.h + uper_encoder.h + uper_opentype.h + uper_support.h + UTF8String.h + VisibleString.h + xer_decoder.h + xer_encoder.h + xer_support.h +) diff --git a/openair2/F1AP/MESSAGES/CMakeLists.txt b/openair2/F1AP/MESSAGES/CMakeLists.txt index 0274b3a6cc..072e7c2fd4 100644 --- a/openair2/F1AP/MESSAGES/CMakeLists.txt +++ b/openair2/F1AP/MESSAGES/CMakeLists.txt @@ -1,9 +1,11 @@ -set(F1AP_VERSION 16 3 1) +set(F1AP_VERSION 16 21 0) make_version(F1AP_cc ${F1AP_VERSION}) string(REPLACE ";" "." F1AP_RELEASE "${F1AP_VERSION}") if(F1AP_RELEASE VERSION_EQUAL "16.3.1") include(ASN1/f1ap-16.3.1.cmake) +elseif(F1AP_RELEASE VERSION_EQUAL "16.21.0") + include(ASN1/f1ap-16.21.0.cmake) else() message(FATAL_ERROR "unknown F1AP_RELEASE ${F1AP_RELEASE}") endif() diff --git a/openair2/F1AP/lib/CMakeLists.txt b/openair2/F1AP/lib/CMakeLists.txt index 978f69fb29..0a46fa2bf0 100644 --- a/openair2/F1AP/lib/CMakeLists.txt +++ b/openair2/F1AP/lib/CMakeLists.txt @@ -3,6 +3,7 @@ add_library(f1ap_lib OBJECT f1ap_rrc_message_transfer.c f1ap_interface_management.c f1ap_ue_context.c + f1ap_positioning.c ) target_link_libraries(f1ap_lib PRIVATE asn1_f1ap ds) target_include_directories(f1ap_lib PUBLIC diff --git a/openair2/F1AP/lib/f1ap_interface_management.c b/openair2/F1AP/lib/f1ap_interface_management.c index acd6859ad7..2253493832 100644 --- a/openair2/F1AP/lib/f1ap_interface_management.c +++ b/openair2/F1AP/lib/f1ap_interface_management.c @@ -383,7 +383,7 @@ static int read_slice_info(const F1AP_ServedPLMNs_Item_t *plmn, nssai_t *nssai, if (plmn->iE_Extensions == NULL) return 0; - const F1AP_ProtocolExtensionContainer_10696P34_t *p = (F1AP_ProtocolExtensionContainer_10696P34_t *)plmn->iE_Extensions; + const F1AP_ProtocolExtensionContainer_11023P34_t *p = (F1AP_ProtocolExtensionContainer_11023P34_t *)plmn->iE_Extensions; if (p->list.count == 0) return 0; @@ -400,12 +400,12 @@ static int read_slice_info(const F1AP_ServedPLMNs_Item_t *plmn, nssai_t *nssai, return ssl->list.count; } -static F1AP_ProtocolExtensionContainer_10696P34_t *write_slice_info(int num_ssi, const nssai_t *nssai) +static F1AP_ProtocolExtensionContainer_11023P34_t *write_slice_info(int num_ssi, const nssai_t *nssai) { if (num_ssi == 0) return NULL; - F1AP_ProtocolExtensionContainer_10696P34_t *p = calloc_or_fail(1, sizeof(*p)); + F1AP_ProtocolExtensionContainer_11023P34_t *p = calloc_or_fail(1, sizeof(*p)); asn1cSequenceAdd(p->list, F1AP_ServedPLMNs_ItemExtIEs_t, served_plmns_itemExtIEs); served_plmns_itemExtIEs->criticality = F1AP_Criticality_ignore; served_plmns_itemExtIEs->id = F1AP_ProtocolIE_ID_id_TAISliceSupportList; @@ -632,7 +632,7 @@ static void encode_cells_to_activate(const served_cells_to_activate_t *cell, F1A *tmp = cell->nrpci; // gNB-CU System Information (O) for (int n = 0; n < cell->num_SI; n++) { - F1AP_ProtocolExtensionContainer_10696P112_t *p = calloc_or_fail(1, sizeof(*p)); + F1AP_ProtocolExtensionContainer_11023P113_t *p = calloc_or_fail(1, sizeof(*p)); cells_to_be_activated_item->iE_Extensions = (struct F1AP_ProtocolExtensionContainer *)p; asn1cSequenceAdd(p->list, F1AP_Cells_to_be_Activated_List_ItemExtIEs_t, cells_to_be_activated_itemExtIEs); cells_to_be_activated_itemExtIEs->id = F1AP_ProtocolIE_ID_id_gNB_CUSystemInformation; @@ -667,7 +667,7 @@ static bool decode_cells_to_activate(served_cells_to_activate_t *out, const F1AP if (cell->nRPCI != NULL) out->nrpci = *cell->nRPCI; /* IE extensions (O) */ - F1AP_ProtocolExtensionContainer_10696P112_t *ext = (F1AP_ProtocolExtensionContainer_10696P112_t *)cell->iE_Extensions; + F1AP_ProtocolExtensionContainer_11023P113_t *ext = (F1AP_ProtocolExtensionContainer_11023P113_t *)cell->iE_Extensions; if (ext != NULL) { for (int cnt = 0; cnt < ext->list.count; cnt++) { AssertError(ext->list.count == 1, return false, "At least one SI message should be present, and only 1 is supported"); @@ -786,7 +786,7 @@ F1AP_F1AP_PDU_t *encode_f1ap_setup_request(const f1ap_setup_req_t *msg) bs->size = 1; bs->bits_unused = 5; - F1AP_ProtocolExtensionContainer_10696P228_t *p = calloc_or_fail(1, sizeof(*p)); + F1AP_ProtocolExtensionContainer_11023P233_t *p = calloc_or_fail(1, sizeof(*p)); asn1cSequenceAdd(p->list, F1AP_RRC_Version_ExtIEs_t, rrcv_ext); rrcv_ext->id = F1AP_ProtocolIE_ID_id_latest_RRC_Version_Enhanced; rrcv_ext->criticality = F1AP_Criticality_ignore; @@ -866,8 +866,8 @@ bool decode_f1ap_setup_request(const F1AP_F1AP_PDU_t *pdu, f1ap_setup_req_t *out case F1AP_ProtocolIE_ID_id_GNB_DU_RRC_Version: /* gNB-DU RRC version (M) */ if (ie->value.choice.RRC_Version.iE_Extensions) { - F1AP_ProtocolExtensionContainer_10696P228_t *ext = - (F1AP_ProtocolExtensionContainer_10696P228_t *)ie->value.choice.RRC_Version.iE_Extensions; + F1AP_ProtocolExtensionContainer_11023P233_t *ext = + (F1AP_ProtocolExtensionContainer_11023P233_t *)ie->value.choice.RRC_Version.iE_Extensions; if (ext->list.count > 0) { F1AP_RRC_Version_ExtIEs_t *rrcext = ext->list.array[0]; OCTET_STRING_t *os = &rrcext->extensionValue.choice.OCTET_STRING_SIZE_3_; @@ -1058,7 +1058,7 @@ F1AP_F1AP_PDU_t *encode_f1ap_setup_response(const f1ap_setup_resp_t *msg) bs->size = 1; bs->bits_unused = 5; - F1AP_ProtocolExtensionContainer_10696P228_t *p = calloc_or_fail(1, sizeof(*p)); + F1AP_ProtocolExtensionContainer_11023P233_t *p = calloc_or_fail(1, sizeof(*p)); asn1cSequenceAdd(p->list, F1AP_RRC_Version_ExtIEs_t, rrcv_ext); rrcv_ext->id = F1AP_ProtocolIE_ID_id_latest_RRC_Version_Enhanced; rrcv_ext->criticality = F1AP_Criticality_ignore; @@ -1112,8 +1112,8 @@ bool decode_f1ap_setup_response(const F1AP_F1AP_PDU_t *pdu, f1ap_setup_resp_t *o _F1_EQ_CHECK_INT(ie->value.present, F1AP_F1SetupResponseIEs__value_PR_RRC_Version); // RRC Version: "This IE is not used in this release." if (ie->value.choice.RRC_Version.iE_Extensions) { - F1AP_ProtocolExtensionContainer_10696P228_t *ext = - (F1AP_ProtocolExtensionContainer_10696P228_t *)ie->value.choice.RRC_Version.iE_Extensions; + F1AP_ProtocolExtensionContainer_11023P233_t *ext = + (F1AP_ProtocolExtensionContainer_11023P233_t *)ie->value.choice.RRC_Version.iE_Extensions; if (ext->list.count > 0) { F1AP_RRC_Version_ExtIEs_t *rrcext = ext->list.array[0]; OCTET_STRING_t *os = &rrcext->extensionValue.choice.OCTET_STRING_SIZE_3_; diff --git a/openair2/F1AP/lib/f1ap_lib_includes.h b/openair2/F1AP/lib/f1ap_lib_includes.h index 3f039bf6f0..a50bd5efe5 100644 --- a/openair2/F1AP/lib/f1ap_lib_includes.h +++ b/openair2/F1AP/lib/f1ap_lib_includes.h @@ -47,5 +47,48 @@ #include "F1AP_NonDynamic5QIDescriptor.h" #include "F1AP_Dynamic5QIDescriptor.h" #include "F1AP_DLUPTNLInformation-ToBeSetup-Item.h" +#include "F1AP_SRSCarrier-List-Item.h" +#include "F1AP_SCS-SpecificCarrier.h" +#include "F1AP_SRSResource-List.h" +#include "F1AP_SRSResource.h" +#include "F1AP_ResourceTypePeriodic.h" +#include "F1AP_ResourceTypeSemi-persistent.h" +#include "F1AP_ResourceTypeAperiodic.h" +#include "F1AP_PosSRSResource-Item.h" +#include "F1AP_PosSRSResource-List.h" +#include "F1AP_PosResourceSetType.h" +#include "F1AP_ResourceTypePeriodicPos.h" +#include "F1AP_ResourceTypeSemi-persistentPos.h" +#include "F1AP_ResourceTypeAperiodicPos.h" +#include "F1AP_SRSResourceSet-List.h" +#include "F1AP_SRSResourceSet.h" +#include "F1AP_PosSRSResourceSet-List.h" +#include "F1AP_PosSRSResourceSet-Item.h" +#include "F1AP_ResourceSetTypePeriodic.h" +#include "F1AP_ResourceSetTypeSemi-persistent.h" +#include "F1AP_ResourceSetTypeAperiodic.h" +#include "F1AP_SRSPosResourceID.h" +#include "F1AP_PosResourceSetTypePR.h" +#include "F1AP_PosResourceSetTypeSP.h" +#include "F1AP_PosResourceSetTypeAP.h" +#include "F1AP_SemipersistentSRS.h" +#include "F1AP_AperiodicSRS.h" +#include "F1AP_TRPListItem.h" +#include "F1AP_TRPInformationTypeResponseItem.h" +#include "F1AP_GeographicalCoordinates.h" +#include "F1AP_TRPPositionDirect.h" +#include "F1AP_AccessPointPosition.h" +#include "F1AP_NGRANHighAccuracyAccessPointPosition.h" +#include "F1AP_TRPPositionReferenced.h" +#include "F1AP_RelativeGeodeticLocation.h" +#include "F1AP_RelativeCartesianLocation.h" +#include "F1AP_TRP-MeasurementRequestItem.h" +#include "F1AP_PosMeasurementQuantities-Item.h" +#include "F1AP_PosMeasurementResultList-Item.h" +#include "F1AP_PosMeasurementResultItem.h" +#include "F1AP_UL-AoA.h" +#include "F1AP_UL-RTOA-Measurement.h" +#include "F1AP_GNB-RxTxTimeDiff.h" +#include "F1AP_LCS-to-GCS-TranslationAoA.h" #endif /* F1AP_LIB_INCLUDES_H_ */ diff --git a/openair2/F1AP/lib/f1ap_positioning.c b/openair2/F1AP/lib/f1ap_positioning.c new file mode 100644 index 0000000000..4fd1e6a18f --- /dev/null +++ b/openair2/F1AP/lib/f1ap_positioning.c @@ -0,0 +1,6420 @@ +/* + * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The OpenAirInterface Software Alliance licenses this file to You under + * the OAI Public License, Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.openairinterface.org/?page_id=698 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *------------------------------------------------------------------------------- + * For more information about the OpenAirInterface (OAI) Software Alliance: + * contact@openairinterface.org + */ + +#include "f1ap_positioning.h" + +#include "f1ap_lib_common.h" +#include "f1ap_lib_includes.h" +#include "f1ap_messages_types.h" + +#include "common/utils/assertions.h" +#include "openair3/UTILS/conversions.h" +#include "common/utils/oai_asn1.h" +#include "common/utils/utils.h" +#include "common/utils/ds/byte_array.h" + +static F1AP_SRSConfig_t encode_srs_config(const f1ap_srs_config_t *in_config) +{ + F1AP_SRSConfig_t out_config = {0}; + // optional: srs_resource_list + if (in_config->srs_resource_list) { + f1ap_srs_resource_list_t *srs_resource_list = in_config->srs_resource_list; + uint32_t srs_resource_list_length = srs_resource_list->srs_resource_list_length; + asn1cCalloc(out_config.sRSResource_List, f1_sRSResource_List); + for (int i = 0; i < srs_resource_list_length; i++) { + asn1cSequenceAdd(f1_sRSResource_List->list, F1AP_SRSResource_t, f1_srs_resource); + f1ap_srs_resource_t *srs_resource = &srs_resource_list->srs_resource[i]; + f1_srs_resource->sRSResourceID = srs_resource->srs_resource_id; + + switch (srs_resource->nr_of_srs_ports) { + case F1AP_SRS_NUMBER_OF_PORTS_N1: + f1_srs_resource->nrofSRS_Ports = F1AP_SRSResource__nrofSRS_Ports_port1; + break; + case F1AP_SRS_NUMBER_OF_PORTS_N2: + f1_srs_resource->nrofSRS_Ports = F1AP_SRSResource__nrofSRS_Ports_ports2; + break; + case F1AP_SRS_NUMBER_OF_PORTS_N4: + f1_srs_resource->nrofSRS_Ports = F1AP_SRSResource__nrofSRS_Ports_ports4; + break; + default: + AssertFatal(false, "illegal number of srs ports %d\n", srs_resource->nr_of_srs_ports); + break; + } + + f1ap_transmission_comb_t *srs_res_tx_comb = &srs_resource->transmission_comb; + switch (srs_res_tx_comb->present) { + case F1AP_TRANSMISSION_COMB_PR_NOTHING: + f1_srs_resource->transmissionComb.present = F1AP_TransmissionComb_PR_NOTHING; + break; + case F1AP_TRANSMISSION_COMB_PR_N2: + f1_srs_resource->transmissionComb.present = F1AP_TransmissionComb_PR_n2; + asn1cCalloc(f1_srs_resource->transmissionComb.choice.n2, f1_n2); + f1_n2->combOffset_n2 = srs_res_tx_comb->choice.n2.comb_offset_n2; + f1_n2->cyclicShift_n2 = srs_res_tx_comb->choice.n2.cyclic_shift_n2; + break; + case F1AP_TRANSMISSION_COMB_PR_N4: + f1_srs_resource->transmissionComb.present = F1AP_TransmissionComb_PR_n4; + asn1cCalloc(f1_srs_resource->transmissionComb.choice.n4, f1_n4); + f1_n4->combOffset_n4 = srs_res_tx_comb->choice.n4.comb_offset_n4; + f1_n4->cyclicShift_n4 = srs_res_tx_comb->choice.n4.cyclic_shift_n4; + break; + default: + AssertFatal(false, "illegal transmissionComb %d\n", srs_res_tx_comb->present); + break; + } + + f1_srs_resource->startPosition = srs_resource->start_position; + + switch (srs_resource->nr_of_symbols) { + case F1AP_SRS_NUMBER_OF_SYMBOLS_N1: + f1_srs_resource->nrofSymbols = F1AP_SRSResource__nrofSymbols_n1; + break; + case F1AP_SRS_NUMBER_OF_SYMBOLS_N2: + f1_srs_resource->nrofSymbols = F1AP_SRSResource__nrofSymbols_n2; + break; + case F1AP_SRS_NUMBER_OF_SYMBOLS_N4: + f1_srs_resource->nrofSymbols = F1AP_SRSResource__nrofSymbols_n4; + break; + default: + AssertFatal(false, "illegal number of symbols %d\n", srs_resource->nr_of_symbols); + break; + } + + switch (srs_resource->repetition_factor) { + case F1AP_SRS_REPETITION_FACTOR_RF1: + f1_srs_resource->repetitionFactor = F1AP_SRSResource__repetitionFactor_n1; + break; + case F1AP_SRS_REPETITION_FACTOR_RF2: + f1_srs_resource->repetitionFactor = F1AP_SRSResource__repetitionFactor_n2; + break; + case F1AP_SRS_REPETITION_FACTOR_RF4: + f1_srs_resource->repetitionFactor = F1AP_SRSResource__repetitionFactor_n4; + break; + default: + AssertFatal(false, "illegal repetition factor %d\n", srs_resource->repetition_factor); + break; + } + + f1_srs_resource->freqDomainPosition = srs_resource->freq_domain_position; + f1_srs_resource->freqDomainShift = srs_resource->freq_domain_shift; + f1_srs_resource->c_SRS = srs_resource->c_srs; + f1_srs_resource->b_SRS = srs_resource->b_srs; + f1_srs_resource->b_hop = srs_resource->b_hop; + + switch (srs_resource->group_or_sequence_hopping) { + case F1AP_GROUPORSEQUENCEHOPPING_NOTHING: + f1_srs_resource->groupOrSequenceHopping = F1AP_SRSResource__groupOrSequenceHopping_neither; + break; + case F1AP_GROUPORSEQUENCEHOPPING_GROUPHOPPING: + f1_srs_resource->groupOrSequenceHopping = F1AP_SRSResource__groupOrSequenceHopping_groupHopping; + break; + case F1AP_GROUPORSEQUENCEHOPPING_SEQUENCEHOPPING: + f1_srs_resource->groupOrSequenceHopping = F1AP_SRSResource__groupOrSequenceHopping_sequenceHopping; + break; + default: + AssertFatal(false, "illegal groupOrSequenceHopping %d\n", srs_resource->group_or_sequence_hopping); + break; + } + + F1AP_ResourceType_t *f1_resourceType = &f1_srs_resource->resourceType; + f1ap_resource_type_t *resource_type = &srs_resource->resource_type; + if (resource_type->present == F1AP_RESOURCE_TYPE_PR_NOTHING) { + f1_resourceType->present = F1AP_ResourceType_PR_NOTHING; + } else if (resource_type->present == F1AP_RESOURCE_TYPE_PR_PERIODIC) { + f1_resourceType->present = F1AP_ResourceType_PR_periodic; + asn1cCalloc(f1_resourceType->choice.periodic, f1_periodic); + switch (resource_type->choice.periodic.periodicity) { + case F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT1: + f1_periodic->periodicity = F1AP_ResourceTypePeriodic__periodicity_slot1; + break; + case F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT2: + f1_periodic->periodicity = F1AP_ResourceTypePeriodic__periodicity_slot2; + break; + case F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT4: + f1_periodic->periodicity = F1AP_ResourceTypePeriodic__periodicity_slot4; + break; + case F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT5: + f1_periodic->periodicity = F1AP_ResourceTypePeriodic__periodicity_slot5; + break; + case F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT8: + f1_periodic->periodicity = F1AP_ResourceTypePeriodic__periodicity_slot8; + break; + case F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT10: + f1_periodic->periodicity = F1AP_ResourceTypePeriodic__periodicity_slot10; + break; + case F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT16: + f1_periodic->periodicity = F1AP_ResourceTypePeriodic__periodicity_slot16; + break; + case F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT20: + f1_periodic->periodicity = F1AP_ResourceTypePeriodic__periodicity_slot20; + break; + case F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT32: + f1_periodic->periodicity = F1AP_ResourceTypePeriodic__periodicity_slot32; + break; + case F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT40: + f1_periodic->periodicity = F1AP_ResourceTypePeriodic__periodicity_slot40; + break; + case F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT64: + f1_periodic->periodicity = F1AP_ResourceTypePeriodic__periodicity_slot64; + break; + case F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT80: + f1_periodic->periodicity = F1AP_ResourceTypePeriodic__periodicity_slot80; + break; + case F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT160: + f1_periodic->periodicity = F1AP_ResourceTypePeriodic__periodicity_slot160; + break; + case F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT320: + f1_periodic->periodicity = F1AP_ResourceTypePeriodic__periodicity_slot320; + break; + case F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT640: + f1_periodic->periodicity = F1AP_ResourceTypePeriodic__periodicity_slot640; + break; + case F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT1280: + f1_periodic->periodicity = F1AP_ResourceTypePeriodic__periodicity_slot1280; + break; + case F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT2560: + f1_periodic->periodicity = F1AP_ResourceTypePeriodic__periodicity_slot2560; + break; + default: + AssertFatal(false, "illegal periodicity %d\n", resource_type->choice.periodic.periodicity); + break; + } + f1_periodic->offset = resource_type->choice.periodic.offset; + } else if (resource_type->present == F1AP_RESOURCE_TYPE_PR_SEMI_PERSISTENT) { + f1_resourceType->present = F1AP_ResourceType_PR_semi_persistent; + asn1cCalloc(f1_resourceType->choice.semi_persistent, f1_semi_persistent); + switch (resource_type->choice.semi_persistent.periodicity) { + case F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT1: + f1_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistent__periodicity_slot1; + break; + case F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT2: + f1_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistent__periodicity_slot2; + break; + case F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT4: + f1_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistent__periodicity_slot4; + break; + case F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT5: + f1_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistent__periodicity_slot5; + break; + case F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT8: + f1_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistent__periodicity_slot8; + break; + case F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT10: + f1_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistent__periodicity_slot10; + break; + case F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT16: + f1_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistent__periodicity_slot16; + break; + case F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT20: + f1_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistent__periodicity_slot20; + break; + case F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT32: + f1_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistent__periodicity_slot32; + break; + case F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT40: + f1_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistent__periodicity_slot40; + break; + case F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT64: + f1_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistent__periodicity_slot64; + break; + case F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT80: + f1_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistent__periodicity_slot80; + break; + case F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT160: + f1_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistent__periodicity_slot160; + break; + case F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT320: + f1_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistent__periodicity_slot320; + break; + case F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT640: + f1_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistent__periodicity_slot640; + break; + case F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT1280: + f1_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistent__periodicity_slot1280; + break; + case F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT2560: + f1_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistent__periodicity_slot2560; + break; + default: + AssertFatal(false, "illegal periodicity %d\n", resource_type->choice.semi_persistent.periodicity); + break; + } + f1_semi_persistent->offset = resource_type->choice.semi_persistent.offset; + } else if (resource_type->present == F1AP_RESOURCE_TYPE_PR_APERIODIC) { + f1_resourceType->present = F1AP_ResourceType_PR_aperiodic; + asn1cCalloc(f1_resourceType->choice.aperiodic, f1_aperiodic); + f1_aperiodic->aperiodicResourceType = resource_type->choice.aperiodic; + } else { + AssertFatal(false, "illegal resourceType %d\n", resource_type->present); + } + + f1_srs_resource->sequenceId = srs_resource->sequence_id; + } + } + + // optional: pos_srs_resource_list + if (in_config->pos_srs_resource_list) { + f1ap_pos_srs_resource_list_t *pos_srs_resource_list = in_config->pos_srs_resource_list; + uint32_t pos_srs_resource_list_length = pos_srs_resource_list->pos_srs_resource_list_length; + asn1cCalloc(out_config.posSRSResource_List, f1_posSRSResource_List); + for (int i = 0; i < pos_srs_resource_list_length; i++) { + asn1cSequenceAdd(f1_posSRSResource_List->list, F1AP_PosSRSResource_Item_t, f1_pos_srs_resource); + f1ap_pos_srs_resource_item_t *pos_srs_resource = &pos_srs_resource_list->pos_srs_resource_item[i]; + f1_pos_srs_resource->srs_PosResourceId = pos_srs_resource->srs_pos_resource_id; + + f1ap_transmission_comb_pos_t *pos_srs_res_tx_comb = &pos_srs_resource->transmission_comb_pos; + switch (pos_srs_res_tx_comb->present) { + case F1AP_TRANSMISSION_COMB_POS_PR_NOTHING: + f1_pos_srs_resource->transmissionCombPos.present = F1AP_TransmissionCombPos_PR_NOTHING; + break; + case F1AP_TRANSMISSION_COMB_POS_PR_N2: + f1_pos_srs_resource->transmissionCombPos.present = F1AP_TransmissionCombPos_PR_n2; + asn1cCalloc(f1_pos_srs_resource->transmissionCombPos.choice.n2, f1_pos_srs_resource_n2); + f1ap_transmission_comb_pos_n2_t *pos_srs_resource_n2 = &pos_srs_res_tx_comb->choice.n2; + f1_pos_srs_resource_n2->combOffset_n2 = pos_srs_resource_n2->comb_offset_n2; + f1_pos_srs_resource_n2->cyclicShift_n2 = pos_srs_resource_n2->cyclic_shift_n2; + break; + case F1AP_TRANSMISSION_COMB_POS_PR_N4: + f1_pos_srs_resource->transmissionCombPos.present = F1AP_TransmissionCombPos_PR_n4; + asn1cCalloc(f1_pos_srs_resource->transmissionCombPos.choice.n4, f1_pos_srs_resource_n4); + f1ap_transmission_comb_pos_n4_t *pos_srs_resource_n4 = &pos_srs_res_tx_comb->choice.n4; + f1_pos_srs_resource_n4->combOffset_n4 = pos_srs_resource_n4->comb_offset_n4; + f1_pos_srs_resource_n4->cyclicShift_n4 = pos_srs_resource_n4->cyclic_shift_n4; + break; + case F1AP_TRANSMISSION_COMB_POS_PR_N8: + f1_pos_srs_resource->transmissionCombPos.present = F1AP_TransmissionCombPos_PR_n8; + asn1cCalloc(f1_pos_srs_resource->transmissionCombPos.choice.n8, f1_pos_srs_resource_n8); + f1ap_transmission_comb_pos_n8_t *pos_srs_resource_n8 = &pos_srs_res_tx_comb->choice.n8; + f1_pos_srs_resource_n8->combOffset_n8 = pos_srs_resource_n8->comb_offset_n8; + f1_pos_srs_resource_n8->cyclicShift_n8 = pos_srs_resource_n8->cyclic_shift_n8; + break; + default: + AssertFatal(false, "illegal transmissionComb %d\n", pos_srs_res_tx_comb->present); + break; + } + + f1_pos_srs_resource->startPosition = pos_srs_resource->start_position; + + switch (pos_srs_resource->nr_of_symbols) { + case F1AP_SRS_RESOURCE_ITEM_NUMBER_OF_SYMBOLS_N1: + f1_pos_srs_resource->nrofSymbols = F1AP_PosSRSResource_Item__nrofSymbols_n1; + break; + case F1AP_SRS_RESOURCE_ITEM_NUMBER_OF_SYMBOLS_N2: + f1_pos_srs_resource->nrofSymbols = F1AP_PosSRSResource_Item__nrofSymbols_n2; + break; + case F1AP_SRS_RESOURCE_ITEM_NUMBER_OF_SYMBOLS_N4: + f1_pos_srs_resource->nrofSymbols = F1AP_PosSRSResource_Item__nrofSymbols_n4; + break; + case F1AP_SRS_RESOURCE_ITEM_NUMBER_OF_SYMBOLS_N8: + f1_pos_srs_resource->nrofSymbols = F1AP_PosSRSResource_Item__nrofSymbols_n8; + break; + case F1AP_SRS_RESOURCE_ITEM_NUMBER_OF_SYMBOLS_N12: + f1_pos_srs_resource->nrofSymbols = F1AP_PosSRSResource_Item__nrofSymbols_n12; + break; + default: + AssertFatal(false, "illegal number of symbols %d\n", pos_srs_resource->nr_of_symbols); + break; + } + + f1_pos_srs_resource->freqDomainShift = pos_srs_resource->freq_domain_shift; + f1_pos_srs_resource->c_SRS = pos_srs_resource->c_srs; + + switch (pos_srs_resource->group_or_sequence_hopping) { + case F1AP_GROUPORSEQUENCEHOPPING_NOTHING: + f1_pos_srs_resource->groupOrSequenceHopping = F1AP_PosSRSResource_Item__groupOrSequenceHopping_neither; + break; + case F1AP_GROUPORSEQUENCEHOPPING_GROUPHOPPING: + f1_pos_srs_resource->groupOrSequenceHopping = F1AP_PosSRSResource_Item__groupOrSequenceHopping_groupHopping; + break; + case F1AP_GROUPORSEQUENCEHOPPING_SEQUENCEHOPPING: + f1_pos_srs_resource->groupOrSequenceHopping = F1AP_PosSRSResource_Item__groupOrSequenceHopping_sequenceHopping; + break; + default: + AssertFatal(false, "illegal groupOrSequenceHopping %d\n", pos_srs_resource->group_or_sequence_hopping); + break; + } + + f1ap_resource_type_pos_t *resource_type_pos = &pos_srs_resource->resource_type_pos; + F1AP_ResourceTypePos_t *f1_resourceTypePos = &f1_pos_srs_resource->resourceTypePos; + if (resource_type_pos->present == F1AP_RESOURCE_TYPE_POS_PR_NOTHING) { + f1_resourceTypePos->present = F1AP_ResourceTypePos_PR_NOTHING; + } else if (resource_type_pos->present == F1AP_RESOURCE_TYPE_POS_PR_PERIODIC) { + f1_resourceTypePos->present = F1AP_ResourceTypePos_PR_periodic; + asn1cCalloc(f1_resourceTypePos->choice.periodic, f1_pos_periodic); + switch (resource_type_pos->choice.periodic.periodicity) { + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT1: + f1_pos_periodic->periodicity = F1AP_ResourceTypePeriodicPos__periodicity_slot1; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT2: + f1_pos_periodic->periodicity = F1AP_ResourceTypePeriodicPos__periodicity_slot2; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT4: + f1_pos_periodic->periodicity = F1AP_ResourceTypePeriodicPos__periodicity_slot4; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT5: + f1_pos_periodic->periodicity = F1AP_ResourceTypePeriodicPos__periodicity_slot5; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT8: + f1_pos_periodic->periodicity = F1AP_ResourceTypePeriodicPos__periodicity_slot8; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT10: + f1_pos_periodic->periodicity = F1AP_ResourceTypePeriodicPos__periodicity_slot10; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT16: + f1_pos_periodic->periodicity = F1AP_ResourceTypePeriodicPos__periodicity_slot16; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT20: + f1_pos_periodic->periodicity = F1AP_ResourceTypePeriodicPos__periodicity_slot20; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT32: + f1_pos_periodic->periodicity = F1AP_ResourceTypePeriodicPos__periodicity_slot32; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT40: + f1_pos_periodic->periodicity = F1AP_ResourceTypePeriodicPos__periodicity_slot40; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT64: + f1_pos_periodic->periodicity = F1AP_ResourceTypePeriodicPos__periodicity_slot64; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT80: + f1_pos_periodic->periodicity = F1AP_ResourceTypePeriodicPos__periodicity_slot80; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT160: + f1_pos_periodic->periodicity = F1AP_ResourceTypePeriodicPos__periodicity_slot160; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT320: + f1_pos_periodic->periodicity = F1AP_ResourceTypePeriodicPos__periodicity_slot320; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT640: + f1_pos_periodic->periodicity = F1AP_ResourceTypePeriodicPos__periodicity_slot640; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT1280: + f1_pos_periodic->periodicity = F1AP_ResourceTypePeriodicPos__periodicity_slot1280; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT2560: + f1_pos_periodic->periodicity = F1AP_ResourceTypePeriodicPos__periodicity_slot2560; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT5120: + f1_pos_periodic->periodicity = F1AP_ResourceTypePeriodicPos__periodicity_slot5120; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT10240: + f1_pos_periodic->periodicity = F1AP_ResourceTypePeriodicPos__periodicity_slot10240; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT20480: + f1_pos_periodic->periodicity = F1AP_ResourceTypePeriodicPos__periodicity_slot20480; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT40960: + f1_pos_periodic->periodicity = F1AP_ResourceTypePeriodicPos__periodicity_slot40960; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT81920: + f1_pos_periodic->periodicity = F1AP_ResourceTypePeriodicPos__periodicity_slot81920; + break; + default: + AssertFatal(false, "illegal periodicity %d\n", resource_type_pos->choice.periodic.periodicity); + break; + } + + f1_pos_periodic->offset = resource_type_pos->choice.periodic.offset; + } else if (resource_type_pos->present == F1AP_RESOURCE_TYPE_POS_PR_SEMI_PERSISTENT) { + f1_resourceTypePos->present = F1AP_ResourceTypePos_PR_semi_persistent; + asn1cCalloc(f1_resourceTypePos->choice.semi_persistent, f1_pos_semi_persistent); + switch (resource_type_pos->choice.semi_persistent.periodicity) { + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT1: + f1_pos_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistentPos__periodicity_slot1; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT2: + f1_pos_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistentPos__periodicity_slot2; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT4: + f1_pos_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistentPos__periodicity_slot4; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT5: + f1_pos_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistentPos__periodicity_slot5; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT8: + f1_pos_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistentPos__periodicity_slot8; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT10: + f1_pos_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistentPos__periodicity_slot10; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT16: + f1_pos_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistentPos__periodicity_slot16; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT20: + f1_pos_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistentPos__periodicity_slot20; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT32: + f1_pos_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistentPos__periodicity_slot32; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT40: + f1_pos_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistentPos__periodicity_slot40; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT64: + f1_pos_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistentPos__periodicity_slot64; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT80: + f1_pos_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistentPos__periodicity_slot80; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT160: + f1_pos_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistentPos__periodicity_slot160; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT320: + f1_pos_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistentPos__periodicity_slot320; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT640: + f1_pos_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistentPos__periodicity_slot640; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT1280: + f1_pos_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistentPos__periodicity_slot1280; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT2560: + f1_pos_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistentPos__periodicity_slot2560; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT5120: + f1_pos_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistentPos__periodicity_slot5120; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT10240: + f1_pos_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistentPos__periodicity_slot10240; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT20480: + f1_pos_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistentPos__periodicity_slot20480; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT40960: + f1_pos_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistentPos__periodicity_slot40960; + break; + case F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT81920: + f1_pos_semi_persistent->periodicity = F1AP_ResourceTypeSemi_persistentPos__periodicity_slot81920; + break; + default: + AssertFatal(false, "illegal periodicity %d\n", resource_type_pos->choice.semi_persistent.periodicity); + break; + } + f1_pos_semi_persistent->offset = resource_type_pos->choice.semi_persistent.offset; + } else if (resource_type_pos->present == F1AP_RESOURCE_TYPE_POS_PR_APERIODIC) { + f1_resourceTypePos->present = F1AP_ResourceTypePos_PR_aperiodic; + asn1cCalloc(f1_resourceTypePos->choice.aperiodic, f1_pos_aperiodic); + f1_pos_aperiodic->slotOffset = resource_type_pos->choice.aperiodic.slot_offset; + } else { + AssertFatal(false, "illegal resourceType %d\n", resource_type_pos->present); + } + + f1_pos_srs_resource->sequenceId = pos_srs_resource->sequence_id; + } + } + + // optional: srs_resource_set_list + if (in_config->srs_resource_set_list) { + f1ap_srs_resource_set_list_t *srs_resource_set_list = in_config->srs_resource_set_list; + uint32_t srs_resource_set_list_length = srs_resource_set_list->srs_resource_set_list_length; + asn1cCalloc(out_config.sRSResourceSet_List, f1_sRSResourceSet_List); + for (int i = 0; i < srs_resource_set_list_length; i++) { + asn1cSequenceAdd(f1_sRSResourceSet_List->list, F1AP_SRSResourceSet_t, f1_srs_resource_set); + f1ap_srs_resource_set_t *srs_resource_set = &srs_resource_set_list->srs_resource_set[i]; + f1_srs_resource_set->sRSResourceSetID = srs_resource_set->srs_resource_set_id; + uint8_t srs_resource_id_list_length = srs_resource_set->srs_resource_id_list.srs_resource_id_list_length; + for (int j = 0; j < srs_resource_id_list_length; j++) { + asn1cSequenceAdd(f1_srs_resource_set->sRSResourceID_List.list, F1AP_SRSResourceID_t, f1_srs_resource_id); + *f1_srs_resource_id = srs_resource_set->srs_resource_id_list.srs_resource_id[j]; + } + + F1AP_ResourceSetType_t *f1_resourceSetType = &f1_srs_resource_set->resourceSetType; + f1ap_resource_set_type_t *resource_set_type = &srs_resource_set->resource_set_type; + switch (resource_set_type->present) { + case F1AP_RESOURCE_SET_TYPE_PR_NOTHING: + f1_resourceSetType->present = F1AP_ResourceSetType_PR_NOTHING; + break; + case F1AP_RESOURCE_SET_TYPE_PR_PERIODIC: + f1_resourceSetType->present = F1AP_ResourceSetType_PR_periodic; + asn1cCalloc(f1_resourceSetType->choice.periodic, f1_periodic_set_type); + f1_periodic_set_type->periodicSet = resource_set_type->choice.periodic; + break; + case F1AP_RESOURCE_SET_TYPE_PR_SEMI_PERSISTENT: + f1_resourceSetType->present = F1AP_ResourceSetType_PR_semi_persistent; + asn1cCalloc(f1_resourceSetType->choice.semi_persistent, f1_semi_persistent_set_type); + f1_semi_persistent_set_type->semi_persistentSet = resource_set_type->choice.semi_persistent; + break; + case F1AP_RESOURCE_SET_TYPE_PR_APERIODIC: + f1_resourceSetType->present = F1AP_ResourceSetType_PR_aperiodic; + asn1cCalloc(f1_resourceSetType->choice.aperiodic, f1_aperiodic_set_type); + f1_aperiodic_set_type->sRSResourceTrigger_List = resource_set_type->choice.aperiodic.srs_resource_trigger; + f1_aperiodic_set_type->slotoffset = resource_set_type->choice.aperiodic.slot_offset; + break; + default: + AssertFatal(false, "illegal resource set type %d\n", resource_set_type->present); + break; + } + } + } + + // optional: pos_srs_resource_set_list + if (in_config->pos_srs_resource_set_list) { + f1ap_pos_srs_resource_set_list_t *pos_srs_resource_set_list = in_config->pos_srs_resource_set_list; + uint32_t pos_srs_resource_set_list_length = pos_srs_resource_set_list->pos_srs_resource_set_list_length; + asn1cCalloc(out_config.posSRSResourceSet_List, f1_posSRSResourceSet_List); + for (int i = 0; i < pos_srs_resource_set_list_length; i++) { + asn1cSequenceAdd(f1_posSRSResourceSet_List->list, F1AP_PosSRSResourceSet_Item_t, f1_pos_srs_resource_set); + f1ap_pos_srs_resource_set_item_t *pos_srs_resource_set = &pos_srs_resource_set_list->pos_srs_resource_set_item[i]; + f1_pos_srs_resource_set->possrsResourceSetID = pos_srs_resource_set->pos_srs_resource_set_id; + uint8_t pos_srs_resource_id_list_length = pos_srs_resource_set->pos_srs_resource_id_list.pos_srs_resource_id_list_length; + for (int j = 0; j < pos_srs_resource_id_list_length; j++) { + asn1cSequenceAdd(f1_pos_srs_resource_set->possRSResourceID_List.list, F1AP_SRSPosResourceID_t, f1_pos_srs_resource_id); + *f1_pos_srs_resource_id = pos_srs_resource_set->pos_srs_resource_id_list.srs_pos_resource_id[j]; + } + + F1AP_PosResourceSetType_t *f1_posresourceSetType = &f1_pos_srs_resource_set->posresourceSetType; + f1ap_pos_resource_set_type_t *pos_resource_set_type = &pos_srs_resource_set->pos_resource_set_type; + switch (pos_resource_set_type->present) { + case F1AP_POS_RESOURCE_SET_TYPE_PR_NOTHING: + f1_posresourceSetType->present = F1AP_PosResourceSetType_PR_NOTHING; + break; + case F1AP_POS_RESOURCE_SET_TYPE_PR_PERIODIC: + f1_posresourceSetType->present = F1AP_PosResourceSetType_PR_periodic; + asn1cCalloc(f1_posresourceSetType->choice.periodic, f1_pos_periodic_set_type); + f1_pos_periodic_set_type->posperiodicSet = pos_resource_set_type->choice.periodic; + break; + case F1AP_POS_RESOURCE_SET_TYPE_PR_SEMI_PERSISTENT: + f1_posresourceSetType->present = F1AP_PosResourceSetType_PR_semi_persistent; + asn1cCalloc(f1_posresourceSetType->choice.semi_persistent, f1_pos_semi_persistent_set_type); + f1_pos_semi_persistent_set_type->possemi_persistentSet = pos_resource_set_type->choice.semi_persistent; + break; + case F1AP_POS_RESOURCE_SET_TYPE_PR_APERIODIC: + f1_posresourceSetType->present = F1AP_PosResourceSetType_PR_aperiodic; + asn1cCalloc(f1_posresourceSetType->choice.aperiodic, f1_pos_aperiodic_set_type); + f1_pos_aperiodic_set_type->sRSResourceTrigger_List = pos_resource_set_type->choice.srs_resource; + break; + default: + AssertFatal(false, "illegal resource set type pos %d\n", pos_resource_set_type->present); + break; + } + } + } + return out_config; +} + +static F1AP_SRSCarrier_List_Item_t encode_srs_carrier_list_item(const f1ap_srs_carrier_list_item_t *in_item) +{ + F1AP_SRSCarrier_List_Item_t out_item = {0}; + // pointA + out_item.pointA = in_item->pointA; + + // Uplink Channel BW-PerSCS-List + const f1ap_uplink_channel_bw_per_scs_list_t *uplink_channel_bw_per_scs_list = &in_item->uplink_channel_bw_per_scs_list; + F1AP_UplinkChannelBW_PerSCS_List_t *f1_uplink_channel_bw_per_scs_list = &out_item.uplinkChannelBW_PerSCS_List; + + uint32_t scs_specific_carrier_list_length = uplink_channel_bw_per_scs_list->scs_specific_carrier_list_length; + for (int i = 0; i < scs_specific_carrier_list_length; i++) { + asn1cSequenceAdd(f1_uplink_channel_bw_per_scs_list->list, F1AP_SCS_SpecificCarrier_t, f1_scs_specific_carrier); + f1ap_scs_specific_carrier_t *scs_specific_carrier = &uplink_channel_bw_per_scs_list->scs_specific_carrier[i]; + // offset to carrier + f1_scs_specific_carrier->offsetToCarrier = scs_specific_carrier->offset_to_carrier; + // subcarrier spacing + switch (scs_specific_carrier->subcarrier_spacing) { + case F1AP_SUBCARRIER_SPACING_15KHZ: + f1_scs_specific_carrier->subcarrierSpacing = F1AP_SCS_SpecificCarrier__subcarrierSpacing_kHz15; + break; + case F1AP_SUBCARRIER_SPACING_30KHZ: + f1_scs_specific_carrier->subcarrierSpacing = F1AP_SCS_SpecificCarrier__subcarrierSpacing_kHz30; + break; + case F1AP_SUBCARRIER_SPACING_60KHZ: + f1_scs_specific_carrier->subcarrierSpacing = F1AP_SCS_SpecificCarrier__subcarrierSpacing_kHz60; + break; + case F1AP_SUBCARRIER_SPACING_120KHZ: + f1_scs_specific_carrier->subcarrierSpacing = F1AP_SCS_SpecificCarrier__subcarrierSpacing_kHz120; + break; + default: + AssertFatal(false, "illegal subcarrier spacing %d\n", scs_specific_carrier->subcarrier_spacing); + break; + } + // carrier bandwidth + f1_scs_specific_carrier->carrierBandwidth = scs_specific_carrier->carrier_bandwidth; + } + + // Active UL BWP + F1AP_ActiveULBWP_t *f1_active_ul_bwp = &out_item.activeULBWP; + const f1ap_active_ul_bwp_t *active_ul_bwp = &in_item->active_ul_bwp; + + // location and bandwidth + f1_active_ul_bwp->locationAndBandwidth = active_ul_bwp->location_and_bandwidth; + // subcarrier spacing + switch (active_ul_bwp->subcarrier_spacing) { + case F1AP_SUBCARRIER_SPACING_15KHZ: + f1_active_ul_bwp->subcarrierSpacing = F1AP_ActiveULBWP__subcarrierSpacing_kHz15; + break; + case F1AP_SUBCARRIER_SPACING_30KHZ: + f1_active_ul_bwp->subcarrierSpacing = F1AP_ActiveULBWP__subcarrierSpacing_kHz30; + break; + case F1AP_SUBCARRIER_SPACING_60KHZ: + f1_active_ul_bwp->subcarrierSpacing = F1AP_ActiveULBWP__subcarrierSpacing_kHz60; + break; + case F1AP_SUBCARRIER_SPACING_120KHZ: + f1_active_ul_bwp->subcarrierSpacing = F1AP_ActiveULBWP__subcarrierSpacing_kHz120; + break; + default: + AssertFatal(false, "illegal subcarrier spacing %d\n", active_ul_bwp->subcarrier_spacing); + break; + } + + // cyclic prefix + if (active_ul_bwp->cyclic_prefix == F1AP_CP_TYPE_NORMAL) + f1_active_ul_bwp->cyclicPrefix = F1AP_ActiveULBWP__cyclicPrefix_normal; + else + f1_active_ul_bwp->cyclicPrefix = F1AP_ActiveULBWP__cyclicPrefix_extended; + + // Tx Direct Current Location + f1_active_ul_bwp->txDirectCurrentLocation = active_ul_bwp->tx_direct_current_location; + + // SRS Config + const f1ap_srs_config_t *sRSConfig = &active_ul_bwp->srs_config; + f1_active_ul_bwp->sRSConfig = encode_srs_config(sRSConfig); + return out_item; +} + +static F1AP_SRSCarrier_List_t encode_srs_carrier_list(const f1ap_srs_carrier_list_t *in_list) +{ + F1AP_SRSCarrier_List_t out_list = {0}; + uint32_t list_len = in_list->srs_carrier_list_length; + for (int i = 0; i < list_len; i++) { + asn1cSequenceAdd(out_list.list, F1AP_SRSCarrier_List_Item_t, out_item); + f1ap_srs_carrier_list_item_t *in_item = &in_list->srs_carrier_list_item[i]; + *out_item = encode_srs_carrier_list_item(in_item); + } + return out_list; +} + +static void decode_srs_config(const F1AP_SRSConfig_t *in_config, f1ap_srs_config_t *out_config) +{ + // optional: sRSResource_List + if (in_config->sRSResource_List) { + out_config->srs_resource_list = calloc_or_fail(1, sizeof(*out_config->srs_resource_list)); + f1ap_srs_resource_list_t *srs_resource_list = out_config->srs_resource_list; + uint32_t srs_resource_list_length = in_config->sRSResource_List->list.count; + srs_resource_list->srs_resource_list_length = srs_resource_list_length; + srs_resource_list->srs_resource = calloc_or_fail(srs_resource_list_length, sizeof(*srs_resource_list->srs_resource)); + for (int i = 0; i < srs_resource_list_length; i++) { + f1ap_srs_resource_t *srs_resource = &srs_resource_list->srs_resource[i]; + F1AP_SRSResource_t *f1_srs_resource = in_config->sRSResource_List->list.array[i]; + srs_resource->srs_resource_id = f1_srs_resource->sRSResourceID; + switch (f1_srs_resource->nrofSRS_Ports) { + case F1AP_SRSResource__nrofSRS_Ports_port1: + srs_resource->nr_of_srs_ports = F1AP_SRS_NUMBER_OF_PORTS_N1; + break; + case F1AP_SRSResource__nrofSRS_Ports_ports2: + srs_resource->nr_of_srs_ports = F1AP_SRS_NUMBER_OF_PORTS_N2; + break; + case F1AP_SRSResource__nrofSRS_Ports_ports4: + srs_resource->nr_of_srs_ports = F1AP_SRS_NUMBER_OF_PORTS_N4; + break; + default: + AssertFatal(false, "illegal number of srs ports %ld\n", f1_srs_resource->nrofSRS_Ports); + break; + } + + f1ap_transmission_comb_t *srs_tx_comb = &srs_resource->transmission_comb; + F1AP_TransmissionComb_t *f1_srs_tx_comb = &f1_srs_resource->transmissionComb; + switch (f1_srs_tx_comb->present) { + case F1AP_TransmissionComb_PR_NOTHING: + srs_tx_comb->present = F1AP_TRANSMISSION_COMB_PR_NOTHING; + break; + case F1AP_TransmissionComb_PR_n2: + srs_tx_comb->present = F1AP_TRANSMISSION_COMB_PR_N2; + srs_tx_comb->choice.n2.comb_offset_n2 = f1_srs_tx_comb->choice.n2->combOffset_n2; + srs_tx_comb->choice.n2.cyclic_shift_n2 = f1_srs_tx_comb->choice.n2->cyclicShift_n2; + break; + case F1AP_TransmissionComb_PR_n4: + srs_tx_comb->present = F1AP_TRANSMISSION_COMB_PR_N4; + srs_tx_comb->choice.n4.comb_offset_n4 = f1_srs_tx_comb->choice.n4->combOffset_n4; + srs_tx_comb->choice.n4.cyclic_shift_n4 = f1_srs_tx_comb->choice.n4->cyclicShift_n4; + break; + default: + AssertFatal(false, "illegal transmissionComb %d\n", f1_srs_tx_comb->present); + break; + } + + srs_resource->start_position = f1_srs_resource->startPosition; + + switch (f1_srs_resource->nrofSymbols) { + case F1AP_SRSResource__nrofSymbols_n1: + srs_resource->nr_of_symbols = F1AP_SRS_NUMBER_OF_SYMBOLS_N1; + break; + case F1AP_SRSResource__nrofSymbols_n2: + srs_resource->nr_of_symbols = F1AP_SRS_NUMBER_OF_SYMBOLS_N2; + break; + case F1AP_SRSResource__nrofSymbols_n4: + srs_resource->nr_of_symbols = F1AP_SRS_NUMBER_OF_SYMBOLS_N4; + break; + default: + AssertFatal(false, "illegal number of symbols %ld\n", f1_srs_resource->nrofSymbols); + break; + } + + switch (f1_srs_resource->repetitionFactor) { + case F1AP_SRSResource__repetitionFactor_n1: + srs_resource->repetition_factor = F1AP_SRS_REPETITION_FACTOR_RF1; + break; + case F1AP_SRSResource__repetitionFactor_n2: + srs_resource->repetition_factor = F1AP_SRS_REPETITION_FACTOR_RF2; + break; + case F1AP_SRSResource__repetitionFactor_n4: + srs_resource->repetition_factor = F1AP_SRS_REPETITION_FACTOR_RF4; + break; + default: + AssertFatal(false, "illegal repetition factor %ld\n", f1_srs_resource->repetitionFactor); + break; + } + + srs_resource->freq_domain_position = f1_srs_resource->freqDomainPosition; + srs_resource->freq_domain_shift = f1_srs_resource->freqDomainShift; + srs_resource->c_srs = f1_srs_resource->c_SRS; + srs_resource->b_srs = f1_srs_resource->b_SRS; + srs_resource->b_hop = f1_srs_resource->b_hop; + + switch (f1_srs_resource->groupOrSequenceHopping) { + case F1AP_SRSResource__groupOrSequenceHopping_neither: + srs_resource->group_or_sequence_hopping = F1AP_GROUPORSEQUENCEHOPPING_NOTHING; + break; + case F1AP_SRSResource__groupOrSequenceHopping_groupHopping: + srs_resource->group_or_sequence_hopping = F1AP_GROUPORSEQUENCEHOPPING_GROUPHOPPING; + break; + case F1AP_SRSResource__groupOrSequenceHopping_sequenceHopping: + srs_resource->group_or_sequence_hopping = F1AP_GROUPORSEQUENCEHOPPING_SEQUENCEHOPPING; + break; + default: + AssertFatal(false, "illegal groupOrSequenceHopping %ld\n", f1_srs_resource->groupOrSequenceHopping); + break; + } + + F1AP_ResourceType_t *f1_resourceType = &f1_srs_resource->resourceType; + f1ap_resource_type_t *resource_type = &srs_resource->resource_type; + if (f1_resourceType->present == F1AP_ResourceType_PR_NOTHING) { + resource_type->present = F1AP_RESOURCE_TYPE_PR_NOTHING; + } else if (f1_resourceType->present == F1AP_ResourceType_PR_periodic) { + resource_type->present = F1AP_RESOURCE_TYPE_PR_PERIODIC; + f1ap_resource_type_periodic_t *periodic = &resource_type->choice.periodic; + switch (f1_resourceType->choice.periodic->periodicity) { + case F1AP_ResourceTypePeriodic__periodicity_slot1: + periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT1; + break; + case F1AP_ResourceTypePeriodic__periodicity_slot2: + periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT2; + break; + case F1AP_ResourceTypePeriodic__periodicity_slot4: + periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT4; + break; + case F1AP_ResourceTypePeriodic__periodicity_slot5: + periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT5; + break; + case F1AP_ResourceTypePeriodic__periodicity_slot8: + periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT8; + break; + case F1AP_ResourceTypePeriodic__periodicity_slot10: + periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT10; + break; + case F1AP_ResourceTypePeriodic__periodicity_slot16: + periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT16; + break; + case F1AP_ResourceTypePeriodic__periodicity_slot20: + periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT20; + break; + case F1AP_ResourceTypePeriodic__periodicity_slot32: + periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT32; + break; + case F1AP_ResourceTypePeriodic__periodicity_slot40: + periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT40; + break; + case F1AP_ResourceTypePeriodic__periodicity_slot64: + periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT64; + break; + case F1AP_ResourceTypePeriodic__periodicity_slot80: + periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT80; + break; + case F1AP_ResourceTypePeriodic__periodicity_slot160: + periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT160; + break; + case F1AP_ResourceTypePeriodic__periodicity_slot320: + periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT320; + break; + case F1AP_ResourceTypePeriodic__periodicity_slot640: + periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT640; + break; + case F1AP_ResourceTypePeriodic__periodicity_slot1280: + periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT1280; + break; + case F1AP_ResourceTypePeriodic__periodicity_slot2560: + periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT2560; + break; + default: + AssertFatal(false, "illegal periodicity %ld\n", f1_resourceType->choice.periodic->periodicity); + break; + } + periodic->offset = f1_resourceType->choice.periodic->offset; + } else if (f1_resourceType->present == F1AP_ResourceType_PR_semi_persistent) { + resource_type->present = F1AP_RESOURCE_TYPE_PR_SEMI_PERSISTENT; + f1ap_resource_type_semi_persistent_t *semi_persistent = &resource_type->choice.semi_persistent; + switch (f1_resourceType->choice.semi_persistent->periodicity) { + case F1AP_ResourceTypeSemi_persistent__periodicity_slot1: + semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT1; + break; + case F1AP_ResourceTypeSemi_persistent__periodicity_slot2: + semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT2; + break; + case F1AP_ResourceTypeSemi_persistent__periodicity_slot4: + semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT4; + break; + case F1AP_ResourceTypeSemi_persistent__periodicity_slot5: + semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT5; + break; + case F1AP_ResourceTypeSemi_persistent__periodicity_slot8: + semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT8; + break; + case F1AP_ResourceTypeSemi_persistent__periodicity_slot10: + semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT10; + break; + case F1AP_ResourceTypeSemi_persistent__periodicity_slot16: + semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT16; + break; + case F1AP_ResourceTypeSemi_persistent__periodicity_slot20: + semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT20; + break; + case F1AP_ResourceTypeSemi_persistent__periodicity_slot32: + semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT32; + break; + case F1AP_ResourceTypeSemi_persistent__periodicity_slot40: + semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT40; + break; + case F1AP_ResourceTypeSemi_persistent__periodicity_slot64: + semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT64; + break; + case F1AP_ResourceTypeSemi_persistent__periodicity_slot80: + semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT80; + break; + case F1AP_ResourceTypeSemi_persistent__periodicity_slot160: + semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT160; + break; + case F1AP_ResourceTypeSemi_persistent__periodicity_slot320: + semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT320; + break; + case F1AP_ResourceTypeSemi_persistent__periodicity_slot640: + semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT640; + break; + case F1AP_ResourceTypeSemi_persistent__periodicity_slot1280: + semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT1280; + break; + case F1AP_ResourceTypeSemi_persistent__periodicity_slot2560: + semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT2560; + break; + default: + AssertFatal(false, "illegal periodicity %ld\n", f1_resourceType->choice.semi_persistent->periodicity); + break; + } + semi_persistent->offset = f1_resourceType->choice.semi_persistent->offset; + } else if (f1_resourceType->present == F1AP_ResourceType_PR_aperiodic) { + resource_type->present = F1AP_RESOURCE_TYPE_PR_APERIODIC; + resource_type->choice.aperiodic = f1_resourceType->choice.aperiodic->aperiodicResourceType; + } else { + AssertFatal(false, "illegal resourceType %d\n", f1_resourceType->present); + } + + srs_resource->sequence_id = f1_srs_resource->sequenceId; + } + } + + // optional: posSRSResource_List + if (in_config->posSRSResource_List) { + out_config->pos_srs_resource_list = calloc_or_fail(1, sizeof(*out_config->pos_srs_resource_list)); + f1ap_pos_srs_resource_list_t *pos_srs_resource_list = out_config->pos_srs_resource_list; + uint32_t pos_srs_resource_list_length = in_config->posSRSResource_List->list.count; + pos_srs_resource_list->pos_srs_resource_list_length = pos_srs_resource_list_length; + pos_srs_resource_list->pos_srs_resource_item = + calloc_or_fail(pos_srs_resource_list_length, sizeof(*pos_srs_resource_list->pos_srs_resource_item)); + for (int i = 0; i < pos_srs_resource_list_length; i++) { + F1AP_PosSRSResource_Item_t *f1_pos_srs_resource = in_config->posSRSResource_List->list.array[i]; + f1ap_pos_srs_resource_item_t *pos_srs_resource = &pos_srs_resource_list->pos_srs_resource_item[i]; + pos_srs_resource->srs_pos_resource_id = f1_pos_srs_resource->srs_PosResourceId; + + F1AP_TransmissionCombPos_t *f1_tx_comb_pos = &f1_pos_srs_resource->transmissionCombPos; + f1ap_transmission_comb_pos_t *tx_comb_pos = &pos_srs_resource->transmission_comb_pos; + switch (f1_tx_comb_pos->present) { + case F1AP_TransmissionCombPos_PR_NOTHING: + tx_comb_pos->present = F1AP_TRANSMISSION_COMB_POS_PR_NOTHING; + break; + case F1AP_TransmissionCombPos_PR_n2: + tx_comb_pos->present = F1AP_TRANSMISSION_COMB_POS_PR_N2; + tx_comb_pos->choice.n2.comb_offset_n2 = f1_tx_comb_pos->choice.n2->combOffset_n2; + tx_comb_pos->choice.n2.cyclic_shift_n2 = f1_tx_comb_pos->choice.n2->cyclicShift_n2; + break; + case F1AP_TransmissionCombPos_PR_n4: + tx_comb_pos->present = F1AP_TRANSMISSION_COMB_POS_PR_N4; + tx_comb_pos->choice.n4.comb_offset_n4 = f1_tx_comb_pos->choice.n4->combOffset_n4; + tx_comb_pos->choice.n4.cyclic_shift_n4 = f1_tx_comb_pos->choice.n4->cyclicShift_n4; + break; + case F1AP_TransmissionCombPos_PR_n8: + tx_comb_pos->present = F1AP_TRANSMISSION_COMB_POS_PR_N8; + tx_comb_pos->choice.n8.comb_offset_n8 = f1_tx_comb_pos->choice.n8->combOffset_n8; + tx_comb_pos->choice.n8.cyclic_shift_n8 = f1_tx_comb_pos->choice.n8->cyclicShift_n8; + break; + default: + AssertFatal(false, "illegal transmissionComb %d\n", f1_tx_comb_pos->present); + break; + } + + pos_srs_resource->start_position = f1_pos_srs_resource->startPosition; + + switch (f1_pos_srs_resource->nrofSymbols) { + case F1AP_PosSRSResource_Item__nrofSymbols_n1: + pos_srs_resource->nr_of_symbols = F1AP_SRS_RESOURCE_ITEM_NUMBER_OF_SYMBOLS_N1; + break; + case F1AP_PosSRSResource_Item__nrofSymbols_n2: + pos_srs_resource->nr_of_symbols = F1AP_SRS_RESOURCE_ITEM_NUMBER_OF_SYMBOLS_N2; + break; + case F1AP_PosSRSResource_Item__nrofSymbols_n4: + pos_srs_resource->nr_of_symbols = F1AP_SRS_RESOURCE_ITEM_NUMBER_OF_SYMBOLS_N4; + break; + case F1AP_PosSRSResource_Item__nrofSymbols_n8: + pos_srs_resource->nr_of_symbols = F1AP_SRS_RESOURCE_ITEM_NUMBER_OF_SYMBOLS_N8; + break; + case F1AP_PosSRSResource_Item__nrofSymbols_n12: + pos_srs_resource->nr_of_symbols = F1AP_SRS_RESOURCE_ITEM_NUMBER_OF_SYMBOLS_N12; + break; + default: + AssertFatal(false, "illegal number of symbols %ld\n", f1_pos_srs_resource->nrofSymbols); + break; + } + + pos_srs_resource->freq_domain_shift = f1_pos_srs_resource->freqDomainShift; + pos_srs_resource->c_srs = f1_pos_srs_resource->c_SRS; + + switch (f1_pos_srs_resource->groupOrSequenceHopping) { + case F1AP_PosSRSResource_Item__groupOrSequenceHopping_neither: + pos_srs_resource->group_or_sequence_hopping = F1AP_GROUPORSEQUENCEHOPPING_NOTHING; + break; + case F1AP_PosSRSResource_Item__groupOrSequenceHopping_groupHopping: + pos_srs_resource->group_or_sequence_hopping = F1AP_GROUPORSEQUENCEHOPPING_GROUPHOPPING; + break; + case F1AP_PosSRSResource_Item__groupOrSequenceHopping_sequenceHopping: + pos_srs_resource->group_or_sequence_hopping = F1AP_GROUPORSEQUENCEHOPPING_SEQUENCEHOPPING; + break; + default: + AssertFatal(false, "illegal groupOrSequenceHopping %ld\n", f1_pos_srs_resource->groupOrSequenceHopping); + break; + } + + F1AP_ResourceTypePos_t *f1_res_type_pos = &f1_pos_srs_resource->resourceTypePos; + f1ap_resource_type_pos_t *res_type_pos = &pos_srs_resource->resource_type_pos; + if (f1_res_type_pos->present == F1AP_ResourceTypePos_PR_NOTHING) { + res_type_pos->present = F1AP_RESOURCE_TYPE_POS_PR_NOTHING; + } else if (f1_res_type_pos->present == F1AP_ResourceTypePos_PR_periodic) { + res_type_pos->present = F1AP_RESOURCE_TYPE_POS_PR_PERIODIC; + f1ap_resource_type_periodic_pos_t *pos_periodic = &res_type_pos->choice.periodic; + switch (f1_res_type_pos->choice.periodic->periodicity) { + case F1AP_ResourceTypePeriodicPos__periodicity_slot1: + pos_periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT1; + break; + case F1AP_ResourceTypePeriodicPos__periodicity_slot2: + pos_periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT2; + break; + case F1AP_ResourceTypePeriodicPos__periodicity_slot4: + pos_periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT4; + break; + case F1AP_ResourceTypePeriodicPos__periodicity_slot5: + pos_periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT5; + break; + case F1AP_ResourceTypePeriodicPos__periodicity_slot8: + pos_periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT8; + break; + case F1AP_ResourceTypePeriodicPos__periodicity_slot10: + pos_periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT10; + break; + case F1AP_ResourceTypePeriodicPos__periodicity_slot16: + pos_periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT16; + break; + case F1AP_ResourceTypePeriodicPos__periodicity_slot20: + pos_periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT20; + break; + case F1AP_ResourceTypePeriodicPos__periodicity_slot32: + pos_periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT32; + break; + case F1AP_ResourceTypePeriodicPos__periodicity_slot40: + pos_periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT40; + break; + case F1AP_ResourceTypePeriodicPos__periodicity_slot64: + pos_periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT64; + break; + case F1AP_ResourceTypePeriodicPos__periodicity_slot80: + pos_periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT80; + break; + case F1AP_ResourceTypePeriodicPos__periodicity_slot160: + pos_periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT160; + break; + case F1AP_ResourceTypePeriodicPos__periodicity_slot320: + pos_periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT320; + break; + case F1AP_ResourceTypePeriodicPos__periodicity_slot640: + pos_periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT640; + break; + case F1AP_ResourceTypePeriodicPos__periodicity_slot1280: + pos_periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT1280; + break; + case F1AP_ResourceTypePeriodicPos__periodicity_slot2560: + pos_periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT2560; + break; + case F1AP_ResourceTypePeriodicPos__periodicity_slot5120: + pos_periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT5120; + break; + case F1AP_ResourceTypePeriodicPos__periodicity_slot10240: + pos_periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT10240; + break; + case F1AP_ResourceTypePeriodicPos__periodicity_slot20480: + pos_periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT20480; + break; + case F1AP_ResourceTypePeriodicPos__periodicity_slot40960: + pos_periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT40960; + break; + case F1AP_ResourceTypePeriodicPos__periodicity_slot81920: + pos_periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT81920; + break; + default: + AssertFatal(false, "illegal periodicity %ld\n", f1_res_type_pos->choice.periodic->periodicity); + break; + } + pos_periodic->offset = f1_res_type_pos->choice.periodic->offset; + } else if (f1_res_type_pos->present == F1AP_ResourceTypePos_PR_semi_persistent) { + res_type_pos->present = F1AP_RESOURCE_TYPE_POS_PR_SEMI_PERSISTENT; + f1ap_resource_type_semi_persistent_pos_t *pos_semi_persistent = &res_type_pos->choice.semi_persistent; + switch (f1_res_type_pos->choice.semi_persistent->periodicity) { + case F1AP_ResourceTypeSemi_persistentPos__periodicity_slot1: + pos_semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT1; + break; + case F1AP_ResourceTypeSemi_persistentPos__periodicity_slot2: + pos_semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT2; + break; + case F1AP_ResourceTypeSemi_persistentPos__periodicity_slot4: + pos_semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT4; + break; + case F1AP_ResourceTypeSemi_persistentPos__periodicity_slot5: + pos_semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT5; + break; + case F1AP_ResourceTypeSemi_persistentPos__periodicity_slot8: + pos_semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT8; + break; + case F1AP_ResourceTypeSemi_persistentPos__periodicity_slot10: + pos_semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT10; + break; + case F1AP_ResourceTypeSemi_persistentPos__periodicity_slot16: + pos_semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT16; + break; + case F1AP_ResourceTypeSemi_persistentPos__periodicity_slot20: + pos_semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT20; + break; + case F1AP_ResourceTypeSemi_persistentPos__periodicity_slot32: + pos_semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT32; + break; + case F1AP_ResourceTypeSemi_persistentPos__periodicity_slot40: + pos_semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT40; + break; + case F1AP_ResourceTypeSemi_persistentPos__periodicity_slot64: + pos_semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT64; + break; + case F1AP_ResourceTypeSemi_persistentPos__periodicity_slot80: + pos_semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT80; + break; + case F1AP_ResourceTypeSemi_persistentPos__periodicity_slot160: + pos_semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT160; + break; + case F1AP_ResourceTypeSemi_persistentPos__periodicity_slot320: + pos_semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT320; + break; + case F1AP_ResourceTypeSemi_persistentPos__periodicity_slot640: + pos_semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT640; + break; + case F1AP_ResourceTypeSemi_persistentPos__periodicity_slot1280: + pos_semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT1280; + break; + case F1AP_ResourceTypeSemi_persistentPos__periodicity_slot2560: + pos_semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT2560; + break; + case F1AP_ResourceTypeSemi_persistentPos__periodicity_slot5120: + pos_semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT5120; + break; + case F1AP_ResourceTypeSemi_persistentPos__periodicity_slot10240: + pos_semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT10240; + break; + case F1AP_ResourceTypeSemi_persistentPos__periodicity_slot20480: + pos_semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT20480; + break; + case F1AP_ResourceTypeSemi_persistentPos__periodicity_slot40960: + pos_semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT40960; + break; + case F1AP_ResourceTypeSemi_persistentPos__periodicity_slot81920: + pos_semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT81920; + break; + default: + AssertFatal(false, "illegal periodicity %ld\n", f1_res_type_pos->choice.semi_persistent->periodicity); + break; + } + pos_semi_persistent->offset = f1_res_type_pos->choice.semi_persistent->offset; + } else if (f1_res_type_pos->present == F1AP_ResourceTypePos_PR_aperiodic) { + res_type_pos->present = F1AP_RESOURCE_TYPE_POS_PR_APERIODIC; + res_type_pos->choice.aperiodic.slot_offset = f1_res_type_pos->choice.aperiodic->slotOffset; + } else { + AssertFatal(false, "illegal resourceType %d\n", f1_res_type_pos->present); + } + + pos_srs_resource->sequence_id = f1_pos_srs_resource->sequenceId; + } + } + + // optional: sRSResourceSet_List + if (in_config->sRSResourceSet_List) { + out_config->srs_resource_set_list = calloc_or_fail(1, sizeof(*out_config->srs_resource_set_list)); + f1ap_srs_resource_set_list_t *srs_resource_set_list = out_config->srs_resource_set_list; + uint32_t srs_resource_set_list_length = in_config->sRSResourceSet_List->list.count; + srs_resource_set_list->srs_resource_set_list_length = srs_resource_set_list_length; + srs_resource_set_list->srs_resource_set = + calloc_or_fail(srs_resource_set_list_length, sizeof(*srs_resource_set_list->srs_resource_set)); + for (int i = 0; i < srs_resource_set_list_length; i++) { + F1AP_SRSResourceSet_t *f1_srs_resource_set = in_config->sRSResourceSet_List->list.array[i]; + f1ap_srs_resource_set_t *srs_resource_set = &srs_resource_set_list->srs_resource_set[i]; + srs_resource_set->srs_resource_set_id = f1_srs_resource_set->sRSResourceSetID; + uint8_t srs_resource_id_list_length = f1_srs_resource_set->sRSResourceID_List.list.count; + srs_resource_set->srs_resource_id_list.srs_resource_id_list_length = srs_resource_id_list_length; + srs_resource_set->srs_resource_id_list.srs_resource_id = + calloc_or_fail(srs_resource_id_list_length, sizeof(*srs_resource_set->srs_resource_id_list.srs_resource_id)); + for (int j = 0; j < srs_resource_id_list_length; j++) { + F1AP_SRSResourceID_t *f1_srs_resource_id = f1_srs_resource_set->sRSResourceID_List.list.array[j]; + srs_resource_set->srs_resource_id_list.srs_resource_id[j] = *f1_srs_resource_id; + } + + F1AP_ResourceSetType_t *f1_res_set_type = &f1_srs_resource_set->resourceSetType; + f1ap_resource_set_type_t *res_set_type = &srs_resource_set->resource_set_type; + switch (f1_res_set_type->present) { + case F1AP_ResourceSetType_PR_NOTHING: + res_set_type->present = F1AP_RESOURCE_SET_TYPE_PR_NOTHING; + break; + case F1AP_ResourceSetType_PR_periodic: + res_set_type->present = F1AP_RESOURCE_SET_TYPE_PR_PERIODIC; + res_set_type->choice.periodic = f1_res_set_type->choice.periodic->periodicSet; + break; + case F1AP_ResourceSetType_PR_semi_persistent: + res_set_type->present = F1AP_RESOURCE_SET_TYPE_PR_SEMI_PERSISTENT; + res_set_type->choice.semi_persistent = f1_res_set_type->choice.semi_persistent->semi_persistentSet; + break; + case F1AP_ResourceSetType_PR_aperiodic: + res_set_type->present = F1AP_RESOURCE_SET_TYPE_PR_APERIODIC; + res_set_type->choice.aperiodic.srs_resource_trigger = f1_res_set_type->choice.aperiodic->sRSResourceTrigger_List; + res_set_type->choice.aperiodic.slot_offset = f1_res_set_type->choice.aperiodic->slotoffset; + break; + default: + AssertFatal(false, "illegal resource set type %d\n", f1_res_set_type->present); + break; + } + } + } + + // optional: posSRSResourceSet_List + if (in_config->posSRSResourceSet_List) { + out_config->pos_srs_resource_set_list = calloc_or_fail(1, sizeof(*out_config->pos_srs_resource_set_list)); + f1ap_pos_srs_resource_set_list_t *pos_srs_resource_set_list = out_config->pos_srs_resource_set_list; + uint32_t pos_srs_resource_set_list_length = in_config->posSRSResourceSet_List->list.count; + pos_srs_resource_set_list->pos_srs_resource_set_list_length = pos_srs_resource_set_list_length; + pos_srs_resource_set_list->pos_srs_resource_set_item = + calloc_or_fail(pos_srs_resource_set_list_length, sizeof(*pos_srs_resource_set_list->pos_srs_resource_set_item)); + for (int i = 0; i < pos_srs_resource_set_list_length; i++) { + F1AP_PosSRSResourceSet_Item_t *f1_pos_srs_resource_set = in_config->posSRSResourceSet_List->list.array[i]; + f1ap_pos_srs_resource_set_item_t *pos_srs_resource_set = &pos_srs_resource_set_list->pos_srs_resource_set_item[i]; + pos_srs_resource_set->pos_srs_resource_set_id = f1_pos_srs_resource_set->possrsResourceSetID; + uint8_t pos_srs_resource_id_list_length = f1_pos_srs_resource_set->possRSResourceID_List.list.count; + pos_srs_resource_set->pos_srs_resource_id_list.pos_srs_resource_id_list_length = pos_srs_resource_id_list_length; + pos_srs_resource_set->pos_srs_resource_id_list.srs_pos_resource_id = + calloc_or_fail(pos_srs_resource_id_list_length, + sizeof(*pos_srs_resource_set->pos_srs_resource_id_list.srs_pos_resource_id)); + for (int j = 0; j < pos_srs_resource_id_list_length; j++) { + F1AP_SRSPosResourceID_t *f1_pos_srs_resource_id = f1_pos_srs_resource_set->possRSResourceID_List.list.array[j]; + pos_srs_resource_set->pos_srs_resource_id_list.srs_pos_resource_id[j] = *f1_pos_srs_resource_id; + } + + F1AP_PosResourceSetType_t *f1_pos_res_set_type = &f1_pos_srs_resource_set->posresourceSetType; + f1ap_pos_resource_set_type_t *pos_res_set_type = &pos_srs_resource_set->pos_resource_set_type; + switch (f1_pos_res_set_type->present) { + case F1AP_PosResourceSetType_PR_NOTHING: + pos_res_set_type->present = F1AP_POS_RESOURCE_SET_TYPE_PR_NOTHING; + break; + case F1AP_PosResourceSetType_PR_periodic: + pos_res_set_type->present = F1AP_POS_RESOURCE_SET_TYPE_PR_PERIODIC; + pos_res_set_type->choice.periodic = f1_pos_res_set_type->choice.periodic->posperiodicSet; + break; + case F1AP_PosResourceSetType_PR_semi_persistent: + pos_res_set_type->present = F1AP_POS_RESOURCE_SET_TYPE_PR_SEMI_PERSISTENT; + pos_res_set_type->choice.semi_persistent = f1_pos_res_set_type->choice.semi_persistent->possemi_persistentSet; + break; + case F1AP_PosResourceSetType_PR_aperiodic: + pos_res_set_type->present = F1AP_POS_RESOURCE_SET_TYPE_PR_APERIODIC; + pos_res_set_type->choice.srs_resource = f1_pos_res_set_type->choice.aperiodic->sRSResourceTrigger_List; + break; + default: + AssertFatal(false, "illegal resource set type pos %d\n", f1_pos_res_set_type->present); + break; + } + } + } +} + +static void decode_srs_carrier_list_item(const F1AP_SRSCarrier_List_Item_t *in_item, f1ap_srs_carrier_list_item_t *out_item) +{ + // pointA + out_item->pointA = in_item->pointA; + + // Uplink Channel BW-PerSCS-List + f1ap_uplink_channel_bw_per_scs_list_t *uplink_channel_bw_per_scs_list = &out_item->uplink_channel_bw_per_scs_list; + const F1AP_UplinkChannelBW_PerSCS_List_t *f1_uplink_channel_bw_per_scs_list = &in_item->uplinkChannelBW_PerSCS_List; + + uint32_t scs_specific_carrier_list_length = f1_uplink_channel_bw_per_scs_list->list.count; + AssertFatal(scs_specific_carrier_list_length > 0, "Atleast 1 uplink channel bw per scs list should be present\n"); + uplink_channel_bw_per_scs_list->scs_specific_carrier_list_length = scs_specific_carrier_list_length; + uplink_channel_bw_per_scs_list->scs_specific_carrier = + calloc_or_fail(scs_specific_carrier_list_length, sizeof(*uplink_channel_bw_per_scs_list->scs_specific_carrier)); + for (int i = 0; i < scs_specific_carrier_list_length; i++) { + F1AP_SCS_SpecificCarrier_t *f1_scs_specific_carrier = f1_uplink_channel_bw_per_scs_list->list.array[i]; + f1ap_scs_specific_carrier_t *scs_specific_carrier = &uplink_channel_bw_per_scs_list->scs_specific_carrier[i]; + // offset to carrier + scs_specific_carrier->offset_to_carrier = f1_scs_specific_carrier->offsetToCarrier; + // subcarrier spacing + switch (f1_scs_specific_carrier->subcarrierSpacing) { + case F1AP_SCS_SpecificCarrier__subcarrierSpacing_kHz15: + scs_specific_carrier->subcarrier_spacing = F1AP_SUBCARRIER_SPACING_15KHZ; + break; + case F1AP_SCS_SpecificCarrier__subcarrierSpacing_kHz30: + scs_specific_carrier->subcarrier_spacing = F1AP_SUBCARRIER_SPACING_30KHZ; + break; + case F1AP_SCS_SpecificCarrier__subcarrierSpacing_kHz60: + scs_specific_carrier->subcarrier_spacing = F1AP_SUBCARRIER_SPACING_60KHZ; + break; + case F1AP_SCS_SpecificCarrier__subcarrierSpacing_kHz120: + scs_specific_carrier->subcarrier_spacing = F1AP_SUBCARRIER_SPACING_120KHZ; + break; + default: + AssertFatal(false, "illegal subcarrier spacing %ld\n", f1_scs_specific_carrier->subcarrierSpacing); + break; + } + // carrier bandwidth + scs_specific_carrier->carrier_bandwidth = f1_scs_specific_carrier->carrierBandwidth; + } + + // Active UL BWP + const F1AP_ActiveULBWP_t *f1_active_ul_bwp = &in_item->activeULBWP; + f1ap_active_ul_bwp_t *active_ul_bwp = &out_item->active_ul_bwp; + + // location and bandwidth + active_ul_bwp->location_and_bandwidth = f1_active_ul_bwp->locationAndBandwidth; + // subcarrier spacing + switch (f1_active_ul_bwp->subcarrierSpacing) { + case F1AP_ActiveULBWP__subcarrierSpacing_kHz15: + active_ul_bwp->subcarrier_spacing = F1AP_SUBCARRIER_SPACING_15KHZ; + break; + case F1AP_ActiveULBWP__subcarrierSpacing_kHz30: + active_ul_bwp->subcarrier_spacing = F1AP_SUBCARRIER_SPACING_30KHZ; + break; + case F1AP_ActiveULBWP__subcarrierSpacing_kHz60: + active_ul_bwp->subcarrier_spacing = F1AP_SUBCARRIER_SPACING_60KHZ; + break; + case F1AP_ActiveULBWP__subcarrierSpacing_kHz120: + active_ul_bwp->subcarrier_spacing = F1AP_SUBCARRIER_SPACING_120KHZ; + break; + default: + AssertFatal(false, "illegal subcarrier spacing %ld\n", f1_active_ul_bwp->subcarrierSpacing); + break; + } + + // cyclic prefix + if (f1_active_ul_bwp->cyclicPrefix == F1AP_ActiveULBWP__cyclicPrefix_normal) + active_ul_bwp->cyclic_prefix = F1AP_CP_TYPE_NORMAL; + else + active_ul_bwp->cyclic_prefix = F1AP_CP_TYPE_EXTENDED; + + // Tx Direct Current Location + active_ul_bwp->tx_direct_current_location = f1_active_ul_bwp->txDirectCurrentLocation; + + // SRS Config + const F1AP_SRSConfig_t *f1_sRSConfig = &f1_active_ul_bwp->sRSConfig; + f1ap_srs_config_t *sRSConfig = &active_ul_bwp->srs_config; + decode_srs_config(f1_sRSConfig, sRSConfig); +} + +static void decode_srs_carrier_list(f1ap_srs_carrier_list_t *out_list, const F1AP_SRSCarrier_List_t *in_list) +{ + uint32_t list_len = in_list->list.count; + AssertFatal(list_len > 0, "atleast 1 SRS carrier list must be present"); + out_list->srs_carrier_list_length = list_len; + out_list->srs_carrier_list_item = calloc_or_fail(list_len, sizeof(*out_list->srs_carrier_list_item)); + for (int i = 0; i < list_len; i++) { + F1AP_SRSCarrier_List_Item_t *in_item = in_list->list.array[i]; + f1ap_srs_carrier_list_item_t *out_item = &out_list->srs_carrier_list_item[i]; + decode_srs_carrier_list_item(in_item, out_item); + } +} + +static f1ap_srs_config_t cp_srs_config(const f1ap_srs_config_t *in_config) +{ + f1ap_srs_config_t out_config = {0}; + // optional: srs_resource_list + if (in_config->srs_resource_list) { + f1ap_srs_resource_list_t *srs_resource_list = in_config->srs_resource_list; + out_config.srs_resource_list = calloc_or_fail(1, sizeof(*out_config.srs_resource_list)); + f1ap_srs_resource_list_t *f1_srs_resource_list = out_config.srs_resource_list; + uint32_t srs_resource_list_length = srs_resource_list->srs_resource_list_length; + f1_srs_resource_list->srs_resource_list_length = srs_resource_list_length; + f1_srs_resource_list->srs_resource = calloc_or_fail(srs_resource_list_length, sizeof(*f1_srs_resource_list->srs_resource)); + for (int i = 0; i < srs_resource_list_length; i++) { + f1ap_srs_resource_t *srs_resource = &srs_resource_list->srs_resource[i]; + f1ap_srs_resource_t *f1_srs_resource = &f1_srs_resource_list->srs_resource[i]; + f1_srs_resource->srs_resource_id = srs_resource->srs_resource_id; + f1_srs_resource->nr_of_srs_ports = srs_resource->nr_of_srs_ports; + + f1ap_transmission_comb_t *f1_srs_tx_comb = &f1_srs_resource->transmission_comb; + f1ap_transmission_comb_t *srs_tx_comb = &srs_resource->transmission_comb; + f1_srs_tx_comb->present = srs_tx_comb->present; + switch (srs_tx_comb->present) { + case F1AP_TRANSMISSION_COMB_PR_NOTHING: + // nothing to copy + break; + case F1AP_TRANSMISSION_COMB_PR_N2: + f1_srs_tx_comb->choice.n2.comb_offset_n2 = srs_tx_comb->choice.n2.comb_offset_n2; + f1_srs_tx_comb->choice.n2.cyclic_shift_n2 = srs_tx_comb->choice.n2.cyclic_shift_n2; + break; + case F1AP_TRANSMISSION_COMB_PR_N4: + f1_srs_tx_comb->choice.n4.comb_offset_n4 = srs_tx_comb->choice.n4.comb_offset_n4; + f1_srs_tx_comb->choice.n4.cyclic_shift_n4 = srs_tx_comb->choice.n4.cyclic_shift_n4; + break; + default: + AssertFatal(false, "illegal transmissionComb %d\n", srs_tx_comb->present); + break; + } + + f1_srs_resource->start_position = srs_resource->start_position; + f1_srs_resource->nr_of_symbols = srs_resource->nr_of_symbols; + f1_srs_resource->repetition_factor = srs_resource->repetition_factor; + f1_srs_resource->freq_domain_position = srs_resource->freq_domain_position; + f1_srs_resource->freq_domain_shift = srs_resource->freq_domain_shift; + f1_srs_resource->c_srs = srs_resource->c_srs; + f1_srs_resource->b_srs = srs_resource->b_srs; + f1_srs_resource->b_hop = srs_resource->b_hop; + f1_srs_resource->group_or_sequence_hopping = srs_resource->group_or_sequence_hopping; + f1_srs_resource->resource_type.present = srs_resource->resource_type.present; + + f1ap_resource_type_t *f1_res_type = &f1_srs_resource->resource_type; + f1ap_resource_type_t *res_type = &srs_resource->resource_type; + if (res_type->present == F1AP_RESOURCE_TYPE_PR_NOTHING) { + // nothing to copy + } else if (res_type->present == F1AP_RESOURCE_TYPE_PR_PERIODIC) { + f1_res_type->choice.periodic.periodicity = res_type->choice.periodic.periodicity; + f1_res_type->choice.periodic.offset = res_type->choice.periodic.offset; + } else if (res_type->present == F1AP_RESOURCE_TYPE_PR_SEMI_PERSISTENT) { + f1_res_type->choice.semi_persistent.periodicity = res_type->choice.semi_persistent.periodicity; + f1_res_type->choice.semi_persistent.offset = res_type->choice.semi_persistent.offset; + } else if (res_type->present == F1AP_RESOURCE_TYPE_PR_APERIODIC) { + f1_res_type->choice.aperiodic = res_type->choice.aperiodic; + } else { + AssertFatal(false, "illegal resourceType %d\n", res_type->present); + } + + f1_srs_resource->sequence_id = srs_resource->sequence_id; + } + } + + // optional: pos_srs_resource_list + if (in_config->pos_srs_resource_list) { + f1ap_pos_srs_resource_list_t *pos_srs_resource_list = in_config->pos_srs_resource_list; + out_config.pos_srs_resource_list = calloc_or_fail(1, sizeof(*out_config.pos_srs_resource_list)); + f1ap_pos_srs_resource_list_t *f1_pos_srs_resource_list = out_config.pos_srs_resource_list; + uint32_t pos_srs_resource_list_length = pos_srs_resource_list->pos_srs_resource_list_length; + f1_pos_srs_resource_list->pos_srs_resource_list_length = pos_srs_resource_list_length; + f1_pos_srs_resource_list->pos_srs_resource_item = + calloc_or_fail(pos_srs_resource_list_length, sizeof(*f1_pos_srs_resource_list->pos_srs_resource_item)); + for (int i = 0; i < pos_srs_resource_list_length; i++) { + f1ap_pos_srs_resource_item_t *pos_srs_resource = &pos_srs_resource_list->pos_srs_resource_item[i]; + f1ap_pos_srs_resource_item_t *f1_pos_srs_resource = &f1_pos_srs_resource_list->pos_srs_resource_item[i]; + f1_pos_srs_resource->srs_pos_resource_id = pos_srs_resource->srs_pos_resource_id; + f1_pos_srs_resource->transmission_comb_pos.present = pos_srs_resource->transmission_comb_pos.present; + + f1ap_transmission_comb_pos_t *f1_tx_comb_pos = &f1_pos_srs_resource->transmission_comb_pos; + f1ap_transmission_comb_pos_t *tx_comb_pos = &pos_srs_resource->transmission_comb_pos; + switch (tx_comb_pos->present) { + case F1AP_TRANSMISSION_COMB_POS_PR_NOTHING: + // nothing to copy + break; + case F1AP_TRANSMISSION_COMB_POS_PR_N2: + f1_tx_comb_pos->choice.n2.comb_offset_n2 = tx_comb_pos->choice.n2.comb_offset_n2; + f1_tx_comb_pos->choice.n2.cyclic_shift_n2 = tx_comb_pos->choice.n2.cyclic_shift_n2; + break; + case F1AP_TRANSMISSION_COMB_POS_PR_N4: + f1_tx_comb_pos->choice.n4.comb_offset_n4 = tx_comb_pos->choice.n4.comb_offset_n4; + f1_tx_comb_pos->choice.n4.cyclic_shift_n4 = tx_comb_pos->choice.n4.cyclic_shift_n4; + break; + case F1AP_TRANSMISSION_COMB_POS_PR_N8: + f1_tx_comb_pos->choice.n8.comb_offset_n8 = tx_comb_pos->choice.n8.comb_offset_n8; + f1_tx_comb_pos->choice.n8.cyclic_shift_n8 = tx_comb_pos->choice.n8.cyclic_shift_n8; + break; + default: + AssertFatal(false, "illegal transmissionComb %d\n", tx_comb_pos->present); + break; + } + + f1_pos_srs_resource->start_position = pos_srs_resource->start_position; + f1_pos_srs_resource->nr_of_symbols = pos_srs_resource->nr_of_symbols; + f1_pos_srs_resource->freq_domain_shift = pos_srs_resource->freq_domain_shift; + f1_pos_srs_resource->c_srs = pos_srs_resource->c_srs; + f1_pos_srs_resource->group_or_sequence_hopping = pos_srs_resource->group_or_sequence_hopping; + + f1ap_resource_type_pos_t *f1_res_type_pos = &f1_pos_srs_resource->resource_type_pos; + f1ap_resource_type_pos_t *res_type_pos = &pos_srs_resource->resource_type_pos; + f1_res_type_pos->present = res_type_pos->present; + if (res_type_pos->present == F1AP_RESOURCE_TYPE_POS_PR_NOTHING) { + // nothing to copy + } else if (res_type_pos->present == F1AP_RESOURCE_TYPE_POS_PR_PERIODIC) { + f1_res_type_pos->choice.periodic.periodicity = res_type_pos->choice.periodic.periodicity; + f1_res_type_pos->choice.periodic.offset = res_type_pos->choice.periodic.offset; + } else if (pos_srs_resource->resource_type_pos.present == F1AP_RESOURCE_TYPE_POS_PR_SEMI_PERSISTENT) { + f1_res_type_pos->choice.semi_persistent.periodicity = res_type_pos->choice.semi_persistent.periodicity; + f1_res_type_pos->choice.semi_persistent.offset = res_type_pos->choice.semi_persistent.offset; + } else if (res_type_pos->present == F1AP_RESOURCE_TYPE_POS_PR_APERIODIC) { + f1_res_type_pos->choice.aperiodic.slot_offset = res_type_pos->choice.aperiodic.slot_offset; + } else { + AssertFatal(false, "illegal resourceType %d\n", res_type_pos->present); + } + + f1_pos_srs_resource->sequence_id = pos_srs_resource->sequence_id; + } + } + + // optional: srs_resource_set_list + if (in_config->srs_resource_set_list) { + f1ap_srs_resource_set_list_t *srs_resource_set_list = in_config->srs_resource_set_list; + out_config.srs_resource_set_list = calloc_or_fail(1, sizeof(*out_config.srs_resource_set_list)); + f1ap_srs_resource_set_list_t *f1_srs_resource_set_list = out_config.srs_resource_set_list; + uint32_t srs_resource_set_list_length = srs_resource_set_list->srs_resource_set_list_length; + f1_srs_resource_set_list->srs_resource_set_list_length = srs_resource_set_list_length; + f1_srs_resource_set_list->srs_resource_set = + calloc_or_fail(srs_resource_set_list_length, sizeof(*f1_srs_resource_set_list->srs_resource_set)); + for (int i = 0; i < srs_resource_set_list_length; i++) { + f1ap_srs_resource_set_t *srs_resource_set = &srs_resource_set_list->srs_resource_set[i]; + f1ap_srs_resource_set_t *f1_srs_resource_set = &f1_srs_resource_set_list->srs_resource_set[i]; + f1_srs_resource_set->srs_resource_set_id = srs_resource_set->srs_resource_set_id; + uint8_t srs_resource_id_list_length = srs_resource_set->srs_resource_id_list.srs_resource_id_list_length; + f1_srs_resource_set->srs_resource_id_list.srs_resource_id_list_length = srs_resource_id_list_length; + f1_srs_resource_set->srs_resource_id_list.srs_resource_id = + calloc_or_fail(srs_resource_id_list_length, sizeof(*f1_srs_resource_set->srs_resource_id_list.srs_resource_id)); + for (int j = 0; j < srs_resource_id_list_length; j++) { + f1_srs_resource_set->srs_resource_id_list.srs_resource_id[j] = srs_resource_set->srs_resource_id_list.srs_resource_id[j]; + } + + f1ap_resource_set_type_t *f1_res_set_type = &f1_srs_resource_set->resource_set_type; + f1ap_resource_set_type_t *res_set_type = &srs_resource_set->resource_set_type; + f1_res_set_type->present = res_set_type->present; + switch (res_set_type->present) { + case F1AP_RESOURCE_SET_TYPE_PR_NOTHING: + // nothing to copy + break; + case F1AP_RESOURCE_SET_TYPE_PR_PERIODIC: + f1_res_set_type->choice.periodic = res_set_type->choice.periodic; + break; + case F1AP_RESOURCE_SET_TYPE_PR_SEMI_PERSISTENT: + f1_res_set_type->choice.semi_persistent = res_set_type->choice.semi_persistent; + break; + case F1AP_RESOURCE_SET_TYPE_PR_APERIODIC: + f1_res_set_type->choice.aperiodic.srs_resource_trigger = res_set_type->choice.aperiodic.srs_resource_trigger; + f1_res_set_type->choice.aperiodic.slot_offset = res_set_type->choice.aperiodic.slot_offset; + break; + default: + AssertFatal(false, "illegal resource set type %d\n", res_set_type->present); + break; + } + } + } + + // optional: pos_srs_resource_set_list + if (in_config->pos_srs_resource_set_list) { + f1ap_pos_srs_resource_set_list_t *pos_srs_resource_set_list = in_config->pos_srs_resource_set_list; + out_config.pos_srs_resource_set_list = calloc_or_fail(1, sizeof(*out_config.pos_srs_resource_set_list)); + f1ap_pos_srs_resource_set_list_t *f1_pos_srs_resource_set_list = out_config.pos_srs_resource_set_list; + uint32_t pos_srs_resource_set_list_length = pos_srs_resource_set_list->pos_srs_resource_set_list_length; + f1_pos_srs_resource_set_list->pos_srs_resource_set_list_length = pos_srs_resource_set_list_length; + f1_pos_srs_resource_set_list->pos_srs_resource_set_item = + calloc_or_fail(pos_srs_resource_set_list_length, sizeof(*f1_pos_srs_resource_set_list->pos_srs_resource_set_item)); + for (int i = 0; i < pos_srs_resource_set_list_length; i++) { + f1ap_pos_srs_resource_set_item_t *pos_srs_resource_set = &pos_srs_resource_set_list->pos_srs_resource_set_item[i]; + f1ap_pos_srs_resource_set_item_t *f1_pos_srs_resource_set = &f1_pos_srs_resource_set_list->pos_srs_resource_set_item[i]; + f1_pos_srs_resource_set->pos_srs_resource_set_id = pos_srs_resource_set->pos_srs_resource_set_id; + uint8_t pos_srs_resource_id_list_length = pos_srs_resource_set->pos_srs_resource_id_list.pos_srs_resource_id_list_length; + f1_pos_srs_resource_set->pos_srs_resource_id_list.pos_srs_resource_id_list_length = pos_srs_resource_id_list_length; + f1_pos_srs_resource_set->pos_srs_resource_id_list.srs_pos_resource_id = + calloc_or_fail(pos_srs_resource_id_list_length, + sizeof(*f1_pos_srs_resource_set->pos_srs_resource_id_list.srs_pos_resource_id)); + for (int j = 0; j < pos_srs_resource_id_list_length; j++) { + f1_pos_srs_resource_set->pos_srs_resource_id_list.srs_pos_resource_id[j] = + pos_srs_resource_set->pos_srs_resource_id_list.srs_pos_resource_id[j]; + } + + f1ap_pos_resource_set_type_t *f1_pos_res_set_type = &f1_pos_srs_resource_set->pos_resource_set_type; + f1ap_pos_resource_set_type_t *pos_res_set_type = &pos_srs_resource_set->pos_resource_set_type; + f1_pos_res_set_type->present = pos_res_set_type->present; + switch (pos_res_set_type->present) { + case F1AP_POS_RESOURCE_SET_TYPE_PR_NOTHING: + // nothing to copy + break; + case F1AP_POS_RESOURCE_SET_TYPE_PR_PERIODIC: + f1_pos_res_set_type->choice.periodic = pos_res_set_type->choice.periodic; + break; + case F1AP_POS_RESOURCE_SET_TYPE_PR_SEMI_PERSISTENT: + f1_pos_res_set_type->choice.semi_persistent = pos_res_set_type->choice.semi_persistent; + break; + case F1AP_POS_RESOURCE_SET_TYPE_PR_APERIODIC: + f1_pos_res_set_type->choice.srs_resource = pos_res_set_type->choice.srs_resource; + break; + default: + AssertFatal(false, "illegal resource set type pos %d\n", pos_res_set_type->present); + break; + } + } + } + return out_config; +} + +static f1ap_srs_carrier_list_item_t cp_srs_carrier_list_item(const f1ap_srs_carrier_list_item_t *in_item) +{ + f1ap_srs_carrier_list_item_t out_item = {0}; + // pointA + out_item.pointA = in_item->pointA; + + // Uplink Channel BW-PerSCS-List + const f1ap_uplink_channel_bw_per_scs_list_t *uplink_channel_bw_per_scs_list = &in_item->uplink_channel_bw_per_scs_list; + f1ap_uplink_channel_bw_per_scs_list_t *f1_uplink_channel_bw_per_scs_list = &out_item.uplink_channel_bw_per_scs_list; + + uint32_t scs_specific_carrier_list_length = uplink_channel_bw_per_scs_list->scs_specific_carrier_list_length; + f1_uplink_channel_bw_per_scs_list->scs_specific_carrier_list_length = scs_specific_carrier_list_length; + f1_uplink_channel_bw_per_scs_list->scs_specific_carrier = + calloc_or_fail(scs_specific_carrier_list_length, sizeof(*f1_uplink_channel_bw_per_scs_list->scs_specific_carrier)); + for (int i = 0; i < scs_specific_carrier_list_length; i++) { + f1ap_scs_specific_carrier_t *scs_specific_carrier = &uplink_channel_bw_per_scs_list->scs_specific_carrier[i]; + f1ap_scs_specific_carrier_t *f1_scs_specific_carrier = &f1_uplink_channel_bw_per_scs_list->scs_specific_carrier[i]; + // offset to carrier + f1_scs_specific_carrier->offset_to_carrier = scs_specific_carrier->offset_to_carrier; + // subcarrier spacing + f1_scs_specific_carrier->subcarrier_spacing = scs_specific_carrier->subcarrier_spacing; + // carrier bandwidth + f1_scs_specific_carrier->carrier_bandwidth = scs_specific_carrier->carrier_bandwidth; + } + + // Active UL BWP + f1ap_active_ul_bwp_t *f1_active_ul_bwp = &out_item.active_ul_bwp; + const f1ap_active_ul_bwp_t *active_ul_bwp = &in_item->active_ul_bwp; + + // location and bandwidth + f1_active_ul_bwp->location_and_bandwidth = active_ul_bwp->location_and_bandwidth; + // subcarrier spacing + f1_active_ul_bwp->subcarrier_spacing = active_ul_bwp->subcarrier_spacing; + + // cyclic prefix + f1_active_ul_bwp->cyclic_prefix = active_ul_bwp->cyclic_prefix; + + // Tx Direct Current Location + f1_active_ul_bwp->tx_direct_current_location = active_ul_bwp->tx_direct_current_location; + + // SRS Config + f1ap_srs_config_t *f1_sRSConfig = &f1_active_ul_bwp->srs_config; + const f1ap_srs_config_t *sRSConfig = &active_ul_bwp->srs_config; + *f1_sRSConfig = cp_srs_config(sRSConfig); + return out_item; +} + +static f1ap_srs_carrier_list_t cp_srs_carrier_list(const f1ap_srs_carrier_list_t *in_list) +{ + f1ap_srs_carrier_list_t out_list = {0}; + uint32_t list_len = in_list->srs_carrier_list_length; + out_list.srs_carrier_list_length = list_len; + out_list.srs_carrier_list_item = calloc_or_fail(list_len, sizeof(*out_list.srs_carrier_list_item)); + for (int i = 0; i < list_len; i++) { + f1ap_srs_carrier_list_item_t *in_item = &in_list->srs_carrier_list_item[i]; + f1ap_srs_carrier_list_item_t *out_item = &out_list.srs_carrier_list_item[i]; + *out_item = cp_srs_carrier_list_item(in_item); + } + return out_list; +} + +static bool eq_srs_config(const f1ap_srs_config_t *f1_sRSConfig, const f1ap_srs_config_t *sRSConfig) +{ + // optional: srs_resource_list + if ((f1_sRSConfig->srs_resource_list == NULL) != (sRSConfig->srs_resource_list == NULL)) { + return false; + } + if (sRSConfig->srs_resource_list) { + f1ap_srs_resource_list_t *srs_resource_list = sRSConfig->srs_resource_list; + f1ap_srs_resource_list_t *f1_srs_resource_list = f1_sRSConfig->srs_resource_list; + uint32_t srs_resource_list_length = srs_resource_list->srs_resource_list_length; + _F1_EQ_CHECK_INT(f1_srs_resource_list->srs_resource_list_length, srs_resource_list_length); + for (int i = 0; i < srs_resource_list_length; i++) { + f1ap_srs_resource_t *srs_resource = &srs_resource_list->srs_resource[i]; + f1ap_srs_resource_t *f1_srs_resource = &f1_srs_resource_list->srs_resource[i]; + _F1_EQ_CHECK_INT(f1_srs_resource->srs_resource_id, srs_resource->srs_resource_id); + _F1_EQ_CHECK_INT(f1_srs_resource->nr_of_srs_ports, srs_resource->nr_of_srs_ports); + + f1ap_transmission_comb_t *f1_srs_tx_comb = &f1_srs_resource->transmission_comb; + f1ap_transmission_comb_t *srs_tx_comb = &srs_resource->transmission_comb; + + _F1_EQ_CHECK_INT(f1_srs_tx_comb->present, srs_tx_comb->present); + switch (srs_tx_comb->present) { + case F1AP_TRANSMISSION_COMB_PR_NOTHING: + // nothing to check + break; + case F1AP_TRANSMISSION_COMB_PR_N2: + _F1_EQ_CHECK_INT(f1_srs_tx_comb->choice.n2.comb_offset_n2, srs_tx_comb->choice.n2.comb_offset_n2); + _F1_EQ_CHECK_INT(f1_srs_tx_comb->choice.n2.cyclic_shift_n2, srs_tx_comb->choice.n2.cyclic_shift_n2); + break; + case F1AP_TRANSMISSION_COMB_PR_N4: + _F1_EQ_CHECK_INT(f1_srs_tx_comb->choice.n4.comb_offset_n4, srs_tx_comb->choice.n4.comb_offset_n4); + _F1_EQ_CHECK_INT(f1_srs_tx_comb->choice.n4.cyclic_shift_n4, srs_tx_comb->choice.n4.cyclic_shift_n4); + break; + default: + AssertFatal(false, "illegal transmissionComb %d\n", srs_tx_comb->present); + break; + } + + _F1_EQ_CHECK_INT(f1_srs_resource->start_position, srs_resource->start_position); + _F1_EQ_CHECK_INT(f1_srs_resource->nr_of_symbols, srs_resource->nr_of_symbols); + _F1_EQ_CHECK_INT(f1_srs_resource->repetition_factor, srs_resource->repetition_factor); + _F1_EQ_CHECK_INT(f1_srs_resource->freq_domain_position, srs_resource->freq_domain_position); + _F1_EQ_CHECK_INT(f1_srs_resource->freq_domain_shift, srs_resource->freq_domain_shift); + _F1_EQ_CHECK_INT(f1_srs_resource->c_srs, srs_resource->c_srs); + _F1_EQ_CHECK_INT(f1_srs_resource->b_srs, srs_resource->b_srs); + _F1_EQ_CHECK_INT(f1_srs_resource->b_hop, srs_resource->b_hop); + _F1_EQ_CHECK_INT(f1_srs_resource->group_or_sequence_hopping, srs_resource->group_or_sequence_hopping); + + f1ap_resource_type_t *f1_res_type = &f1_srs_resource->resource_type; + f1ap_resource_type_t *res_type = &srs_resource->resource_type; + _F1_EQ_CHECK_INT(f1_res_type->present, res_type->present); + if (res_type->present == F1AP_RESOURCE_TYPE_PR_NOTHING) { + // nothing to check + } else if (res_type->present == F1AP_RESOURCE_TYPE_PR_PERIODIC) { + _F1_EQ_CHECK_INT(f1_res_type->choice.periodic.periodicity, res_type->choice.periodic.periodicity); + _F1_EQ_CHECK_INT(f1_res_type->choice.periodic.offset, res_type->choice.periodic.offset); + } else if (res_type->present == F1AP_RESOURCE_TYPE_PR_SEMI_PERSISTENT) { + _F1_EQ_CHECK_INT(f1_res_type->choice.semi_persistent.periodicity, res_type->choice.semi_persistent.periodicity); + _F1_EQ_CHECK_INT(f1_res_type->choice.semi_persistent.offset, res_type->choice.semi_persistent.offset); + } else if (res_type->present == F1AP_RESOURCE_TYPE_PR_APERIODIC) { + _F1_EQ_CHECK_INT(f1_res_type->choice.aperiodic, res_type->choice.aperiodic); + } else { + AssertFatal(false, "illegal resourceType %d\n", res_type->present); + } + + _F1_EQ_CHECK_INT(f1_srs_resource->sequence_id, srs_resource->sequence_id); + } + } + + // optional: pos_srs_resource_list + if ((f1_sRSConfig->pos_srs_resource_list == NULL) != (sRSConfig->pos_srs_resource_list == NULL)) { + return false; + } + if (sRSConfig->pos_srs_resource_list) { + f1ap_pos_srs_resource_list_t *pos_srs_resource_list = sRSConfig->pos_srs_resource_list; + f1ap_pos_srs_resource_list_t *f1_pos_srs_resource_list = f1_sRSConfig->pos_srs_resource_list; + uint32_t pos_srs_resource_list_length = pos_srs_resource_list->pos_srs_resource_list_length; + _F1_EQ_CHECK_INT(f1_pos_srs_resource_list->pos_srs_resource_list_length, pos_srs_resource_list_length); + for (int i = 0; i < pos_srs_resource_list_length; i++) { + f1ap_pos_srs_resource_item_t *pos_srs_resource = &pos_srs_resource_list->pos_srs_resource_item[i]; + f1ap_pos_srs_resource_item_t *f1_pos_srs_resource = &f1_pos_srs_resource_list->pos_srs_resource_item[i]; + _F1_EQ_CHECK_INT(f1_pos_srs_resource->srs_pos_resource_id, pos_srs_resource->srs_pos_resource_id); + _F1_EQ_CHECK_INT(f1_pos_srs_resource->transmission_comb_pos.present, pos_srs_resource->transmission_comb_pos.present); + + f1ap_transmission_comb_pos_t *f1_srs_tx_comb_pos = &f1_pos_srs_resource->transmission_comb_pos; + f1ap_transmission_comb_pos_t *srs_tx_comb_pos = &pos_srs_resource->transmission_comb_pos; + switch (srs_tx_comb_pos->present) { + case F1AP_TRANSMISSION_COMB_POS_PR_NOTHING: + // nothing to check + break; + case F1AP_TRANSMISSION_COMB_POS_PR_N2: + _F1_EQ_CHECK_INT(f1_srs_tx_comb_pos->choice.n2.comb_offset_n2, srs_tx_comb_pos->choice.n2.comb_offset_n2); + _F1_EQ_CHECK_INT(f1_srs_tx_comb_pos->choice.n2.cyclic_shift_n2, srs_tx_comb_pos->choice.n2.cyclic_shift_n2); + break; + case F1AP_TRANSMISSION_COMB_POS_PR_N4: + _F1_EQ_CHECK_INT(f1_srs_tx_comb_pos->choice.n4.comb_offset_n4, srs_tx_comb_pos->choice.n4.comb_offset_n4); + _F1_EQ_CHECK_INT(f1_srs_tx_comb_pos->choice.n4.cyclic_shift_n4, srs_tx_comb_pos->choice.n4.cyclic_shift_n4); + break; + case F1AP_TRANSMISSION_COMB_POS_PR_N8: + _F1_EQ_CHECK_INT(f1_srs_tx_comb_pos->choice.n8.comb_offset_n8, srs_tx_comb_pos->choice.n8.comb_offset_n8); + _F1_EQ_CHECK_INT(f1_srs_tx_comb_pos->choice.n8.cyclic_shift_n8, srs_tx_comb_pos->choice.n8.cyclic_shift_n8); + break; + default: + AssertFatal(false, "illegal transmissionComb %d\n", srs_tx_comb_pos->present); + break; + } + + _F1_EQ_CHECK_INT(f1_pos_srs_resource->start_position, pos_srs_resource->start_position); + _F1_EQ_CHECK_INT(f1_pos_srs_resource->nr_of_symbols, pos_srs_resource->nr_of_symbols); + _F1_EQ_CHECK_INT(f1_pos_srs_resource->freq_domain_shift, pos_srs_resource->freq_domain_shift); + _F1_EQ_CHECK_INT(f1_pos_srs_resource->c_srs, pos_srs_resource->c_srs); + _F1_EQ_CHECK_INT(f1_pos_srs_resource->group_or_sequence_hopping, pos_srs_resource->group_or_sequence_hopping); + + f1ap_resource_type_pos_t *f1_res_type_pos = &f1_pos_srs_resource->resource_type_pos; + f1ap_resource_type_pos_t *res_type_pos = &pos_srs_resource->resource_type_pos; + _F1_EQ_CHECK_INT(f1_res_type_pos->present, res_type_pos->present); + if (res_type_pos->present == F1AP_RESOURCE_TYPE_POS_PR_NOTHING) { + // nothing to check + } else if (res_type_pos->present == F1AP_RESOURCE_TYPE_POS_PR_PERIODIC) { + _F1_EQ_CHECK_INT(f1_res_type_pos->choice.periodic.periodicity, res_type_pos->choice.periodic.periodicity); + _F1_EQ_CHECK_INT(f1_res_type_pos->choice.periodic.offset, res_type_pos->choice.periodic.offset); + } else if (res_type_pos->present == F1AP_RESOURCE_TYPE_POS_PR_SEMI_PERSISTENT) { + _F1_EQ_CHECK_INT(f1_res_type_pos->choice.semi_persistent.periodicity, res_type_pos->choice.semi_persistent.periodicity); + _F1_EQ_CHECK_INT(f1_res_type_pos->choice.semi_persistent.offset, res_type_pos->choice.semi_persistent.offset); + } else if (res_type_pos->present == F1AP_RESOURCE_TYPE_POS_PR_APERIODIC) { + _F1_EQ_CHECK_INT(f1_res_type_pos->choice.aperiodic.slot_offset, res_type_pos->choice.aperiodic.slot_offset); + } else { + AssertFatal(false, "illegal resourceType %d\n", res_type_pos->present); + } + + _F1_EQ_CHECK_INT(f1_pos_srs_resource->sequence_id, pos_srs_resource->sequence_id); + } + } + + // optional: srs_resource_set_list + if ((f1_sRSConfig->srs_resource_set_list == NULL) != (sRSConfig->srs_resource_set_list == NULL)) { + return false; + } + if (sRSConfig->srs_resource_set_list) { + f1ap_srs_resource_set_list_t *srs_resource_set_list = sRSConfig->srs_resource_set_list; + f1ap_srs_resource_set_list_t *f1_srs_resource_set_list = f1_sRSConfig->srs_resource_set_list; + uint32_t srs_resource_set_list_length = srs_resource_set_list->srs_resource_set_list_length; + _F1_EQ_CHECK_INT(f1_srs_resource_set_list->srs_resource_set_list_length, srs_resource_set_list_length); + for (int i = 0; i < srs_resource_set_list_length; i++) { + f1ap_srs_resource_set_t *srs_resource_set = &srs_resource_set_list->srs_resource_set[i]; + f1ap_srs_resource_set_t *f1_srs_resource_set = &f1_srs_resource_set_list->srs_resource_set[i]; + _F1_EQ_CHECK_INT(f1_srs_resource_set->srs_resource_set_id, srs_resource_set->srs_resource_set_id); + uint8_t srs_resource_id_list_length = srs_resource_set->srs_resource_id_list.srs_resource_id_list_length; + _F1_EQ_CHECK_INT(f1_srs_resource_set->srs_resource_id_list.srs_resource_id_list_length, srs_resource_id_list_length); + for (int j = 0; j < srs_resource_id_list_length; j++) { + _F1_EQ_CHECK_LONG(f1_srs_resource_set->srs_resource_id_list.srs_resource_id[j], + srs_resource_set->srs_resource_id_list.srs_resource_id[j]); + } + + f1ap_resource_set_type_t *f1_res_set_type = &f1_srs_resource_set->resource_set_type; + f1ap_resource_set_type_t *res_set_type = &srs_resource_set->resource_set_type; + _F1_EQ_CHECK_INT(f1_res_set_type->present, res_set_type->present); + switch (res_set_type->present) { + case F1AP_RESOURCE_SET_TYPE_PR_NOTHING: + // nothing to check + break; + case F1AP_RESOURCE_SET_TYPE_PR_PERIODIC: + _F1_EQ_CHECK_INT(f1_res_set_type->choice.periodic, res_set_type->choice.periodic); + break; + case F1AP_RESOURCE_SET_TYPE_PR_SEMI_PERSISTENT: + _F1_EQ_CHECK_INT(f1_res_set_type->choice.semi_persistent, res_set_type->choice.semi_persistent); + break; + case F1AP_RESOURCE_SET_TYPE_PR_APERIODIC: + _F1_EQ_CHECK_INT(f1_res_set_type->choice.aperiodic.srs_resource_trigger, + res_set_type->choice.aperiodic.srs_resource_trigger); + _F1_EQ_CHECK_LONG(f1_res_set_type->choice.aperiodic.slot_offset, res_set_type->choice.aperiodic.slot_offset); + break; + default: + AssertFatal(false, "illegal resource set type %d\n", res_set_type->present); + break; + } + } + } + + // optional: pos_srs_resource_set_list + if ((f1_sRSConfig->pos_srs_resource_set_list == NULL) != (sRSConfig->pos_srs_resource_set_list == NULL)) { + return false; + } + if (sRSConfig->pos_srs_resource_set_list) { + f1ap_pos_srs_resource_set_list_t *pos_srs_resource_set_list = sRSConfig->pos_srs_resource_set_list; + f1ap_pos_srs_resource_set_list_t *f1_pos_srs_resource_set_list = f1_sRSConfig->pos_srs_resource_set_list; + uint32_t pos_srs_resource_set_list_length = pos_srs_resource_set_list->pos_srs_resource_set_list_length; + _F1_EQ_CHECK_INT(f1_pos_srs_resource_set_list->pos_srs_resource_set_list_length, pos_srs_resource_set_list_length); + for (int i = 0; i < pos_srs_resource_set_list_length; i++) { + f1ap_pos_srs_resource_set_item_t *pos_srs_resource_set = &pos_srs_resource_set_list->pos_srs_resource_set_item[i]; + f1ap_pos_srs_resource_set_item_t *f1_pos_srs_resource_set = &f1_pos_srs_resource_set_list->pos_srs_resource_set_item[i]; + _F1_EQ_CHECK_INT(f1_pos_srs_resource_set->pos_srs_resource_set_id, pos_srs_resource_set->pos_srs_resource_set_id); + uint8_t pos_srs_resource_id_list_length = pos_srs_resource_set->pos_srs_resource_id_list.pos_srs_resource_id_list_length; + _F1_EQ_CHECK_INT(f1_pos_srs_resource_set->pos_srs_resource_id_list.pos_srs_resource_id_list_length, + pos_srs_resource_id_list_length); + for (int j = 0; j < pos_srs_resource_id_list_length; j++) { + _F1_EQ_CHECK_LONG(f1_pos_srs_resource_set->pos_srs_resource_id_list.srs_pos_resource_id[j], + pos_srs_resource_set->pos_srs_resource_id_list.srs_pos_resource_id[j]); + } + + f1ap_pos_resource_set_type_t *f1_pos_res_set_type = &f1_pos_srs_resource_set->pos_resource_set_type; + f1ap_pos_resource_set_type_t *pos_res_set_type = &pos_srs_resource_set->pos_resource_set_type; + _F1_EQ_CHECK_INT(f1_pos_res_set_type->present, pos_res_set_type->present); + switch (pos_res_set_type->present) { + case F1AP_POS_RESOURCE_SET_TYPE_PR_NOTHING: + // nothing to check + break; + case F1AP_POS_RESOURCE_SET_TYPE_PR_PERIODIC: + _F1_EQ_CHECK_INT(f1_pos_res_set_type->choice.periodic, pos_res_set_type->choice.periodic); + break; + case F1AP_POS_RESOURCE_SET_TYPE_PR_SEMI_PERSISTENT: + _F1_EQ_CHECK_INT(f1_pos_res_set_type->choice.semi_persistent, pos_res_set_type->choice.semi_persistent); + break; + case F1AP_POS_RESOURCE_SET_TYPE_PR_APERIODIC: + _F1_EQ_CHECK_INT(f1_pos_res_set_type->choice.srs_resource, pos_res_set_type->choice.srs_resource); + break; + default: + AssertFatal(false, "illegal resource set type pos %d\n", pos_res_set_type->present); + break; + } + } + } + return true; +} + +static bool eq_srs_carrier_list_item(const f1ap_srs_carrier_list_item_t *f1_srs_carrier_list_item, + const f1ap_srs_carrier_list_item_t *srs_carrier_list_item) +{ + // pointA + _F1_EQ_CHECK_INT(f1_srs_carrier_list_item->pointA, srs_carrier_list_item->pointA); + + // Uplink Channel BW-PerSCS-List + const f1ap_uplink_channel_bw_per_scs_list_t *uplink_channel_bw_per_scs_list = + &srs_carrier_list_item->uplink_channel_bw_per_scs_list; + const f1ap_uplink_channel_bw_per_scs_list_t *f1_uplink_channel_bw_per_scs_list = + &f1_srs_carrier_list_item->uplink_channel_bw_per_scs_list; + + uint32_t scs_specific_carrier_list_length = uplink_channel_bw_per_scs_list->scs_specific_carrier_list_length; + _F1_EQ_CHECK_INT(f1_uplink_channel_bw_per_scs_list->scs_specific_carrier_list_length, scs_specific_carrier_list_length); + for (int i = 0; i < scs_specific_carrier_list_length; i++) { + f1ap_scs_specific_carrier_t *scs_specific_carrier = &uplink_channel_bw_per_scs_list->scs_specific_carrier[i]; + f1ap_scs_specific_carrier_t *f1_scs_specific_carrier = &f1_uplink_channel_bw_per_scs_list->scs_specific_carrier[i]; + // offset to carrier + _F1_EQ_CHECK_INT(f1_scs_specific_carrier->offset_to_carrier, scs_specific_carrier->offset_to_carrier); + // subcarrier spacing + _F1_EQ_CHECK_INT(f1_scs_specific_carrier->subcarrier_spacing, scs_specific_carrier->subcarrier_spacing); + // carrier bandwidth + _F1_EQ_CHECK_INT(f1_scs_specific_carrier->carrier_bandwidth, scs_specific_carrier->carrier_bandwidth); + } + + // Active UL BWP + const f1ap_active_ul_bwp_t *f1_active_ul_bwp = &f1_srs_carrier_list_item->active_ul_bwp; + const f1ap_active_ul_bwp_t *active_ul_bwp = &srs_carrier_list_item->active_ul_bwp; + + // location and bandwidth + _F1_EQ_CHECK_INT(f1_active_ul_bwp->location_and_bandwidth, active_ul_bwp->location_and_bandwidth); + // subcarrier spacing + _F1_EQ_CHECK_INT(f1_active_ul_bwp->subcarrier_spacing, active_ul_bwp->subcarrier_spacing); + + // cyclic prefix + _F1_EQ_CHECK_INT(f1_active_ul_bwp->cyclic_prefix, active_ul_bwp->cyclic_prefix); + + // Tx Direct Current Location + _F1_EQ_CHECK_INT(f1_active_ul_bwp->tx_direct_current_location, active_ul_bwp->tx_direct_current_location); + + // SRS Config + const f1ap_srs_config_t *f1_sRSConfig = &f1_active_ul_bwp->srs_config; + const f1ap_srs_config_t *sRSConfig = &active_ul_bwp->srs_config; + _F1_CHECK_EXP(eq_srs_config(f1_sRSConfig, sRSConfig)); + return true; +} + +static bool eq_srs_carrier_list(const f1ap_srs_carrier_list_t *srs_carrier_list_a, + const f1ap_srs_carrier_list_t *srs_carrier_list_b) +{ + uint32_t srs_carrier_list_len = srs_carrier_list_a->srs_carrier_list_length; + _F1_EQ_CHECK_INT(srs_carrier_list_b->srs_carrier_list_length, srs_carrier_list_len); + for (int i = 0; i < srs_carrier_list_len; i++) { + f1ap_srs_carrier_list_item_t *srs_carrier_list_item_a = &srs_carrier_list_a->srs_carrier_list_item[i]; + f1ap_srs_carrier_list_item_t *srs_carrier_list_item_b = &srs_carrier_list_b->srs_carrier_list_item[i]; + _F1_CHECK_EXP(eq_srs_carrier_list_item(srs_carrier_list_item_a, srs_carrier_list_item_b)); + } + return true; +} + +static void free_srs_carrier_list(f1ap_srs_carrier_list_t *srs_carrier_list) +{ + uint32_t srs_carrier_list_len = srs_carrier_list->srs_carrier_list_length; + for (int i = 0; i < srs_carrier_list_len; i++) { + f1ap_srs_carrier_list_item_t *srs_carrier_list_item = &srs_carrier_list->srs_carrier_list_item[i]; + free(srs_carrier_list_item->uplink_channel_bw_per_scs_list.scs_specific_carrier); + + f1ap_active_ul_bwp_t *active_ul_bwp = &srs_carrier_list_item->active_ul_bwp; + f1ap_srs_config_t *sRSConfig = &active_ul_bwp->srs_config; + if (sRSConfig->srs_resource_list) { + f1ap_srs_resource_list_t *srs_resource_list = sRSConfig->srs_resource_list; + free(srs_resource_list->srs_resource); + free(sRSConfig->srs_resource_list); + } + if (sRSConfig->pos_srs_resource_list) { + f1ap_pos_srs_resource_list_t *pos_srs_resource_list = sRSConfig->pos_srs_resource_list; + free(pos_srs_resource_list->pos_srs_resource_item); + free(sRSConfig->pos_srs_resource_list); + } + if (sRSConfig->srs_resource_set_list) { + f1ap_srs_resource_set_list_t *srs_resource_set_list = sRSConfig->srs_resource_set_list; + uint32_t srs_resource_set_list_length = srs_resource_set_list->srs_resource_set_list_length; + for (int j = 0; j < srs_resource_set_list_length; j++) { + f1ap_srs_resource_set_t *srs_resource_set = &srs_resource_set_list->srs_resource_set[j]; + free(srs_resource_set->srs_resource_id_list.srs_resource_id); + } + free(srs_resource_set_list->srs_resource_set); + free(sRSConfig->srs_resource_set_list); + } + if (sRSConfig->pos_srs_resource_set_list) { + f1ap_pos_srs_resource_set_list_t *pos_srs_resource_set_list = sRSConfig->pos_srs_resource_set_list; + uint32_t pos_srs_resource_set_list_length = pos_srs_resource_set_list->pos_srs_resource_set_list_length; + for (int j = 0; j < pos_srs_resource_set_list_length; j++) { + f1ap_pos_srs_resource_set_item_t *pos_srs_resource_set = &pos_srs_resource_set_list->pos_srs_resource_set_item[j]; + free(pos_srs_resource_set->pos_srs_resource_id_list.srs_pos_resource_id); + } + free(pos_srs_resource_set_list->pos_srs_resource_set_item); + free(sRSConfig->pos_srs_resource_set_list); + } + } + free(srs_carrier_list->srs_carrier_list_item); +} + +static F1AP_SRSType_t encode_f1ap_srstype(const f1ap_srs_type_t *srs_type) +{ + F1AP_SRSType_t f1_srstype = {0}; + switch (srs_type->present) { + case F1AP_SRS_TYPE_PR_NOTHING: + f1_srstype.present = F1AP_SRSType_PR_NOTHING; + break; + case F1AP_SRS_TYPE_PR_SEMIPERSISTENTSRS: + f1_srstype.present = F1AP_SRSType_PR_semipersistentSRS; + asn1cCalloc(f1_srstype.choice.semipersistentSRS, sp_srs); + sp_srs->sRSResourceSetID = *srs_type->choice.srs_resource_set_id; + break; + case F1AP_SRS_TYPE_PR_APERIODICSRS: + f1_srstype.present = F1AP_SRSType_PR_aperiodicSRS; + asn1cCalloc(f1_srstype.choice.aperiodicSRS, ap_srs); + ap_srs->aperiodic = *srs_type->choice.aperiodic; + break; + default: + AssertFatal(false, "unknown SRS type %d\n", srs_type->present); + break; + } + return f1_srstype; +} + +static bool decode_f1ap_srstype(const F1AP_SRSType_t *srs_type, f1ap_srs_type_t *out) +{ + switch (srs_type->present) { + case F1AP_SRSType_PR_NOTHING: + out->present = F1AP_SRS_TYPE_PR_NOTHING; + break; + case F1AP_SRSType_PR_semipersistentSRS: + out->present = F1AP_SRS_TYPE_PR_SEMIPERSISTENTSRS; + out->choice.srs_resource_set_id = calloc_or_fail(1, sizeof(*out->choice.srs_resource_set_id)); + *out->choice.srs_resource_set_id = srs_type->choice.semipersistentSRS->sRSResourceSetID; + break; + case F1AP_SRSType_PR_aperiodicSRS: + out->present = F1AP_SRS_TYPE_PR_APERIODICSRS; + out->choice.aperiodic = calloc_or_fail(1, sizeof(*out->choice.aperiodic)); + *out->choice.aperiodic = srs_type->choice.aperiodicSRS->aperiodic; + break; + default: + PRINT_ERROR("received illegal SRS type %d\n", srs_type->present); + return false; + break; + } + return true; +} + +static F1AP_AbortTransmission_t encode_f1ap_abort_transmission(const f1ap_abort_transmission_t *abort_tx) +{ + F1AP_AbortTransmission_t f1_abort_tx = {0}; + switch (abort_tx->present) { + case F1AP_ABORT_TRANSMISSION_PR_NOTHING: + f1_abort_tx.present = F1AP_AbortTransmission_PR_NOTHING; + break; + case F1AP_ABORT_TRANSMISSION_PR_SRSRESOURCESETID: + f1_abort_tx.present = F1AP_AbortTransmission_PR_sRSResourceSetID; + f1_abort_tx.choice.sRSResourceSetID = abort_tx->choice.srs_resource_set_id; + break; + case F1AP_ABORT_TRANSMISSION_PR_RELEASEALL: + f1_abort_tx.present = F1AP_AbortTransmission_PR_releaseALL; + break; + default: + AssertFatal(false, "unknown Abort Transmission %d\n", abort_tx->present); + break; + } + return f1_abort_tx; +} + +static bool decode_f1ap_abort_transmission(const F1AP_AbortTransmission_t *in, f1ap_abort_transmission_t *out) +{ + switch (in->present) { + case F1AP_AbortTransmission_PR_NOTHING: + out->present = F1AP_ABORT_TRANSMISSION_PR_NOTHING; + break; + case F1AP_AbortTransmission_PR_sRSResourceSetID: + out->present = F1AP_ABORT_TRANSMISSION_PR_SRSRESOURCESETID; + out->choice.srs_resource_set_id = in->choice.sRSResourceSetID; + break; + case F1AP_AbortTransmission_PR_releaseALL: + out->present = F1AP_ABORT_TRANSMISSION_PR_RELEASEALL; + out->choice.release_all = true; + break; + default: + AssertError(false, return false, "received illegal Abort Transmission %d\n", in->present); + break; + } + return true; +} + +static F1AP_TRPReferencePointType_t encode_reference_point_type(const f1ap_trp_reference_point_type_t *in) +{ + F1AP_TRPReferencePointType_t out = {0}; + switch (in->present) { + case F1AP_TRP_REFERENCE_POINT_TYPE_PR_TRPPOSITION_RELATIVE_GEODETIC: + out.present = F1AP_TRPReferencePointType_PR_tRPPositionRelativeGeodetic; + asn1cCalloc(out.choice.tRPPositionRelativeGeodetic, f1_tRPPositionRelativeGeodetic); + const f1ap_relative_geodetic_location_t *tRPPositionRelativeGeodetic = &in->choice.trp_position_relative_geodetic; + f1_tRPPositionRelativeGeodetic->milli_Arc_SecondUnits = tRPPositionRelativeGeodetic->milli_arc_second_units; + f1_tRPPositionRelativeGeodetic->heightUnits = tRPPositionRelativeGeodetic->height_units; + f1_tRPPositionRelativeGeodetic->deltaLatitude = tRPPositionRelativeGeodetic->delta_latitude; + f1_tRPPositionRelativeGeodetic->deltaLongitude = tRPPositionRelativeGeodetic->delta_longitude; + f1_tRPPositionRelativeGeodetic->deltaHeight = tRPPositionRelativeGeodetic->delta_height; + + F1AP_LocationUncertainty_t *f1_locationUncertainty_g = &f1_tRPPositionRelativeGeodetic->locationUncertainty; + const f1ap_location_uncertainty_t *locationUncertainty_g = &tRPPositionRelativeGeodetic->location_uncertainty; + f1_locationUncertainty_g->horizontalUncertainty = locationUncertainty_g->horizontal_uncertainty; + f1_locationUncertainty_g->horizontalConfidence = locationUncertainty_g->horizontal_confidence; + f1_locationUncertainty_g->verticalUncertainty = locationUncertainty_g->vertical_uncertainty; + f1_locationUncertainty_g->verticalConfidence = locationUncertainty_g->vertical_confidence; + break; + case F1AP_TRP_REFERENCE_POINT_TYPE_PR_TRPPOSITION_RELATIVE_CARTESIAN: + out.present = F1AP_TRPReferencePointType_PR_tRPPositionRelativeCartesian; + asn1cCalloc(out.choice.tRPPositionRelativeCartesian, f1_tRPPositionRelativeCartesian); + const f1ap_relative_cartesian_location_t *tRPPositionRelativeCartesian = &in->choice.trp_position_relative_cartesian; + f1_tRPPositionRelativeCartesian->xYZunit = tRPPositionRelativeCartesian->xyz_unit; + f1_tRPPositionRelativeCartesian->xvalue = tRPPositionRelativeCartesian->xvalue; + f1_tRPPositionRelativeCartesian->yvalue = tRPPositionRelativeCartesian->yvalue; + f1_tRPPositionRelativeCartesian->zvalue = tRPPositionRelativeCartesian->zvalue; + + F1AP_LocationUncertainty_t *f1_locationUncertainty_c = &f1_tRPPositionRelativeCartesian->locationUncertainty; + const f1ap_location_uncertainty_t *locationUncertainty_c = &tRPPositionRelativeCartesian->location_uncertainty; + f1_locationUncertainty_c->horizontalUncertainty = locationUncertainty_c->horizontal_uncertainty; + f1_locationUncertainty_c->horizontalConfidence = locationUncertainty_c->horizontal_confidence; + f1_locationUncertainty_c->verticalUncertainty = locationUncertainty_c->vertical_uncertainty; + f1_locationUncertainty_c->verticalConfidence = locationUncertainty_c->vertical_confidence; + break; + default: + AssertFatal(false, "illegal trp reference point type entry %d\n", in->present); + break; + } + return out; +} + +static F1AP_NGRANHighAccuracyAccessPointPosition_t encode_trp_ha_pos(const f1ap_ngran_high_accuracy_access_point_position_t *in) +{ + F1AP_NGRANHighAccuracyAccessPointPosition_t out = {0}; + out.latitude = in->latitude; + out.longitude = in->longitude; + out.altitude = in->altitude; + out.uncertaintySemi_major = in->uncertainty_semi_major; + out.uncertaintySemi_minor = in->uncertainty_semi_minor; + out.orientationOfMajorAxis = in->orientation_of_major_axis; + out.horizontalConfidence = in->horizontal_confidence; + out.uncertaintyAltitude = in->uncertainty_altitude; + out.verticalConfidence = in->vertical_confidence; + return out; +} + +static F1AP_GeographicalCoordinates_t encode_geographical_coordinates(const f1ap_geographical_coordinates_t *in) +{ + F1AP_GeographicalCoordinates_t out = {0}; + F1AP_TRPPositionDefinitionType_t *f1_trp_pos_def_type = &out.tRPPositionDefinitionType; + const f1ap_trp_position_definition_type_t *trp_pos_def_type = &in->trp_position_definition_type; + switch (trp_pos_def_type->present) { + case F1AP_TRP_POSITION_DEFINITION_TYPE_PR_NOTHING: + f1_trp_pos_def_type->present = F1AP_TRPPositionDefinitionType_PR_NOTHING; + break; + case F1AP_TRP_POSITION_DEFINITION_TYPE_PR_DIRECT: + f1_trp_pos_def_type->present = F1AP_TRPPositionDefinitionType_PR_direct; + asn1cCalloc(f1_trp_pos_def_type->choice.direct, f1_direct); + const f1ap_trp_position_direct_t *direct = &trp_pos_def_type->choice.direct; + + if (direct->accuracy.present == F1AP_TRP_POSITION_DIRECT_ACCURACY_PR_TRPPOSITION) { + f1_direct->accuracy.present = F1AP_TRPPositionDirectAccuracy_PR_tRPPosition; + const f1ap_access_point_position_t *trp_pos = &direct->accuracy.choice.trp_position; + F1AP_AccessPointPosition_t *f1_trp_pos = f1_direct->accuracy.choice.tRPPosition; + f1_trp_pos->latitudeSign = trp_pos->latitude_sign; + f1_trp_pos->latitude = trp_pos->latitude; + f1_trp_pos->longitude = trp_pos->longitude; + f1_trp_pos->directionOfAltitude = trp_pos->direction_of_altitude; + f1_trp_pos->altitude = trp_pos->altitude; + f1_trp_pos->uncertaintySemi_major = trp_pos->uncertainty_semi_major; + f1_trp_pos->uncertaintySemi_minor = trp_pos->uncertainty_semi_minor; + f1_trp_pos->orientationOfMajorAxis = trp_pos->orientation_of_major_axis; + f1_trp_pos->uncertaintyAltitude = trp_pos->uncertainty_altitude; + f1_trp_pos->confidence = trp_pos->confidence; + } else if (direct->accuracy.present == F1AP_TRP_POSITION_DIRECT_ACCURACY_PR_TRPHAPOSITION) { + f1_direct->accuracy.present = F1AP_TRPPositionDirectAccuracy_PR_tRPHAposition; + const f1ap_ngran_high_accuracy_access_point_position_t *trp_ha_pos = &direct->accuracy.choice.trp_HAposition; + F1AP_NGRANHighAccuracyAccessPointPosition_t *f1_trp_ha_pos = f1_direct->accuracy.choice.tRPHAposition; + *f1_trp_ha_pos = encode_trp_ha_pos(trp_ha_pos); + } else { + AssertFatal(false, "illegal direct accuracy entry %d\n", direct->accuracy.present); + } + break; + case F1AP_TRP_POSITION_DEFINITION_TYPE_PR_REFERENCED: + f1_trp_pos_def_type->present = F1AP_TRPPositionDefinitionType_PR_referenced; + asn1cCalloc(f1_trp_pos_def_type->choice.referenced, f1_referenced); + const f1ap_trp_position_referenced_t *referenced = &trp_pos_def_type->choice.referenced; + F1AP_ReferencePoint_t *f1_referencePoint = &f1_referenced->referencePoint; + const f1ap_reference_point_t *referencePoint = &referenced->reference_point; + + if (referencePoint->present == F1AP_REFERENCE_POINT_PR_COORDINATEID) { + f1_referencePoint->present = F1AP_ReferencePoint_PR_coordinateID; + f1_referencePoint->choice.coordinateID = referencePoint->choice.coordinate_id; + } else if (referencePoint->present == F1AP_REFERENCE_POINT_PR_REFERENCEPOINTCOORDINATE) { + f1_referencePoint->present = F1AP_ReferencePoint_PR_referencePointCoordinate; + const f1ap_access_point_position_t *referencePointCoordinate = &referencePoint->choice.reference_point_coordinate; + asn1cCalloc(f1_referencePoint->choice.referencePointCoordinate, f1_referencePointCoordinate); + f1_referencePointCoordinate->latitudeSign = referencePointCoordinate->latitude_sign; + f1_referencePointCoordinate->latitude = referencePointCoordinate->latitude; + f1_referencePointCoordinate->longitude = referencePointCoordinate->longitude; + f1_referencePointCoordinate->directionOfAltitude = referencePointCoordinate->direction_of_altitude; + f1_referencePointCoordinate->altitude = referencePointCoordinate->altitude; + f1_referencePointCoordinate->uncertaintySemi_major = referencePointCoordinate->uncertainty_semi_major; + f1_referencePointCoordinate->uncertaintySemi_minor = referencePointCoordinate->uncertainty_semi_minor; + f1_referencePointCoordinate->orientationOfMajorAxis = referencePointCoordinate->orientation_of_major_axis; + f1_referencePointCoordinate->uncertaintyAltitude = referencePointCoordinate->uncertainty_altitude; + f1_referencePointCoordinate->confidence = referencePointCoordinate->confidence; + } else if (referencePoint->present == F1AP_REFERENCE_POINT_PR_REFERENCEPOINTCOORDINATEHA) { + f1_referencePoint->present = F1AP_ReferencePoint_PR_referencePointCoordinateHA; + const f1ap_ngran_high_accuracy_access_point_position_t *referencePointCoordinateHA = + &referencePoint->choice.reference_point_coordinateHA; + asn1cCalloc(f1_referencePoint->choice.referencePointCoordinateHA, f1_referencePointCoordinateHA); + *f1_referencePointCoordinateHA = encode_trp_ha_pos(referencePointCoordinateHA); + } else { + AssertFatal(false, "illegal reference point entry %d\n", referencePoint->present); + } + + F1AP_TRPReferencePointType_t *f1_referencePointType = &f1_referenced->referencePointType; + const f1ap_trp_reference_point_type_t *referencePointType = &referenced->reference_point_type; + *f1_referencePointType = encode_reference_point_type(referencePointType); + break; + default: + AssertFatal(false, "illegal Geographical Coordinates entry\n"); + break; + } + return out; +} + +static void decode_reference_point_type(const F1AP_TRPReferencePointType_t *in, f1ap_trp_reference_point_type_t *out) +{ + switch (in->present) { + case F1AP_TRPReferencePointType_PR_tRPPositionRelativeGeodetic: + out->present = F1AP_TRP_REFERENCE_POINT_TYPE_PR_TRPPOSITION_RELATIVE_GEODETIC; + F1AP_RelativeGeodeticLocation_t *f1_tRPPositionRelativeGeodetic = in->choice.tRPPositionRelativeGeodetic; + f1ap_relative_geodetic_location_t *tRPPositionRelativeGeodetic = &out->choice.trp_position_relative_geodetic; + tRPPositionRelativeGeodetic->milli_arc_second_units = f1_tRPPositionRelativeGeodetic->milli_Arc_SecondUnits; + tRPPositionRelativeGeodetic->height_units = f1_tRPPositionRelativeGeodetic->heightUnits; + tRPPositionRelativeGeodetic->delta_latitude = f1_tRPPositionRelativeGeodetic->deltaLatitude; + tRPPositionRelativeGeodetic->delta_longitude = f1_tRPPositionRelativeGeodetic->deltaLongitude; + tRPPositionRelativeGeodetic->delta_height = f1_tRPPositionRelativeGeodetic->deltaHeight; + + F1AP_LocationUncertainty_t *f1_locationUncertainty_g = &f1_tRPPositionRelativeGeodetic->locationUncertainty; + f1ap_location_uncertainty_t *locationUncertainty_g = &tRPPositionRelativeGeodetic->location_uncertainty; + locationUncertainty_g->horizontal_uncertainty = f1_locationUncertainty_g->horizontalUncertainty; + locationUncertainty_g->horizontal_confidence = f1_locationUncertainty_g->horizontalConfidence; + locationUncertainty_g->vertical_uncertainty = f1_locationUncertainty_g->verticalUncertainty; + locationUncertainty_g->vertical_confidence = f1_locationUncertainty_g->verticalConfidence; + break; + case F1AP_TRPReferencePointType_PR_tRPPositionRelativeCartesian: + out->present = F1AP_TRP_REFERENCE_POINT_TYPE_PR_TRPPOSITION_RELATIVE_CARTESIAN; + F1AP_RelativeCartesianLocation_t *f1_tRPPositionRelativeCartesian = in->choice.tRPPositionRelativeCartesian; + f1ap_relative_cartesian_location_t *tRPPositionRelativeCartesian = &out->choice.trp_position_relative_cartesian; + tRPPositionRelativeCartesian->xyz_unit = f1_tRPPositionRelativeCartesian->xYZunit; + tRPPositionRelativeCartesian->xvalue = f1_tRPPositionRelativeCartesian->xvalue; + tRPPositionRelativeCartesian->yvalue = f1_tRPPositionRelativeCartesian->yvalue; + tRPPositionRelativeCartesian->zvalue = f1_tRPPositionRelativeCartesian->zvalue; + + F1AP_LocationUncertainty_t *f1_locationUncertainty_c = &f1_tRPPositionRelativeCartesian->locationUncertainty; + f1ap_location_uncertainty_t *locationUncertainty_c = &tRPPositionRelativeCartesian->location_uncertainty; + locationUncertainty_c->horizontal_uncertainty = f1_locationUncertainty_c->horizontalUncertainty; + locationUncertainty_c->horizontal_confidence = f1_locationUncertainty_c->horizontalConfidence; + locationUncertainty_c->vertical_uncertainty = f1_locationUncertainty_c->verticalUncertainty; + locationUncertainty_c->vertical_confidence = f1_locationUncertainty_c->verticalConfidence; + break; + default: + AssertFatal(false, "illegal trp reference point type entry %d\n", in->present); + break; + } +} + +static void decode_trp_ha_pos(const F1AP_NGRANHighAccuracyAccessPointPosition_t *in, + f1ap_ngran_high_accuracy_access_point_position_t *out) +{ + out->latitude = in->latitude; + out->longitude = in->longitude; + out->altitude = in->altitude; + out->uncertainty_semi_major = in->uncertaintySemi_major; + out->uncertainty_semi_minor = in->uncertaintySemi_minor; + out->orientation_of_major_axis = in->orientationOfMajorAxis; + out->horizontal_confidence = in->horizontalConfidence; + out->uncertainty_altitude = in->uncertaintyAltitude; + out->vertical_confidence = in->verticalConfidence; +} + +static void decode_geographical_coordinates(const F1AP_GeographicalCoordinates_t *in, f1ap_geographical_coordinates_t *out) +{ + const F1AP_TRPPositionDefinitionType_t *f1_trp_pos_def_type = &in->tRPPositionDefinitionType; + f1ap_trp_position_definition_type_t *trp_pos_def_type = &out->trp_position_definition_type; + switch (f1_trp_pos_def_type->present) { + case F1AP_TRPPositionDefinitionType_PR_NOTHING: + trp_pos_def_type->present = F1AP_TRP_POSITION_DEFINITION_TYPE_PR_NOTHING; + break; + case F1AP_TRPPositionDefinitionType_PR_direct: + trp_pos_def_type->present = F1AP_TRP_POSITION_DEFINITION_TYPE_PR_DIRECT; + F1AP_TRPPositionDirect_t *f1_direct = f1_trp_pos_def_type->choice.direct; + f1ap_trp_position_direct_t *direct = &trp_pos_def_type->choice.direct; + + if (f1_direct->accuracy.present == F1AP_TRPPositionDirectAccuracy_PR_tRPPosition) { + direct->accuracy.present = F1AP_TRP_POSITION_DIRECT_ACCURACY_PR_TRPPOSITION; + f1ap_access_point_position_t *trp_pos = &direct->accuracy.choice.trp_position; + F1AP_AccessPointPosition_t *f1_trp_pos = f1_direct->accuracy.choice.tRPPosition; + trp_pos->latitude_sign = f1_trp_pos->latitudeSign; + trp_pos->latitude = f1_trp_pos->latitude; + trp_pos->longitude = f1_trp_pos->longitude; + trp_pos->direction_of_altitude = f1_trp_pos->directionOfAltitude; + trp_pos->altitude = f1_trp_pos->altitude; + trp_pos->uncertainty_semi_major = f1_trp_pos->uncertaintySemi_major; + trp_pos->uncertainty_semi_minor = f1_trp_pos->uncertaintySemi_minor; + trp_pos->orientation_of_major_axis = f1_trp_pos->orientationOfMajorAxis; + trp_pos->uncertainty_altitude = f1_trp_pos->uncertaintyAltitude; + trp_pos->confidence = f1_trp_pos->confidence; + } else if (f1_direct->accuracy.present == F1AP_TRPPositionDirectAccuracy_PR_tRPHAposition) { + direct->accuracy.present = F1AP_TRP_POSITION_DIRECT_ACCURACY_PR_TRPHAPOSITION; + f1ap_ngran_high_accuracy_access_point_position_t *trp_ha_pos = &direct->accuracy.choice.trp_HAposition; + F1AP_NGRANHighAccuracyAccessPointPosition_t *f1_trp_ha_pos = f1_direct->accuracy.choice.tRPHAposition; + decode_trp_ha_pos(f1_trp_ha_pos, trp_ha_pos); + } else { + AssertFatal(false, "illegal direct accuracy entry %d\n", direct->accuracy.present); + } + break; + case F1AP_TRPPositionDefinitionType_PR_referenced: + trp_pos_def_type->present = F1AP_TRP_POSITION_DEFINITION_TYPE_PR_REFERENCED; + F1AP_TRPPositionReferenced_t *f1_referenced = f1_trp_pos_def_type->choice.referenced; + f1ap_trp_position_referenced_t *referenced = &trp_pos_def_type->choice.referenced; + F1AP_ReferencePoint_t *f1_referencePoint = &f1_referenced->referencePoint; + f1ap_reference_point_t *referencePoint = &referenced->reference_point; + + if (f1_referencePoint->present == F1AP_ReferencePoint_PR_coordinateID) { + referencePoint->present = F1AP_REFERENCE_POINT_PR_COORDINATEID; + referencePoint->choice.coordinate_id = f1_referencePoint->choice.coordinateID; + } else if (f1_referencePoint->present == F1AP_ReferencePoint_PR_referencePointCoordinate) { + referencePoint->present = F1AP_REFERENCE_POINT_PR_REFERENCEPOINTCOORDINATE; + f1ap_access_point_position_t *referencePointCoordinate = &referencePoint->choice.reference_point_coordinate; + F1AP_AccessPointPosition_t *f1_referencePointCoordinate = f1_referencePoint->choice.referencePointCoordinate; + referencePointCoordinate->latitude_sign = f1_referencePointCoordinate->latitudeSign; + referencePointCoordinate->latitude = f1_referencePointCoordinate->latitude; + referencePointCoordinate->longitude = f1_referencePointCoordinate->longitude; + referencePointCoordinate->direction_of_altitude = f1_referencePointCoordinate->directionOfAltitude; + referencePointCoordinate->altitude = f1_referencePointCoordinate->altitude; + referencePointCoordinate->uncertainty_semi_major = f1_referencePointCoordinate->uncertaintySemi_major; + referencePointCoordinate->uncertainty_semi_minor = f1_referencePointCoordinate->uncertaintySemi_minor; + referencePointCoordinate->orientation_of_major_axis = f1_referencePointCoordinate->orientationOfMajorAxis; + referencePointCoordinate->uncertainty_altitude = f1_referencePointCoordinate->uncertaintyAltitude; + referencePointCoordinate->confidence = f1_referencePointCoordinate->confidence; + } else if (f1_referencePoint->present == F1AP_ReferencePoint_PR_referencePointCoordinateHA) { + referencePoint->present = F1AP_REFERENCE_POINT_PR_REFERENCEPOINTCOORDINATEHA; + f1ap_ngran_high_accuracy_access_point_position_t *referencePointCoordinateHA = + &referencePoint->choice.reference_point_coordinateHA; + F1AP_NGRANHighAccuracyAccessPointPosition_t *f1_referencePointCoordinateHA = + f1_referencePoint->choice.referencePointCoordinateHA; + decode_trp_ha_pos(f1_referencePointCoordinateHA, referencePointCoordinateHA); + } else { + AssertFatal(false, "illegal reference point entry %d\n", referencePoint->present); + } + + F1AP_TRPReferencePointType_t *f1_referencePointType = &f1_referenced->referencePointType; + f1ap_trp_reference_point_type_t *referencePointType = &referenced->reference_point_type; + decode_reference_point_type(f1_referencePointType, referencePointType); + break; + default: + AssertFatal(false, "illegal Geographical Coordinates entry\n"); + break; + } +} + +static f1ap_trp_reference_point_type_t cp_encode_reference_point_type(const f1ap_trp_reference_point_type_t *in) +{ + f1ap_trp_reference_point_type_t out = {0}; + switch (in->present) { + case F1AP_TRP_REFERENCE_POINT_TYPE_PR_TRPPOSITION_RELATIVE_GEODETIC: + out.present = F1AP_TRP_REFERENCE_POINT_TYPE_PR_TRPPOSITION_RELATIVE_GEODETIC; + const f1ap_relative_geodetic_location_t *f1_tRPPositionRelativeGeodetic = &in->choice.trp_position_relative_geodetic; + f1ap_relative_geodetic_location_t *tRPPositionRelativeGeodetic = &out.choice.trp_position_relative_geodetic; + tRPPositionRelativeGeodetic->milli_arc_second_units = f1_tRPPositionRelativeGeodetic->milli_arc_second_units; + tRPPositionRelativeGeodetic->height_units = f1_tRPPositionRelativeGeodetic->height_units; + tRPPositionRelativeGeodetic->delta_latitude = f1_tRPPositionRelativeGeodetic->delta_latitude; + tRPPositionRelativeGeodetic->delta_longitude = f1_tRPPositionRelativeGeodetic->delta_longitude; + tRPPositionRelativeGeodetic->delta_height = f1_tRPPositionRelativeGeodetic->delta_height; + + const f1ap_location_uncertainty_t *f1_locationUncertainty_g = &f1_tRPPositionRelativeGeodetic->location_uncertainty; + f1ap_location_uncertainty_t *locationUncertainty_g = &tRPPositionRelativeGeodetic->location_uncertainty; + locationUncertainty_g->horizontal_uncertainty = f1_locationUncertainty_g->horizontal_uncertainty; + locationUncertainty_g->horizontal_confidence = f1_locationUncertainty_g->horizontal_confidence; + locationUncertainty_g->vertical_uncertainty = f1_locationUncertainty_g->vertical_uncertainty; + locationUncertainty_g->vertical_confidence = f1_locationUncertainty_g->vertical_confidence; + break; + case F1AP_TRP_REFERENCE_POINT_TYPE_PR_TRPPOSITION_RELATIVE_CARTESIAN: + out.present = F1AP_TRP_REFERENCE_POINT_TYPE_PR_TRPPOSITION_RELATIVE_CARTESIAN; + const f1ap_relative_cartesian_location_t *f1_tRPPositionRelativeCartesian = &in->choice.trp_position_relative_cartesian; + f1ap_relative_cartesian_location_t *tRPPositionRelativeCartesian = &out.choice.trp_position_relative_cartesian; + tRPPositionRelativeCartesian->xyz_unit = f1_tRPPositionRelativeCartesian->xyz_unit; + tRPPositionRelativeCartesian->xvalue = f1_tRPPositionRelativeCartesian->xvalue; + tRPPositionRelativeCartesian->yvalue = f1_tRPPositionRelativeCartesian->yvalue; + tRPPositionRelativeCartesian->zvalue = f1_tRPPositionRelativeCartesian->zvalue; + + const f1ap_location_uncertainty_t *f1_locationUncertainty_c = &f1_tRPPositionRelativeCartesian->location_uncertainty; + f1ap_location_uncertainty_t *locationUncertainty_c = &tRPPositionRelativeCartesian->location_uncertainty; + locationUncertainty_c->horizontal_uncertainty = f1_locationUncertainty_c->horizontal_uncertainty; + locationUncertainty_c->horizontal_confidence = f1_locationUncertainty_c->horizontal_confidence; + locationUncertainty_c->vertical_uncertainty = f1_locationUncertainty_c->vertical_uncertainty; + locationUncertainty_c->vertical_confidence = f1_locationUncertainty_c->vertical_confidence; + break; + default: + AssertFatal(false, "illegal trp reference point type entry %d\n", in->present); + break; + } + return out; +} + +static f1ap_ngran_high_accuracy_access_point_position_t cp_trp_ha_pos(const f1ap_ngran_high_accuracy_access_point_position_t *in) +{ + f1ap_ngran_high_accuracy_access_point_position_t out = {0}; + out.latitude = in->latitude; + out.longitude = in->longitude; + out.altitude = in->altitude; + out.uncertainty_semi_major = in->uncertainty_semi_major; + out.uncertainty_semi_minor = in->uncertainty_semi_minor; + out.orientation_of_major_axis = in->orientation_of_major_axis; + out.horizontal_confidence = in->horizontal_confidence; + out.uncertainty_altitude = in->uncertainty_altitude; + out.vertical_confidence = in->vertical_confidence; + return out; +} + +static f1ap_geographical_coordinates_t cp_geographical_coordinates(const f1ap_geographical_coordinates_t *in) +{ + f1ap_geographical_coordinates_t out = {0}; + const f1ap_trp_position_definition_type_t *f1_trp_pos_def_type = &in->trp_position_definition_type; + f1ap_trp_position_definition_type_t *trp_pos_def_type = &out.trp_position_definition_type; + switch (f1_trp_pos_def_type->present) { + case F1AP_TRP_POSITION_DEFINITION_TYPE_PR_NOTHING: + trp_pos_def_type->present = F1AP_TRP_POSITION_DEFINITION_TYPE_PR_NOTHING; + break; + case F1AP_TRP_POSITION_DEFINITION_TYPE_PR_DIRECT: + trp_pos_def_type->present = F1AP_TRP_POSITION_DEFINITION_TYPE_PR_DIRECT; + const f1ap_trp_position_direct_t *f1_direct = &f1_trp_pos_def_type->choice.direct; + f1ap_trp_position_direct_t *direct = &trp_pos_def_type->choice.direct; + + if (f1_direct->accuracy.present == F1AP_TRP_POSITION_DIRECT_ACCURACY_PR_TRPPOSITION) { + direct->accuracy.present = F1AP_TRP_POSITION_DIRECT_ACCURACY_PR_TRPPOSITION; + f1ap_access_point_position_t *trp_pos = &direct->accuracy.choice.trp_position; + const f1ap_access_point_position_t *f1_trp_pos = &f1_direct->accuracy.choice.trp_position; + trp_pos->latitude_sign = f1_trp_pos->latitude_sign; + trp_pos->latitude = f1_trp_pos->latitude; + trp_pos->longitude = f1_trp_pos->longitude; + trp_pos->direction_of_altitude = f1_trp_pos->direction_of_altitude; + trp_pos->altitude = f1_trp_pos->altitude; + trp_pos->uncertainty_semi_major = f1_trp_pos->uncertainty_semi_major; + trp_pos->uncertainty_semi_minor = f1_trp_pos->uncertainty_semi_minor; + trp_pos->orientation_of_major_axis = f1_trp_pos->orientation_of_major_axis; + trp_pos->uncertainty_altitude = f1_trp_pos->uncertainty_altitude; + trp_pos->confidence = f1_trp_pos->confidence; + } else if (f1_direct->accuracy.present == F1AP_TRP_POSITION_DIRECT_ACCURACY_PR_TRPHAPOSITION) { + direct->accuracy.present = F1AP_TRP_POSITION_DIRECT_ACCURACY_PR_TRPHAPOSITION; + f1ap_ngran_high_accuracy_access_point_position_t *trp_ha_pos = &direct->accuracy.choice.trp_HAposition; + const f1ap_ngran_high_accuracy_access_point_position_t *f1_trp_ha_pos = &f1_direct->accuracy.choice.trp_HAposition; + *trp_ha_pos = cp_trp_ha_pos(f1_trp_ha_pos); + } else { + AssertFatal(false, "illegal direct accuracy entry %d\n", direct->accuracy.present); + } + break; + case F1AP_TRP_POSITION_DEFINITION_TYPE_PR_REFERENCED: + trp_pos_def_type->present = F1AP_TRP_POSITION_DEFINITION_TYPE_PR_REFERENCED; + const f1ap_trp_position_referenced_t *f1_referenced = &f1_trp_pos_def_type->choice.referenced; + f1ap_trp_position_referenced_t *referenced = &trp_pos_def_type->choice.referenced; + const f1ap_reference_point_t *f1_referencePoint = &f1_referenced->reference_point; + f1ap_reference_point_t *referencePoint = &referenced->reference_point; + + if (f1_referencePoint->present == F1AP_REFERENCE_POINT_PR_COORDINATEID) { + referencePoint->present = F1AP_REFERENCE_POINT_PR_COORDINATEID; + referencePoint->choice.coordinate_id = f1_referencePoint->choice.coordinate_id; + } else if (f1_referencePoint->present == F1AP_REFERENCE_POINT_PR_REFERENCEPOINTCOORDINATE) { + referencePoint->present = F1AP_REFERENCE_POINT_PR_REFERENCEPOINTCOORDINATE; + f1ap_access_point_position_t *referencePointCoordinate = &referencePoint->choice.reference_point_coordinate; + const f1ap_access_point_position_t *f1_referencePointCoordinate = &f1_referencePoint->choice.reference_point_coordinate; + referencePointCoordinate->latitude_sign = f1_referencePointCoordinate->latitude_sign; + referencePointCoordinate->latitude = f1_referencePointCoordinate->latitude; + referencePointCoordinate->longitude = f1_referencePointCoordinate->longitude; + referencePointCoordinate->direction_of_altitude = f1_referencePointCoordinate->direction_of_altitude; + referencePointCoordinate->altitude = f1_referencePointCoordinate->altitude; + referencePointCoordinate->uncertainty_semi_major = f1_referencePointCoordinate->uncertainty_semi_major; + referencePointCoordinate->uncertainty_semi_minor = f1_referencePointCoordinate->uncertainty_semi_minor; + referencePointCoordinate->orientation_of_major_axis = f1_referencePointCoordinate->orientation_of_major_axis; + referencePointCoordinate->uncertainty_altitude = f1_referencePointCoordinate->uncertainty_altitude; + referencePointCoordinate->confidence = f1_referencePointCoordinate->confidence; + } else if (f1_referencePoint->present == F1AP_REFERENCE_POINT_PR_REFERENCEPOINTCOORDINATEHA) { + referencePoint->present = F1AP_REFERENCE_POINT_PR_REFERENCEPOINTCOORDINATEHA; + f1ap_ngran_high_accuracy_access_point_position_t *referencePointCoordinateHA = + &referencePoint->choice.reference_point_coordinateHA; + const f1ap_ngran_high_accuracy_access_point_position_t *f1_referencePointCoordinateHA = + &f1_referencePoint->choice.reference_point_coordinateHA; + *referencePointCoordinateHA = cp_trp_ha_pos(f1_referencePointCoordinateHA); + } else { + AssertFatal(false, "illegal reference point entry %d\n", referencePoint->present); + } + + const f1ap_trp_reference_point_type_t *f1_referencePointType = &f1_referenced->reference_point_type; + f1ap_trp_reference_point_type_t *referencePointType = &referenced->reference_point_type; + *referencePointType = cp_encode_reference_point_type(f1_referencePointType); + break; + default: + AssertFatal(false, "illegal Geographical Coordinates entry\n"); + break; + } + return out; +} + +static bool eq_reference_point_type(const f1ap_trp_reference_point_type_t *f1_referencePointType, + const f1ap_trp_reference_point_type_t *referencePointType) +{ + _F1_EQ_CHECK_INT(f1_referencePointType->present, referencePointType->present); + switch (f1_referencePointType->present) { + case F1AP_TRP_REFERENCE_POINT_TYPE_PR_TRPPOSITION_RELATIVE_GEODETIC: { + const f1ap_relative_geodetic_location_t *f1_tRPPositionRelativeGeodetic = + &f1_referencePointType->choice.trp_position_relative_geodetic; + const f1ap_relative_geodetic_location_t *tRPPositionRelativeGeodetic = + &referencePointType->choice.trp_position_relative_geodetic; + _F1_EQ_CHECK_LONG(tRPPositionRelativeGeodetic->milli_arc_second_units, + f1_tRPPositionRelativeGeodetic->milli_arc_second_units); + _F1_EQ_CHECK_LONG(tRPPositionRelativeGeodetic->height_units, f1_tRPPositionRelativeGeodetic->height_units); + _F1_EQ_CHECK_LONG(tRPPositionRelativeGeodetic->delta_latitude, f1_tRPPositionRelativeGeodetic->delta_latitude); + _F1_EQ_CHECK_LONG(tRPPositionRelativeGeodetic->delta_longitude, f1_tRPPositionRelativeGeodetic->delta_longitude); + _F1_EQ_CHECK_LONG(tRPPositionRelativeGeodetic->delta_height, f1_tRPPositionRelativeGeodetic->delta_height); + + const f1ap_location_uncertainty_t *f1_locationUncertainty_g = &f1_tRPPositionRelativeGeodetic->location_uncertainty; + const f1ap_location_uncertainty_t *locationUncertainty_g = &tRPPositionRelativeGeodetic->location_uncertainty; + _F1_EQ_CHECK_LONG(locationUncertainty_g->horizontal_uncertainty, f1_locationUncertainty_g->horizontal_uncertainty); + _F1_EQ_CHECK_LONG(locationUncertainty_g->horizontal_confidence, f1_locationUncertainty_g->horizontal_confidence); + _F1_EQ_CHECK_LONG(locationUncertainty_g->vertical_uncertainty, f1_locationUncertainty_g->vertical_uncertainty); + _F1_EQ_CHECK_LONG(locationUncertainty_g->vertical_confidence, f1_locationUncertainty_g->vertical_confidence); + break; + } + case F1AP_TRP_REFERENCE_POINT_TYPE_PR_TRPPOSITION_RELATIVE_CARTESIAN: { + const f1ap_relative_cartesian_location_t *f1_tRPPositionRelativeCartesian = + &f1_referencePointType->choice.trp_position_relative_cartesian; + const f1ap_relative_cartesian_location_t *tRPPositionRelativeCartesian = + &referencePointType->choice.trp_position_relative_cartesian; + _F1_EQ_CHECK_LONG(tRPPositionRelativeCartesian->xyz_unit, f1_tRPPositionRelativeCartesian->xyz_unit); + _F1_EQ_CHECK_LONG(tRPPositionRelativeCartesian->xvalue, f1_tRPPositionRelativeCartesian->xvalue); + _F1_EQ_CHECK_LONG(tRPPositionRelativeCartesian->yvalue, f1_tRPPositionRelativeCartesian->yvalue); + _F1_EQ_CHECK_LONG(tRPPositionRelativeCartesian->zvalue, f1_tRPPositionRelativeCartesian->zvalue); + + const f1ap_location_uncertainty_t *f1_locationUncertainty_c = &f1_tRPPositionRelativeCartesian->location_uncertainty; + const f1ap_location_uncertainty_t *locationUncertainty_c = &tRPPositionRelativeCartesian->location_uncertainty; + _F1_EQ_CHECK_LONG(locationUncertainty_c->horizontal_uncertainty, f1_locationUncertainty_c->horizontal_uncertainty); + _F1_EQ_CHECK_LONG(locationUncertainty_c->horizontal_confidence, f1_locationUncertainty_c->horizontal_confidence); + _F1_EQ_CHECK_LONG(locationUncertainty_c->vertical_uncertainty, f1_locationUncertainty_c->vertical_uncertainty); + _F1_EQ_CHECK_LONG(locationUncertainty_c->vertical_confidence, f1_locationUncertainty_c->vertical_confidence); + break; + } + default: + AssertError(false, return false, "illegal trp reference point type entry %d\n", f1_referencePointType->present); + break; + } + return true; +} + +static bool eq_trp_ha_pos(const f1ap_ngran_high_accuracy_access_point_position_t *trp_ha_pos, + const f1ap_ngran_high_accuracy_access_point_position_t *f1_trp_ha_pos) +{ + _F1_EQ_CHECK_LONG(trp_ha_pos->latitude, f1_trp_ha_pos->latitude); + _F1_EQ_CHECK_LONG(trp_ha_pos->longitude, f1_trp_ha_pos->longitude); + _F1_EQ_CHECK_LONG(trp_ha_pos->altitude, f1_trp_ha_pos->altitude); + _F1_EQ_CHECK_LONG(trp_ha_pos->uncertainty_semi_major, f1_trp_ha_pos->uncertainty_semi_major); + _F1_EQ_CHECK_LONG(trp_ha_pos->uncertainty_semi_minor, f1_trp_ha_pos->uncertainty_semi_minor); + _F1_EQ_CHECK_LONG(trp_ha_pos->orientation_of_major_axis, f1_trp_ha_pos->orientation_of_major_axis); + _F1_EQ_CHECK_LONG(trp_ha_pos->horizontal_confidence, f1_trp_ha_pos->horizontal_confidence); + _F1_EQ_CHECK_LONG(trp_ha_pos->uncertainty_altitude, f1_trp_ha_pos->uncertainty_altitude); + _F1_EQ_CHECK_LONG(trp_ha_pos->vertical_confidence, f1_trp_ha_pos->vertical_confidence); + return true; +} + +static bool eq_geographical_coordinates(const f1ap_geographical_coordinates_t *in, const f1ap_geographical_coordinates_t *out) +{ + const f1ap_trp_position_definition_type_t *f1_trp_pos_def_type = &in->trp_position_definition_type; + const f1ap_trp_position_definition_type_t *trp_pos_def_type = &out->trp_position_definition_type; + _F1_EQ_CHECK_INT(f1_trp_pos_def_type->present, trp_pos_def_type->present); + switch (f1_trp_pos_def_type->present) { + case F1AP_TRP_POSITION_DEFINITION_TYPE_PR_NOTHING: + // nothing to check + break; + case F1AP_TRP_POSITION_DEFINITION_TYPE_PR_DIRECT: { + const f1ap_trp_position_direct_t *f1_direct = &f1_trp_pos_def_type->choice.direct; + const f1ap_trp_position_direct_t *direct = &trp_pos_def_type->choice.direct; + _F1_EQ_CHECK_INT(f1_direct->accuracy.present, direct->accuracy.present); + + if (f1_direct->accuracy.present == F1AP_TRP_POSITION_DIRECT_ACCURACY_PR_TRPPOSITION) { + const f1ap_access_point_position_t *trp_pos = &direct->accuracy.choice.trp_position; + const f1ap_access_point_position_t *f1_trp_pos = &f1_direct->accuracy.choice.trp_position; + _F1_EQ_CHECK_LONG(trp_pos->latitude_sign, f1_trp_pos->latitude_sign); + _F1_EQ_CHECK_LONG(trp_pos->latitude, f1_trp_pos->latitude); + _F1_EQ_CHECK_LONG(trp_pos->longitude, f1_trp_pos->longitude); + _F1_EQ_CHECK_LONG(trp_pos->direction_of_altitude, f1_trp_pos->direction_of_altitude); + _F1_EQ_CHECK_LONG(trp_pos->altitude, f1_trp_pos->altitude); + _F1_EQ_CHECK_LONG(trp_pos->uncertainty_semi_major, f1_trp_pos->uncertainty_semi_major); + _F1_EQ_CHECK_LONG(trp_pos->uncertainty_semi_minor, f1_trp_pos->uncertainty_semi_minor); + _F1_EQ_CHECK_LONG(trp_pos->orientation_of_major_axis, f1_trp_pos->orientation_of_major_axis); + _F1_EQ_CHECK_LONG(trp_pos->uncertainty_altitude, f1_trp_pos->uncertainty_altitude); + _F1_EQ_CHECK_LONG(trp_pos->confidence, f1_trp_pos->confidence); + } else if (f1_direct->accuracy.present == F1AP_TRP_POSITION_DIRECT_ACCURACY_PR_TRPHAPOSITION) { + const f1ap_ngran_high_accuracy_access_point_position_t *trp_ha_pos = &direct->accuracy.choice.trp_HAposition; + const f1ap_ngran_high_accuracy_access_point_position_t *f1_trp_ha_pos = &f1_direct->accuracy.choice.trp_HAposition; + _F1_CHECK_EXP(eq_trp_ha_pos(trp_ha_pos, f1_trp_ha_pos)); + } else { + AssertError(false, return false, "illegal direct accuracy entry %d\n", direct->accuracy.present); + } + break; + } + case F1AP_TRP_POSITION_DEFINITION_TYPE_PR_REFERENCED: { + const f1ap_trp_position_referenced_t *f1_referenced = &f1_trp_pos_def_type->choice.referenced; + const f1ap_trp_position_referenced_t *referenced = &trp_pos_def_type->choice.referenced; + const f1ap_reference_point_t *f1_referencePoint = &f1_referenced->reference_point; + const f1ap_reference_point_t *referencePoint = &referenced->reference_point; + _F1_EQ_CHECK_INT(f1_referencePoint->present, referencePoint->present); + + if (f1_referencePoint->present == F1AP_REFERENCE_POINT_PR_COORDINATEID) { + _F1_EQ_CHECK_LONG(referencePoint->choice.coordinate_id, f1_referencePoint->choice.coordinate_id); + } else if (f1_referencePoint->present == F1AP_REFERENCE_POINT_PR_REFERENCEPOINTCOORDINATE) { + const f1ap_access_point_position_t *referencePointCoordinate = &referencePoint->choice.reference_point_coordinate; + const f1ap_access_point_position_t *f1_referencePointCoordinate = &f1_referencePoint->choice.reference_point_coordinate; + _F1_EQ_CHECK_LONG(referencePointCoordinate->latitude_sign, f1_referencePointCoordinate->latitude_sign); + _F1_EQ_CHECK_LONG(referencePointCoordinate->latitude, f1_referencePointCoordinate->latitude); + _F1_EQ_CHECK_LONG(referencePointCoordinate->longitude, f1_referencePointCoordinate->longitude); + _F1_EQ_CHECK_LONG(referencePointCoordinate->direction_of_altitude, f1_referencePointCoordinate->direction_of_altitude); + _F1_EQ_CHECK_LONG(referencePointCoordinate->altitude, f1_referencePointCoordinate->altitude); + _F1_EQ_CHECK_LONG(referencePointCoordinate->uncertainty_semi_major, f1_referencePointCoordinate->uncertainty_semi_major); + _F1_EQ_CHECK_LONG(referencePointCoordinate->uncertainty_semi_minor, f1_referencePointCoordinate->uncertainty_semi_minor); + _F1_EQ_CHECK_LONG(referencePointCoordinate->orientation_of_major_axis, + f1_referencePointCoordinate->orientation_of_major_axis); + _F1_EQ_CHECK_LONG(referencePointCoordinate->uncertainty_altitude, f1_referencePointCoordinate->uncertainty_altitude); + _F1_EQ_CHECK_LONG(referencePointCoordinate->confidence, f1_referencePointCoordinate->confidence); + } else if (f1_referencePoint->present == F1AP_REFERENCE_POINT_PR_REFERENCEPOINTCOORDINATEHA) { + const f1ap_ngran_high_accuracy_access_point_position_t *referencePointCoordinateHA = + &referencePoint->choice.reference_point_coordinateHA; + const f1ap_ngran_high_accuracy_access_point_position_t *f1_referencePointCoordinateHA = + &f1_referencePoint->choice.reference_point_coordinateHA; + _F1_CHECK_EXP(eq_trp_ha_pos(referencePointCoordinateHA, f1_referencePointCoordinateHA)); + } else { + AssertError(false, return false, "illegal reference point entry %d\n", referencePoint->present); + } + + const f1ap_trp_reference_point_type_t *f1_referencePointType = &f1_referenced->reference_point_type; + const f1ap_trp_reference_point_type_t *referencePointType = &referenced->reference_point_type; + _F1_CHECK_EXP(eq_reference_point_type(f1_referencePointType, referencePointType)); + break; + } + default: + AssertError(false, return false, "illegal Geographical Coordinates entry\n"); + break; + } + return true; +} + +static F1AP_TRPInformationTypeResponseItem_t encode_trp_info_type_response_item(const f1ap_trp_information_type_response_item_t *in) +{ + F1AP_TRPInformationTypeResponseItem_t out = {0}; + switch (in->present) { + case F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_NOTHING: + out.present = F1AP_TRPInformationTypeResponseItem_PR_NOTHING; + break; + case F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_PCI_NR: + out.present = F1AP_TRPInformationTypeResponseItem_PR_pCI_NR; + out.choice.pCI_NR = in->choice.pci_nr; + break; + case F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_NG_RAN_CGI: + out.present = F1AP_TRPInformationTypeResponseItem_PR_nG_RAN_CGI; + asn1cCalloc(out.choice.nG_RAN_CGI, nG_RAN_CGI); + MCC_MNC_TO_PLMNID(in->choice.ng_ran_cgi.plmn.mcc, + in->choice.ng_ran_cgi.plmn.mnc, + in->choice.ng_ran_cgi.plmn.mnc_digit_length, + &(nG_RAN_CGI->pLMN_Identity)); + NR_CELL_ID_TO_BIT_STRING(in->choice.ng_ran_cgi.nr_cellid, &(nG_RAN_CGI->nRCellIdentity)); + break; + case F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_NRARFCN: + out.present = F1AP_TRPInformationTypeResponseItem_PR_nRARFCN; + out.choice.nRARFCN = in->choice.nr_arfcn; + break; + case F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_PRSCONFIGURATION: + out.present = F1AP_TRPInformationTypeResponseItem_PR_pRSConfiguration; + AssertFatal(false, "TRP information type response item PRS configuration unsupported\n"); + break; + case F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_SSBINFORMATION: + out.present = F1AP_TRPInformationTypeResponseItem_PR_sSBinformation; + AssertFatal(false, "TRP information type response item SSB Information unsupported\n"); + break; + case F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_SFNINITIALISATIONTIME: + out.present = F1AP_TRPInformationTypeResponseItem_PR_sFNInitialisationTime; + AssertFatal(false, "TRP information type response item SFN Initialization Time unsupported\n"); + break; + case F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_SPATIALDIRECTIONINFORMATION: + out.present = F1AP_TRPInformationTypeResponseItem_PR_spatialDirectionInformation; + AssertFatal(false, "TRP information type response item Spatial Direction Information unsupported\n"); + break; + case F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_GEOGRAPHICALCOORDINATES: + out.present = F1AP_TRPInformationTypeResponseItem_PR_geographicalCoordinates; + asn1cCalloc(out.choice.geographicalCoordinates, f1_geo_coord); + f1ap_geographical_coordinates_t geo_coord = in->choice.geographical_coordinates; + *f1_geo_coord = encode_geographical_coordinates(&geo_coord); + break; + default: + AssertFatal(false, "received illegal trp information type response item %d\n", in->present); + break; + } + return out; +} + +static void decode_trp_info_type_response_item(const F1AP_TRPInformationTypeResponseItem_t *in, + f1ap_trp_information_type_response_item_t *out) +{ + switch (in->present) { + case F1AP_TRPInformationTypeResponseItem_PR_NOTHING: + out->present = F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_NOTHING; + break; + case F1AP_TRPInformationTypeResponseItem_PR_pCI_NR: + out->present = F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_PCI_NR; + out->choice.pci_nr = in->choice.pCI_NR; + break; + case F1AP_TRPInformationTypeResponseItem_PR_nG_RAN_CGI: + out->present = F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_NG_RAN_CGI; + // NR CGI (M) + PLMNID_TO_MCC_MNC(&(in->choice.nG_RAN_CGI->pLMN_Identity), + out->choice.ng_ran_cgi.plmn.mcc, + out->choice.ng_ran_cgi.plmn.mnc, + out->choice.ng_ran_cgi.plmn.mnc_digit_length); + // NR Cell Identity (M) + BIT_STRING_TO_NR_CELL_IDENTITY(&in->choice.nG_RAN_CGI->nRCellIdentity, out->choice.ng_ran_cgi.nr_cellid); + break; + case F1AP_TRPInformationTypeResponseItem_PR_nRARFCN: + out->present = F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_NRARFCN; + out->choice.nr_arfcn = in->choice.nRARFCN; + break; + case F1AP_TRPInformationTypeResponseItem_PR_pRSConfiguration: + out->present = F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_PRSCONFIGURATION; + AssertFatal(false, "TRP information type response item PRS configuration unsupported\n"); + break; + case F1AP_TRPInformationTypeResponseItem_PR_sSBinformation: + out->present = F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_SSBINFORMATION; + AssertFatal(false, "TRP information type response item SSB Information unsupported\n"); + break; + case F1AP_TRPInformationTypeResponseItem_PR_sFNInitialisationTime: + out->present = F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_SFNINITIALISATIONTIME; + AssertFatal(false, "TRP information type response item SFN Initialization Time unsupported\n"); + break; + case F1AP_TRPInformationTypeResponseItem_PR_spatialDirectionInformation: + out->present = F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_SPATIALDIRECTIONINFORMATION; + AssertFatal(false, "TRP information type response item Spatial Direction Information unsupported\n"); + break; + case F1AP_TRPInformationTypeResponseItem_PR_geographicalCoordinates: + out->present = F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_GEOGRAPHICALCOORDINATES; + decode_geographical_coordinates(in->choice.geographicalCoordinates, &out->choice.geographical_coordinates); + break; + default: + AssertFatal(false, "received illegal trp information type response item %d\n", in->present); + break; + } +} + +static f1ap_trp_information_type_response_item_t cp_trp_info_type_response_item(const f1ap_trp_information_type_response_item_t *in) +{ + f1ap_trp_information_type_response_item_t out = {0}; + switch (in->present) { + case F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_NOTHING: + out.present = F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_NOTHING; + break; + case F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_PCI_NR: + out.present = F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_PCI_NR; + out.choice.pci_nr = in->choice.pci_nr; + break; + case F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_NG_RAN_CGI: + out.present = F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_NG_RAN_CGI; + out.choice.ng_ran_cgi.plmn.mcc = in->choice.ng_ran_cgi.plmn.mcc; + out.choice.ng_ran_cgi.plmn.mnc = in->choice.ng_ran_cgi.plmn.mnc; + out.choice.ng_ran_cgi.plmn.mnc_digit_length = in->choice.ng_ran_cgi.plmn.mnc_digit_length; + out.choice.ng_ran_cgi.nr_cellid = in->choice.ng_ran_cgi.nr_cellid; + break; + case F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_NRARFCN: + out.present = F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_NRARFCN; + out.choice.nr_arfcn = in->choice.nr_arfcn; + break; + case F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_PRSCONFIGURATION: + out.present = F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_PRSCONFIGURATION; + AssertFatal(false, "TRP information type response item PRS configuration unsupported\n"); + break; + case F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_SSBINFORMATION: + out.present = F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_SSBINFORMATION; + AssertFatal(false, "TRP information type response item SSB Information unsupported\n"); + break; + case F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_SFNINITIALISATIONTIME: + out.present = F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_SFNINITIALISATIONTIME; + AssertFatal(false, "TRP information type response item SFN Initialization Time unsupported\n"); + break; + case F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_SPATIALDIRECTIONINFORMATION: + out.present = F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_SPATIALDIRECTIONINFORMATION; + AssertFatal(false, "TRP information type response item Spatial Direction Information unsupported\n"); + break; + case F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_GEOGRAPHICALCOORDINATES: + out.present = F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_GEOGRAPHICALCOORDINATES; + out.choice.geographical_coordinates = cp_geographical_coordinates(&in->choice.geographical_coordinates); + break; + default: + AssertFatal(false, "received illegal trp information type response item %d\n", in->present); + break; + } + return out; +} + +static bool eq_trp_info_type_response_item(const f1ap_trp_information_type_response_item_t *in, + const f1ap_trp_information_type_response_item_t *out) +{ + _F1_EQ_CHECK_INT(in->present, out->present); + switch (in->present) { + case F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_NOTHING: + // nothing to check + break; + case F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_PCI_NR: + _F1_EQ_CHECK_INT(in->choice.pci_nr, out->choice.pci_nr); + break; + case F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_NG_RAN_CGI: + _F1_EQ_CHECK_INT(in->choice.ng_ran_cgi.plmn.mcc, out->choice.ng_ran_cgi.plmn.mcc); + _F1_EQ_CHECK_INT(in->choice.ng_ran_cgi.plmn.mnc, out->choice.ng_ran_cgi.plmn.mnc); + _F1_EQ_CHECK_INT(in->choice.ng_ran_cgi.plmn.mnc_digit_length, out->choice.ng_ran_cgi.plmn.mnc_digit_length); + _F1_EQ_CHECK_LONG(in->choice.ng_ran_cgi.nr_cellid, out->choice.ng_ran_cgi.nr_cellid); + break; + case F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_NRARFCN: + _F1_EQ_CHECK_INT(in->choice.nr_arfcn, out->choice.nr_arfcn); + break; + case F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_PRSCONFIGURATION: + PRINT_ERROR("TRP information type response item PRS configuration unsupported\n"); + return false; + break; + case F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_SSBINFORMATION: + PRINT_ERROR("TRP information type response item SSB Information unsupported\n"); + return false; + break; + case F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_SFNINITIALISATIONTIME: + PRINT_ERROR("TRP information type response item SFN Initialization Time unsupported\n"); + return false; + break; + case F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_SPATIALDIRECTIONINFORMATION: + PRINT_ERROR("TRP information type response item Spatial Direction Information unsupported\n"); + return false; + break; + case F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_GEOGRAPHICALCOORDINATES: + _F1_CHECK_EXP(eq_geographical_coordinates(&in->choice.geographical_coordinates, &out->choice.geographical_coordinates)); + break; + default: + PRINT_ERROR("received illegal trp information type response item %d\n", in->present); + return false; + break; + } + return true; +} + +static F1AP_PosMeasurementResult_t encode_positioning_measurement_result(const f1ap_pos_measurement_result_t *posMeasurementResult) +{ + F1AP_PosMeasurementResult_t f1_posMeasurementResult = {0}; + for (int i = 0; i < posMeasurementResult->pos_measurement_result_item_length; i++) { + asn1cSequenceAdd(f1_posMeasurementResult.list, F1AP_PosMeasurementResultItem_t, f1_pos_measurement_result_item); + f1ap_pos_measurement_result_item_t *pos_measurement_result_item = &posMeasurementResult->pos_measurement_result_item[i]; + + // measuredResultsValue + F1AP_MeasuredResultsValue_t *f1_measuredResultsValue = &f1_pos_measurement_result_item->measuredResultsValue; + f1ap_measured_results_value_t *measuredResultsValue = &pos_measurement_result_item->measured_results_value; + + switch (measuredResultsValue->present) { + case F1AP_MEASURED_RESULTS_VALUE_PR_NOTHING: + f1_measuredResultsValue->present = F1AP_MeasuredResultsValue_PR_NOTHING; + break; + // Angle of Arrival + case F1AP_MEASURED_RESULTS_VALUE_PR_UL_ANGLEOFARRIVAL: + f1_measuredResultsValue->present = F1AP_MeasuredResultsValue_PR_uL_AngleOfArrival; + asn1cCalloc(f1_measuredResultsValue->choice.uL_AngleOfArrival, f1_uL_AngleOfArrival); + f1ap_ul_aoa_t *uL_AngleOfArrival = &measuredResultsValue->choice.ul_angle_of_arrival; + f1_uL_AngleOfArrival->azimuthAoA = uL_AngleOfArrival->azimuth_aoa; + if (uL_AngleOfArrival->zenith_aoa) { + asn1cCalloc(f1_uL_AngleOfArrival->zenithAoA, f1_zenithAoA); + *f1_zenithAoA = *uL_AngleOfArrival->zenith_aoa; + } + if (uL_AngleOfArrival->lcs_to_gcs_translation_aoa) { + asn1cCalloc(f1_uL_AngleOfArrival->lCS_to_GCS_TranslationAoA, f1_lCS_to_GCS_TranslationAoA); + f1ap_lcs_to_gcs_translationaoa_t *lCS_to_GCS_TranslationAoA = uL_AngleOfArrival->lcs_to_gcs_translation_aoa; + + f1_lCS_to_GCS_TranslationAoA->alpha = lCS_to_GCS_TranslationAoA->alpha; + f1_lCS_to_GCS_TranslationAoA->beta = lCS_to_GCS_TranslationAoA->beta; + f1_lCS_to_GCS_TranslationAoA->gamma = lCS_to_GCS_TranslationAoA->gamma; + } + break; + // UL SRS RSRP + case F1AP_MEASURED_RESULTS_VALUE_PR_UL_SRS_RSRP: + f1_measuredResultsValue->present = F1AP_MeasuredResultsValue_PR_uL_SRS_RSRP; + f1_measuredResultsValue->choice.uL_SRS_RSRP = measuredResultsValue->choice.ul_srs_rsrp; + break; + // UL RTOA + case F1AP_MEASURED_RESULTS_VALUE_PR_UL_RTOA: + f1_measuredResultsValue->present = F1AP_MeasuredResultsValue_PR_uL_RTOA; + asn1cCalloc(f1_measuredResultsValue->choice.uL_RTOA, f1_uL_RTOA); + f1ap_ul_rtoa_measurement_t *uL_RTOA = &measuredResultsValue->choice.ul_rtoa; + f1ap_ul_rtoa_measurement_item_t *ul_rtoa_meas_item = &uL_RTOA->ul_rtoa_measurement_item; + F1AP_UL_RTOA_MeasurementItem_t *f1_ul_rtoa_meas_item = &f1_uL_RTOA->uL_RTOA_MeasurementItem; + + switch (ul_rtoa_meas_item->present) { + case F1AP_ULRTOAMEAS_PR_NOTHING: + f1_ul_rtoa_meas_item->present = F1AP_UL_RTOA_MeasurementItem_PR_NOTHING; + break; + case F1AP_ULRTOAMEAS_PR_K0: + f1_ul_rtoa_meas_item->present = F1AP_UL_RTOA_MeasurementItem_PR_k0; + f1_ul_rtoa_meas_item->choice.k0 = ul_rtoa_meas_item->choice.k0; + break; + case F1AP_ULRTOAMEAS_PR_K1: + f1_ul_rtoa_meas_item->present = F1AP_UL_RTOA_MeasurementItem_PR_k1; + f1_ul_rtoa_meas_item->choice.k1 = ul_rtoa_meas_item->choice.k1; + break; + case F1AP_ULRTOAMEAS_PR_K2: + f1_ul_rtoa_meas_item->present = F1AP_UL_RTOA_MeasurementItem_PR_k2; + f1_ul_rtoa_meas_item->choice.k2 = ul_rtoa_meas_item->choice.k2; + break; + case F1AP_ULRTOAMEAS_PR_K3: + f1_ul_rtoa_meas_item->present = F1AP_UL_RTOA_MeasurementItem_PR_k3; + f1_ul_rtoa_meas_item->choice.k3 = ul_rtoa_meas_item->choice.k3; + break; + case F1AP_ULRTOAMEAS_PR_K4: + f1_ul_rtoa_meas_item->present = F1AP_UL_RTOA_MeasurementItem_PR_k4; + f1_ul_rtoa_meas_item->choice.k4 = ul_rtoa_meas_item->choice.k4; + break; + case F1AP_ULRTOAMEAS_PR_K5: + f1_ul_rtoa_meas_item->present = F1AP_UL_RTOA_MeasurementItem_PR_k5; + f1_ul_rtoa_meas_item->choice.k5 = ul_rtoa_meas_item->choice.k5; + break; + default: + AssertFatal(false, "Illegal uL_RTOA_MeasurementItem %d\n", ul_rtoa_meas_item->present); + break; + } + break; + // gNB RX-TX Time Diff + case F1AP_MEASURED_RESULTS_VALUE_PR_GNB_RXTXTIMEDIFF: + f1_measuredResultsValue->present = F1AP_MeasuredResultsValue_PR_gNB_RxTxTimeDiff; + asn1cCalloc(f1_measuredResultsValue->choice.gNB_RxTxTimeDiff, f1_gNB_RxTxTimeDiff); + + f1ap_gnb_rx_tx_time_diff_t *gNB_RxTxTimeDiff = &measuredResultsValue->choice.gnb_rx_tx_time_diff; + f1ap_gnb_rx_tx_time_diff_meas_t *rx_tx_time_diff = &gNB_RxTxTimeDiff->rx_tx_time_diff; + F1AP_GNBRxTxTimeDiffMeas_t *f1_rxTxTimeDiff = &f1_gNB_RxTxTimeDiff->rxTxTimeDiff; + + switch (rx_tx_time_diff->present) { + case F1AP_GNBRXTXTIMEDIFFMEAS_PR_NOTHING: + f1_rxTxTimeDiff->present = F1AP_GNBRxTxTimeDiffMeas_PR_NOTHING; + break; + case F1AP_GNBRXTXTIMEDIFFMEAS_PR_K0: + f1_rxTxTimeDiff->present = F1AP_GNBRxTxTimeDiffMeas_PR_k0; + f1_rxTxTimeDiff->choice.k0 = rx_tx_time_diff->choice.k0; + break; + case F1AP_GNBRXTXTIMEDIFFMEAS_PR_K1: + f1_rxTxTimeDiff->present = F1AP_GNBRxTxTimeDiffMeas_PR_k1; + f1_rxTxTimeDiff->choice.k1 = rx_tx_time_diff->choice.k1; + break; + case F1AP_GNBRXTXTIMEDIFFMEAS_PR_K2: + f1_rxTxTimeDiff->present = F1AP_GNBRxTxTimeDiffMeas_PR_k2; + f1_rxTxTimeDiff->choice.k2 = rx_tx_time_diff->choice.k2; + break; + case F1AP_GNBRXTXTIMEDIFFMEAS_PR_K3: + f1_rxTxTimeDiff->present = F1AP_GNBRxTxTimeDiffMeas_PR_k3; + f1_rxTxTimeDiff->choice.k3 = rx_tx_time_diff->choice.k3; + break; + case F1AP_GNBRXTXTIMEDIFFMEAS_PR_K4: + f1_rxTxTimeDiff->present = F1AP_GNBRxTxTimeDiffMeas_PR_k4; + f1_rxTxTimeDiff->choice.k4 = rx_tx_time_diff->choice.k4; + break; + case F1AP_GNBRXTXTIMEDIFFMEAS_PR_K5: + f1_rxTxTimeDiff->present = F1AP_GNBRxTxTimeDiffMeas_PR_k5; + f1_rxTxTimeDiff->choice.k5 = rx_tx_time_diff->choice.k5; + break; + default: + AssertFatal(false, "Illegal rxTxTimeDiff value %d\n", rx_tx_time_diff->present); + break; + } + break; + default: + AssertFatal(false, "Illegal measuredResultsValue %d\n", measuredResultsValue->present); + break; + } + + // timeStamp + F1AP_TimeStamp_t *f1_timeStamp = &f1_pos_measurement_result_item->timeStamp; + f1ap_time_stamp_t *timeStamp = &pos_measurement_result_item->time_stamp; + f1_timeStamp->systemFrameNumber = timeStamp->system_frame_number; + F1AP_TimeStampSlotIndex_t *f1_slotIndex = &f1_timeStamp->slotIndex; + f1ap_time_stamp_slot_index_t *slot_index = &timeStamp->slot_index; + switch (slot_index->present) { + case F1AP_TIME_STAMP_SLOT_INDEX_PR_NOTHING: + f1_slotIndex->present = F1AP_TimeStampSlotIndex_PR_NOTHING; + break; + case F1AP_TIME_STAMP_SLOT_INDEX_PR_SCS_15: + f1_slotIndex->present = F1AP_TimeStampSlotIndex_PR_sCS_15; + f1_slotIndex->choice.sCS_15 = slot_index->choice.scs_15; + break; + case F1AP_TIME_STAMP_SLOT_INDEX_PR_SCS_30: + f1_slotIndex->present = F1AP_TimeStampSlotIndex_PR_sCS_30; + f1_slotIndex->choice.sCS_30 = slot_index->choice.scs_30; + break; + case F1AP_TIME_STAMP_SLOT_INDEX_PR_SCS_60: + f1_slotIndex->present = F1AP_TimeStampSlotIndex_PR_sCS_60; + f1_slotIndex->choice.sCS_60 = slot_index->choice.scs_60; + break; + case F1AP_TIME_STAMP_SLOT_INDEX_PR_SCS_120: + f1_slotIndex->present = F1AP_TimeStampSlotIndex_PR_sCS_120; + f1_slotIndex->choice.sCS_120 = slot_index->choice.scs_120; + break; + default: + AssertFatal(false, "Illegal slotIndex value %d\n", slot_index->present); + break; + } + } + return f1_posMeasurementResult; +} + +static bool decode_positioning_measurement_result(F1AP_PosMeasurementResult_t *f1_posMeasurementResult, + f1ap_pos_measurement_result_t *posMeasurementResult) +{ + uint32_t pos_meas_result_length = f1_posMeasurementResult->list.count; + posMeasurementResult->pos_measurement_result_item_length = pos_meas_result_length; + posMeasurementResult->pos_measurement_result_item = + calloc_or_fail(pos_meas_result_length, sizeof(*posMeasurementResult->pos_measurement_result_item)); + for (int i = 0; i < pos_meas_result_length; i++) { + F1AP_PosMeasurementResultItem_t *f1_pos_measurement_result_item = f1_posMeasurementResult->list.array[i]; + f1ap_pos_measurement_result_item_t *pos_measurement_result_item = &posMeasurementResult->pos_measurement_result_item[i]; + + // measuredResultsValue + F1AP_MeasuredResultsValue_t *f1_measuredResultsValue = &f1_pos_measurement_result_item->measuredResultsValue; + f1ap_measured_results_value_t *measuredResultsValue = &pos_measurement_result_item->measured_results_value; + + switch (f1_measuredResultsValue->present) { + case F1AP_MeasuredResultsValue_PR_NOTHING: + measuredResultsValue->present = F1AP_MEASURED_RESULTS_VALUE_PR_NOTHING; + break; + // Angle of Arrival + case F1AP_MeasuredResultsValue_PR_uL_AngleOfArrival: + measuredResultsValue->present = F1AP_MEASURED_RESULTS_VALUE_PR_UL_ANGLEOFARRIVAL; + + F1AP_UL_AoA_t *f1_uL_AngleOfArrival = f1_measuredResultsValue->choice.uL_AngleOfArrival; + f1ap_ul_aoa_t *uL_AngleOfArrival = &measuredResultsValue->choice.ul_angle_of_arrival; + + uL_AngleOfArrival->azimuth_aoa = f1_uL_AngleOfArrival->azimuthAoA; + if (f1_uL_AngleOfArrival->zenithAoA) { + uL_AngleOfArrival->zenith_aoa = calloc_or_fail(1, sizeof(*uL_AngleOfArrival->zenith_aoa)); + *uL_AngleOfArrival->zenith_aoa = *f1_uL_AngleOfArrival->zenithAoA; + } + if (f1_uL_AngleOfArrival->lCS_to_GCS_TranslationAoA) { + uL_AngleOfArrival->lcs_to_gcs_translation_aoa = calloc_or_fail(1, sizeof(*uL_AngleOfArrival->lcs_to_gcs_translation_aoa)); + f1ap_lcs_to_gcs_translationaoa_t *lCS_to_GCS_TranslationAoA = uL_AngleOfArrival->lcs_to_gcs_translation_aoa; + F1AP_LCS_to_GCS_TranslationAoA_t *f1_lCS_to_GCS_TranslationAoA = f1_uL_AngleOfArrival->lCS_to_GCS_TranslationAoA; + + lCS_to_GCS_TranslationAoA->alpha = f1_lCS_to_GCS_TranslationAoA->alpha; + lCS_to_GCS_TranslationAoA->beta = f1_lCS_to_GCS_TranslationAoA->beta; + lCS_to_GCS_TranslationAoA->gamma = f1_lCS_to_GCS_TranslationAoA->gamma; + } + break; + // UL SRS RSRP + case F1AP_MeasuredResultsValue_PR_uL_SRS_RSRP: + measuredResultsValue->present = F1AP_MEASURED_RESULTS_VALUE_PR_UL_SRS_RSRP; + measuredResultsValue->choice.ul_srs_rsrp = f1_measuredResultsValue->choice.uL_SRS_RSRP; + break; + // UL RTOA + case F1AP_MeasuredResultsValue_PR_uL_RTOA: + measuredResultsValue->present = F1AP_MEASURED_RESULTS_VALUE_PR_UL_RTOA; + F1AP_UL_RTOA_Measurement_t *f1_uL_RTOA = f1_measuredResultsValue->choice.uL_RTOA; + f1ap_ul_rtoa_measurement_t *uL_RTOA = &measuredResultsValue->choice.ul_rtoa; + F1AP_UL_RTOA_MeasurementItem_t *f1_ul_rtoa_meas_item = &f1_uL_RTOA->uL_RTOA_MeasurementItem; + f1ap_ul_rtoa_measurement_item_t *ul_rtoa_meas_item = &uL_RTOA->ul_rtoa_measurement_item; + + switch (f1_ul_rtoa_meas_item->present) { + case F1AP_UL_RTOA_MeasurementItem_PR_NOTHING: + ul_rtoa_meas_item->present = F1AP_ULRTOAMEAS_PR_NOTHING; + break; + case F1AP_UL_RTOA_MeasurementItem_PR_k0: + ul_rtoa_meas_item->present = F1AP_ULRTOAMEAS_PR_K0; + ul_rtoa_meas_item->choice.k0 = f1_ul_rtoa_meas_item->choice.k0; + break; + case F1AP_UL_RTOA_MeasurementItem_PR_k1: + ul_rtoa_meas_item->present = F1AP_ULRTOAMEAS_PR_K1; + ul_rtoa_meas_item->choice.k1 = f1_ul_rtoa_meas_item->choice.k1; + break; + case F1AP_UL_RTOA_MeasurementItem_PR_k2: + ul_rtoa_meas_item->present = F1AP_ULRTOAMEAS_PR_K2; + ul_rtoa_meas_item->choice.k2 = f1_ul_rtoa_meas_item->choice.k2; + break; + case F1AP_UL_RTOA_MeasurementItem_PR_k3: + ul_rtoa_meas_item->present = F1AP_ULRTOAMEAS_PR_K3; + ul_rtoa_meas_item->choice.k3 = f1_ul_rtoa_meas_item->choice.k3; + break; + case F1AP_UL_RTOA_MeasurementItem_PR_k4: + ul_rtoa_meas_item->present = F1AP_ULRTOAMEAS_PR_K4; + ul_rtoa_meas_item->choice.k4 = f1_ul_rtoa_meas_item->choice.k4; + break; + case F1AP_UL_RTOA_MeasurementItem_PR_k5: + ul_rtoa_meas_item->present = F1AP_ULRTOAMEAS_PR_K5; + ul_rtoa_meas_item->choice.k5 = f1_ul_rtoa_meas_item->choice.k5; + break; + default: + AssertError(false, return false, "Illegal uL_RTOA_MeasurementItem %d\n", f1_ul_rtoa_meas_item->present); + break; + } + break; + // gNB RX-TX Time Diff + case F1AP_MeasuredResultsValue_PR_gNB_RxTxTimeDiff: + measuredResultsValue->present = F1AP_MEASURED_RESULTS_VALUE_PR_GNB_RXTXTIMEDIFF; + F1AP_GNB_RxTxTimeDiff_t *f1_gNB_RxTxTimeDiff = f1_measuredResultsValue->choice.gNB_RxTxTimeDiff; + f1ap_gnb_rx_tx_time_diff_t *gNB_RxTxTimeDiff = &measuredResultsValue->choice.gnb_rx_tx_time_diff; + F1AP_GNBRxTxTimeDiffMeas_t *f1_rxTxTimeDiff = &f1_gNB_RxTxTimeDiff->rxTxTimeDiff; + f1ap_gnb_rx_tx_time_diff_meas_t *rx_tx_time_diff = &gNB_RxTxTimeDiff->rx_tx_time_diff; + + switch (f1_rxTxTimeDiff->present) { + case F1AP_GNBRxTxTimeDiffMeas_PR_NOTHING: + rx_tx_time_diff->present = F1AP_GNBRXTXTIMEDIFFMEAS_PR_NOTHING; + break; + case F1AP_GNBRxTxTimeDiffMeas_PR_k0: + rx_tx_time_diff->present = F1AP_GNBRXTXTIMEDIFFMEAS_PR_K0; + rx_tx_time_diff->choice.k0 = f1_rxTxTimeDiff->choice.k0; + break; + case F1AP_GNBRxTxTimeDiffMeas_PR_k1: + rx_tx_time_diff->present = F1AP_GNBRXTXTIMEDIFFMEAS_PR_K1; + rx_tx_time_diff->choice.k1 = f1_rxTxTimeDiff->choice.k1; + break; + case F1AP_GNBRxTxTimeDiffMeas_PR_k2: + rx_tx_time_diff->present = F1AP_GNBRXTXTIMEDIFFMEAS_PR_K2; + rx_tx_time_diff->choice.k2 = f1_rxTxTimeDiff->choice.k2; + break; + case F1AP_GNBRxTxTimeDiffMeas_PR_k3: + rx_tx_time_diff->present = F1AP_GNBRXTXTIMEDIFFMEAS_PR_K3; + rx_tx_time_diff->choice.k3 = f1_rxTxTimeDiff->choice.k3; + break; + case F1AP_GNBRxTxTimeDiffMeas_PR_k4: + rx_tx_time_diff->present = F1AP_GNBRXTXTIMEDIFFMEAS_PR_K4; + rx_tx_time_diff->choice.k4 = f1_rxTxTimeDiff->choice.k4; + break; + case F1AP_GNBRxTxTimeDiffMeas_PR_k5: + rx_tx_time_diff->present = F1AP_GNBRXTXTIMEDIFFMEAS_PR_K5; + rx_tx_time_diff->choice.k5 = f1_rxTxTimeDiff->choice.k5; + break; + default: + AssertError(false, return false, "Illegal rxTxTimeDiff value %d\n", f1_rxTxTimeDiff->present); + break; + } + break; + default: + AssertError(false, return false, "Illegal measuredResultsValue %d\n", f1_measuredResultsValue->present); + break; + } + + // timeStamp + F1AP_TimeStamp_t *f1_timeStamp = &f1_pos_measurement_result_item->timeStamp; + f1ap_time_stamp_t *timeStamp = &pos_measurement_result_item->time_stamp; + timeStamp->system_frame_number = f1_timeStamp->systemFrameNumber; + F1AP_TimeStampSlotIndex_t *f1_slotIndex = &f1_timeStamp->slotIndex; + f1ap_time_stamp_slot_index_t *slot_index = &timeStamp->slot_index; + switch (f1_slotIndex->present) { + case F1AP_TimeStampSlotIndex_PR_NOTHING: + slot_index->present = F1AP_TIME_STAMP_SLOT_INDEX_PR_NOTHING; + break; + case F1AP_TimeStampSlotIndex_PR_sCS_15: + slot_index->present = F1AP_TIME_STAMP_SLOT_INDEX_PR_SCS_15; + slot_index->choice.scs_15 = f1_slotIndex->choice.sCS_15; + break; + case F1AP_TimeStampSlotIndex_PR_sCS_30: + slot_index->present = F1AP_TIME_STAMP_SLOT_INDEX_PR_SCS_30; + slot_index->choice.scs_30 = f1_slotIndex->choice.sCS_30; + break; + case F1AP_TimeStampSlotIndex_PR_sCS_60: + slot_index->present = F1AP_TIME_STAMP_SLOT_INDEX_PR_SCS_60; + slot_index->choice.scs_60 = f1_slotIndex->choice.sCS_60; + break; + case F1AP_TimeStampSlotIndex_PR_sCS_120: + slot_index->present = F1AP_TIME_STAMP_SLOT_INDEX_PR_SCS_120; + slot_index->choice.scs_120 = f1_slotIndex->choice.sCS_120; + break; + default: + AssertError(false, return false, "Illegal slotIndex value %d\n", f1_slotIndex->present); + break; + } + } + return true; +} + +static f1ap_pos_measurement_result_t cp_positioning_measurement_result(const f1ap_pos_measurement_result_t *in) +{ + f1ap_pos_measurement_result_t out = {0}; + uint32_t pos_meas_result_length = in->pos_measurement_result_item_length; + out.pos_measurement_result_item_length = pos_meas_result_length; + out.pos_measurement_result_item = calloc_or_fail(pos_meas_result_length, sizeof(*out.pos_measurement_result_item)); + for (int i = 0; i < pos_meas_result_length; i++) { + f1ap_pos_measurement_result_item_t *f1_pos_measurement_result_item = &in->pos_measurement_result_item[i]; + f1ap_pos_measurement_result_item_t *pos_measurement_result_item = &out.pos_measurement_result_item[i]; + + // measuredResultsValue + f1ap_measured_results_value_t *f1_measuredResultsValue = &f1_pos_measurement_result_item->measured_results_value; + f1ap_measured_results_value_t *measuredResultsValue = &pos_measurement_result_item->measured_results_value; + + measuredResultsValue->present = f1_measuredResultsValue->present; + switch (f1_measuredResultsValue->present) { + case F1AP_MEASURED_RESULTS_VALUE_PR_NOTHING: + // nothing to copy + break; + // Angle of Arrival + case F1AP_MEASURED_RESULTS_VALUE_PR_UL_ANGLEOFARRIVAL: { + f1ap_ul_aoa_t *f1_uL_AngleOfArrival = &f1_measuredResultsValue->choice.ul_angle_of_arrival; + f1ap_ul_aoa_t *uL_AngleOfArrival = &measuredResultsValue->choice.ul_angle_of_arrival; + + uL_AngleOfArrival->azimuth_aoa = f1_uL_AngleOfArrival->azimuth_aoa; + if (f1_uL_AngleOfArrival->zenith_aoa) { + uL_AngleOfArrival->zenith_aoa = calloc_or_fail(1, sizeof(*uL_AngleOfArrival->zenith_aoa)); + *uL_AngleOfArrival->zenith_aoa = *f1_uL_AngleOfArrival->zenith_aoa; + } + if (f1_uL_AngleOfArrival->lcs_to_gcs_translation_aoa) { + uL_AngleOfArrival->lcs_to_gcs_translation_aoa = calloc_or_fail(1, sizeof(*uL_AngleOfArrival->lcs_to_gcs_translation_aoa)); + + f1ap_lcs_to_gcs_translationaoa_t *lCS_to_GCS_TranslationAoA = uL_AngleOfArrival->lcs_to_gcs_translation_aoa; + f1ap_lcs_to_gcs_translationaoa_t *f1_lCS_to_GCS_TranslationAoA = f1_uL_AngleOfArrival->lcs_to_gcs_translation_aoa; + + lCS_to_GCS_TranslationAoA->alpha = f1_lCS_to_GCS_TranslationAoA->alpha; + lCS_to_GCS_TranslationAoA->beta = f1_lCS_to_GCS_TranslationAoA->beta; + lCS_to_GCS_TranslationAoA->gamma = f1_lCS_to_GCS_TranslationAoA->gamma; + } + break; + } + // UL SRS RSRP + case F1AP_MEASURED_RESULTS_VALUE_PR_UL_SRS_RSRP: + measuredResultsValue->choice.ul_srs_rsrp = f1_measuredResultsValue->choice.ul_srs_rsrp; + break; + // UL RTOA + case F1AP_MEASURED_RESULTS_VALUE_PR_UL_RTOA: { + f1ap_ul_rtoa_measurement_t *f1_uL_RTOA = &f1_measuredResultsValue->choice.ul_rtoa; + f1ap_ul_rtoa_measurement_t *uL_RTOA = &measuredResultsValue->choice.ul_rtoa; + f1ap_ul_rtoa_measurement_item_t *f1_ul_rtoa_meas_item = &f1_uL_RTOA->ul_rtoa_measurement_item; + f1ap_ul_rtoa_measurement_item_t *ul_rtoa_meas_item = &uL_RTOA->ul_rtoa_measurement_item; + + switch (f1_ul_rtoa_meas_item->present) { + case F1AP_ULRTOAMEAS_PR_NOTHING: + break; + case F1AP_ULRTOAMEAS_PR_K0: + ul_rtoa_meas_item->choice.k0 = f1_ul_rtoa_meas_item->choice.k0; + break; + case F1AP_ULRTOAMEAS_PR_K1: + ul_rtoa_meas_item->choice.k1 = f1_ul_rtoa_meas_item->choice.k1; + break; + case F1AP_ULRTOAMEAS_PR_K2: + ul_rtoa_meas_item->choice.k2 = f1_ul_rtoa_meas_item->choice.k2; + break; + case F1AP_ULRTOAMEAS_PR_K3: + ul_rtoa_meas_item->choice.k3 = f1_ul_rtoa_meas_item->choice.k3; + break; + case F1AP_ULRTOAMEAS_PR_K4: + ul_rtoa_meas_item->choice.k4 = f1_ul_rtoa_meas_item->choice.k4; + break; + case F1AP_ULRTOAMEAS_PR_K5: + ul_rtoa_meas_item->choice.k5 = f1_ul_rtoa_meas_item->choice.k5; + break; + default: + AssertFatal(false, "Illegal uL_RTOA_MeasurementItem %d\n", f1_uL_RTOA->ul_rtoa_measurement_item.present); + break; + } + break; + } + // gNB RX-TX Time Diff + case F1AP_MEASURED_RESULTS_VALUE_PR_GNB_RXTXTIMEDIFF: { + f1ap_gnb_rx_tx_time_diff_t *f1_gNB_RxTxTimeDiff = &f1_measuredResultsValue->choice.gnb_rx_tx_time_diff; + f1ap_gnb_rx_tx_time_diff_t *gNB_RxTxTimeDiff = &measuredResultsValue->choice.gnb_rx_tx_time_diff; + f1_gNB_RxTxTimeDiff->rx_tx_time_diff.present = gNB_RxTxTimeDiff->rx_tx_time_diff.present; + + f1ap_gnb_rx_tx_time_diff_meas_t *f1_rx_tx_time_diff = &f1_gNB_RxTxTimeDiff->rx_tx_time_diff; + f1ap_gnb_rx_tx_time_diff_meas_t *rx_tx_time_diff = &gNB_RxTxTimeDiff->rx_tx_time_diff; + + switch (f1_rx_tx_time_diff->present) { + case F1AP_GNBRXTXTIMEDIFFMEAS_PR_NOTHING: + break; + case F1AP_GNBRXTXTIMEDIFFMEAS_PR_K0: + rx_tx_time_diff->choice.k0 = f1_rx_tx_time_diff->choice.k0; + break; + case F1AP_GNBRXTXTIMEDIFFMEAS_PR_K1: + rx_tx_time_diff->choice.k1 = f1_rx_tx_time_diff->choice.k1; + break; + case F1AP_GNBRXTXTIMEDIFFMEAS_PR_K2: + rx_tx_time_diff->choice.k2 = f1_rx_tx_time_diff->choice.k2; + break; + case F1AP_GNBRXTXTIMEDIFFMEAS_PR_K3: + rx_tx_time_diff->choice.k3 = f1_rx_tx_time_diff->choice.k3; + break; + case F1AP_GNBRXTXTIMEDIFFMEAS_PR_K4: + rx_tx_time_diff->choice.k4 = f1_rx_tx_time_diff->choice.k4; + break; + case F1AP_GNBRXTXTIMEDIFFMEAS_PR_K5: + rx_tx_time_diff->choice.k5 = f1_rx_tx_time_diff->choice.k5; + break; + default: + AssertFatal(false, "Illegal rxTxTimeDiff value %d\n", f1_rx_tx_time_diff->present); + break; + } + break; + } + default: + AssertFatal(false, "Illegal measuredResultsValue %d\n", f1_measuredResultsValue->present); + break; + } + + // timeStamp + f1ap_time_stamp_t *f1_timeStamp = &f1_pos_measurement_result_item->time_stamp; + f1ap_time_stamp_t *timeStamp = &pos_measurement_result_item->time_stamp; + timeStamp->system_frame_number = f1_timeStamp->system_frame_number; + f1ap_time_stamp_slot_index_t *f1_slot_index = &f1_timeStamp->slot_index; + f1ap_time_stamp_slot_index_t *slot_index = &timeStamp->slot_index; + switch (f1_slot_index->present) { + case F1AP_TIME_STAMP_SLOT_INDEX_PR_NOTHING: + break; + case F1AP_TIME_STAMP_SLOT_INDEX_PR_SCS_15: + slot_index->choice.scs_15 = f1_slot_index->choice.scs_15; + break; + case F1AP_TIME_STAMP_SLOT_INDEX_PR_SCS_30: + slot_index->choice.scs_30 = f1_slot_index->choice.scs_30; + break; + case F1AP_TIME_STAMP_SLOT_INDEX_PR_SCS_60: + slot_index->choice.scs_60 = f1_slot_index->choice.scs_60; + break; + case F1AP_TIME_STAMP_SLOT_INDEX_PR_SCS_120: + slot_index->choice.scs_120 = f1_slot_index->choice.scs_120; + break; + default: + AssertFatal(false, "Illegal slotIndex value %d\n", f1_slot_index->present); + break; + } + } + return out; +} + +static bool eq_positioning_measurement_result(const f1ap_pos_measurement_result_t *f1_posMeasurementResult, + const f1ap_pos_measurement_result_t *posMeasurementResult) +{ + uint32_t pos_meas_result_length = f1_posMeasurementResult->pos_measurement_result_item_length; + _F1_EQ_CHECK_INT(posMeasurementResult->pos_measurement_result_item_length, pos_meas_result_length); + for (int i = 0; i < pos_meas_result_length; i++) { + f1ap_pos_measurement_result_item_t *f1_pos_measurement_result_item = &f1_posMeasurementResult->pos_measurement_result_item[i]; + f1ap_pos_measurement_result_item_t *pos_measurement_result_item = &posMeasurementResult->pos_measurement_result_item[i]; + + // measuredResultsValue + f1ap_measured_results_value_t *f1_measuredResultsValue = &f1_pos_measurement_result_item->measured_results_value; + f1ap_measured_results_value_t *measuredResultsValue = &pos_measurement_result_item->measured_results_value; + + _F1_EQ_CHECK_INT(measuredResultsValue->present, f1_measuredResultsValue->present); + switch (measuredResultsValue->present) { + case F1AP_MEASURED_RESULTS_VALUE_PR_NOTHING: + // nothing to check + break; + // Angle of Arrival + case F1AP_MEASURED_RESULTS_VALUE_PR_UL_ANGLEOFARRIVAL: { + f1ap_ul_aoa_t *f1_uL_AngleOfArrival = &f1_measuredResultsValue->choice.ul_angle_of_arrival; + f1ap_ul_aoa_t *uL_AngleOfArrival = &measuredResultsValue->choice.ul_angle_of_arrival; + + _F1_EQ_CHECK_INT(uL_AngleOfArrival->azimuth_aoa, f1_uL_AngleOfArrival->azimuth_aoa); + if (f1_uL_AngleOfArrival->zenith_aoa) { + _F1_EQ_CHECK_INT(*uL_AngleOfArrival->zenith_aoa, *f1_uL_AngleOfArrival->zenith_aoa); + } + if (f1_uL_AngleOfArrival->lcs_to_gcs_translation_aoa) { + f1ap_lcs_to_gcs_translationaoa_t *lCS_to_GCS_TranslationAoA = uL_AngleOfArrival->lcs_to_gcs_translation_aoa; + f1ap_lcs_to_gcs_translationaoa_t *f1_lCS_to_GCS_TranslationAoA = f1_uL_AngleOfArrival->lcs_to_gcs_translation_aoa; + + _F1_EQ_CHECK_INT(lCS_to_GCS_TranslationAoA->alpha, f1_lCS_to_GCS_TranslationAoA->alpha); + _F1_EQ_CHECK_INT(lCS_to_GCS_TranslationAoA->beta, f1_lCS_to_GCS_TranslationAoA->beta); + _F1_EQ_CHECK_INT(lCS_to_GCS_TranslationAoA->gamma, f1_lCS_to_GCS_TranslationAoA->gamma); + } + break; + } + // UL SRS RSRP + case F1AP_MEASURED_RESULTS_VALUE_PR_UL_SRS_RSRP: + _F1_EQ_CHECK_INT(measuredResultsValue->choice.ul_srs_rsrp, f1_measuredResultsValue->choice.ul_srs_rsrp); + break; + // UL RTOA + case F1AP_MEASURED_RESULTS_VALUE_PR_UL_RTOA: { + f1ap_ul_rtoa_measurement_t *f1_uL_RTOA = &f1_measuredResultsValue->choice.ul_rtoa; + f1ap_ul_rtoa_measurement_t *uL_RTOA = &measuredResultsValue->choice.ul_rtoa; + + f1ap_ul_rtoa_measurement_item_t *f1_ul_rtoa_meas_item = &f1_uL_RTOA->ul_rtoa_measurement_item; + f1ap_ul_rtoa_measurement_item_t *ul_rtoa_meas_item = &uL_RTOA->ul_rtoa_measurement_item; + + switch (f1_ul_rtoa_meas_item->present) { + case F1AP_ULRTOAMEAS_PR_NOTHING: + break; + case F1AP_ULRTOAMEAS_PR_K0: + _F1_EQ_CHECK_INT(ul_rtoa_meas_item->choice.k0, f1_ul_rtoa_meas_item->choice.k0); + break; + case F1AP_ULRTOAMEAS_PR_K1: + _F1_EQ_CHECK_INT(ul_rtoa_meas_item->choice.k1, f1_ul_rtoa_meas_item->choice.k1); + break; + case F1AP_ULRTOAMEAS_PR_K2: + _F1_EQ_CHECK_INT(ul_rtoa_meas_item->choice.k2, f1_ul_rtoa_meas_item->choice.k2); + break; + case F1AP_ULRTOAMEAS_PR_K3: + _F1_EQ_CHECK_INT(ul_rtoa_meas_item->choice.k3, f1_ul_rtoa_meas_item->choice.k3); + break; + case F1AP_ULRTOAMEAS_PR_K4: + _F1_EQ_CHECK_INT(ul_rtoa_meas_item->choice.k4, f1_ul_rtoa_meas_item->choice.k4); + break; + case F1AP_ULRTOAMEAS_PR_K5: + _F1_EQ_CHECK_INT(ul_rtoa_meas_item->choice.k5, f1_ul_rtoa_meas_item->choice.k5); + break; + default: + AssertError(false, return false, "Illegal uL_RTOA_MeasurementItem %d\n", f1_ul_rtoa_meas_item->present); + break; + } + break; + } + // gNB RX-TX Time Diff + case F1AP_MEASURED_RESULTS_VALUE_PR_GNB_RXTXTIMEDIFF: { + f1ap_gnb_rx_tx_time_diff_t *f1_gNB_RxTxTimeDiff = &f1_measuredResultsValue->choice.gnb_rx_tx_time_diff; + f1ap_gnb_rx_tx_time_diff_t *gNB_RxTxTimeDiff = &measuredResultsValue->choice.gnb_rx_tx_time_diff; + f1ap_gnb_rx_tx_time_diff_meas_t *f1_rx_tx_time_diff = &f1_gNB_RxTxTimeDiff->rx_tx_time_diff; + f1ap_gnb_rx_tx_time_diff_meas_t *rx_tx_time_diff = &gNB_RxTxTimeDiff->rx_tx_time_diff; + _F1_EQ_CHECK_INT(f1_rx_tx_time_diff->present, rx_tx_time_diff->present); + switch (f1_rx_tx_time_diff->present) { + case F1AP_GNBRXTXTIMEDIFFMEAS_PR_NOTHING: + break; + case F1AP_GNBRXTXTIMEDIFFMEAS_PR_K0: + _F1_EQ_CHECK_INT(rx_tx_time_diff->choice.k0, f1_rx_tx_time_diff->choice.k0); + break; + case F1AP_GNBRXTXTIMEDIFFMEAS_PR_K1: + _F1_EQ_CHECK_INT(rx_tx_time_diff->choice.k1, f1_rx_tx_time_diff->choice.k1); + break; + case F1AP_GNBRXTXTIMEDIFFMEAS_PR_K2: + _F1_EQ_CHECK_INT(rx_tx_time_diff->choice.k2, f1_rx_tx_time_diff->choice.k2); + break; + case F1AP_GNBRXTXTIMEDIFFMEAS_PR_K3: + _F1_EQ_CHECK_INT(rx_tx_time_diff->choice.k3, f1_rx_tx_time_diff->choice.k3); + break; + case F1AP_GNBRXTXTIMEDIFFMEAS_PR_K4: + _F1_EQ_CHECK_INT(rx_tx_time_diff->choice.k4, f1_rx_tx_time_diff->choice.k4); + break; + case F1AP_GNBRXTXTIMEDIFFMEAS_PR_K5: + _F1_EQ_CHECK_INT(rx_tx_time_diff->choice.k5, f1_rx_tx_time_diff->choice.k5); + break; + default: + AssertError(false, return false, "Illegal rxTxTimeDiff value %d\n", f1_rx_tx_time_diff->present); + break; + } + break; + } + default: + AssertError(false, return false, "Illegal measuredResultsValue %d\n", f1_measuredResultsValue->present); + break; + } + + // timeStamp + f1ap_time_stamp_t *f1_timeStamp = &f1_pos_measurement_result_item->time_stamp; + f1ap_time_stamp_t *timeStamp = &pos_measurement_result_item->time_stamp; + _F1_EQ_CHECK_INT(timeStamp->system_frame_number, f1_timeStamp->system_frame_number); + f1ap_time_stamp_slot_index_t *f1_slot_index = &f1_timeStamp->slot_index; + f1ap_time_stamp_slot_index_t *slot_index = &timeStamp->slot_index; + + switch (f1_slot_index->present) { + case F1AP_TIME_STAMP_SLOT_INDEX_PR_NOTHING: + break; + case F1AP_TIME_STAMP_SLOT_INDEX_PR_SCS_15: + _F1_EQ_CHECK_INT(slot_index->choice.scs_15, f1_slot_index->choice.scs_15); + break; + case F1AP_TIME_STAMP_SLOT_INDEX_PR_SCS_30: + _F1_EQ_CHECK_INT(slot_index->choice.scs_30, f1_slot_index->choice.scs_30); + break; + case F1AP_TIME_STAMP_SLOT_INDEX_PR_SCS_60: + _F1_EQ_CHECK_INT(slot_index->choice.scs_60, f1_slot_index->choice.scs_60); + break; + case F1AP_TIME_STAMP_SLOT_INDEX_PR_SCS_120: + _F1_EQ_CHECK_INT(slot_index->choice.scs_120, f1_slot_index->choice.scs_120); + break; + default: + AssertError(false, return false, "Illegal slotIndex value %d\n", f1_slot_index->present); + break; + } + } + return true; +} + +/** + * @brief Encode F1 positioning information request to ASN.1 + */ +F1AP_F1AP_PDU_t *encode_positioning_information_req(const f1ap_positioning_information_req_t *msg) +{ + F1AP_F1AP_PDU_t *pdu = calloc_or_fail(1, sizeof(*pdu)); + + /* Message Type */ + pdu->present = F1AP_F1AP_PDU_PR_initiatingMessage; + asn1cCalloc(pdu->choice.initiatingMessage, tmp); + tmp->procedureCode = F1AP_ProcedureCode_id_PositioningInformationExchange; + tmp->criticality = F1AP_Criticality_reject; + tmp->value.present = F1AP_InitiatingMessage__value_PR_PositioningInformationRequest; + F1AP_PositioningInformationRequest_t *out = &tmp->value.choice.PositioningInformationRequest; + + /* mandatory : GNB_CU_UE_F1AP_ID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningInformationRequestIEs_t, ie1); + ie1->id = F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID; + ie1->criticality = F1AP_Criticality_reject; + ie1->value.present = F1AP_PositioningInformationRequestIEs__value_PR_GNB_CU_UE_F1AP_ID; + ie1->value.choice.GNB_CU_UE_F1AP_ID = msg->gNB_CU_ue_id; + + /* mandatory : GNB_DU_UE_F1AP_ID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningInformationRequestIEs_t, ie2); + ie2->id = F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID; + ie2->criticality = F1AP_Criticality_reject; + ie2->value.present = F1AP_PositioningInformationRequestIEs__value_PR_GNB_DU_UE_F1AP_ID; + ie2->value.choice.GNB_DU_UE_F1AP_ID = msg->gNB_DU_ue_id; + + return pdu; +} + +/** + * @brief Decode F1 positioning information request + */ +bool decode_positioning_information_req(const F1AP_F1AP_PDU_t *pdu, f1ap_positioning_information_req_t *out) +{ + DevAssert(out != NULL); + memset(out, 0, sizeof(*out)); + + F1AP_PositioningInformationRequest_t *in = &pdu->choice.initiatingMessage->value.choice.PositioningInformationRequest; + F1AP_PositioningInformationRequestIEs_t *ie; + + F1AP_LIB_FIND_IE(F1AP_PositioningInformationRequestIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID, + true); + F1AP_LIB_FIND_IE(F1AP_PositioningInformationRequestIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID, + true); + + for (int i = 0; i < in->protocolIEs.list.count; ++i) { + ie = in->protocolIEs.list.array[i]; + AssertError(ie != NULL, return false, "in->protocolIEs.list.array[i] is NULL"); + switch (ie->id) { + case F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningInformationRequestIEs__value_PR_GNB_CU_UE_F1AP_ID); + out->gNB_CU_ue_id = ie->value.choice.GNB_CU_UE_F1AP_ID; + break; + case F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningInformationRequestIEs__value_PR_GNB_DU_UE_F1AP_ID); + out->gNB_DU_ue_id = ie->value.choice.GNB_DU_UE_F1AP_ID; + break; + case F1AP_ProtocolIE_ID_id_RequestedSRSTransmissionCharacteristics: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld not handled, skipping\n", ie->id); + break; + default: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld unknown, skipping\n", ie->id); + break; + } + } + + return true; +} + +/** + * @brief F1 positioning information request deep copy + */ +f1ap_positioning_information_req_t cp_positioning_information_req(const f1ap_positioning_information_req_t *orig) +{ + /* copy all mandatory fields that are not dynamic memory */ + f1ap_positioning_information_req_t cp = { + .gNB_CU_ue_id = orig->gNB_CU_ue_id, + .gNB_DU_ue_id = orig->gNB_DU_ue_id, + }; + + return cp; +} + +/** + * @brief F1 positioning information request equality check + */ +bool eq_positioning_information_req(const f1ap_positioning_information_req_t *a, const f1ap_positioning_information_req_t *b) +{ + _F1_EQ_CHECK_INT(a->gNB_CU_ue_id, b->gNB_CU_ue_id); + _F1_EQ_CHECK_INT(a->gNB_DU_ue_id, b->gNB_DU_ue_id); + + return true; +} + +/** + * @brief Free Allocated F1 positioning information request + */ +void free_positioning_information_req(f1ap_positioning_information_req_t *msg) +{ + // nothing to free +} + +/** + * @brief Encode F1 positioning information response to ASN.1 + */ +F1AP_F1AP_PDU_t *encode_positioning_information_resp(const f1ap_positioning_information_resp_t *msg) +{ + F1AP_F1AP_PDU_t *pdu = calloc_or_fail(1, sizeof(*pdu)); + + /* Message Type */ + pdu->present = F1AP_F1AP_PDU_PR_successfulOutcome; + asn1cCalloc(pdu->choice.successfulOutcome, tmp); + tmp->procedureCode = F1AP_ProcedureCode_id_PositioningInformationExchange; + tmp->criticality = F1AP_Criticality_reject; + tmp->value.present = F1AP_SuccessfulOutcome__value_PR_PositioningInformationResponse; + F1AP_PositioningInformationResponse_t *out = &tmp->value.choice.PositioningInformationResponse; + + /* mandatory : GNB_CU_UE_F1AP_ID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningInformationResponseIEs_t, ie1); + ie1->id = F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID; + ie1->criticality = F1AP_Criticality_reject; + ie1->value.present = F1AP_PositioningInformationResponseIEs__value_PR_GNB_CU_UE_F1AP_ID; + ie1->value.choice.GNB_CU_UE_F1AP_ID = msg->gNB_CU_ue_id; + + /* mandatory : GNB_DU_UE_F1AP_ID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningInformationResponseIEs_t, ie2); + ie2->id = F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID; + ie2->criticality = F1AP_Criticality_reject; + ie2->value.present = F1AP_PositioningInformationResponseIEs__value_PR_GNB_DU_UE_F1AP_ID; + ie2->value.choice.GNB_DU_UE_F1AP_ID = msg->gNB_DU_ue_id; + + /* optional : SRSConfiguration */ + if (msg->srs_configuration) { + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningInformationResponseIEs_t, ie3); + ie3->id = F1AP_ProtocolIE_ID_id_SRSConfiguration; + ie3->criticality = F1AP_Criticality_ignore; + ie3->value.present = F1AP_PositioningInformationResponseIEs__value_PR_SRSConfiguration; + f1ap_srs_carrier_list_t *srs_carrier_list = &msg->srs_configuration->srs_carrier_list; + ie3->value.choice.SRSConfiguration.sRSCarrier_List = encode_srs_carrier_list(srs_carrier_list); + } + + return pdu; +} + +/** + * @brief Decode F1 positioning information response + */ +bool decode_positioning_information_resp(const F1AP_F1AP_PDU_t *pdu, f1ap_positioning_information_resp_t *out) +{ + DevAssert(out != NULL); + memset(out, 0, sizeof(*out)); + + F1AP_PositioningInformationResponse_t *in = &pdu->choice.successfulOutcome->value.choice.PositioningInformationResponse; + F1AP_PositioningInformationResponseIEs_t *ie; + + F1AP_LIB_FIND_IE(F1AP_PositioningInformationResponseIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID, + true); + F1AP_LIB_FIND_IE(F1AP_PositioningInformationResponseIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID, + true); + F1AP_LIB_FIND_IE(F1AP_PositioningInformationResponseIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_SRSConfiguration, + false); + + for (int i = 0; i < in->protocolIEs.list.count; ++i) { + ie = in->protocolIEs.list.array[i]; + AssertError(ie != NULL, return false, "in->protocolIEs.list.array[i] is NULL"); + switch (ie->id) { + case F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningInformationResponseIEs__value_PR_GNB_CU_UE_F1AP_ID); + out->gNB_CU_ue_id = ie->value.choice.GNB_CU_UE_F1AP_ID; + break; + case F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningInformationResponseIEs__value_PR_GNB_DU_UE_F1AP_ID); + out->gNB_DU_ue_id = ie->value.choice.GNB_DU_UE_F1AP_ID; + break; + case F1AP_ProtocolIE_ID_id_SRSConfiguration: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningInformationResponseIEs__value_PR_SRSConfiguration); + F1AP_SRSCarrier_List_t *f1_sRSCarrier_List = &ie->value.choice.SRSConfiguration.sRSCarrier_List; + out->srs_configuration = calloc_or_fail(1, sizeof(*out->srs_configuration)); + f1ap_srs_carrier_list_t *srs_carrier_list = &out->srs_configuration->srs_carrier_list; + decode_srs_carrier_list(srs_carrier_list, f1_sRSCarrier_List); + break; + case F1AP_ProtocolIE_ID_id_SFNInitialisationTime: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld not handled, skipping\n", ie->id); + break; + case F1AP_ProtocolIE_ID_id_CriticalityDiagnostics: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld not handled, skipping\n", ie->id); + break; + default: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld unknown, skipping\n", ie->id); + break; + } + } + + return true; +} + +/** + * @brief F1 positioning information response deep copy + */ +f1ap_positioning_information_resp_t cp_positioning_information_resp(const f1ap_positioning_information_resp_t *orig) +{ + /* copy all mandatory fields that are not dynamic memory */ + f1ap_positioning_information_resp_t cp = { + .gNB_CU_ue_id = orig->gNB_CU_ue_id, + .gNB_DU_ue_id = orig->gNB_DU_ue_id, + }; + + /* optional: SRS Configuration */ + if (orig->srs_configuration) { + cp.srs_configuration = calloc_or_fail(1, sizeof(*cp.srs_configuration)); + f1ap_srs_carrier_list_t *srs_carrier_list_cp = &cp.srs_configuration->srs_carrier_list; + f1ap_srs_carrier_list_t *srs_carrier_list = &orig->srs_configuration->srs_carrier_list; + *srs_carrier_list_cp = cp_srs_carrier_list(srs_carrier_list); + } + + return cp; +} + +/** + * @brief F1 positioning information response equality check + */ +bool eq_positioning_information_resp(const f1ap_positioning_information_resp_t *a, const f1ap_positioning_information_resp_t *b) +{ + _F1_EQ_CHECK_INT(a->gNB_CU_ue_id, b->gNB_CU_ue_id); + _F1_EQ_CHECK_INT(a->gNB_DU_ue_id, b->gNB_DU_ue_id); + + /* optional: SRS Configuration (O) */ + if ((a->srs_configuration == NULL) != (b->srs_configuration == NULL)) { + return false; + } + if (a->srs_configuration) { + f1ap_srs_carrier_list_t *srs_carrier_list_a = &a->srs_configuration->srs_carrier_list; + f1ap_srs_carrier_list_t *srs_carrier_list_b = &b->srs_configuration->srs_carrier_list; + _F1_CHECK_EXP(eq_srs_carrier_list(srs_carrier_list_a, srs_carrier_list_b)); + } + + return true; +} + +/** + * @brief Free Allocated F1 positioning information response + */ +void free_positioning_information_resp(f1ap_positioning_information_resp_t *msg) +{ + /* SRS Configuration (O) */ + if (msg->srs_configuration) { + f1ap_srs_carrier_list_t *srs_carrier_list = &msg->srs_configuration->srs_carrier_list; + free_srs_carrier_list(srs_carrier_list); + free(msg->srs_configuration); + } +} + +/** + * @brief Encode F1 positioning information failure to ASN.1 + */ +F1AP_F1AP_PDU_t *encode_positioning_information_failure(const f1ap_positioning_information_failure_t *msg) +{ + F1AP_F1AP_PDU_t *pdu = calloc_or_fail(1, sizeof(*pdu)); + + /* Message Type */ + pdu->present = F1AP_F1AP_PDU_PR_unsuccessfulOutcome; + asn1cCalloc(pdu->choice.unsuccessfulOutcome, tmp); + tmp->procedureCode = F1AP_ProcedureCode_id_PositioningInformationExchange; + tmp->criticality = F1AP_Criticality_reject; + tmp->value.present = F1AP_UnsuccessfulOutcome__value_PR_PositioningInformationFailure; + F1AP_PositioningInformationFailure_t *out = &tmp->value.choice.PositioningInformationFailure; + + /* mandatory : GNB_CU_UE_F1AP_ID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningInformationFailureIEs_t, ie1); + ie1->id = F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID; + ie1->criticality = F1AP_Criticality_reject; + ie1->value.present = F1AP_PositioningInformationFailureIEs__value_PR_GNB_CU_UE_F1AP_ID; + ie1->value.choice.GNB_CU_UE_F1AP_ID = msg->gNB_CU_ue_id; + + /* mandatory : GNB_DU_UE_F1AP_ID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningInformationFailureIEs_t, ie2); + ie2->id = F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID; + ie2->criticality = F1AP_Criticality_reject; + ie2->value.present = F1AP_PositioningInformationFailureIEs__value_PR_GNB_DU_UE_F1AP_ID; + ie2->value.choice.GNB_DU_UE_F1AP_ID = msg->gNB_DU_ue_id; + + /* mandatory : Cause */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningInformationFailureIEs_t, ie3); + ie3->id = F1AP_ProtocolIE_ID_id_Cause; + ie3->criticality = F1AP_Criticality_ignore; + ie3->value.present = F1AP_PositioningInformationFailureIEs__value_PR_Cause; + ie3->value.choice.Cause = encode_f1ap_cause(msg->cause, msg->cause_value); + + return pdu; +} + +/** + * @brief Decode F1 positioning information failure + */ +bool decode_positioning_information_failure(const F1AP_F1AP_PDU_t *pdu, f1ap_positioning_information_failure_t *out) +{ + DevAssert(out != NULL); + memset(out, 0, sizeof(*out)); + + F1AP_PositioningInformationFailure_t *in = &pdu->choice.unsuccessfulOutcome->value.choice.PositioningInformationFailure; + F1AP_PositioningInformationFailureIEs_t *ie; + + F1AP_LIB_FIND_IE(F1AP_PositioningInformationFailureIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID, + true); + F1AP_LIB_FIND_IE(F1AP_PositioningInformationFailureIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID, + true); + F1AP_LIB_FIND_IE(F1AP_PositioningInformationFailureIEs_t, ie, &in->protocolIEs.list, F1AP_ProtocolIE_ID_id_Cause, true); + + for (int i = 0; i < in->protocolIEs.list.count; ++i) { + ie = in->protocolIEs.list.array[i]; + AssertError(ie != NULL, return false, "in->protocolIEs.list.array[i] is NULL"); + switch (ie->id) { + case F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningInformationFailureIEs__value_PR_GNB_CU_UE_F1AP_ID); + out->gNB_CU_ue_id = ie->value.choice.GNB_CU_UE_F1AP_ID; + break; + case F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningInformationFailureIEs__value_PR_GNB_DU_UE_F1AP_ID); + out->gNB_DU_ue_id = ie->value.choice.GNB_DU_UE_F1AP_ID; + break; + case F1AP_ProtocolIE_ID_id_Cause: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningInformationFailureIEs__value_PR_Cause); + _F1_CHECK_EXP(decode_f1ap_cause(ie->value.choice.Cause, &out->cause, &out->cause_value)); + break; + case F1AP_ProtocolIE_ID_id_CriticalityDiagnostics: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld not handled, skipping\n", ie->id); + break; + default: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld unknown, skipping\n", ie->id); + break; + } + } + + return true; +} + +/** + * @brief F1 positioning information failure deep copy + */ +f1ap_positioning_information_failure_t cp_positioning_information_failure(const f1ap_positioning_information_failure_t *orig) +{ + /* copy all mandatory fields that are not dynamic memory */ + f1ap_positioning_information_failure_t cp = { + .gNB_CU_ue_id = orig->gNB_CU_ue_id, + .gNB_DU_ue_id = orig->gNB_DU_ue_id, + .cause = orig->cause, + .cause_value = orig->cause_value, + }; + + return cp; +} + +/** + * @brief F1 positioning information failure equality check + */ +bool eq_positioning_information_failure(const f1ap_positioning_information_failure_t *a, + const f1ap_positioning_information_failure_t *b) +{ + _F1_EQ_CHECK_INT(a->gNB_CU_ue_id, b->gNB_CU_ue_id); + _F1_EQ_CHECK_INT(a->gNB_DU_ue_id, b->gNB_DU_ue_id); + _F1_EQ_CHECK_INT(a->cause, b->cause); + _F1_EQ_CHECK_LONG(a->cause_value, b->cause_value); + + return true; +} + +/** + * @brief Free Allocated F1 positioning information failure + */ +void free_positioning_information_failure(f1ap_positioning_information_failure_t *msg) +{ + // nothing to free +} + +/** + * @brief Encode F1 positioning activation request to ASN.1 + */ +F1AP_F1AP_PDU_t *encode_positioning_activation_req(const f1ap_positioning_activation_req_t *msg) +{ + F1AP_F1AP_PDU_t *pdu = calloc_or_fail(1, sizeof(*pdu)); + + /* Message Type */ + pdu->present = F1AP_F1AP_PDU_PR_initiatingMessage; + asn1cCalloc(pdu->choice.initiatingMessage, tmp); + tmp->procedureCode = F1AP_ProcedureCode_id_PositioningActivation; + tmp->criticality = F1AP_Criticality_reject; + tmp->value.present = F1AP_InitiatingMessage__value_PR_PositioningActivationRequest; + F1AP_PositioningActivationRequest_t *out = &tmp->value.choice.PositioningActivationRequest; + + /* mandatory : GNB_CU_UE_F1AP_ID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningActivationRequestIEs_t, ie1); + ie1->id = F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID; + ie1->criticality = F1AP_Criticality_reject; + ie1->value.present = F1AP_PositioningActivationRequestIEs__value_PR_GNB_CU_UE_F1AP_ID; + ie1->value.choice.GNB_CU_UE_F1AP_ID = msg->gNB_CU_ue_id; + + /* mandatory : GNB_DU_UE_F1AP_ID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningActivationRequestIEs_t, ie2); + ie2->id = F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID; + ie2->criticality = F1AP_Criticality_reject; + ie2->value.present = F1AP_PositioningActivationRequestIEs__value_PR_GNB_DU_UE_F1AP_ID; + ie2->value.choice.GNB_DU_UE_F1AP_ID = msg->gNB_DU_ue_id; + + /* mandatory : SRS type */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningActivationRequestIEs_t, ie3); + ie3->id = F1AP_ProtocolIE_ID_id_SRSType; + ie3->criticality = F1AP_Criticality_reject; + ie3->value.present = F1AP_PositioningActivationRequestIEs__value_PR_SRSType; + ie3->value.choice.SRSType = encode_f1ap_srstype(&msg->srs_type); + + return pdu; +} + +/** + * @brief Decode F1 positioning activation request + */ +bool decode_positioning_activation_req(const F1AP_F1AP_PDU_t *pdu, f1ap_positioning_activation_req_t *out) +{ + DevAssert(out != NULL); + memset(out, 0, sizeof(*out)); + + F1AP_PositioningActivationRequest_t *in = &pdu->choice.initiatingMessage->value.choice.PositioningActivationRequest; + F1AP_PositioningActivationRequestIEs_t *ie; + + F1AP_LIB_FIND_IE(F1AP_PositioningActivationRequestIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID, + true); + F1AP_LIB_FIND_IE(F1AP_PositioningActivationRequestIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID, + true); + F1AP_LIB_FIND_IE(F1AP_PositioningActivationRequestIEs_t, ie, &in->protocolIEs.list, F1AP_ProtocolIE_ID_id_SRSType, true); + + for (int i = 0; i < in->protocolIEs.list.count; ++i) { + ie = in->protocolIEs.list.array[i]; + AssertError(ie != NULL, return false, "in->protocolIEs.list.array[i] is NULL"); + switch (ie->id) { + case F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningActivationRequestIEs__value_PR_GNB_CU_UE_F1AP_ID); + out->gNB_CU_ue_id = ie->value.choice.GNB_CU_UE_F1AP_ID; + break; + case F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningActivationRequestIEs__value_PR_GNB_DU_UE_F1AP_ID); + out->gNB_DU_ue_id = ie->value.choice.GNB_DU_UE_F1AP_ID; + break; + case F1AP_ProtocolIE_ID_id_SRSType: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningActivationRequestIEs__value_PR_SRSType); + _F1_CHECK_EXP(decode_f1ap_srstype(&ie->value.choice.SRSType, &out->srs_type)); + break; + case F1AP_ProtocolIE_ID_id_ActivationTime: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld not handled, skipping\n", ie->id); + break; + default: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld unknown, skipping\n", ie->id); + break; + } + } + + return true; +} + +/** + * @brief F1 positioning activation request deep copy + */ +f1ap_positioning_activation_req_t cp_positioning_activation_req(const f1ap_positioning_activation_req_t *orig) +{ + /* copy all mandatory fields that are not dynamic memory */ + f1ap_positioning_activation_req_t cp = { + .gNB_CU_ue_id = orig->gNB_CU_ue_id, + .gNB_DU_ue_id = orig->gNB_DU_ue_id, + .srs_type.present = orig->srs_type.present, + }; + + switch (orig->srs_type.present) { + case F1AP_SRS_TYPE_PR_NOTHING: + // nothing to copy + break; + case F1AP_SRS_TYPE_PR_SEMIPERSISTENTSRS: + cp.srs_type.choice.srs_resource_set_id = calloc_or_fail(1, sizeof(*cp.srs_type.choice.srs_resource_set_id)); + *cp.srs_type.choice.srs_resource_set_id = *orig->srs_type.choice.srs_resource_set_id; + break; + case F1AP_SRS_TYPE_PR_APERIODICSRS: + cp.srs_type.choice.aperiodic = calloc_or_fail(1, sizeof(*cp.srs_type.choice.aperiodic)); + *cp.srs_type.choice.aperiodic = *orig->srs_type.choice.aperiodic; + break; + default: + PRINT_ERROR("received illegal SRS type %d\n", orig->srs_type.present); + break; + } + + return cp; +} + +/** + * @brief F1 positioning activation request equality check + */ +bool eq_positioning_activation_req(const f1ap_positioning_activation_req_t *a, const f1ap_positioning_activation_req_t *b) +{ + _F1_EQ_CHECK_INT(a->gNB_CU_ue_id, b->gNB_CU_ue_id); + _F1_EQ_CHECK_INT(a->gNB_DU_ue_id, b->gNB_DU_ue_id); + _F1_EQ_CHECK_INT(a->srs_type.present, b->srs_type.present); + + const f1ap_srs_type_t *srs_type_a = &a->srs_type; + const f1ap_srs_type_t *srs_type_b = &b->srs_type; + switch (srs_type_a->present) { + case F1AP_SRS_TYPE_PR_NOTHING: + // nothing to check + break; + case F1AP_SRS_TYPE_PR_SEMIPERSISTENTSRS: + _F1_EQ_CHECK_INT(*srs_type_a->choice.srs_resource_set_id, *srs_type_b->choice.srs_resource_set_id); + break; + case F1AP_SRS_TYPE_PR_APERIODICSRS: + _F1_EQ_CHECK_INT(*srs_type_a->choice.aperiodic, *srs_type_b->choice.aperiodic); + break; + default: + PRINT_ERROR("received illegal SRS type %d\n", srs_type_a->present); + break; + } + + return true; +} + +/** + * @brief Free Allocated F1 activation request + */ +void free_positioning_activation_req(f1ap_positioning_activation_req_t *msg) +{ + DevAssert(msg != NULL); + + switch (msg->srs_type.present) { + case F1AP_SRS_TYPE_PR_NOTHING: + // nothing to free + return; + case F1AP_SRS_TYPE_PR_SEMIPERSISTENTSRS: + free(msg->srs_type.choice.srs_resource_set_id); + break; + case F1AP_SRS_TYPE_PR_APERIODICSRS: + free(msg->srs_type.choice.aperiodic); + break; + default: + PRINT_ERROR("received illegal SRS type %d\n", msg->srs_type.present); + break; + } +} + +/** + * @brief Encode F1 positioning activation response to ASN.1 + */ +F1AP_F1AP_PDU_t *encode_positioning_activation_resp(const f1ap_positioning_activation_resp_t *msg) +{ + F1AP_F1AP_PDU_t *pdu = calloc_or_fail(1, sizeof(*pdu)); + + /* Message Type */ + pdu->present = F1AP_F1AP_PDU_PR_successfulOutcome; + asn1cCalloc(pdu->choice.successfulOutcome, tmp); + tmp->procedureCode = F1AP_ProcedureCode_id_PositioningActivation; + tmp->criticality = F1AP_Criticality_reject; + tmp->value.present = F1AP_SuccessfulOutcome__value_PR_PositioningActivationResponse; + F1AP_PositioningActivationResponse_t *out = &tmp->value.choice.PositioningActivationResponse; + + /* mandatory : GNB_CU_UE_F1AP_ID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningActivationResponseIEs_t, ie1); + ie1->id = F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID; + ie1->criticality = F1AP_Criticality_reject; + ie1->value.present = F1AP_PositioningActivationResponseIEs__value_PR_GNB_CU_UE_F1AP_ID; + ie1->value.choice.GNB_CU_UE_F1AP_ID = msg->gNB_CU_ue_id; + + /* mandatory : GNB_DU_UE_F1AP_ID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningActivationResponseIEs_t, ie2); + ie2->id = F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID; + ie2->criticality = F1AP_Criticality_reject; + ie2->value.present = F1AP_PositioningActivationResponseIEs__value_PR_GNB_DU_UE_F1AP_ID; + ie2->value.choice.GNB_DU_UE_F1AP_ID = msg->gNB_DU_ue_id; + + return pdu; +} + +/** + * @brief Decode F1 positioning activation response + */ +bool decode_positioning_activation_resp(const F1AP_F1AP_PDU_t *pdu, f1ap_positioning_activation_resp_t *out) +{ + DevAssert(out != NULL); + memset(out, 0, sizeof(*out)); + + F1AP_PositioningActivationResponse_t *in = &pdu->choice.successfulOutcome->value.choice.PositioningActivationResponse; + F1AP_PositioningActivationResponseIEs_t *ie; + + F1AP_LIB_FIND_IE(F1AP_PositioningActivationResponseIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID, + true); + F1AP_LIB_FIND_IE(F1AP_PositioningActivationResponseIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID, + true); + + for (int i = 0; i < in->protocolIEs.list.count; ++i) { + ie = in->protocolIEs.list.array[i]; + AssertError(ie != NULL, return false, "in->protocolIEs.list.array[i] is NULL"); + switch (ie->id) { + case F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningActivationResponseIEs__value_PR_GNB_CU_UE_F1AP_ID); + out->gNB_CU_ue_id = ie->value.choice.GNB_CU_UE_F1AP_ID; + break; + case F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningActivationResponseIEs__value_PR_GNB_DU_UE_F1AP_ID); + out->gNB_DU_ue_id = ie->value.choice.GNB_DU_UE_F1AP_ID; + break; + case F1AP_ProtocolIE_ID_id_SystemFrameNumber: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld not handled, skipping\n", ie->id); + break; + case F1AP_ProtocolIE_ID_id_SlotNumber: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld not handled, skipping\n", ie->id); + break; + case F1AP_ProtocolIE_ID_id_CriticalityDiagnostics: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld not handled, skipping\n", ie->id); + break; + default: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld unknown, skipping\n", ie->id); + break; + } + } + + return true; +} + +/** + * @brief F1 positioning activation response deep copy + */ +f1ap_positioning_activation_resp_t cp_positioning_activation_resp(const f1ap_positioning_activation_resp_t *orig) +{ + /* copy all mandatory fields that are not dynamic memory */ + f1ap_positioning_activation_resp_t cp = { + .gNB_CU_ue_id = orig->gNB_CU_ue_id, + .gNB_DU_ue_id = orig->gNB_DU_ue_id, + }; + + return cp; +} + +/** + * @brief F1 positioning activation response equality check + */ +bool eq_positioning_activation_resp(const f1ap_positioning_activation_resp_t *a, const f1ap_positioning_activation_resp_t *b) +{ + _F1_EQ_CHECK_INT(a->gNB_CU_ue_id, b->gNB_CU_ue_id); + _F1_EQ_CHECK_INT(a->gNB_DU_ue_id, b->gNB_DU_ue_id); + + return true; +} + +/** + * @brief Free Allocated F1 positioning activation response + */ +void free_positioning_activation_resp(f1ap_positioning_activation_resp_t *msg) +{ + // nothing to free +} + +/** + * @brief Encode F1 positioning activation failure to ASN.1 + */ +F1AP_F1AP_PDU_t *encode_positioning_activation_failure(const f1ap_positioning_activation_failure_t *msg) +{ + F1AP_F1AP_PDU_t *pdu = calloc_or_fail(1, sizeof(*pdu)); + + /* Message Type */ + pdu->present = F1AP_F1AP_PDU_PR_unsuccessfulOutcome; + asn1cCalloc(pdu->choice.unsuccessfulOutcome, tmp); + tmp->procedureCode = F1AP_ProcedureCode_id_PositioningActivation; + tmp->criticality = F1AP_Criticality_reject; + tmp->value.present = F1AP_UnsuccessfulOutcome__value_PR_PositioningActivationFailure; + F1AP_PositioningActivationFailure_t *out = &tmp->value.choice.PositioningActivationFailure; + + /* mandatory : GNB_CU_UE_F1AP_ID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningActivationFailureIEs_t, ie1); + ie1->id = F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID; + ie1->criticality = F1AP_Criticality_reject; + ie1->value.present = F1AP_PositioningActivationFailureIEs__value_PR_GNB_CU_UE_F1AP_ID; + ie1->value.choice.GNB_CU_UE_F1AP_ID = msg->gNB_CU_ue_id; + + /* mandatory : GNB_DU_UE_F1AP_ID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningActivationFailureIEs_t, ie2); + ie2->id = F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID; + ie2->criticality = F1AP_Criticality_reject; + ie2->value.present = F1AP_PositioningActivationFailureIEs__value_PR_GNB_DU_UE_F1AP_ID; + ie2->value.choice.GNB_DU_UE_F1AP_ID = msg->gNB_DU_ue_id; + + /* mandatory : Cause */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningActivationFailureIEs_t, ie3); + ie3->id = F1AP_ProtocolIE_ID_id_Cause; + ie3->criticality = F1AP_Criticality_ignore; + ie3->value.present = F1AP_PositioningActivationFailureIEs__value_PR_Cause; + ie3->value.choice.Cause = encode_f1ap_cause(msg->cause, msg->cause_value); + + return pdu; +} + +/** + * @brief Decode F1 positioning activation failure + */ +bool decode_positioning_activation_failure(const F1AP_F1AP_PDU_t *pdu, f1ap_positioning_activation_failure_t *out) +{ + DevAssert(out != NULL); + memset(out, 0, sizeof(*out)); + + F1AP_PositioningActivationFailure_t *in = &pdu->choice.unsuccessfulOutcome->value.choice.PositioningActivationFailure; + F1AP_PositioningActivationFailureIEs_t *ie; + + F1AP_LIB_FIND_IE(F1AP_PositioningActivationFailureIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID, + true); + F1AP_LIB_FIND_IE(F1AP_PositioningActivationFailureIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID, + true); + F1AP_LIB_FIND_IE(F1AP_PositioningActivationFailureIEs_t, ie, &in->protocolIEs.list, F1AP_ProtocolIE_ID_id_Cause, true); + + for (int i = 0; i < in->protocolIEs.list.count; ++i) { + ie = in->protocolIEs.list.array[i]; + AssertError(ie != NULL, return false, "in->protocolIEs.list.array[i] is NULL"); + switch (ie->id) { + case F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningActivationFailureIEs__value_PR_GNB_CU_UE_F1AP_ID); + out->gNB_CU_ue_id = ie->value.choice.GNB_CU_UE_F1AP_ID; + break; + case F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningActivationFailureIEs__value_PR_GNB_DU_UE_F1AP_ID); + out->gNB_DU_ue_id = ie->value.choice.GNB_DU_UE_F1AP_ID; + break; + case F1AP_ProtocolIE_ID_id_Cause: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningActivationFailureIEs__value_PR_Cause); + _F1_CHECK_EXP(decode_f1ap_cause(ie->value.choice.Cause, &out->cause, &out->cause_value)); + break; + case F1AP_ProtocolIE_ID_id_CriticalityDiagnostics: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld not handled, skipping\n", ie->id); + break; + default: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld unknown, skipping\n", ie->id); + break; + } + } + + return true; +} + +/** + * @brief F1 positioning activation failure deep copy + */ +f1ap_positioning_activation_failure_t cp_positioning_activation_failure(const f1ap_positioning_activation_failure_t *orig) +{ + /* copy all mandatory fields that are not dynamic memory */ + f1ap_positioning_activation_failure_t cp = { + .gNB_CU_ue_id = orig->gNB_CU_ue_id, + .gNB_DU_ue_id = orig->gNB_DU_ue_id, + .cause = orig->cause, + .cause_value = orig->cause_value, + }; + + return cp; +} + +/** + * @brief F1 positioning activation failure equality check + */ +bool eq_positioning_activation_failure(const f1ap_positioning_activation_failure_t *a, + const f1ap_positioning_activation_failure_t *b) +{ + _F1_EQ_CHECK_INT(a->gNB_CU_ue_id, b->gNB_CU_ue_id); + _F1_EQ_CHECK_INT(a->gNB_DU_ue_id, b->gNB_DU_ue_id); + _F1_EQ_CHECK_INT(a->cause, b->cause); + _F1_EQ_CHECK_LONG(a->cause_value, b->cause_value); + + return true; +} + +/** + * @brief Free Allocated F1 positioning activation failure + */ +void free_positioning_activation_failure(f1ap_positioning_activation_failure_t *msg) +{ + // nothing to free +} + +/** + * @brief Encode F1 positioning deactivation to ASN.1 + */ +F1AP_F1AP_PDU_t *encode_positioning_deactivation(const f1ap_positioning_deactivation_t *msg) +{ + F1AP_F1AP_PDU_t *pdu = calloc_or_fail(1, sizeof(*pdu)); + + /* Message Type */ + pdu->present = F1AP_F1AP_PDU_PR_initiatingMessage; + asn1cCalloc(pdu->choice.initiatingMessage, tmp); + tmp->procedureCode = F1AP_ProcedureCode_id_PositioningDeactivation; + tmp->criticality = F1AP_Criticality_ignore; + tmp->value.present = F1AP_InitiatingMessage__value_PR_PositioningDeactivation; + F1AP_PositioningDeactivation_t *out = &tmp->value.choice.PositioningDeactivation; + + /* mandatory : GNB_CU_UE_F1AP_ID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningDeactivationIEs_t, ie1); + ie1->id = F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID; + ie1->criticality = F1AP_Criticality_reject; + ie1->value.present = F1AP_PositioningDeactivationIEs__value_PR_GNB_CU_UE_F1AP_ID; + ie1->value.choice.GNB_CU_UE_F1AP_ID = msg->gNB_CU_ue_id; + + /* mandatory : GNB_DU_UE_F1AP_ID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningDeactivationIEs_t, ie2); + ie2->id = F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID; + ie2->criticality = F1AP_Criticality_reject; + ie2->value.present = F1AP_PositioningDeactivationIEs__value_PR_GNB_DU_UE_F1AP_ID; + ie2->value.choice.GNB_DU_UE_F1AP_ID = msg->gNB_DU_ue_id; + + /* mandatory : CHOICE ABORT TRANSMISSION */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningDeactivationIEs_t, ie3); + ie3->id = F1AP_ProtocolIE_ID_id_AbortTransmission; + ie3->criticality = F1AP_Criticality_ignore; + ie3->value.present = F1AP_PositioningDeactivationIEs__value_PR_AbortTransmission; + ie3->value.choice.AbortTransmission = encode_f1ap_abort_transmission(&msg->abort_transmission); + + return pdu; +} + +/** + * @brief Decode F1 positioning deactivation + */ +bool decode_positioning_deactivation(const F1AP_F1AP_PDU_t *pdu, f1ap_positioning_deactivation_t *out) +{ + DevAssert(out != NULL); + memset(out, 0, sizeof(*out)); + + F1AP_PositioningDeactivation_t *in = &pdu->choice.initiatingMessage->value.choice.PositioningDeactivation; + F1AP_PositioningDeactivationIEs_t *ie; + + F1AP_LIB_FIND_IE(F1AP_PositioningDeactivationIEs_t, ie, &in->protocolIEs.list, F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID, true); + F1AP_LIB_FIND_IE(F1AP_PositioningDeactivationIEs_t, ie, &in->protocolIEs.list, F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID, true); + F1AP_LIB_FIND_IE(F1AP_PositioningDeactivationIEs_t, ie, &in->protocolIEs.list, F1AP_ProtocolIE_ID_id_AbortTransmission, true); + + for (int i = 0; i < in->protocolIEs.list.count; ++i) { + ie = in->protocolIEs.list.array[i]; + AssertError(ie != NULL, return false, "in->protocolIEs.list.array[i] is NULL"); + switch (ie->id) { + case F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningDeactivationIEs__value_PR_GNB_CU_UE_F1AP_ID); + out->gNB_CU_ue_id = ie->value.choice.GNB_CU_UE_F1AP_ID; + break; + case F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningDeactivationIEs__value_PR_GNB_DU_UE_F1AP_ID); + out->gNB_DU_ue_id = ie->value.choice.GNB_DU_UE_F1AP_ID; + break; + case F1AP_ProtocolIE_ID_id_AbortTransmission: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningDeactivationIEs__value_PR_AbortTransmission); + _F1_CHECK_EXP(decode_f1ap_abort_transmission(&ie->value.choice.AbortTransmission, &out->abort_transmission)); + break; + default: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld unknown, skipping\n", ie->id); + break; + } + } + + return true; +} + +/** + * @brief F1 positioning deactivation deep copy + */ +f1ap_positioning_deactivation_t cp_positioning_deactivation(const f1ap_positioning_deactivation_t *orig) +{ + /* copy all mandatory fields that are not dynamic memory */ + f1ap_positioning_deactivation_t cp = { + .gNB_CU_ue_id = orig->gNB_CU_ue_id, + .gNB_DU_ue_id = orig->gNB_DU_ue_id, + .abort_transmission.present = orig->abort_transmission.present, + }; + // do this properly abort mission + switch (orig->abort_transmission.present) { + case F1AP_ABORT_TRANSMISSION_PR_NOTHING: + // nothing to copy + break; + case F1AP_ABORT_TRANSMISSION_PR_SRSRESOURCESETID: + cp.abort_transmission.choice.srs_resource_set_id = orig->abort_transmission.choice.srs_resource_set_id; + break; + case F1AP_ABORT_TRANSMISSION_PR_RELEASEALL: + cp.abort_transmission.choice.release_all = orig->abort_transmission.choice.release_all; + break; + default: + PRINT_ERROR("received illegal Abort Transmission value %d\n", orig->abort_transmission.present); + break; + } + + return cp; +} + +/** + * @brief F1 positioning deactivation equality check + */ +bool eq_positioning_deactivation(const f1ap_positioning_deactivation_t *a, const f1ap_positioning_deactivation_t *b) +{ + _F1_EQ_CHECK_INT(a->gNB_CU_ue_id, b->gNB_CU_ue_id); + _F1_EQ_CHECK_INT(a->gNB_DU_ue_id, b->gNB_DU_ue_id); + _F1_EQ_CHECK_INT(a->abort_transmission.present, b->abort_transmission.present); + switch (a->abort_transmission.present) { + case F1AP_ABORT_TRANSMISSION_PR_NOTHING: + // nothing to check + break; + case F1AP_ABORT_TRANSMISSION_PR_SRSRESOURCESETID: + _F1_EQ_CHECK_INT(a->abort_transmission.choice.srs_resource_set_id, b->abort_transmission.choice.srs_resource_set_id); + break; + case F1AP_ABORT_TRANSMISSION_PR_RELEASEALL: + _F1_EQ_CHECK_INT(a->abort_transmission.choice.release_all, b->abort_transmission.choice.release_all); + break; + default: + PRINT_ERROR("received illegal Abort Transmission value %d\n", a->abort_transmission.present); + break; + } + + return true; +} + +/** + * @brief Free Allocated F1 positioning activation failure + */ +void free_positioning_deactivation(f1ap_positioning_deactivation_t *msg) +{ + // nothing to free +} + +/** + * @brief Encode F1 positioning information update to ASN.1 + */ +F1AP_F1AP_PDU_t *encode_positioning_information_update(const f1ap_positioning_information_update_t *msg) +{ + F1AP_F1AP_PDU_t *pdu = calloc_or_fail(1, sizeof(*pdu)); + + /* Message Type */ + pdu->present = F1AP_F1AP_PDU_PR_initiatingMessage; + asn1cCalloc(pdu->choice.initiatingMessage, tmp); + tmp->procedureCode = F1AP_ProcedureCode_id_PositioningInformationUpdate; + tmp->criticality = F1AP_Criticality_ignore; + tmp->value.present = F1AP_InitiatingMessage__value_PR_PositioningInformationUpdate; + F1AP_PositioningInformationUpdate_t *out = &tmp->value.choice.PositioningInformationUpdate; + + /* mandatory : GNB_CU_UE_F1AP_ID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningInformationUpdateIEs_t, ie1); + ie1->id = F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID; + ie1->criticality = F1AP_Criticality_reject; + ie1->value.present = F1AP_PositioningInformationUpdateIEs__value_PR_GNB_CU_UE_F1AP_ID; + ie1->value.choice.GNB_CU_UE_F1AP_ID = msg->gNB_CU_ue_id; + + /* mandatory : GNB_DU_UE_F1AP_ID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningInformationUpdateIEs_t, ie2); + ie2->id = F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID; + ie2->criticality = F1AP_Criticality_reject; + ie2->value.present = F1AP_PositioningInformationUpdateIEs__value_PR_GNB_DU_UE_F1AP_ID; + ie2->value.choice.GNB_DU_UE_F1AP_ID = msg->gNB_DU_ue_id; + + /* optional : SRSConfiguration */ + if (msg->srs_configuration) { + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningInformationUpdateIEs_t, ie3); + ie3->id = F1AP_ProtocolIE_ID_id_SRSConfiguration; + ie3->criticality = F1AP_Criticality_ignore; + ie3->value.present = F1AP_PositioningInformationUpdateIEs__value_PR_SRSConfiguration; + f1ap_srs_carrier_list_t *srs_carrier_list = &msg->srs_configuration->srs_carrier_list; + ie3->value.choice.SRSConfiguration.sRSCarrier_List = encode_srs_carrier_list(srs_carrier_list); + } + + return pdu; +} + +/** + * @brief Decode F1 positioning information update + */ +bool decode_positioning_information_update(const F1AP_F1AP_PDU_t *pdu, f1ap_positioning_information_update_t *out) +{ + DevAssert(out != NULL); + memset(out, 0, sizeof(*out)); + + F1AP_PositioningInformationUpdate_t *in = &pdu->choice.initiatingMessage->value.choice.PositioningInformationUpdate; + F1AP_PositioningInformationUpdateIEs_t *ie; + + F1AP_LIB_FIND_IE(F1AP_PositioningInformationUpdateIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID, + true); + F1AP_LIB_FIND_IE(F1AP_PositioningInformationUpdateIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID, + true); + F1AP_LIB_FIND_IE(F1AP_PositioningInformationUpdateIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_SRSConfiguration, + false); + + for (int i = 0; i < in->protocolIEs.list.count; ++i) { + ie = in->protocolIEs.list.array[i]; + AssertError(ie != NULL, return false, "in->protocolIEs.list.array[i] is NULL"); + switch (ie->id) { + case F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningInformationUpdateIEs__value_PR_GNB_CU_UE_F1AP_ID); + out->gNB_CU_ue_id = ie->value.choice.GNB_CU_UE_F1AP_ID; + break; + case F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningInformationUpdateIEs__value_PR_GNB_DU_UE_F1AP_ID); + out->gNB_DU_ue_id = ie->value.choice.GNB_DU_UE_F1AP_ID; + break; + case F1AP_ProtocolIE_ID_id_SRSConfiguration: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningInformationUpdateIEs__value_PR_SRSConfiguration); + F1AP_SRSCarrier_List_t *f1_sRSCarrier_List = &ie->value.choice.SRSConfiguration.sRSCarrier_List; + out->srs_configuration = calloc_or_fail(1, sizeof(*out->srs_configuration)); + f1ap_srs_carrier_list_t *srs_carrier_list = &out->srs_configuration->srs_carrier_list; + decode_srs_carrier_list(srs_carrier_list, f1_sRSCarrier_List); + break; + case F1AP_ProtocolIE_ID_id_SFNInitialisationTime: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld not handled, skipping\n", ie->id); + break; + default: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld unknown, skipping\n", ie->id); + break; + } + } + + return true; +} + +/** + * @brief F1 positioning information update deep copy + */ +f1ap_positioning_information_update_t cp_positioning_information_update(const f1ap_positioning_information_update_t *orig) +{ + /* copy all mandatory fields that are not dynamic memory */ + f1ap_positioning_information_update_t cp = { + .gNB_CU_ue_id = orig->gNB_CU_ue_id, + .gNB_DU_ue_id = orig->gNB_DU_ue_id, + }; + + /* optional: SRS Configuration */ + if (orig->srs_configuration) { + cp.srs_configuration = calloc_or_fail(1, sizeof(*cp.srs_configuration)); + f1ap_srs_carrier_list_t *srs_carrier_list_cp = &cp.srs_configuration->srs_carrier_list; + f1ap_srs_carrier_list_t *srs_carrier_list = &orig->srs_configuration->srs_carrier_list; + *srs_carrier_list_cp = cp_srs_carrier_list(srs_carrier_list); + } + + return cp; +} + +/** + * @brief F1 positioning information update equality check + */ +bool eq_positioning_information_update(const f1ap_positioning_information_update_t *a, + const f1ap_positioning_information_update_t *b) +{ + _F1_EQ_CHECK_INT(a->gNB_CU_ue_id, b->gNB_CU_ue_id); + _F1_EQ_CHECK_INT(a->gNB_DU_ue_id, b->gNB_DU_ue_id); + + /* optional: SRS Configuration */ + if ((a->srs_configuration == NULL) != (b->srs_configuration == NULL)) { + return false; + } + if (a->srs_configuration) { + f1ap_srs_carrier_list_t *srs_carrier_list_a = &a->srs_configuration->srs_carrier_list; + f1ap_srs_carrier_list_t *srs_carrier_list_b = &b->srs_configuration->srs_carrier_list; + _F1_CHECK_EXP(eq_srs_carrier_list(srs_carrier_list_a, srs_carrier_list_b)); + } + + return true; +} + +/** + * @brief Free Allocated F1 positioning information update + */ +void free_positioning_information_update(f1ap_positioning_information_update_t *msg) +{ + /* optional: SRS Configuration */ + if (msg->srs_configuration) { + f1ap_srs_carrier_list_t *srs_carrier_list = &msg->srs_configuration->srs_carrier_list; + free_srs_carrier_list(srs_carrier_list); + free(msg->srs_configuration); + } +} + +/** + * @brief Encode F1 TRP information request to ASN.1 + */ +F1AP_F1AP_PDU_t *encode_trp_information_req(const f1ap_trp_information_req_t *msg) +{ + F1AP_F1AP_PDU_t *pdu = calloc_or_fail(1, sizeof(*pdu)); + + /* Message Type */ + pdu->present = F1AP_F1AP_PDU_PR_initiatingMessage; + asn1cCalloc(pdu->choice.initiatingMessage, tmp); + tmp->procedureCode = F1AP_ProcedureCode_id_TRPInformationExchange; + tmp->criticality = F1AP_Criticality_reject; + tmp->value.present = F1AP_InitiatingMessage__value_PR_TRPInformationRequest; + F1AP_TRPInformationRequest_t *out = &tmp->value.choice.TRPInformationRequest; + + /* mandatory : TransactionID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_TRPInformationRequestIEs_t, ie1); + ie1->id = F1AP_ProtocolIE_ID_id_TransactionID; + ie1->criticality = F1AP_Criticality_reject; + ie1->value.present = F1AP_TRPInformationRequestIEs__value_PR_TransactionID; + ie1->value.choice.TransactionID = msg->transaction_id; + + /* TRPList */ + if (msg->has_trp_list) { + asn1cSequenceAdd(out->protocolIEs.list, F1AP_TRPInformationRequestIEs_t, ie2); + ie2->id = F1AP_ProtocolIE_ID_id_TRPList; + ie2->criticality = F1AP_Criticality_ignore; + ie2->value.present = F1AP_TRPInformationRequestIEs__value_PR_TRPList; + for (int i = 0; i < msg->trp_list.trp_list_length; i++) { + // mandatory : TRP List Item (M) + asn1cSequenceAdd(ie2->value.choice.TRPList.list, F1AP_TRPListItem_t, trplistitem); + trplistitem->tRPID = msg->trp_list.trp_list_item[i].trp_id; + } + } + + /* mandatory : TRPInformationTypeList */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_TRPInformationRequestIEs_t, ie3); + ie3->id = F1AP_ProtocolIE_ID_id_TRPInformationTypeListTRPReq; + ie3->criticality = F1AP_Criticality_reject; + ie3->value.present = F1AP_TRPInformationRequestIEs__value_PR_TRPInformationTypeListTRPReq; + for (int i = 0; i < msg->trp_information_type_list.trp_information_type_list_length; i++) { + // TRPInformationTypeItem (M) + asn1cSequenceAdd(ie3->value.choice.TRPInformationTypeListTRPReq.list, F1AP_TRPInformationTypeItemTRPReq_t, trpinfotypeitem); + trpinfotypeitem->id = F1AP_ProtocolIE_ID_id_TRPInformationTypeItem; + trpinfotypeitem->criticality = F1AP_Criticality_reject; + trpinfotypeitem->value.present = F1AP_TRPInformationTypeItemTRPReq__value_PR_TRPInformationTypeItem; + trpinfotypeitem->value.choice.TRPInformationTypeItem = msg->trp_information_type_list.trp_information_type_item[i]; + } + + return pdu; +} + +/** + * @brief Decode F1 TRP information request + */ +bool decode_trp_information_req(const F1AP_F1AP_PDU_t *pdu, f1ap_trp_information_req_t *out) +{ + DevAssert(out != NULL); + memset(out, 0, sizeof(*out)); + + F1AP_TRPInformationRequest_t *in = &pdu->choice.initiatingMessage->value.choice.TRPInformationRequest; + F1AP_TRPInformationRequestIEs_t *ie; + + F1AP_LIB_FIND_IE(F1AP_TRPInformationRequestIEs_t, ie, &in->protocolIEs.list, F1AP_ProtocolIE_ID_id_TransactionID, true); + F1AP_LIB_FIND_IE(F1AP_TRPInformationRequestIEs_t, ie, &in->protocolIEs.list, F1AP_ProtocolIE_ID_id_TRPList, true); + F1AP_LIB_FIND_IE(F1AP_TRPInformationRequestIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_TRPInformationTypeListTRPReq, + true); + + for (int i = 0; i < in->protocolIEs.list.count; ++i) { + ie = in->protocolIEs.list.array[i]; + AssertError(ie != NULL, return false, "in->protocolIEs.list.array[i] is NULL"); + switch (ie->id) { + case F1AP_ProtocolIE_ID_id_TransactionID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_TRPInformationRequestIEs__value_PR_TransactionID); + out->transaction_id = ie->value.choice.TransactionID; + break; + case F1AP_ProtocolIE_ID_id_TRPList: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_TRPInformationRequestIEs__value_PR_TRPList); + out->has_trp_list = true; + uint32_t trp_list_length = ie->value.choice.TRPList.list.count; + AssertError(trp_list_length > 0, return false, "at least 1 TRP must be present"); + out->trp_list.trp_list_length = trp_list_length; + out->trp_list.trp_list_item = calloc_or_fail(trp_list_length, sizeof(*out->trp_list.trp_list_item)); + F1AP_TRPList_t *TRPList = &ie->value.choice.TRPList; + for (int i = 0; i < trp_list_length; i++) { + out->trp_list.trp_list_item[i].trp_id = TRPList->list.array[i]->tRPID; + } + break; + case F1AP_ProtocolIE_ID_id_TRPInformationTypeListTRPReq: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_TRPInformationRequestIEs__value_PR_TRPInformationTypeListTRPReq); + uint8_t trp_info_type_list_length = ie->value.choice.TRPInformationTypeListTRPReq.list.count; + AssertError(trp_info_type_list_length > 0, return false, "at least 1 TRP Information Type must be present"); + f1ap_trp_information_type_list_t *trp_information_type_list = &out->trp_information_type_list; + trp_information_type_list->trp_information_type_list_length = trp_info_type_list_length; + trp_information_type_list->trp_information_type_item = + calloc_or_fail(trp_info_type_list_length, sizeof(*trp_information_type_list->trp_information_type_item)); + for (int i = 0; i < trp_info_type_list_length; i++) { + F1AP_TRPInformationTypeItemTRPReq_t *f1_trpinfotypeitem = + (F1AP_TRPInformationTypeItemTRPReq_t *)ie->value.choice.TRPInformationTypeListTRPReq.list.array[i]; + _F1_EQ_CHECK_LONG(f1_trpinfotypeitem->id, F1AP_ProtocolIE_ID_id_TRPInformationTypeItem); + _F1_EQ_CHECK_INT(f1_trpinfotypeitem->value.present, F1AP_TRPInformationTypeItemTRPReq__value_PR_TRPInformationTypeItem); + trp_information_type_list->trp_information_type_item[i] = f1_trpinfotypeitem->value.choice.TRPInformationTypeItem; + } + break; + default: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld unknown, skipping\n", ie->id); + break; + } + } + + return true; +} + +/** + * @brief F1 TRP information request deep copy + */ +f1ap_trp_information_req_t cp_trp_information_req(const f1ap_trp_information_req_t *orig) +{ + /* copy all mandatory fields that are not dynamic memory */ + f1ap_trp_information_req_t cp = { + .transaction_id = orig->transaction_id, + .has_trp_list = orig->has_trp_list, + }; + + if (orig->has_trp_list) { + uint32_t trp_list_length = orig->trp_list.trp_list_length; + cp.trp_list.trp_list_length = trp_list_length; + cp.trp_list.trp_list_item = calloc_or_fail(trp_list_length, sizeof(*cp.trp_list.trp_list_item)); + for (int i = 0; i < trp_list_length; i++) { + cp.trp_list.trp_list_item[i].trp_id = orig->trp_list.trp_list_item[i].trp_id; + } + } + + const f1ap_trp_information_type_list_t *trp_information_type_list = &orig->trp_information_type_list; + f1ap_trp_information_type_list_t *trp_information_type_list_cp = &cp.trp_information_type_list; + uint8_t trp_info_type_list_length = trp_information_type_list->trp_information_type_list_length; + trp_information_type_list_cp->trp_information_type_list_length = trp_info_type_list_length; + trp_information_type_list_cp->trp_information_type_item = + calloc_or_fail(trp_info_type_list_length, sizeof(*trp_information_type_list_cp->trp_information_type_item)); + for (int i = 0; i < trp_info_type_list_length; i++) { + trp_information_type_list_cp->trp_information_type_item[i] = trp_information_type_list->trp_information_type_item[i]; + } + + return cp; +} + +/** + * @brief F1 TRP information request equality check + */ +bool eq_trp_information_req(const f1ap_trp_information_req_t *a, const f1ap_trp_information_req_t *b) +{ + _F1_EQ_CHECK_INT(a->transaction_id, b->transaction_id); + _F1_EQ_CHECK_INT(a->has_trp_list, b->has_trp_list); + if (a->has_trp_list) { + _F1_EQ_CHECK_INT(a->trp_list.trp_list_length, b->trp_list.trp_list_length); + for (int i = 0; i < a->trp_list.trp_list_length; i++) { + _F1_EQ_CHECK_INT(a->trp_list.trp_list_item[i].trp_id, b->trp_list.trp_list_item[i].trp_id); + } + } + + const f1ap_trp_information_type_list_t *trp_information_type_list_a = &a->trp_information_type_list; + const f1ap_trp_information_type_list_t *trp_information_type_list_b = &b->trp_information_type_list; + _F1_EQ_CHECK_INT(trp_information_type_list_a->trp_information_type_list_length, + trp_information_type_list_b->trp_information_type_list_length); + for (int i = 0; i < trp_information_type_list_a->trp_information_type_list_length; i++) { + _F1_EQ_CHECK_INT(trp_information_type_list_a->trp_information_type_item[i], + trp_information_type_list_b->trp_information_type_item[i]); + } + + return true; +} + +/** + * @brief Free Allocated F1 TRP information request + */ +void free_trp_information_req(f1ap_trp_information_req_t *msg) +{ + if (msg->has_trp_list) { + free(msg->trp_list.trp_list_item); + } + free(msg->trp_information_type_list.trp_information_type_item); +} + +/** + * @brief Encode F1 TRP information response to ASN.1 + */ +F1AP_F1AP_PDU_t *encode_trp_information_resp(const f1ap_trp_information_resp_t *msg) +{ + F1AP_F1AP_PDU_t *pdu = calloc_or_fail(1, sizeof(*pdu)); + + /* Message Type */ + pdu->present = F1AP_F1AP_PDU_PR_successfulOutcome; + asn1cCalloc(pdu->choice.successfulOutcome, tmp); + tmp->procedureCode = F1AP_ProcedureCode_id_TRPInformationExchange; + tmp->criticality = F1AP_Criticality_reject; + tmp->value.present = F1AP_SuccessfulOutcome__value_PR_TRPInformationResponse; + F1AP_TRPInformationResponse_t *out = &tmp->value.choice.TRPInformationResponse; + + /* mandatory : TransactionID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_TRPInformationResponseIEs_t, ie1); + ie1->id = F1AP_ProtocolIE_ID_id_TransactionID; + ie1->criticality = F1AP_Criticality_reject; + ie1->value.present = F1AP_TRPInformationResponseIEs__value_PR_TransactionID; + ie1->value.choice.TransactionID = msg->transaction_id; + + /* mandatory : TRPInformationList */ + // Supported : NR PCI, NG-RAN CGI, NR ARFCN, Geogarphical Coordinates + asn1cSequenceAdd(out->protocolIEs.list, F1AP_TRPInformationResponseIEs_t, ie3); + ie3->id = F1AP_ProtocolIE_ID_id_TRPInformationListTRPResp; + ie3->criticality = F1AP_Criticality_ignore; + ie3->value.present = F1AP_TRPInformationResponseIEs__value_PR_TRPInformationListTRPResp; + uint32_t trp_info_item_len = msg->trp_information_list.trp_information_item_length; + for (int i = 0; i < trp_info_item_len; i++) { + // TRPInformationItem (M) + asn1cSequenceAdd(ie3->value.choice.TRPInformationListTRPResp.list, F1AP_TRPInformationItemTRPResp_t, trpinfolist); + trpinfolist->id = F1AP_ProtocolIE_ID_id_TRPInformationItem; + trpinfolist->criticality = F1AP_Criticality_ignore; + trpinfolist->value.present = F1AP_TRPInformationItemTRPResp__value_PR_TRPInformationItem; + F1AP_TRPInformationItem_t *trp_info_item = &trpinfolist->value.choice.TRPInformationItem; + F1AP_TRPInformation_t *trp_info = &trp_info_item->tRPInformation; + f1ap_trp_information_t *tRPInformation = &msg->trp_information_list.trp_information_item[i]; + trp_info->tRPID = tRPInformation->trp_id; + + f1ap_trp_information_type_response_list_t *tRPInformationTypeResponseList = &tRPInformation->trp_information_type_response_list; + uint8_t trp_item_len = tRPInformationTypeResponseList->trp_information_type_response_item_length; + + for (int j = 0; j < trp_item_len; j++) { + asn1cSequenceAdd(trp_info->tRPInformationTypeResponseList, F1AP_TRPInformationTypeResponseItem_t, trp_resp_item); + *trp_resp_item = encode_trp_info_type_response_item(&tRPInformationTypeResponseList->trp_information_type_response_item[j]); + } + } + + return pdu; +} + +/** + * @brief Decode F1 TRP information response + */ +bool decode_trp_information_resp(const F1AP_F1AP_PDU_t *pdu, f1ap_trp_information_resp_t *out) +{ + DevAssert(out != NULL); + memset(out, 0, sizeof(*out)); + + F1AP_TRPInformationResponse_t *in = &pdu->choice.successfulOutcome->value.choice.TRPInformationResponse; + F1AP_TRPInformationResponseIEs_t *ie; + + F1AP_LIB_FIND_IE(F1AP_TRPInformationResponseIEs_t, ie, &in->protocolIEs.list, F1AP_ProtocolIE_ID_id_TransactionID, true); + F1AP_LIB_FIND_IE(F1AP_TRPInformationResponseIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_TRPInformationListTRPResp, + true); + + for (int i = 0; i < in->protocolIEs.list.count; ++i) { + ie = in->protocolIEs.list.array[i]; + AssertError(ie != NULL, return false, "in->protocolIEs.list.array[i] is NULL"); + switch (ie->id) { + case F1AP_ProtocolIE_ID_id_TransactionID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_TRPInformationResponseIEs__value_PR_TransactionID); + out->transaction_id = ie->value.choice.TransactionID; + break; + case F1AP_ProtocolIE_ID_id_TRPInformationListTRPResp: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_TRPInformationResponseIEs__value_PR_TRPInformationListTRPResp); + uint32_t trp_info_item_length = ie->value.choice.TRPInformationListTRPResp.list.count; + AssertError(trp_info_item_length > 0, return false, "at least 1 TRP Information Item must be present"); + out->trp_information_list.trp_information_item_length = trp_info_item_length; + f1ap_trp_information_t *trp_info_item = calloc_or_fail(trp_info_item_length, sizeof(*trp_info_item)); + out->trp_information_list.trp_information_item = trp_info_item; + for (int i = 0; i < trp_info_item_length; i++) { + F1AP_TRPInformationItemTRPResp_t *f1_trpinfolist = + (F1AP_TRPInformationItemTRPResp_t *)ie->value.choice.TRPInformationListTRPResp.list.array[i]; + _F1_EQ_CHECK_LONG(f1_trpinfolist->id, F1AP_ProtocolIE_ID_id_TRPInformationItem); + _F1_EQ_CHECK_INT(f1_trpinfolist->value.present, F1AP_TRPInformationItemTRPResp__value_PR_TRPInformationItem); + F1AP_TRPInformationItem_t *f1_trp_info_item = &f1_trpinfolist->value.choice.TRPInformationItem; + F1AP_TRPInformation_t *f1_trp_info = &f1_trp_info_item->tRPInformation; + trp_info_item[i].trp_id = f1_trp_info->tRPID; + + F1AP_TRPInformationTypeResponseList_t *f1_trp_info_type_resp_list = + (F1AP_TRPInformationTypeResponseList_t *)&f1_trp_info->tRPInformationTypeResponseList; + + uint8_t trp_info_type_resp_item_len = f1_trp_info_type_resp_list->list.count; + AssertError(trp_info_type_resp_item_len > 0, + return false, + "at least 1 TRP Information type response Item must be present"); + f1ap_trp_information_type_response_list_t *trp_info_resp_list = &trp_info_item[i].trp_information_type_response_list; + trp_info_resp_list->trp_information_type_response_item_length = trp_info_type_resp_item_len; + trp_info_resp_list->trp_information_type_response_item = + calloc_or_fail(trp_info_type_resp_item_len, sizeof(*trp_info_resp_list->trp_information_type_response_item)); + for (int j = 0; j < trp_info_type_resp_item_len; j++) { + f1ap_trp_information_type_response_item_t *trp_info_type_resp_item = + &trp_info_resp_list->trp_information_type_response_item[j]; + decode_trp_info_type_response_item(f1_trp_info_type_resp_list->list.array[j], trp_info_type_resp_item); + } + } + break; + case F1AP_ProtocolIE_ID_id_CriticalityDiagnostics: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld not handled, skipping\n", ie->id); + break; + default: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld unknown, skipping\n", ie->id); + break; + } + } + + return true; +} + +/** + * @brief F1 TRP information response deep copy + */ +f1ap_trp_information_resp_t cp_trp_information_resp(const f1ap_trp_information_resp_t *orig) +{ + /* copy all mandatory fields that are not dynamic memory */ + f1ap_trp_information_resp_t cp = { + .transaction_id = orig->transaction_id, + }; + + uint32_t trp_info_item_length = orig->trp_information_list.trp_information_item_length; + AssertFatal(trp_info_item_length > 0, "at least 1 TRP Information Item must be present\n"); + cp.trp_information_list.trp_information_item_length = trp_info_item_length; + cp.trp_information_list.trp_information_item = + calloc_or_fail(trp_info_item_length, sizeof(*cp.trp_information_list.trp_information_item)); + + f1ap_trp_information_t *trp_information_item_cp = cp.trp_information_list.trp_information_item; + f1ap_trp_information_t *trp_information_item_orig = orig->trp_information_list.trp_information_item; + + for (int i = 0; i < trp_info_item_length; i++) { + uint8_t trp_info_type_resp_item_len = + trp_information_item_orig[i].trp_information_type_response_list.trp_information_type_response_item_length; + AssertFatal(trp_info_type_resp_item_len > 0, "at least 1 TRP Information type response Item must be present\n"); + + trp_information_item_cp[i].trp_id = trp_information_item_orig[i].trp_id; + + f1ap_trp_information_type_response_list_t *trp_info_type_resp_list_cp = + &trp_information_item_cp[i].trp_information_type_response_list; + f1ap_trp_information_type_response_list_t *trp_info_type_resp_list_orig = + &trp_information_item_orig[i].trp_information_type_response_list; + trp_info_type_resp_list_cp->trp_information_type_response_item_length = trp_info_type_resp_item_len; + trp_info_type_resp_list_cp->trp_information_type_response_item = + calloc_or_fail(trp_info_type_resp_item_len, sizeof(*trp_info_type_resp_list_cp->trp_information_type_response_item)); + for (int j = 0; j < trp_info_type_resp_item_len; j++) { + trp_info_type_resp_list_cp->trp_information_type_response_item[j] = + cp_trp_info_type_response_item(&trp_info_type_resp_list_orig->trp_information_type_response_item[j]); + } + } + + return cp; +} + +/** + * @brief F1 TRP information response equality check + */ +bool eq_trp_information_resp(const f1ap_trp_information_resp_t *a, const f1ap_trp_information_resp_t *b) +{ + _F1_EQ_CHECK_INT(a->transaction_id, b->transaction_id); + + _F1_EQ_CHECK_INT(a->trp_information_list.trp_information_item_length, b->trp_information_list.trp_information_item_length); + uint32_t trp_info_item_length = a->trp_information_list.trp_information_item_length; + AssertError(trp_info_item_length > 0, return false, "at least 1 TRP Information Item must be present\n"); + + f1ap_trp_information_t *trp_information_item_a = a->trp_information_list.trp_information_item; + f1ap_trp_information_t *trp_information_item_b = b->trp_information_list.trp_information_item; + + for (int i = 0; i < trp_info_item_length; i++) { + f1ap_trp_information_type_response_list_t *trp_info_type_resp_list_a = + &trp_information_item_a[i].trp_information_type_response_list; + f1ap_trp_information_type_response_list_t *trp_info_type_resp_list_b = + &trp_information_item_b[i].trp_information_type_response_list; + _F1_EQ_CHECK_INT(trp_info_type_resp_list_a->trp_information_type_response_item_length, + trp_info_type_resp_list_b->trp_information_type_response_item_length); + uint8_t trp_info_type_resp_item_len = trp_info_type_resp_list_a->trp_information_type_response_item_length; + AssertError(trp_info_type_resp_item_len > 0, return false, "at least 1 TRP Information type response Item must be present\n"); + _F1_EQ_CHECK_INT(trp_information_item_a[i].trp_id, trp_information_item_b[i].trp_id); + for (int j = 0; j < trp_info_type_resp_item_len; j++) { + _F1_CHECK_EXP(eq_trp_info_type_response_item(&trp_info_type_resp_list_a->trp_information_type_response_item[j], + &trp_info_type_resp_list_b->trp_information_type_response_item[j])); + } + } + + return true; +} + +/** + * @brief Free Allocated F1 TRP information response + */ +void free_trp_information_resp(f1ap_trp_information_resp_t *msg) +{ + f1ap_trp_information_list_t *trp_information_list = &msg->trp_information_list; + uint32_t trp_info_item_length = trp_information_list->trp_information_item_length; + for (int i = 0; i < trp_info_item_length; i++) { + f1ap_trp_information_t *trp_information_item = &trp_information_list->trp_information_item[i]; + f1ap_trp_information_type_response_list_t *trp_info_type_resp_list = &trp_information_item->trp_information_type_response_list; + free(trp_info_type_resp_list->trp_information_type_response_item); + } + free(msg->trp_information_list.trp_information_item); +} + +/** + * @brief Encode F1 TRP information failure to ASN.1 + */ +F1AP_F1AP_PDU_t *encode_trp_information_failure(const f1ap_trp_information_failure_t *msg) +{ + F1AP_F1AP_PDU_t *pdu = calloc_or_fail(1, sizeof(*pdu)); + + /* Message Type */ + pdu->present = F1AP_F1AP_PDU_PR_unsuccessfulOutcome; + asn1cCalloc(pdu->choice.unsuccessfulOutcome, tmp); + tmp->procedureCode = F1AP_ProcedureCode_id_TRPInformationExchange; + tmp->criticality = F1AP_Criticality_reject; + tmp->value.present = F1AP_UnsuccessfulOutcome__value_PR_TRPInformationFailure; + F1AP_TRPInformationFailure_t *out = &tmp->value.choice.TRPInformationFailure; + + /* mandatory : TransactionID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_TRPInformationFailureIEs_t, ie1); + ie1->id = F1AP_ProtocolIE_ID_id_TransactionID; + ie1->criticality = F1AP_Criticality_reject; + ie1->value.present = F1AP_TRPInformationFailureIEs__value_PR_TransactionID; + ie1->value.choice.TransactionID = msg->transaction_id; + + /* mandatory : Cause */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_TRPInformationFailureIEs_t, ie3); + ie3->id = F1AP_ProtocolIE_ID_id_Cause; + ie3->criticality = F1AP_Criticality_ignore; + ie3->value.present = F1AP_TRPInformationFailureIEs__value_PR_Cause; + ie3->value.choice.Cause = encode_f1ap_cause(msg->cause, msg->cause_value); + + return pdu; +} + +/** + * @brief Decode F1 TRP information failure + */ +bool decode_trp_information_failure(const F1AP_F1AP_PDU_t *pdu, f1ap_trp_information_failure_t *out) +{ + DevAssert(out != NULL); + memset(out, 0, sizeof(*out)); + + F1AP_TRPInformationFailure_t *in = &pdu->choice.unsuccessfulOutcome->value.choice.TRPInformationFailure; + F1AP_TRPInformationFailureIEs_t *ie; + + F1AP_LIB_FIND_IE(F1AP_TRPInformationFailureIEs_t, ie, &in->protocolIEs.list, F1AP_ProtocolIE_ID_id_TransactionID, true); + F1AP_LIB_FIND_IE(F1AP_TRPInformationFailureIEs_t, ie, &in->protocolIEs.list, F1AP_ProtocolIE_ID_id_Cause, true); + + for (int i = 0; i < in->protocolIEs.list.count; ++i) { + ie = in->protocolIEs.list.array[i]; + AssertError(ie != NULL, return false, "in->protocolIEs.list.array[i] is NULL"); + switch (ie->id) { + case F1AP_ProtocolIE_ID_id_TransactionID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_TRPInformationFailureIEs__value_PR_TransactionID); + out->transaction_id = ie->value.choice.TransactionID; + break; + case F1AP_ProtocolIE_ID_id_Cause: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_TRPInformationFailureIEs__value_PR_Cause); + _F1_CHECK_EXP(decode_f1ap_cause(ie->value.choice.Cause, &out->cause, &out->cause_value)); + break; + case F1AP_ProtocolIE_ID_id_CriticalityDiagnostics: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld not handled, skipping\n", ie->id); + break; + default: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld unknown, skipping\n", ie->id); + break; + } + } + + return true; +} + +/** + * @brief F1 trp information failure deep copy + */ +f1ap_trp_information_failure_t cp_trp_information_failure(const f1ap_trp_information_failure_t *orig) +{ + /* copy all mandatory fields that are not dynamic memory */ + f1ap_trp_information_failure_t cp = { + .transaction_id = orig->transaction_id, + .cause = orig->cause, + .cause_value = orig->cause_value, + }; + + return cp; +} + +/** + * @brief F1 trp information failure equality check + */ +bool eq_trp_information_failure(const f1ap_trp_information_failure_t *a, const f1ap_trp_information_failure_t *b) +{ + _F1_EQ_CHECK_INT(a->transaction_id, b->transaction_id); + _F1_EQ_CHECK_INT(a->cause, b->cause); + _F1_EQ_CHECK_LONG(a->cause_value, b->cause_value); + + return true; +} + +/** + * @brief Free Allocated F1 trp information failure + */ +void free_trp_information_failure(f1ap_trp_information_failure_t *msg) +{ + // nothing to free +} + +/** + * @brief Encode F1 positioning measurement request to ASN.1 + */ +F1AP_F1AP_PDU_t *encode_positioning_measurement_req(const f1ap_positioning_measurement_req_t *msg) +{ + F1AP_F1AP_PDU_t *pdu = calloc_or_fail(1, sizeof(*pdu)); + + /* Message Type */ + pdu->present = F1AP_F1AP_PDU_PR_initiatingMessage; + asn1cCalloc(pdu->choice.initiatingMessage, tmp); + tmp->procedureCode = F1AP_ProcedureCode_id_PositioningMeasurementExchange; + tmp->criticality = F1AP_Criticality_reject; + tmp->value.present = F1AP_InitiatingMessage__value_PR_PositioningMeasurementRequest; + F1AP_PositioningMeasurementRequest_t *out = &tmp->value.choice.PositioningMeasurementRequest; + + /* mandatory : TransactionID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningMeasurementRequestIEs_t, ie1); + ie1->id = F1AP_ProtocolIE_ID_id_TransactionID; + ie1->criticality = F1AP_Criticality_reject; + ie1->value.present = F1AP_PositioningMeasurementRequestIEs__value_PR_TransactionID; + ie1->value.choice.TransactionID = msg->transaction_id; + + /* mandatory : LMF_MeasurementID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningMeasurementRequestIEs_t, ie2); + ie2->id = F1AP_ProtocolIE_ID_id_LMF_MeasurementID; + ie2->criticality = F1AP_Criticality_reject; + ie2->value.present = F1AP_PositioningMeasurementRequestIEs__value_PR_LMF_MeasurementID; + ie2->value.choice.LMF_MeasurementID = msg->lmf_measurement_id; + + /* mandatory : RAN_MeasurementID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningMeasurementRequestIEs_t, ie3); + ie3->id = F1AP_ProtocolIE_ID_id_RAN_MeasurementID; + ie3->criticality = F1AP_Criticality_reject; + ie3->value.present = F1AP_PositioningMeasurementRequestIEs__value_PR_RAN_MeasurementID; + ie3->value.choice.RAN_MeasurementID = msg->ran_measurement_id; + + /* TRP Measurement Request List */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningMeasurementRequestIEs_t, ie4); + ie4->id = F1AP_ProtocolIE_ID_id_TRP_MeasurementRequestList; + ie4->criticality = F1AP_Criticality_reject; + ie4->value.present = F1AP_PositioningMeasurementRequestIEs__value_PR_TRP_MeasurementRequestList; + F1AP_TRP_MeasurementRequestList_t *f1_trp_meas_req_list = &ie4->value.choice.TRP_MeasurementRequestList; + const f1ap_trp_measurement_request_list_t *trp_meas_req_list = &msg->trp_measurement_request_list; + for (int i = 0; i < trp_meas_req_list->trp_measurement_request_list_length; i++) { + // mandatory : TRP List Item + asn1cSequenceAdd(f1_trp_meas_req_list->list, F1AP_TRP_MeasurementRequestItem_t, trp_meas_req_item); + trp_meas_req_item->tRPID = trp_meas_req_list->trp_measurement_request_item[i].tRPID; + } + + /* mandatory : PosReportCharacteristics */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningMeasurementRequestIEs_t, ie5); + ie5->id = F1AP_ProtocolIE_ID_id_PosReportCharacteristics; + ie5->criticality = F1AP_Criticality_reject; + ie5->value.present = F1AP_PositioningMeasurementRequestIEs__value_PR_PosReportCharacteristics; + ie5->value.choice.PosReportCharacteristics = msg->pos_report_characteristics; + + /* C : if ReportCharacteristicsPeriodic */ + if (msg->pos_report_characteristics == F1AP_POSREPORTCHARACTERISTICS_PERIODIC) { + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningMeasurementRequestIEs_t, ie6); + ie6->id = F1AP_ProtocolIE_ID_id_PosMeasurementPeriodicity; + ie6->criticality = F1AP_Criticality_reject; + ie6->value.present = F1AP_PositioningMeasurementRequestIEs__value_PR_MeasurementPeriodicity; + ie6->value.choice.MeasurementPeriodicity = msg->measurement_periodicity; + } + + /* mandatory : Positioning Measurement Periodicity */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningMeasurementRequestIEs_t, ie7); + ie7->id = F1AP_ProtocolIE_ID_id_PosMeasurementQuantities; + ie7->criticality = F1AP_Criticality_reject; + ie7->value.present = F1AP_PositioningMeasurementRequestIEs__value_PR_PosMeasurementQuantities; + F1AP_PosMeasurementQuantities_t *f1_pos_meas_quantities = &ie7->value.choice.PosMeasurementQuantities; + const f1ap_pos_measurement_quantities_t *pos_meas_quantities = &msg->pos_measurement_quantities; + for (int i = 0; i < pos_meas_quantities->pos_measurement_quantities_length; i++) { + // mandatory: PosMeasurementQuantitiesItem + asn1cSequenceAdd(f1_pos_meas_quantities->list, F1AP_PosMeasurementQuantities_Item_t, pos_meas_quantity_item); + pos_meas_quantity_item->posMeasurementType = pos_meas_quantities->pos_measurement_quantities_item[i].pos_measurement_type; + } + + /* optional: SRS Configuration */ + if (msg->srs_configuration) { + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningMeasurementRequestIEs_t, ie8); + ie8->id = F1AP_ProtocolIE_ID_id_SRSConfiguration; + ie8->criticality = F1AP_Criticality_ignore; + ie8->value.present = F1AP_PositioningMeasurementRequestIEs__value_PR_SRSConfiguration; + f1ap_srs_carrier_list_t *srs_carrier_list = &msg->srs_configuration->srs_carrier_list; + ie8->value.choice.SRSConfiguration.sRSCarrier_List = encode_srs_carrier_list(srs_carrier_list); + } + + return pdu; +} + +/** + * @brief Decode F1 Positioning Measurement request + */ +bool decode_positioning_measurement_req(const F1AP_F1AP_PDU_t *pdu, f1ap_positioning_measurement_req_t *out) +{ + DevAssert(out != NULL); + memset(out, 0, sizeof(*out)); + + F1AP_PositioningMeasurementRequest_t *in = &pdu->choice.initiatingMessage->value.choice.PositioningMeasurementRequest; + F1AP_PositioningMeasurementRequestIEs_t *ie; + + F1AP_LIB_FIND_IE(F1AP_PositioningMeasurementRequestIEs_t, ie, &in->protocolIEs.list, F1AP_ProtocolIE_ID_id_TransactionID, true); + F1AP_LIB_FIND_IE(F1AP_PositioningMeasurementRequestIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_LMF_MeasurementID, + true); + F1AP_LIB_FIND_IE(F1AP_PositioningMeasurementRequestIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_RAN_MeasurementID, + true); + F1AP_LIB_FIND_IE(F1AP_PositioningMeasurementRequestIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_TRP_MeasurementRequestList, + true); + F1AP_LIB_FIND_IE(F1AP_PositioningMeasurementRequestIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_PosReportCharacteristics, + true); + F1AP_PosReportCharacteristics_t *report_char = &ie->value.choice.PosReportCharacteristics; + if (*report_char == F1AP_PosReportCharacteristics_periodic) { + F1AP_LIB_FIND_IE(F1AP_PositioningMeasurementRequestIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_PosMeasurementPeriodicity, + true); + } + F1AP_LIB_FIND_IE(F1AP_PositioningMeasurementRequestIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_PosMeasurementQuantities, + true); + F1AP_LIB_FIND_IE(F1AP_PositioningMeasurementRequestIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_SRSConfiguration, + false); + + for (int i = 0; i < in->protocolIEs.list.count; ++i) { + ie = in->protocolIEs.list.array[i]; + AssertError(ie != NULL, return false, "in->protocolIEs.list.array[i] is NULL"); + switch (ie->id) { + case F1AP_ProtocolIE_ID_id_TransactionID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningMeasurementRequestIEs__value_PR_TransactionID); + out->transaction_id = ie->value.choice.TransactionID; + break; + case F1AP_ProtocolIE_ID_id_LMF_MeasurementID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningMeasurementRequestIEs__value_PR_LMF_MeasurementID); + out->lmf_measurement_id = ie->value.choice.LMF_MeasurementID; + break; + case F1AP_ProtocolIE_ID_id_RAN_MeasurementID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningMeasurementRequestIEs__value_PR_RAN_MeasurementID); + out->ran_measurement_id = ie->value.choice.RAN_MeasurementID; + break; + case F1AP_ProtocolIE_ID_id_TRP_MeasurementRequestList: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningMeasurementRequestIEs__value_PR_TRP_MeasurementRequestList); + F1AP_TRP_MeasurementRequestList_t *f1_trp_meas_req_list = &ie->value.choice.TRP_MeasurementRequestList; + f1ap_trp_measurement_request_list_t *trp_meas_req_list = &out->trp_measurement_request_list; + uint32_t trp_meas_req_list_len = f1_trp_meas_req_list->list.count; + AssertError(trp_meas_req_list_len > 0, return false, "at least 1 TRP must be present"); + trp_meas_req_list->trp_measurement_request_list_length = trp_meas_req_list_len; + trp_meas_req_list->trp_measurement_request_item = + calloc_or_fail(trp_meas_req_list_len, sizeof(*trp_meas_req_list->trp_measurement_request_item)); + for (int i = 0; i < trp_meas_req_list_len; i++) { + trp_meas_req_list->trp_measurement_request_item[i].tRPID = f1_trp_meas_req_list->list.array[i]->tRPID; + } + break; + case F1AP_ProtocolIE_ID_id_PosReportCharacteristics: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningMeasurementRequestIEs__value_PR_PosReportCharacteristics); + out->pos_report_characteristics = ie->value.choice.PosReportCharacteristics; + break; + case F1AP_ProtocolIE_ID_id_PosMeasurementPeriodicity: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningMeasurementRequestIEs__value_PR_MeasurementPeriodicity); + out->measurement_periodicity = ie->value.choice.MeasurementPeriodicity; + break; + case F1AP_ProtocolIE_ID_id_PosMeasurementQuantities: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningMeasurementRequestIEs__value_PR_PosMeasurementQuantities); + F1AP_PosMeasurementQuantities_t *f1_pos_meas_quantities = &ie->value.choice.PosMeasurementQuantities; + f1ap_pos_measurement_quantities_t *pos_meas_quantities = &out->pos_measurement_quantities; + uint32_t pos_meas_quantities_len = f1_pos_meas_quantities->list.count; + AssertError(pos_meas_quantities_len > 0, return false, "at least 1 position measurement must be present"); + pos_meas_quantities->pos_measurement_quantities_length = pos_meas_quantities_len; + pos_meas_quantities->pos_measurement_quantities_item = + calloc_or_fail(pos_meas_quantities_len, sizeof(*pos_meas_quantities->pos_measurement_quantities_item)); + for (int i = 0; i < pos_meas_quantities_len; i++) { + f1ap_pos_measurement_quantities_item_t *pos_meas_quantities_item = + &pos_meas_quantities->pos_measurement_quantities_item[i]; + F1AP_PosMeasurementQuantities_Item_t *f1_PosMeasurementQuantities_Item = f1_pos_meas_quantities->list.array[i]; + pos_meas_quantities_item->pos_measurement_type = f1_PosMeasurementQuantities_Item->posMeasurementType; + } + break; + case F1AP_ProtocolIE_ID_id_SFNInitialisationTime: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld not supported, skipping\n", ie->id); + break; + case F1AP_ProtocolIE_ID_id_SRSConfiguration: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningMeasurementRequestIEs__value_PR_SRSConfiguration); + F1AP_SRSCarrier_List_t *f1_sRSCarrier_List = &ie->value.choice.SRSConfiguration.sRSCarrier_List; + out->srs_configuration = calloc_or_fail(1, sizeof(*out->srs_configuration)); + f1ap_srs_carrier_list_t *srs_carrier_list = &out->srs_configuration->srs_carrier_list; + decode_srs_carrier_list(srs_carrier_list, f1_sRSCarrier_List); + break; + case F1AP_ProtocolIE_ID_id_MeasurementBeamInfoRequest: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld not supported, skipping\n", ie->id); + break; + case F1AP_ProtocolIE_ID_id_SystemFrameNumber: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld not supported, skipping\n", ie->id); + break; + case F1AP_ProtocolIE_ID_id_SlotNumber: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld not supported, skipping\n", ie->id); + break; + default: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld unknown, skipping\n", ie->id); + break; + } + } + + return true; +} + +/** + * @brief F1 Positioning Measurement request deep copy + */ +f1ap_positioning_measurement_req_t cp_positioning_measurement_req(const f1ap_positioning_measurement_req_t *orig) +{ + // copy all mandatory fields that are not dynamic memory + f1ap_positioning_measurement_req_t cp = { + .transaction_id = orig->transaction_id, + .lmf_measurement_id = orig->lmf_measurement_id, + .ran_measurement_id = orig->ran_measurement_id, + }; + + f1ap_trp_measurement_request_list_t *trp_meas_req_list_cp = &cp.trp_measurement_request_list; + const f1ap_trp_measurement_request_list_t *trp_meas_req_list_orig = &orig->trp_measurement_request_list; + uint32_t trp_meas_req_list_len = trp_meas_req_list_orig->trp_measurement_request_list_length; + AssertFatal(trp_meas_req_list_len > 0, "at least 1 TRP must be present"); + trp_meas_req_list_cp->trp_measurement_request_list_length = trp_meas_req_list_len; + trp_meas_req_list_cp->trp_measurement_request_item = + calloc_or_fail(trp_meas_req_list_len, sizeof(*trp_meas_req_list_cp->trp_measurement_request_item)); + for (int i = 0; i < trp_meas_req_list_len; i++) { + trp_meas_req_list_cp->trp_measurement_request_item[i].tRPID = trp_meas_req_list_orig->trp_measurement_request_item[i].tRPID; + } + + cp.pos_report_characteristics = orig->pos_report_characteristics; + if (orig->pos_report_characteristics == F1AP_POSREPORTCHARACTERISTICS_PERIODIC) { + cp.measurement_periodicity = orig->measurement_periodicity; + } + + f1ap_pos_measurement_quantities_t *q_out = &cp.pos_measurement_quantities; + const f1ap_pos_measurement_quantities_t *q_in = &orig->pos_measurement_quantities; + uint32_t q_len = q_in->pos_measurement_quantities_length; + AssertFatal(q_len > 0, "at least 1 position measurement must be present"); + q_out->pos_measurement_quantities_length = q_len; + q_out->pos_measurement_quantities_item = calloc_or_fail(q_len, sizeof(*q_out->pos_measurement_quantities_item)); + for (int i = 0; i < q_len; i++) { + f1ap_pos_measurement_quantities_item_t *q_item_in = &q_in->pos_measurement_quantities_item[i]; + f1ap_pos_measurement_quantities_item_t *q_item_out = &q_out->pos_measurement_quantities_item[i]; + q_item_out->pos_measurement_type = q_item_in->pos_measurement_type; + } + + /* optional: SRS Configuration */ + if (orig->srs_configuration) { + cp.srs_configuration = calloc_or_fail(1, sizeof(*cp.srs_configuration)); + f1ap_srs_carrier_list_t *srs_carrier_list_cp = &cp.srs_configuration->srs_carrier_list; + f1ap_srs_carrier_list_t *srs_carrier_list = &orig->srs_configuration->srs_carrier_list; + *srs_carrier_list_cp = cp_srs_carrier_list(srs_carrier_list); + } + + return cp; +} + +/** + * @brief F1 Positioning Measurement request equality check + */ +bool eq_positioning_measurement_req(const f1ap_positioning_measurement_req_t *a, const f1ap_positioning_measurement_req_t *b) +{ + _F1_EQ_CHECK_INT(a->transaction_id, b->transaction_id); + _F1_EQ_CHECK_INT(a->lmf_measurement_id, b->lmf_measurement_id); + _F1_EQ_CHECK_INT(a->ran_measurement_id, b->ran_measurement_id); + + const f1ap_trp_measurement_request_list_t *trp_meas_req_list_a = &a->trp_measurement_request_list; + const f1ap_trp_measurement_request_list_t *trp_meas_req_list_b = &b->trp_measurement_request_list; + uint32_t trp_meas_req_list_len = trp_meas_req_list_a->trp_measurement_request_list_length; + AssertFatal(trp_meas_req_list_len > 0, "at least 1 TRP must be present"); + _F1_EQ_CHECK_INT(trp_meas_req_list_b->trp_measurement_request_list_length, trp_meas_req_list_len); + for (int i = 0; i < trp_meas_req_list_len; i++) { + _F1_EQ_CHECK_INT(trp_meas_req_list_a->trp_measurement_request_item[i].tRPID, + trp_meas_req_list_b->trp_measurement_request_item[i].tRPID); + } + + _F1_EQ_CHECK_INT(a->pos_report_characteristics, b->pos_report_characteristics); + if (a->pos_report_characteristics == F1AP_POSREPORTCHARACTERISTICS_PERIODIC) { + _F1_EQ_CHECK_INT(a->measurement_periodicity, b->measurement_periodicity); + } + + const f1ap_pos_measurement_quantities_t *pos_meas_quantities_a = &a->pos_measurement_quantities; + const f1ap_pos_measurement_quantities_t *pos_meas_quantities_b = &b->pos_measurement_quantities; + uint32_t pos_meas_quantities_len = pos_meas_quantities_a->pos_measurement_quantities_length; + AssertFatal(pos_meas_quantities_len > 0, "at least 1 position measurement must be present"); + _F1_EQ_CHECK_INT(pos_meas_quantities_b->pos_measurement_quantities_length, pos_meas_quantities_len); + for (int i = 0; i < pos_meas_quantities_len; i++) { + f1ap_pos_measurement_quantities_item_t *a_pos_meas_quantities_item = &pos_meas_quantities_a->pos_measurement_quantities_item[i]; + f1ap_pos_measurement_quantities_item_t *b_pos_meas_quantities_item = &pos_meas_quantities_b->pos_measurement_quantities_item[i]; + _F1_EQ_CHECK_INT(a_pos_meas_quantities_item->pos_measurement_type, b_pos_meas_quantities_item->pos_measurement_type); + } + + /* optional: SRS Configuration */ + if ((a->srs_configuration == NULL) != (b->srs_configuration == NULL)) { + return false; + } + if (a->srs_configuration) { + f1ap_srs_carrier_list_t *srs_carrier_list_a = &a->srs_configuration->srs_carrier_list; + f1ap_srs_carrier_list_t *srs_carrier_list_b = &b->srs_configuration->srs_carrier_list; + _F1_CHECK_EXP(eq_srs_carrier_list(srs_carrier_list_a, srs_carrier_list_b)); + } + + return true; +} + +/** + * @brief Free Allocated F1 Positioning Measurement request + */ +void free_positioning_measurement_req(f1ap_positioning_measurement_req_t *msg) +{ + free(msg->trp_measurement_request_list.trp_measurement_request_item); + free(msg->pos_measurement_quantities.pos_measurement_quantities_item); + + /* optional: SRS Configuration */ + if (msg->srs_configuration) { + f1ap_srs_carrier_list_t *srs_carrier_list = &msg->srs_configuration->srs_carrier_list; + free_srs_carrier_list(srs_carrier_list); + free(msg->srs_configuration); + } +} + +/** + * @brief Encode F1 positioning measurement response to ASN.1 + */ +F1AP_F1AP_PDU_t *encode_positioning_measurement_resp(const f1ap_positioning_measurement_resp_t *msg) +{ + F1AP_F1AP_PDU_t *pdu = calloc_or_fail(1, sizeof(*pdu)); + + /* Message Type */ + pdu->present = F1AP_F1AP_PDU_PR_successfulOutcome; + asn1cCalloc(pdu->choice.successfulOutcome, tmp); + tmp->procedureCode = F1AP_ProcedureCode_id_PositioningMeasurementExchange; + tmp->criticality = F1AP_Criticality_reject; + tmp->value.present = F1AP_SuccessfulOutcome__value_PR_PositioningMeasurementResponse; + F1AP_PositioningMeasurementResponse_t *out = &tmp->value.choice.PositioningMeasurementResponse; + + /* mandatory : TransactionID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningMeasurementResponseIEs_t, ie1); + ie1->id = F1AP_ProtocolIE_ID_id_TransactionID; + ie1->criticality = F1AP_Criticality_reject; + ie1->value.present = F1AP_PositioningMeasurementResponseIEs__value_PR_TransactionID; + ie1->value.choice.TransactionID = msg->transaction_id; + + /* mandatory : LMF_MeasurementID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningMeasurementResponseIEs_t, ie2); + ie2->id = F1AP_ProtocolIE_ID_id_LMF_MeasurementID; + ie2->criticality = F1AP_Criticality_reject; + ie2->value.present = F1AP_PositioningMeasurementResponseIEs__value_PR_LMF_MeasurementID; + ie2->value.choice.LMF_MeasurementID = msg->lmf_measurement_id; + + /* mandatory : RAN_MeasurementID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningMeasurementResponseIEs_t, ie3); + ie3->id = F1AP_ProtocolIE_ID_id_RAN_MeasurementID; + ie3->criticality = F1AP_Criticality_reject; + ie3->value.present = F1AP_PositioningMeasurementResponseIEs__value_PR_RAN_MeasurementID; + ie3->value.choice.RAN_MeasurementID = msg->ran_measurement_id; + + /* Positioning Measurement Result List */ + if (msg->pos_measurement_result_list) { + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningMeasurementResponseIEs_t, ie4); + ie4->id = F1AP_ProtocolIE_ID_id_PosMeasurementResultList; + ie4->criticality = F1AP_Criticality_reject; + ie4->value.present = F1AP_PositioningMeasurementResponseIEs__value_PR_PosMeasurementResultList; + const f1ap_pos_measurement_result_list_t *in_list = msg->pos_measurement_result_list; + for (int i = 0; i < in_list->pos_measurement_result_list_length; i++) { + // mandatory : Positioning Measurement Result List Item + asn1cSequenceAdd(ie4->value.choice.PosMeasurementResultList.list, F1AP_PosMeasurementResultList_Item_t, out_item); + f1ap_pos_measurement_result_list_item_t *in_item = &in_list->pos_measurement_result_list_item[i]; + F1AP_PosMeasurementResult_t *out_result = &out_item->posMeasurementResult; + f1ap_pos_measurement_result_t *in_result = &in_item->pos_measurement_result; + *out_result = encode_positioning_measurement_result(in_result); + out_item->tRPID = in_item->trp_id; + } + } + + return pdu; +} + +/** + * @brief Decode F1 Positioning Measurement response + */ +bool decode_positioning_measurement_resp(const F1AP_F1AP_PDU_t *pdu, f1ap_positioning_measurement_resp_t *out) +{ + DevAssert(out != NULL); + memset(out, 0, sizeof(*out)); + + F1AP_PositioningMeasurementResponse_t *in = &pdu->choice.successfulOutcome->value.choice.PositioningMeasurementResponse; + F1AP_PositioningMeasurementResponseIEs_t *ie; + + F1AP_LIB_FIND_IE(F1AP_PositioningMeasurementResponseIEs_t, ie, &in->protocolIEs.list, F1AP_ProtocolIE_ID_id_TransactionID, true); + F1AP_LIB_FIND_IE(F1AP_PositioningMeasurementResponseIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_LMF_MeasurementID, + true); + F1AP_LIB_FIND_IE(F1AP_PositioningMeasurementResponseIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_RAN_MeasurementID, + true); + F1AP_LIB_FIND_IE(F1AP_PositioningMeasurementResponseIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_PosMeasurementResultList, + false); + + for (int i = 0; i < in->protocolIEs.list.count; ++i) { + ie = in->protocolIEs.list.array[i]; + AssertError(ie != NULL, return false, "in->protocolIEs.list.array[i] is NULL"); + switch (ie->id) { + case F1AP_ProtocolIE_ID_id_TransactionID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningMeasurementResponseIEs__value_PR_TransactionID); + out->transaction_id = ie->value.choice.TransactionID; + break; + case F1AP_ProtocolIE_ID_id_LMF_MeasurementID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningMeasurementResponseIEs__value_PR_LMF_MeasurementID); + out->lmf_measurement_id = ie->value.choice.LMF_MeasurementID; + break; + case F1AP_ProtocolIE_ID_id_RAN_MeasurementID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningMeasurementResponseIEs__value_PR_RAN_MeasurementID); + out->ran_measurement_id = ie->value.choice.RAN_MeasurementID; + break; + case F1AP_ProtocolIE_ID_id_PosMeasurementResultList: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningMeasurementResponseIEs__value_PR_PosMeasurementResultList); + F1AP_PosMeasurementResultList_t *in_list = &ie->value.choice.PosMeasurementResultList; + uint32_t pos_meas_result_list_len = in_list->list.count; + out->pos_measurement_result_list = calloc_or_fail(1, sizeof(*out->pos_measurement_result_list)); + f1ap_pos_measurement_result_list_t *out_list = out->pos_measurement_result_list; + out_list->pos_measurement_result_list_length = pos_meas_result_list_len; + out_list->pos_measurement_result_list_item = + calloc_or_fail(pos_meas_result_list_len, sizeof(*out_list->pos_measurement_result_list_item)); + for (int i = 0; i < pos_meas_result_list_len; i++) { + F1AP_PosMeasurementResultList_Item_t *in_item = in_list->list.array[i]; + f1ap_pos_measurement_result_list_item_t *out_item = &out_list->pos_measurement_result_list_item[i]; + _F1_CHECK_EXP(decode_positioning_measurement_result(&in_item->posMeasurementResult, &out_item->pos_measurement_result)); + out_item->trp_id = in_item->tRPID; + } + break; + case F1AP_ProtocolIE_ID_id_CriticalityDiagnostics: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld not handled, skipping\n", ie->id); + break; + default: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld unknown, skipping\n", ie->id); + break; + } + } + + return true; +} + +/** + * @brief F1 Positioning Measurement response deep copy + */ +f1ap_positioning_measurement_resp_t cp_positioning_measurement_resp(const f1ap_positioning_measurement_resp_t *orig) +{ + // copy all mandatory fields that are not dynamic memory + f1ap_positioning_measurement_resp_t cp = { + .transaction_id = orig->transaction_id, + .lmf_measurement_id = orig->lmf_measurement_id, + .ran_measurement_id = orig->ran_measurement_id, + }; + + if (orig->pos_measurement_result_list) { + cp.pos_measurement_result_list = calloc_or_fail(1, sizeof(*cp.pos_measurement_result_list)); + f1ap_pos_measurement_result_list_t *list_orig = orig->pos_measurement_result_list; + f1ap_pos_measurement_result_list_t *list_cp = cp.pos_measurement_result_list; + uint32_t pos_meas_result_list_len = list_orig->pos_measurement_result_list_length; + list_cp->pos_measurement_result_list_length = pos_meas_result_list_len; + list_cp->pos_measurement_result_list_item = + calloc_or_fail(pos_meas_result_list_len, sizeof(*list_cp->pos_measurement_result_list_item)); + for (int i = 0; i < pos_meas_result_list_len; i++) { + f1ap_pos_measurement_result_list_item_t *item_cp = &list_cp->pos_measurement_result_list_item[i]; + f1ap_pos_measurement_result_list_item_t *item_orig = &list_orig->pos_measurement_result_list_item[i]; + item_cp->pos_measurement_result = cp_positioning_measurement_result(&item_orig->pos_measurement_result); + item_cp->trp_id = item_orig->trp_id; + } + } + + return cp; +} + +/** + * @brief F1 Positioning Measurement response equality check + */ +bool eq_positioning_measurement_resp(const f1ap_positioning_measurement_resp_t *a, const f1ap_positioning_measurement_resp_t *b) +{ + _F1_EQ_CHECK_INT(a->transaction_id, b->transaction_id); + _F1_EQ_CHECK_INT(a->lmf_measurement_id, b->lmf_measurement_id); + _F1_EQ_CHECK_INT(a->ran_measurement_id, b->ran_measurement_id); + + if ((a->pos_measurement_result_list == NULL) != (b->pos_measurement_result_list == NULL)) { + return false; + } + if (a->pos_measurement_result_list) { + f1ap_pos_measurement_result_list_t *list_a = a->pos_measurement_result_list; + f1ap_pos_measurement_result_list_t *list_b = b->pos_measurement_result_list; + uint32_t pos_meas_result_list_len = list_a->pos_measurement_result_list_length; + _F1_EQ_CHECK_INT(list_b->pos_measurement_result_list_length, pos_meas_result_list_len); + for (int i = 0; i < pos_meas_result_list_len; i++) { + f1ap_pos_measurement_result_list_item_t *item_a = &list_a->pos_measurement_result_list_item[i]; + f1ap_pos_measurement_result_list_item_t *item_b = &list_b->pos_measurement_result_list_item[i]; + _F1_CHECK_EXP(eq_positioning_measurement_result(&item_a->pos_measurement_result, &item_b->pos_measurement_result)); + _F1_EQ_CHECK_INT(item_a->trp_id, item_b->trp_id); + } + } + + return true; +} + +/** + * @brief Free Allocated F1 Positioning Measurement response + */ +void free_positioning_measurement_resp(f1ap_positioning_measurement_resp_t *msg) +{ + if (msg->pos_measurement_result_list) { + f1ap_pos_measurement_result_list_t *list = msg->pos_measurement_result_list; + uint32_t pos_meas_result_list_len = list->pos_measurement_result_list_length; + for (int i = 0; i < pos_meas_result_list_len; i++) { + f1ap_pos_measurement_result_t *posMeasurementResult = &list->pos_measurement_result_list_item[i].pos_measurement_result; + uint32_t pos_meas_result_length = posMeasurementResult->pos_measurement_result_item_length; + for (int j = 0; j < pos_meas_result_length; j++) { + f1ap_pos_measurement_result_item_t *item = &posMeasurementResult->pos_measurement_result_item[j]; + f1ap_measured_results_value_t *measuredResultsValue = &item->measured_results_value; + if (measuredResultsValue->present == F1AP_MEASURED_RESULTS_VALUE_PR_UL_ANGLEOFARRIVAL) { + if (measuredResultsValue->choice.ul_angle_of_arrival.zenith_aoa) { + free(measuredResultsValue->choice.ul_angle_of_arrival.zenith_aoa); + } + if (measuredResultsValue->choice.ul_angle_of_arrival.lcs_to_gcs_translation_aoa) { + free(measuredResultsValue->choice.ul_angle_of_arrival.lcs_to_gcs_translation_aoa); + } + } + } + free(posMeasurementResult->pos_measurement_result_item); + } + free(msg->pos_measurement_result_list->pos_measurement_result_list_item); + free(msg->pos_measurement_result_list); + } +} + +/** + * @brief Encode F1 positioning measurement failure to ASN.1 + */ +F1AP_F1AP_PDU_t *encode_positioning_measurement_failure(const f1ap_positioning_measurement_failure_t *msg) +{ + F1AP_F1AP_PDU_t *pdu = calloc_or_fail(1, sizeof(*pdu)); + + /* Message Type */ + pdu->present = F1AP_F1AP_PDU_PR_unsuccessfulOutcome; + asn1cCalloc(pdu->choice.unsuccessfulOutcome, tmp); + tmp->procedureCode = F1AP_ProcedureCode_id_PositioningMeasurementExchange; + tmp->criticality = F1AP_Criticality_reject; + tmp->value.present = F1AP_UnsuccessfulOutcome__value_PR_PositioningMeasurementFailure; + F1AP_PositioningMeasurementFailure_t *out = &tmp->value.choice.PositioningMeasurementFailure; + + /* mandatory : TransactionID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningMeasurementFailureIEs_t, ie1); + ie1->id = F1AP_ProtocolIE_ID_id_TransactionID; + ie1->criticality = F1AP_Criticality_reject; + ie1->value.present = F1AP_PositioningMeasurementFailureIEs__value_PR_TransactionID; + ie1->value.choice.TransactionID = msg->transaction_id; + + /* mandatory : LMF_MeasurementID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningMeasurementFailureIEs_t, ie2); + ie2->id = F1AP_ProtocolIE_ID_id_LMF_MeasurementID; + ie2->criticality = F1AP_Criticality_reject; + ie2->value.present = F1AP_PositioningMeasurementFailureIEs__value_PR_LMF_MeasurementID; + ie2->value.choice.LMF_MeasurementID = msg->lmf_measurement_id; + + /* mandatory : RAN_MeasurementID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningMeasurementFailureIEs_t, ie3); + ie3->id = F1AP_ProtocolIE_ID_id_RAN_MeasurementID; + ie3->criticality = F1AP_Criticality_reject; + ie3->value.present = F1AP_PositioningMeasurementFailureIEs__value_PR_RAN_MeasurementID; + ie3->value.choice.RAN_MeasurementID = msg->ran_measurement_id; + + /* mandatory : Cause */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningMeasurementFailureIEs_t, ie4); + ie4->id = F1AP_ProtocolIE_ID_id_Cause; + ie4->criticality = F1AP_Criticality_ignore; + ie4->value.present = F1AP_PositioningMeasurementFailureIEs__value_PR_Cause; + ie4->value.choice.Cause = encode_f1ap_cause(msg->cause, msg->cause_value); + + return pdu; +} + +/** + * @brief Decode F1 positioning measurement failure + */ +bool decode_positioning_measurement_failure(const F1AP_F1AP_PDU_t *pdu, f1ap_positioning_measurement_failure_t *out) +{ + DevAssert(out != NULL); + memset(out, 0, sizeof(*out)); + + F1AP_PositioningMeasurementFailure_t *in = &pdu->choice.unsuccessfulOutcome->value.choice.PositioningMeasurementFailure; + F1AP_PositioningMeasurementFailureIEs_t *ie; + + F1AP_LIB_FIND_IE(F1AP_PositioningMeasurementFailureIEs_t, ie, &in->protocolIEs.list, F1AP_ProtocolIE_ID_id_TransactionID, true); + F1AP_LIB_FIND_IE(F1AP_PositioningMeasurementFailureIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_LMF_MeasurementID, + true); + F1AP_LIB_FIND_IE(F1AP_PositioningMeasurementFailureIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_RAN_MeasurementID, + true); + F1AP_LIB_FIND_IE(F1AP_PositioningMeasurementFailureIEs_t, ie, &in->protocolIEs.list, F1AP_ProtocolIE_ID_id_Cause, true); + + for (int i = 0; i < in->protocolIEs.list.count; ++i) { + ie = in->protocolIEs.list.array[i]; + AssertError(ie != NULL, return false, "in->protocolIEs.list.array[i] is NULL"); + switch (ie->id) { + case F1AP_ProtocolIE_ID_id_TransactionID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningMeasurementFailureIEs__value_PR_TransactionID); + out->transaction_id = ie->value.choice.TransactionID; + break; + case F1AP_ProtocolIE_ID_id_LMF_MeasurementID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningMeasurementFailureIEs__value_PR_LMF_MeasurementID); + out->lmf_measurement_id = ie->value.choice.LMF_MeasurementID; + break; + case F1AP_ProtocolIE_ID_id_RAN_MeasurementID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningMeasurementFailureIEs__value_PR_RAN_MeasurementID); + out->ran_measurement_id = ie->value.choice.RAN_MeasurementID; + break; + case F1AP_ProtocolIE_ID_id_Cause: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningMeasurementFailureIEs__value_PR_Cause); + _F1_CHECK_EXP(decode_f1ap_cause(ie->value.choice.Cause, &out->cause, &out->cause_value)); + break; + case F1AP_ProtocolIE_ID_id_CriticalityDiagnostics: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld not handled, skipping\n", ie->id); + break; + default: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld unknown, skipping\n", ie->id); + break; + } + } + + return true; +} + +/** + * @brief F1 positioning measurement failure deep copy + */ +f1ap_positioning_measurement_failure_t cp_positioning_measurement_failure(const f1ap_positioning_measurement_failure_t *orig) +{ + /* copy all mandatory fields that are not dynamic memory */ + f1ap_positioning_measurement_failure_t cp = { + .transaction_id = orig->transaction_id, + .lmf_measurement_id = orig->lmf_measurement_id, + .ran_measurement_id = orig->ran_measurement_id, + .cause = orig->cause, + .cause_value = orig->cause_value, + }; + + return cp; +} + +/** + * @brief F1 positioning measurement failure equality check + */ +bool eq_positioning_measurement_failure(const f1ap_positioning_measurement_failure_t *a, + const f1ap_positioning_measurement_failure_t *b) +{ + _F1_EQ_CHECK_INT(a->transaction_id, b->transaction_id); + _F1_EQ_CHECK_INT(a->lmf_measurement_id, b->lmf_measurement_id); + _F1_EQ_CHECK_INT(a->ran_measurement_id, b->ran_measurement_id); + _F1_EQ_CHECK_INT(a->cause, b->cause); + _F1_EQ_CHECK_LONG(a->cause_value, b->cause_value); + + return true; +} + +/** + * @brief Free Allocated F1 positioning measurement failure + */ +void free_positioning_measurement_failure(f1ap_positioning_measurement_failure_t *msg) +{ + // nothing to free +} + +/** + * @brief Encode F1 positioning measurement report to ASN.1 + */ +F1AP_F1AP_PDU_t *encode_positioning_measurement_report(const f1ap_positioning_measurement_report_t *msg) +{ + F1AP_F1AP_PDU_t *pdu = calloc_or_fail(1, sizeof(*pdu)); + + /* Message Type */ + pdu->present = F1AP_F1AP_PDU_PR_initiatingMessage; + asn1cCalloc(pdu->choice.initiatingMessage, tmp); + tmp->procedureCode = F1AP_ProcedureCode_id_PositioningMeasurementReport; + tmp->criticality = F1AP_Criticality_ignore; + tmp->value.present = F1AP_InitiatingMessage__value_PR_PositioningMeasurementReport; + F1AP_PositioningMeasurementReport_t *out = &tmp->value.choice.PositioningMeasurementReport; + + /* mandatory : TransactionID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningMeasurementReportIEs_t, ie1); + ie1->id = F1AP_ProtocolIE_ID_id_TransactionID; + ie1->criticality = F1AP_Criticality_reject; + ie1->value.present = F1AP_PositioningMeasurementReportIEs__value_PR_TransactionID; + ie1->value.choice.TransactionID = msg->transaction_id; + + /* mandatory : LMF_MeasurementID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningMeasurementReportIEs_t, ie2); + ie2->id = F1AP_ProtocolIE_ID_id_LMF_MeasurementID; + ie2->criticality = F1AP_Criticality_reject; + ie2->value.present = F1AP_PositioningMeasurementReportIEs__value_PR_LMF_MeasurementID; + ie2->value.choice.LMF_MeasurementID = msg->lmf_measurement_id; + + /* mandatory : RAN_MeasurementID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningMeasurementReportIEs_t, ie3); + ie3->id = F1AP_ProtocolIE_ID_id_RAN_MeasurementID; + ie3->criticality = F1AP_Criticality_reject; + ie3->value.present = F1AP_PositioningMeasurementReportIEs__value_PR_RAN_MeasurementID; + ie3->value.choice.RAN_MeasurementID = msg->ran_measurement_id; + + /* Positioning Measurement Result List */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningMeasurementReportIEs_t, ie4); + ie4->id = F1AP_ProtocolIE_ID_id_PosMeasurementResultList; + ie4->criticality = F1AP_Criticality_reject; + ie4->value.present = F1AP_PositioningMeasurementReportIEs__value_PR_PosMeasurementResultList; + const f1ap_pos_measurement_result_list_t *pos_meas_res_list = msg->pos_measurement_result_list; + for (int i = 0; i < pos_meas_res_list->pos_measurement_result_list_length; i++) { + // mandatory : Positioning Measurement Result List Item + asn1cSequenceAdd(ie4->value.choice.PosMeasurementResultList.list, + F1AP_PosMeasurementResultList_Item_t, + f1_pos_meas_result_list_item); + f1ap_pos_measurement_result_list_item_t *pos_meas_res_list_item = &pos_meas_res_list->pos_measurement_result_list_item[i]; + F1AP_PosMeasurementResult_t *f1_posMeasurementResult = &f1_pos_meas_result_list_item->posMeasurementResult; + f1ap_pos_measurement_result_t *pos_measurement_result = &pos_meas_res_list_item->pos_measurement_result; + *f1_posMeasurementResult = encode_positioning_measurement_result(pos_measurement_result); + f1_pos_meas_result_list_item->tRPID = pos_meas_res_list_item->trp_id; + } + + return pdu; +} + +/** + * @brief Decode F1 Positioning Measurement report + */ +bool decode_positioning_measurement_report(const F1AP_F1AP_PDU_t *pdu, f1ap_positioning_measurement_report_t *out) +{ + DevAssert(out != NULL); + memset(out, 0, sizeof(*out)); + + F1AP_PositioningMeasurementReport_t *in = &pdu->choice.initiatingMessage->value.choice.PositioningMeasurementReport; + F1AP_PositioningMeasurementReportIEs_t *ie; + + F1AP_LIB_FIND_IE(F1AP_PositioningMeasurementReportIEs_t, ie, &in->protocolIEs.list, F1AP_ProtocolIE_ID_id_TransactionID, true); + F1AP_LIB_FIND_IE(F1AP_PositioningMeasurementReportIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_LMF_MeasurementID, + true); + F1AP_LIB_FIND_IE(F1AP_PositioningMeasurementReportIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_RAN_MeasurementID, + true); + F1AP_LIB_FIND_IE(F1AP_PositioningMeasurementReportIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_PosMeasurementResultList, + true); + + for (int i = 0; i < in->protocolIEs.list.count; ++i) { + ie = in->protocolIEs.list.array[i]; + AssertError(ie != NULL, return false, "in->protocolIEs.list.array[i] is NULL"); + switch (ie->id) { + case F1AP_ProtocolIE_ID_id_TransactionID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningMeasurementReportIEs__value_PR_TransactionID); + out->transaction_id = ie->value.choice.TransactionID; + break; + case F1AP_ProtocolIE_ID_id_LMF_MeasurementID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningMeasurementReportIEs__value_PR_LMF_MeasurementID); + out->lmf_measurement_id = ie->value.choice.LMF_MeasurementID; + break; + case F1AP_ProtocolIE_ID_id_RAN_MeasurementID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningMeasurementReportIEs__value_PR_RAN_MeasurementID); + out->ran_measurement_id = ie->value.choice.RAN_MeasurementID; + break; + case F1AP_ProtocolIE_ID_id_PosMeasurementResultList: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningMeasurementReportIEs__value_PR_PosMeasurementResultList); + F1AP_PosMeasurementResultList_t *f1_PosMeasurementResultList = &ie->value.choice.PosMeasurementResultList; + uint32_t pos_meas_result_list_len = f1_PosMeasurementResultList->list.count; + out->pos_measurement_result_list = calloc_or_fail(1, sizeof(*out->pos_measurement_result_list)); + f1ap_pos_measurement_result_list_t *pos_meas_res_list = out->pos_measurement_result_list; + pos_meas_res_list->pos_measurement_result_list_length = pos_meas_result_list_len; + pos_meas_res_list->pos_measurement_result_list_item = + calloc_or_fail(pos_meas_result_list_len, sizeof(*pos_meas_res_list->pos_measurement_result_list_item)); + for (int i = 0; i < pos_meas_result_list_len; i++) { + F1AP_PosMeasurementResultList_Item_t *f1_pos_meas_result_list_item = f1_PosMeasurementResultList->list.array[i]; + f1ap_pos_measurement_result_list_item_t *pos_meas_result_list_item = + &pos_meas_res_list->pos_measurement_result_list_item[i]; + _F1_CHECK_EXP(decode_positioning_measurement_result(&f1_pos_meas_result_list_item->posMeasurementResult, + &pos_meas_result_list_item->pos_measurement_result)); + pos_meas_result_list_item->trp_id = f1_pos_meas_result_list_item->tRPID; + } + break; + default: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld unknown, skipping\n", ie->id); + break; + } + } + + return true; +} + +/** + * @brief F1 Positioning Measurement report deep copy + */ +f1ap_positioning_measurement_report_t cp_positioning_measurement_report(const f1ap_positioning_measurement_report_t *orig) +{ + // copy all mandatory fields that are not dynamic memory + f1ap_positioning_measurement_report_t cp = { + .transaction_id = orig->transaction_id, + .lmf_measurement_id = orig->lmf_measurement_id, + .ran_measurement_id = orig->ran_measurement_id, + }; + + cp.pos_measurement_result_list = calloc_or_fail(1, sizeof(*cp.pos_measurement_result_list)); + f1ap_pos_measurement_result_list_t *list_orig = orig->pos_measurement_result_list; + f1ap_pos_measurement_result_list_t *list_cp = cp.pos_measurement_result_list; + uint32_t pos_meas_result_list_len = list_orig->pos_measurement_result_list_length; + list_cp->pos_measurement_result_list_length = pos_meas_result_list_len; + list_cp->pos_measurement_result_list_item = + calloc_or_fail(pos_meas_result_list_len, sizeof(*list_cp->pos_measurement_result_list_item)); + for (int i = 0; i < pos_meas_result_list_len; i++) { + f1ap_pos_measurement_result_list_item_t *item_cp = &list_cp->pos_measurement_result_list_item[i]; + f1ap_pos_measurement_result_list_item_t *item_orig = &list_orig->pos_measurement_result_list_item[i]; + item_cp->pos_measurement_result = cp_positioning_measurement_result(&item_orig->pos_measurement_result); + item_cp->trp_id = item_orig->trp_id; + } + + return cp; +} + +/** + * @brief F1 Positioning Measurement report equality check + */ +bool eq_positioning_measurement_report(const f1ap_positioning_measurement_report_t *a, + const f1ap_positioning_measurement_report_t *b) +{ + _F1_EQ_CHECK_INT(a->transaction_id, b->transaction_id); + _F1_EQ_CHECK_INT(a->lmf_measurement_id, b->lmf_measurement_id); + _F1_EQ_CHECK_INT(a->ran_measurement_id, b->ran_measurement_id); + + f1ap_pos_measurement_result_list_t *list_a = a->pos_measurement_result_list; + f1ap_pos_measurement_result_list_t *list_b = b->pos_measurement_result_list; + uint32_t pos_meas_result_list_len = list_a->pos_measurement_result_list_length; + _F1_EQ_CHECK_INT(list_b->pos_measurement_result_list_length, pos_meas_result_list_len); + for (int i = 0; i < pos_meas_result_list_len; i++) { + f1ap_pos_measurement_result_list_item_t *item_a = &list_a->pos_measurement_result_list_item[i]; + f1ap_pos_measurement_result_list_item_t *item_b = &list_b->pos_measurement_result_list_item[i]; + _F1_CHECK_EXP(eq_positioning_measurement_result(&item_a->pos_measurement_result, &item_b->pos_measurement_result)); + _F1_EQ_CHECK_INT(item_a->trp_id, item_b->trp_id); + } + + return true; +} + +/** + * @brief Free Allocated F1 Positioning Measurement report + */ +void free_positioning_measurement_report(f1ap_positioning_measurement_report_t *msg) +{ + f1ap_pos_measurement_result_list_t *list = msg->pos_measurement_result_list; + uint32_t pos_meas_result_list_len = list->pos_measurement_result_list_length; + for (int i = 0; i < pos_meas_result_list_len; i++) { + f1ap_pos_measurement_result_t *posMeasurementResult = &list->pos_measurement_result_list_item[i].pos_measurement_result; + uint32_t pos_meas_result_length = posMeasurementResult->pos_measurement_result_item_length; + for (int j = 0; j < pos_meas_result_length; j++) { + f1ap_pos_measurement_result_item_t *item = &posMeasurementResult->pos_measurement_result_item[j]; + f1ap_measured_results_value_t *measuredResultsValue = &item->measured_results_value; + if (measuredResultsValue->present == F1AP_MEASURED_RESULTS_VALUE_PR_UL_ANGLEOFARRIVAL) { + if (measuredResultsValue->choice.ul_angle_of_arrival.zenith_aoa) { + free(measuredResultsValue->choice.ul_angle_of_arrival.zenith_aoa); + } + if (measuredResultsValue->choice.ul_angle_of_arrival.lcs_to_gcs_translation_aoa) { + free(measuredResultsValue->choice.ul_angle_of_arrival.lcs_to_gcs_translation_aoa); + } + } + } + free(posMeasurementResult->pos_measurement_result_item); + } + free(msg->pos_measurement_result_list->pos_measurement_result_list_item); + free(msg->pos_measurement_result_list); +} + +/** + * @brief Encode F1 positioning measurement abort to ASN.1 + */ +F1AP_F1AP_PDU_t *encode_positioning_measurement_abort(const f1ap_positioning_measurement_abort_t *msg) +{ + F1AP_F1AP_PDU_t *pdu = calloc_or_fail(1, sizeof(*pdu)); + + /* Message Type */ + pdu->present = F1AP_F1AP_PDU_PR_initiatingMessage; + asn1cCalloc(pdu->choice.initiatingMessage, tmp); + tmp->procedureCode = F1AP_ProcedureCode_id_PositioningMeasurementAbort; + tmp->criticality = F1AP_Criticality_ignore; + tmp->value.present = F1AP_InitiatingMessage__value_PR_PositioningMeasurementAbort; + F1AP_PositioningMeasurementAbort_t *out = &tmp->value.choice.PositioningMeasurementAbort; + + /* mandatory : TransactionID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningMeasurementAbortIEs_t, ie1); + ie1->id = F1AP_ProtocolIE_ID_id_TransactionID; + ie1->criticality = F1AP_Criticality_reject; + ie1->value.present = F1AP_PositioningMeasurementAbortIEs__value_PR_TransactionID; + ie1->value.choice.TransactionID = msg->transaction_id; + + /* mandatory : LMF_MeasurementID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningMeasurementAbortIEs_t, ie2); + ie2->id = F1AP_ProtocolIE_ID_id_LMF_MeasurementID; + ie2->criticality = F1AP_Criticality_reject; + ie2->value.present = F1AP_PositioningMeasurementAbortIEs__value_PR_LMF_MeasurementID; + ie2->value.choice.LMF_MeasurementID = msg->lmf_measurement_id; + + /* mandatory : RAN_MeasurementID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningMeasurementAbortIEs_t, ie3); + ie3->id = F1AP_ProtocolIE_ID_id_RAN_MeasurementID; + ie3->criticality = F1AP_Criticality_reject; + ie3->value.present = F1AP_PositioningMeasurementAbortIEs__value_PR_RAN_MeasurementID; + ie3->value.choice.RAN_MeasurementID = msg->ran_measurement_id; + + return pdu; +} + +/** + * @brief Decode F1 positioning measurement abort + */ +bool decode_positioning_measurement_abort(const F1AP_F1AP_PDU_t *pdu, f1ap_positioning_measurement_abort_t *out) +{ + DevAssert(out != NULL); + memset(out, 0, sizeof(*out)); + + F1AP_PositioningMeasurementAbort_t *in = &pdu->choice.initiatingMessage->value.choice.PositioningMeasurementAbort; + F1AP_PositioningMeasurementAbortIEs_t *ie; + + F1AP_LIB_FIND_IE(F1AP_PositioningMeasurementAbortIEs_t, ie, &in->protocolIEs.list, F1AP_ProtocolIE_ID_id_TransactionID, true); + F1AP_LIB_FIND_IE(F1AP_PositioningMeasurementAbortIEs_t, ie, &in->protocolIEs.list, F1AP_ProtocolIE_ID_id_LMF_MeasurementID, true); + F1AP_LIB_FIND_IE(F1AP_PositioningMeasurementAbortIEs_t, ie, &in->protocolIEs.list, F1AP_ProtocolIE_ID_id_RAN_MeasurementID, true); + + for (int i = 0; i < in->protocolIEs.list.count; ++i) { + ie = in->protocolIEs.list.array[i]; + AssertError(ie != NULL, return false, "in->protocolIEs.list.array[i] is NULL"); + switch (ie->id) { + case F1AP_ProtocolIE_ID_id_TransactionID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningMeasurementAbortIEs__value_PR_TransactionID); + out->transaction_id = ie->value.choice.TransactionID; + break; + case F1AP_ProtocolIE_ID_id_LMF_MeasurementID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningMeasurementAbortIEs__value_PR_LMF_MeasurementID); + out->lmf_measurement_id = ie->value.choice.LMF_MeasurementID; + break; + case F1AP_ProtocolIE_ID_id_RAN_MeasurementID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningMeasurementAbortIEs__value_PR_RAN_MeasurementID); + out->ran_measurement_id = ie->value.choice.RAN_MeasurementID; + break; + default: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld unknown, skipping\n", ie->id); + break; + } + } + + return true; +} + +/** + * @brief F1 positioning measurement abort deep copy + */ +f1ap_positioning_measurement_abort_t cp_positioning_measurement_abort(const f1ap_positioning_measurement_abort_t *orig) +{ + /* copy all mandatory fields that are not dynamic memory */ + f1ap_positioning_measurement_abort_t cp = { + .transaction_id = orig->transaction_id, + .lmf_measurement_id = orig->lmf_measurement_id, + .ran_measurement_id = orig->ran_measurement_id, + }; + + return cp; +} + +/** + * @brief F1 positioning measurement abort equality check + */ +bool eq_positioning_measurement_abort(const f1ap_positioning_measurement_abort_t *a, const f1ap_positioning_measurement_abort_t *b) +{ + _F1_EQ_CHECK_INT(a->transaction_id, b->transaction_id); + _F1_EQ_CHECK_INT(a->lmf_measurement_id, b->lmf_measurement_id); + _F1_EQ_CHECK_INT(a->ran_measurement_id, b->ran_measurement_id); + + return true; +} + +/** + * @brief Free Allocated F1 positioning measurement abort + */ +void free_positioning_measurement_abort(f1ap_positioning_measurement_abort_t *msg) +{ + // nothing to free +} + +/** + * @brief Encode F1 positioning measurement failure indication to ASN.1 + */ +F1AP_F1AP_PDU_t *encode_positioning_measurement_failure_indication(const f1ap_positioning_measurement_failure_indication_t *msg) +{ + F1AP_F1AP_PDU_t *pdu = calloc_or_fail(1, sizeof(*pdu)); + + /* Message Type */ + pdu->present = F1AP_F1AP_PDU_PR_initiatingMessage; + asn1cCalloc(pdu->choice.initiatingMessage, tmp); + tmp->procedureCode = F1AP_ProcedureCode_id_PositioningMeasurementFailureIndication; + tmp->criticality = F1AP_Criticality_ignore; + tmp->value.present = F1AP_InitiatingMessage__value_PR_PositioningMeasurementFailureIndication; + F1AP_PositioningMeasurementFailureIndication_t *out = &tmp->value.choice.PositioningMeasurementFailureIndication; + + /* mandatory : TransactionID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningMeasurementFailureIndicationIEs_t, ie1); + ie1->id = F1AP_ProtocolIE_ID_id_TransactionID; + ie1->criticality = F1AP_Criticality_reject; + ie1->value.present = F1AP_PositioningMeasurementFailureIndicationIEs__value_PR_TransactionID; + ie1->value.choice.TransactionID = msg->transaction_id; + + /* mandatory : LMF_MeasurementID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningMeasurementFailureIndicationIEs_t, ie2); + ie2->id = F1AP_ProtocolIE_ID_id_LMF_MeasurementID; + ie2->criticality = F1AP_Criticality_reject; + ie2->value.present = F1AP_PositioningMeasurementFailureIndicationIEs__value_PR_LMF_MeasurementID; + ie2->value.choice.LMF_MeasurementID = msg->lmf_measurement_id; + + /* mandatory : RAN_MeasurementID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningMeasurementFailureIndicationIEs_t, ie3); + ie3->id = F1AP_ProtocolIE_ID_id_RAN_MeasurementID; + ie3->criticality = F1AP_Criticality_reject; + ie3->value.present = F1AP_PositioningMeasurementFailureIndicationIEs__value_PR_RAN_MeasurementID; + ie3->value.choice.RAN_MeasurementID = msg->ran_measurement_id; + + /* mandatory : Cause */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningMeasurementFailureIndicationIEs_t, ie4); + ie4->id = F1AP_ProtocolIE_ID_id_Cause; + ie4->criticality = F1AP_Criticality_ignore; + ie4->value.present = F1AP_PositioningMeasurementFailureIndicationIEs__value_PR_Cause; + ie4->value.choice.Cause = encode_f1ap_cause(msg->cause, msg->cause_value); + + return pdu; +} + +/** + * @brief Decode F1 positioning measurement failure indication + */ +bool decode_positioning_measurement_failure_indication(const F1AP_F1AP_PDU_t *pdu, + f1ap_positioning_measurement_failure_indication_t *out) +{ + DevAssert(out != NULL); + memset(out, 0, sizeof(*out)); + + F1AP_PositioningMeasurementFailureIndication_t *in = + &pdu->choice.initiatingMessage->value.choice.PositioningMeasurementFailureIndication; + F1AP_PositioningMeasurementFailureIndicationIEs_t *ie; + + F1AP_LIB_FIND_IE(F1AP_PositioningMeasurementFailureIndicationIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_TransactionID, + true); + F1AP_LIB_FIND_IE(F1AP_PositioningMeasurementFailureIndicationIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_LMF_MeasurementID, + true); + F1AP_LIB_FIND_IE(F1AP_PositioningMeasurementFailureIndicationIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_RAN_MeasurementID, + true); + F1AP_LIB_FIND_IE(F1AP_PositioningMeasurementFailureIndicationIEs_t, ie, &in->protocolIEs.list, F1AP_ProtocolIE_ID_id_Cause, true); + + for (int i = 0; i < in->protocolIEs.list.count; ++i) { + ie = in->protocolIEs.list.array[i]; + AssertError(ie != NULL, return false, "in->protocolIEs.list.array[i] is NULL"); + switch (ie->id) { + case F1AP_ProtocolIE_ID_id_TransactionID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningMeasurementFailureIndicationIEs__value_PR_TransactionID); + out->transaction_id = ie->value.choice.TransactionID; + break; + case F1AP_ProtocolIE_ID_id_LMF_MeasurementID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningMeasurementFailureIndicationIEs__value_PR_LMF_MeasurementID); + out->lmf_measurement_id = ie->value.choice.LMF_MeasurementID; + break; + case F1AP_ProtocolIE_ID_id_RAN_MeasurementID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningMeasurementFailureIndicationIEs__value_PR_RAN_MeasurementID); + out->ran_measurement_id = ie->value.choice.RAN_MeasurementID; + break; + case F1AP_ProtocolIE_ID_id_Cause: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningMeasurementFailureIndicationIEs__value_PR_Cause); + _F1_CHECK_EXP(decode_f1ap_cause(ie->value.choice.Cause, &out->cause, &out->cause_value)); + break; + default: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld unknown, skipping\n", ie->id); + break; + } + } + + return true; +} + +/** + * @brief F1 positioning measurement failure indication deep copy + */ +f1ap_positioning_measurement_failure_indication_t cp_positioning_measurement_failure_indication( + const f1ap_positioning_measurement_failure_indication_t *orig) +{ + /* copy all mandatory fields that are not dynamic memory */ + f1ap_positioning_measurement_failure_indication_t cp = { + .transaction_id = orig->transaction_id, + .lmf_measurement_id = orig->lmf_measurement_id, + .ran_measurement_id = orig->ran_measurement_id, + .cause = orig->cause, + .cause_value = orig->cause_value, + }; + + return cp; +} + +/** + * @brief F1 positioning measurement failure indication equality check + */ +bool eq_positioning_measurement_failure_indication(const f1ap_positioning_measurement_failure_indication_t *a, + const f1ap_positioning_measurement_failure_indication_t *b) +{ + _F1_EQ_CHECK_INT(a->transaction_id, b->transaction_id); + _F1_EQ_CHECK_INT(a->lmf_measurement_id, b->lmf_measurement_id); + _F1_EQ_CHECK_INT(a->ran_measurement_id, b->ran_measurement_id); + _F1_EQ_CHECK_INT(a->cause, b->cause); + _F1_EQ_CHECK_LONG(a->cause_value, b->cause_value); + + return true; +} + +/** + * @brief Free Allocated F1 positioning measurement failure indication + */ +void free_positioning_measurement_failure_indication(f1ap_positioning_measurement_failure_indication_t *msg) +{ + // nothing to free +} + +/** + * @brief Encode F1 positioning measurement update to ASN.1 + */ +F1AP_F1AP_PDU_t *encode_positioning_measurement_update(const f1ap_positioning_measurement_update_t *msg) +{ + F1AP_F1AP_PDU_t *pdu = calloc_or_fail(1, sizeof(*pdu)); + + /* Message Type */ + pdu->present = F1AP_F1AP_PDU_PR_initiatingMessage; + asn1cCalloc(pdu->choice.initiatingMessage, tmp); + tmp->procedureCode = F1AP_ProcedureCode_id_PositioningMeasurementUpdate; + tmp->criticality = F1AP_Criticality_ignore; + tmp->value.present = F1AP_InitiatingMessage__value_PR_PositioningMeasurementUpdate; + F1AP_PositioningMeasurementUpdate_t *out = &tmp->value.choice.PositioningMeasurementUpdate; + + /* mandatory : TransactionID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningMeasurementUpdateIEs_t, ie1); + ie1->id = F1AP_ProtocolIE_ID_id_TransactionID; + ie1->criticality = F1AP_Criticality_reject; + ie1->value.present = F1AP_PositioningMeasurementUpdateIEs__value_PR_TransactionID; + ie1->value.choice.TransactionID = msg->transaction_id; + + /* mandatory : LMF_MeasurementID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningMeasurementUpdateIEs_t, ie2); + ie2->id = F1AP_ProtocolIE_ID_id_LMF_MeasurementID; + ie2->criticality = F1AP_Criticality_reject; + ie2->value.present = F1AP_PositioningMeasurementUpdateIEs__value_PR_LMF_MeasurementID; + ie2->value.choice.LMF_MeasurementID = msg->lmf_measurement_id; + + /* mandatory : RAN_MeasurementID */ + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningMeasurementUpdateIEs_t, ie3); + ie3->id = F1AP_ProtocolIE_ID_id_RAN_MeasurementID; + ie3->criticality = F1AP_Criticality_reject; + ie3->value.present = F1AP_PositioningMeasurementUpdateIEs__value_PR_RAN_MeasurementID; + ie3->value.choice.RAN_MeasurementID = msg->ran_measurement_id; + + /* optional: SRS Configuration */ + if (msg->srs_configuration) { + asn1cSequenceAdd(out->protocolIEs.list, F1AP_PositioningMeasurementUpdateIEs_t, ie4); + ie4->id = F1AP_ProtocolIE_ID_id_SRSConfiguration; + ie4->criticality = F1AP_Criticality_ignore; + ie4->value.present = F1AP_PositioningMeasurementUpdateIEs__value_PR_SRSConfiguration; + f1ap_srs_carrier_list_t *srs_carrier_list = &msg->srs_configuration->srs_carrier_list; + ie4->value.choice.SRSConfiguration.sRSCarrier_List = encode_srs_carrier_list(srs_carrier_list); + } + + return pdu; +} + +/** + * @brief Decode F1 Positioning Measurement Update + */ +bool decode_positioning_measurement_update(const F1AP_F1AP_PDU_t *pdu, f1ap_positioning_measurement_update_t *out) +{ + DevAssert(out != NULL); + memset(out, 0, sizeof(*out)); + + F1AP_PositioningMeasurementUpdate_t *in = &pdu->choice.initiatingMessage->value.choice.PositioningMeasurementUpdate; + F1AP_PositioningMeasurementUpdateIEs_t *ie; + + F1AP_LIB_FIND_IE(F1AP_PositioningMeasurementUpdateIEs_t, ie, &in->protocolIEs.list, F1AP_ProtocolIE_ID_id_TransactionID, true); + F1AP_LIB_FIND_IE(F1AP_PositioningMeasurementUpdateIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_LMF_MeasurementID, + true); + F1AP_LIB_FIND_IE(F1AP_PositioningMeasurementUpdateIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_RAN_MeasurementID, + true); + F1AP_LIB_FIND_IE(F1AP_PositioningMeasurementUpdateIEs_t, + ie, + &in->protocolIEs.list, + F1AP_ProtocolIE_ID_id_SRSConfiguration, + false); + + for (int i = 0; i < in->protocolIEs.list.count; ++i) { + ie = in->protocolIEs.list.array[i]; + AssertError(ie != NULL, return false, "in->protocolIEs.list.array[i] is NULL"); + switch (ie->id) { + case F1AP_ProtocolIE_ID_id_TransactionID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningMeasurementUpdateIEs__value_PR_TransactionID); + out->transaction_id = ie->value.choice.TransactionID; + break; + case F1AP_ProtocolIE_ID_id_LMF_MeasurementID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningMeasurementUpdateIEs__value_PR_LMF_MeasurementID); + out->lmf_measurement_id = ie->value.choice.LMF_MeasurementID; + break; + case F1AP_ProtocolIE_ID_id_RAN_MeasurementID: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningMeasurementUpdateIEs__value_PR_RAN_MeasurementID); + out->ran_measurement_id = ie->value.choice.RAN_MeasurementID; + break; + case F1AP_ProtocolIE_ID_id_SRSConfiguration: + _F1_EQ_CHECK_INT(ie->value.present, F1AP_PositioningMeasurementUpdateIEs__value_PR_SRSConfiguration); + F1AP_SRSCarrier_List_t *f1_sRSCarrier_List = &ie->value.choice.SRSConfiguration.sRSCarrier_List; + out->srs_configuration = calloc_or_fail(1, sizeof(*out->srs_configuration)); + f1ap_srs_carrier_list_t *srs_carrier_list = &out->srs_configuration->srs_carrier_list; + decode_srs_carrier_list(srs_carrier_list, f1_sRSCarrier_List); + break; + default: + PRINT_ERROR("F1AP_ProtocolIE_ID_id %ld unknown, skipping\n", ie->id); + break; + } + } + + return true; +} + +/** + * @brief F1 Positioning Measurement Update deep copy + */ +f1ap_positioning_measurement_update_t cp_positioning_measurement_update(const f1ap_positioning_measurement_update_t *orig) +{ + // copy all mandatory fields that are not dynamic memory + f1ap_positioning_measurement_update_t cp = { + .transaction_id = orig->transaction_id, + .lmf_measurement_id = orig->lmf_measurement_id, + .ran_measurement_id = orig->ran_measurement_id, + }; + + /* optional: SRS Configuration */ + if (orig->srs_configuration) { + cp.srs_configuration = calloc_or_fail(1, sizeof(*cp.srs_configuration)); + f1ap_srs_carrier_list_t *srs_carrier_list_cp = &cp.srs_configuration->srs_carrier_list; + f1ap_srs_carrier_list_t *srs_carrier_list = &orig->srs_configuration->srs_carrier_list; + *srs_carrier_list_cp = cp_srs_carrier_list(srs_carrier_list); + } + + return cp; +} + +/** + * @brief F1 Positioning Measurement Update equality check + */ +bool eq_positioning_measurement_update(const f1ap_positioning_measurement_update_t *a, + const f1ap_positioning_measurement_update_t *b) +{ + _F1_EQ_CHECK_INT(a->transaction_id, b->transaction_id); + _F1_EQ_CHECK_INT(a->lmf_measurement_id, b->lmf_measurement_id); + _F1_EQ_CHECK_INT(a->ran_measurement_id, b->ran_measurement_id); + + /* optional: SRS Configuration */ + if ((a->srs_configuration == NULL) != (b->srs_configuration == NULL)) { + return false; + } + if (a->srs_configuration) { + f1ap_srs_carrier_list_t *srs_carrier_list_a = &a->srs_configuration->srs_carrier_list; + f1ap_srs_carrier_list_t *srs_carrier_list_b = &b->srs_configuration->srs_carrier_list; + _F1_CHECK_EXP(eq_srs_carrier_list(srs_carrier_list_a, srs_carrier_list_b)); + } + + return true; +} + +/** + * @brief Free Allocated F1 Positioning Measurement Update + */ +void free_positioning_measurement_update(f1ap_positioning_measurement_update_t *msg) +{ + /* SRS Configuration */ + if (msg->srs_configuration) { + f1ap_srs_carrier_list_t *srs_carrier_list = &msg->srs_configuration->srs_carrier_list; + free_srs_carrier_list(srs_carrier_list); + free(msg->srs_configuration); + } +} diff --git a/openair2/F1AP/lib/f1ap_positioning.h b/openair2/F1AP/lib/f1ap_positioning.h new file mode 100644 index 0000000000..585f3f5a81 --- /dev/null +++ b/openair2/F1AP/lib/f1ap_positioning.h @@ -0,0 +1,165 @@ +/* + * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The OpenAirInterface Software Alliance licenses this file to You under + * the OAI Public License, Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.openairinterface.org/?page_id=698 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *------------------------------------------------------------------------------- + * For more information about the OpenAirInterface (OAI) Software Alliance: + * contact@openairinterface.org + */ + +#ifndef F1AP_POSITIONING_H_ +#define F1AP_POSITIONING_H_ + +#include +#include "f1ap_messages_types.h" + +struct F1AP_F1AP_PDU; + +// positioning information request +struct F1AP_F1AP_PDU *encode_positioning_information_req(const f1ap_positioning_information_req_t *msg); +bool decode_positioning_information_req(const struct F1AP_F1AP_PDU *pdu, f1ap_positioning_information_req_t *out); +f1ap_positioning_information_req_t cp_positioning_information_req(const f1ap_positioning_information_req_t *orig); +bool eq_positioning_information_req(const f1ap_positioning_information_req_t *a, const f1ap_positioning_information_req_t *b); +void free_positioning_information_req(f1ap_positioning_information_req_t *msg); + +// positioning information response +struct F1AP_F1AP_PDU *encode_positioning_information_resp(const f1ap_positioning_information_resp_t *msg); +bool decode_positioning_information_resp(const struct F1AP_F1AP_PDU *pdu, f1ap_positioning_information_resp_t *out); +f1ap_positioning_information_resp_t cp_positioning_information_resp(const f1ap_positioning_information_resp_t *orig); +bool eq_positioning_information_resp(const f1ap_positioning_information_resp_t *a, const f1ap_positioning_information_resp_t *b); +void free_positioning_information_resp(f1ap_positioning_information_resp_t *msg); + +// positioning information failure +struct F1AP_F1AP_PDU *encode_positioning_information_failure(const f1ap_positioning_information_failure_t *msg); +bool decode_positioning_information_failure(const struct F1AP_F1AP_PDU *pdu, f1ap_positioning_information_failure_t *out); +f1ap_positioning_information_failure_t cp_positioning_information_failure(const f1ap_positioning_information_failure_t *orig); +bool eq_positioning_information_failure(const f1ap_positioning_information_failure_t *a, + const f1ap_positioning_information_failure_t *b); +void free_positioning_information_failure(f1ap_positioning_information_failure_t *msg); + +// positioning activation request +struct F1AP_F1AP_PDU *encode_positioning_activation_req(const f1ap_positioning_activation_req_t *msg); +bool decode_positioning_activation_req(const struct F1AP_F1AP_PDU *pdu, f1ap_positioning_activation_req_t *out); +f1ap_positioning_activation_req_t cp_positioning_activation_req(const f1ap_positioning_activation_req_t *orig); +bool eq_positioning_activation_req(const f1ap_positioning_activation_req_t *a, const f1ap_positioning_activation_req_t *b); +void free_positioning_activation_req(f1ap_positioning_activation_req_t *msg); + +// positioning activation response +struct F1AP_F1AP_PDU *encode_positioning_activation_resp(const f1ap_positioning_activation_resp_t *msg); +bool decode_positioning_activation_resp(const struct F1AP_F1AP_PDU *pdu, f1ap_positioning_activation_resp_t *out); +f1ap_positioning_activation_resp_t cp_positioning_activation_resp(const f1ap_positioning_activation_resp_t *orig); +bool eq_positioning_activation_resp(const f1ap_positioning_activation_resp_t *a, const f1ap_positioning_activation_resp_t *b); +void free_positioning_activation_resp(f1ap_positioning_activation_resp_t *msg); + +// positioning activation failure +struct F1AP_F1AP_PDU *encode_positioning_activation_failure(const f1ap_positioning_activation_failure_t *msg); +bool decode_positioning_activation_failure(const struct F1AP_F1AP_PDU *pdu, f1ap_positioning_activation_failure_t *out); +f1ap_positioning_activation_failure_t cp_positioning_activation_failure(const f1ap_positioning_activation_failure_t *orig); +bool eq_positioning_activation_failure(const f1ap_positioning_activation_failure_t *a, + const f1ap_positioning_activation_failure_t *b); +void free_positioning_activation_failure(f1ap_positioning_activation_failure_t *msg); + +// positioning deactivation +struct F1AP_F1AP_PDU *encode_positioning_deactivation(const f1ap_positioning_deactivation_t *msg); +bool decode_positioning_deactivation(const struct F1AP_F1AP_PDU *pdu, f1ap_positioning_deactivation_t *out); +f1ap_positioning_deactivation_t cp_positioning_deactivation(const f1ap_positioning_deactivation_t *orig); +bool eq_positioning_deactivation(const f1ap_positioning_deactivation_t *a, const f1ap_positioning_deactivation_t *b); +void free_positioning_deactivation(f1ap_positioning_deactivation_t *msg); + +// positioning information update +struct F1AP_F1AP_PDU *encode_positioning_information_update(const f1ap_positioning_information_update_t *msg); +bool decode_positioning_information_update(const struct F1AP_F1AP_PDU *pdu, f1ap_positioning_information_update_t *out); +f1ap_positioning_information_update_t cp_positioning_information_update(const f1ap_positioning_information_update_t *orig); +bool eq_positioning_information_update(const f1ap_positioning_information_update_t *a, + const f1ap_positioning_information_update_t *b); +void free_positioning_information_update(f1ap_positioning_information_update_t *msg); + +// trp information request +struct F1AP_F1AP_PDU *encode_trp_information_req(const f1ap_trp_information_req_t *msg); +bool decode_trp_information_req(const struct F1AP_F1AP_PDU *pdu, f1ap_trp_information_req_t *out); +f1ap_trp_information_req_t cp_trp_information_req(const f1ap_trp_information_req_t *orig); +bool eq_trp_information_req(const f1ap_trp_information_req_t *a, const f1ap_trp_information_req_t *b); +void free_trp_information_req(f1ap_trp_information_req_t *msg); + +// trp information response +struct F1AP_F1AP_PDU *encode_trp_information_resp(const f1ap_trp_information_resp_t *msg); +bool decode_trp_information_resp(const struct F1AP_F1AP_PDU *pdu, f1ap_trp_information_resp_t *out); +f1ap_trp_information_resp_t cp_trp_information_resp(const f1ap_trp_information_resp_t *orig); +bool eq_trp_information_resp(const f1ap_trp_information_resp_t *a, const f1ap_trp_information_resp_t *b); +void free_trp_information_resp(f1ap_trp_information_resp_t *msg); + +// trp information failure +struct F1AP_F1AP_PDU *encode_trp_information_failure(const f1ap_trp_information_failure_t *msg); +bool decode_trp_information_failure(const struct F1AP_F1AP_PDU *pdu, f1ap_trp_information_failure_t *out); +f1ap_trp_information_failure_t cp_trp_information_failure(const f1ap_trp_information_failure_t *orig); +bool eq_trp_information_failure(const f1ap_trp_information_failure_t *a, const f1ap_trp_information_failure_t *b); +void free_trp_information_failure(f1ap_trp_information_failure_t *msg); + +// positioning measurement request +struct F1AP_F1AP_PDU *encode_positioning_measurement_req(const f1ap_positioning_measurement_req_t *msg); +bool decode_positioning_measurement_req(const struct F1AP_F1AP_PDU *pdu, f1ap_positioning_measurement_req_t *out); +f1ap_positioning_measurement_req_t cp_positioning_measurement_req(const f1ap_positioning_measurement_req_t *orig); +bool eq_positioning_measurement_req(const f1ap_positioning_measurement_req_t *a, const f1ap_positioning_measurement_req_t *b); +void free_positioning_measurement_req(f1ap_positioning_measurement_req_t *msg); + +// positioning measurement response +struct F1AP_F1AP_PDU *encode_positioning_measurement_resp(const f1ap_positioning_measurement_resp_t *msg); +bool decode_positioning_measurement_resp(const struct F1AP_F1AP_PDU *pdu, f1ap_positioning_measurement_resp_t *out); +f1ap_positioning_measurement_resp_t cp_positioning_measurement_resp(const f1ap_positioning_measurement_resp_t *orig); +bool eq_positioning_measurement_resp(const f1ap_positioning_measurement_resp_t *a, const f1ap_positioning_measurement_resp_t *b); +void free_positioning_measurement_resp(f1ap_positioning_measurement_resp_t *msg); + +// positioning measurement failure +struct F1AP_F1AP_PDU *encode_positioning_measurement_failure(const f1ap_positioning_measurement_failure_t *msg); +bool decode_positioning_measurement_failure(const struct F1AP_F1AP_PDU *pdu, f1ap_positioning_measurement_failure_t *out); +f1ap_positioning_measurement_failure_t cp_positioning_measurement_failure(const f1ap_positioning_measurement_failure_t *orig); +bool eq_positioning_measurement_failure(const f1ap_positioning_measurement_failure_t *a, + const f1ap_positioning_measurement_failure_t *b); +void free_positioning_measurement_failure(f1ap_positioning_measurement_failure_t *msg); + +// positioning measurement report +struct F1AP_F1AP_PDU *encode_positioning_measurement_report(const f1ap_positioning_measurement_report_t *msg); +bool decode_positioning_measurement_report(const struct F1AP_F1AP_PDU *pdu, f1ap_positioning_measurement_report_t *out); +f1ap_positioning_measurement_report_t cp_positioning_measurement_report(const f1ap_positioning_measurement_report_t *orig); +bool eq_positioning_measurement_report(const f1ap_positioning_measurement_report_t *a, + const f1ap_positioning_measurement_report_t *b); +void free_positioning_measurement_report(f1ap_positioning_measurement_report_t *msg); + +// positioning measurement abort +struct F1AP_F1AP_PDU *encode_positioning_measurement_abort(const f1ap_positioning_measurement_abort_t *msg); +bool decode_positioning_measurement_abort(const struct F1AP_F1AP_PDU *pdu, f1ap_positioning_measurement_abort_t *out); +f1ap_positioning_measurement_abort_t cp_positioning_measurement_abort(const f1ap_positioning_measurement_abort_t *orig); +bool eq_positioning_measurement_abort(const f1ap_positioning_measurement_abort_t *a, const f1ap_positioning_measurement_abort_t *b); +void free_positioning_measurement_abort(f1ap_positioning_measurement_abort_t *msg); + +// positioning measurement failure indication +struct F1AP_F1AP_PDU *encode_positioning_measurement_failure_indication( + const f1ap_positioning_measurement_failure_indication_t *msg); +bool decode_positioning_measurement_failure_indication(const struct F1AP_F1AP_PDU *pdu, + f1ap_positioning_measurement_failure_indication_t *out); +f1ap_positioning_measurement_failure_indication_t cp_positioning_measurement_failure_indication( + const f1ap_positioning_measurement_failure_indication_t *orig); +bool eq_positioning_measurement_failure_indication(const f1ap_positioning_measurement_failure_indication_t *a, + const f1ap_positioning_measurement_failure_indication_t *b); +void free_positioning_measurement_failure_indication(f1ap_positioning_measurement_failure_indication_t *msg); + +// positioning measurement update +struct F1AP_F1AP_PDU *encode_positioning_measurement_update(const f1ap_positioning_measurement_update_t *msg); +bool decode_positioning_measurement_update(const struct F1AP_F1AP_PDU *pdu, f1ap_positioning_measurement_update_t *out); +f1ap_positioning_measurement_update_t cp_positioning_measurement_update(const f1ap_positioning_measurement_update_t *orig); +bool eq_positioning_measurement_update(const f1ap_positioning_measurement_update_t *a, + const f1ap_positioning_measurement_update_t *b); +void free_positioning_measurement_update(f1ap_positioning_measurement_update_t *msg); +#endif /* F1AP_POSITIONING_H_ */ diff --git a/openair2/F1AP/lib/f1ap_rrc_message_transfer.c b/openair2/F1AP/lib/f1ap_rrc_message_transfer.c index c2f6e780aa..e08f2b2977 100644 --- a/openair2/F1AP/lib/f1ap_rrc_message_transfer.c +++ b/openair2/F1AP/lib/f1ap_rrc_message_transfer.c @@ -114,7 +114,7 @@ bool decode_initial_ul_rrc_message_transfer(const F1AP_F1AP_PDU_t *pdu, f1ap_ini memset(out, 0, sizeof(*out)); F1AP_InitialULRRCMessageTransfer_t *container = &pdu->choice.initiatingMessage->value.choice.InitialULRRCMessageTransfer; - F1AP_ProtocolIE_Container_10659P31_t *pIEs = &container->protocolIEs; + F1AP_ProtocolIE_Container_10986P31_t *pIEs = &container->protocolIEs; F1AP_InitialULRRCMessageTransferIEs_t *ie; F1AP_LIB_FIND_IE(F1AP_InitialULRRCMessageTransferIEs_t, ie, &pIEs->list, F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID, true); @@ -259,7 +259,7 @@ bool decode_ul_rrc_message_transfer(const F1AP_F1AP_PDU_t *pdu, f1ap_ul_rrc_mess DevAssert(pdu != NULL); F1AP_ULRRCMessageTransfer_t *container = &pdu->choice.initiatingMessage->value.choice.ULRRCMessageTransfer; - F1AP_ProtocolIE_Container_10659P33_t *pIEs = &container->protocolIEs; + F1AP_ProtocolIE_Container_10986P33_t *pIEs = &container->protocolIEs; F1AP_ULRRCMessageTransferIEs_t *ie; // gNB-CU UE F1AP ID (M) @@ -394,7 +394,7 @@ bool decode_dl_rrc_message_transfer(const F1AP_F1AP_PDU_t *pdu, f1ap_dl_rrc_mess DevAssert(pdu != NULL); F1AP_DLRRCMessageTransfer_t *container = &pdu->choice.initiatingMessage->value.choice.DLRRCMessageTransfer; - F1AP_ProtocolIE_Container_10659P32_t *pIEs = &container->protocolIEs; + F1AP_ProtocolIE_Container_10986P32_t *pIEs = &container->protocolIEs; F1AP_DLRRCMessageTransferIEs_t *ie; // gNB-CU UE F1AP ID (M) F1AP_LIB_FIND_IE(F1AP_DLRRCMessageTransferIEs_t, ie, &pIEs->list, F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID, true); diff --git a/openair2/F1AP/lib/f1ap_ue_context.c b/openair2/F1AP/lib/f1ap_ue_context.c index 9d8cbfe15f..829cdacdfb 100644 --- a/openair2/F1AP/lib/f1ap_ue_context.c +++ b/openair2/F1AP/lib/f1ap_ue_context.c @@ -57,7 +57,7 @@ static F1AP_CUtoDURRCInformation_t encode_cu_to_du_rrc_info(const f1ap_cu_to_du_ } /* optional: HandoverPreparationInformation */ - F1AP_ProtocolExtensionContainer_10696P60_t *p = NULL; + F1AP_ProtocolExtensionContainer_11023P60_t *p = NULL; if (cu2du->ho_prep_info) { p = calloc_or_fail(1, sizeof(*p)); enc.iE_Extensions = (struct F1AP_ProtocolExtensionContainer *)p; @@ -104,7 +104,7 @@ static bool decode_cu_to_du_rrc_info(f1ap_cu_to_du_rrc_info_t *dec, const F1AP_C *dec->meas_config = create_byte_array(mc->size, (uint8_t*)mc->buf); } if (cu2du->iE_Extensions) { - const F1AP_ProtocolExtensionContainer_10696P60_t *ext = (const F1AP_ProtocolExtensionContainer_10696P60_t *)cu2du->iE_Extensions; + const F1AP_ProtocolExtensionContainer_11023P60_t *ext = (const F1AP_ProtocolExtensionContainer_11023P60_t *)cu2du->iE_Extensions; for (int i = 0; i < ext->list.count; ++i) { const F1AP_CUtoDURRCInformation_ExtIEs_t *cu2du_info_ext = ext->list.array[i]; switch (cu2du_info_ext->id) { @@ -689,7 +689,7 @@ static F1AP_DRBs_ToBeSetup_List_t encode_drbs_to_setup(int n, const f1ap_drb_to_ it->rLCMode = rlc_mode_to_asn1(drb->rlc_mode); - F1AP_ProtocolExtensionContainer_10696P82_t *ext = calloc_or_fail(1, sizeof(*ext)); + F1AP_ProtocolExtensionContainer_11023P82_t *ext = calloc_or_fail(1, sizeof(*ext)); it->iE_Extensions = (struct F1AP_ProtocolExtensionContainer *)ext; asn1cSequenceAdd(ext->list, F1AP_DRBs_ToBeSetup_ItemExtIEs_t, ext_ie); ext_ie->id = F1AP_ProtocolIE_ID_id_DLPDCPSNLength; @@ -746,7 +746,7 @@ static F1AP_DRBs_ToBeSetupMod_List_t encode_drbs_to_setupmod(int n, const f1ap_d if (!drb->dl_pdcp_sn_len && !drb->ul_pdcp_sn_len) continue; - F1AP_ProtocolExtensionContainer_10696P83_t *ext = calloc_or_fail(1, sizeof(*ext)); + F1AP_ProtocolExtensionContainer_11023P82_t *ext = calloc_or_fail(1, sizeof(*ext)); it->iE_Extensions = (struct F1AP_ProtocolExtensionContainer *)ext; if (drb->dl_pdcp_sn_len) { asn1cSequenceAdd(ext->list, F1AP_DRBs_ToBeSetupMod_ItemExtIEs_t, ext_ie); @@ -804,7 +804,7 @@ static bool decode_drbs_to_setup(const F1AP_DRBs_ToBeSetup_List_t *f1ap, int *n, _F1_CHECK_EXP(rlc_mode_from_asn1(it->rLCMode, &drb->rlc_mode)); _F1_CHECK_EXP(it->iE_Extensions); // PDCP SN length is under extension, is mandatory - const F1AP_ProtocolExtensionContainer_10696P82_t *ext = (const F1AP_ProtocolExtensionContainer_10696P82_t *)it->iE_Extensions; + const F1AP_ProtocolExtensionContainer_11023P82_t *ext = (const F1AP_ProtocolExtensionContainer_11023P82_t *)it->iE_Extensions; const F1AP_DRBs_ToBeSetup_ItemExtIEs_t *ie; F1AP_LIB_FIND_IE(F1AP_DRBs_ToBeSetup_ItemExtIEs_t, ie, &ext->list, F1AP_ProtocolIE_ID_id_DLPDCPSNLength, true); @@ -870,7 +870,7 @@ static bool decode_drbs_to_setupmod(const F1AP_DRBs_ToBeSetupMod_List_t *f1ap, i if (!it->iE_Extensions) continue; - const F1AP_ProtocolExtensionContainer_10696P83_t *ext = (const F1AP_ProtocolExtensionContainer_10696P83_t *)it->iE_Extensions; + const F1AP_ProtocolExtensionContainer_11023P83_t *ext = (const F1AP_ProtocolExtensionContainer_11023P83_t *)it->iE_Extensions; const F1AP_DRBs_ToBeSetupMod_ItemExtIEs_t *ie; for (int j = 0; j < ext->list.count; ++j) { diff --git a/openair2/F1AP/tests/f1ap_lib_test.c b/openair2/F1AP/tests/f1ap_lib_test.c index 72ea809245..75fa75bcc1 100644 --- a/openair2/F1AP/tests/f1ap_lib_test.c +++ b/openair2/F1AP/tests/f1ap_lib_test.c @@ -43,6 +43,7 @@ #include "lib/f1ap_rrc_message_transfer.h" #include "lib/f1ap_interface_management.h" #include "lib/f1ap_ue_context.h" +#include "lib/f1ap_positioning.h" void exit_function(const char *file, const char *function, const int line, const char *s, const int assert) { @@ -1268,6 +1269,1100 @@ static void test_f1ap_ue_context_release_complete() printf("%s() successful\n", __func__); } +static void test_f1ap_positioning_information_request() +{ + f1ap_positioning_information_req_t orig = { + .gNB_CU_ue_id = 12, + .gNB_DU_ue_id = 19, + }; + F1AP_F1AP_PDU_t *f1enc = encode_positioning_information_req(&orig); + F1AP_F1AP_PDU_t *f1dec = f1ap_encode_decode(f1enc); + f1ap_msg_free(f1enc); + + f1ap_positioning_information_req_t decoded = {0}; + bool ret = decode_positioning_information_req(f1dec, &decoded); + AssertFatal(ret, "decode_positioning_information_req(): could not decode message\n"); + f1ap_msg_free(f1dec); + + ret = eq_positioning_information_req(&orig, &decoded); + AssertFatal(ret, "eq_positioning_information_req(): decoded message doesn't match\n"); + free_positioning_information_req(&decoded); + + f1ap_positioning_information_req_t cp = cp_positioning_information_req(&orig); + ret = eq_positioning_information_req(&orig, &cp); + AssertFatal(ret, "eq_positioning_information_req(): copied message doesn't match\n"); + free_positioning_information_req(&orig); + free_positioning_information_req(&cp); + + printf("%s() successful\n", __func__); +} + +static void fill_srs_carrier_list(f1ap_srs_carrier_list_t *srs_carrier_list) +{ + uint32_t srs_carrier_list_len = 2; + srs_carrier_list->srs_carrier_list_length = srs_carrier_list_len; + srs_carrier_list->srs_carrier_list_item = calloc_or_fail(srs_carrier_list_len, sizeof(*srs_carrier_list->srs_carrier_list_item)); + for (int i = 0; i < srs_carrier_list_len; i++) { + f1ap_srs_carrier_list_item_t *srs_carrier_list_item = &srs_carrier_list->srs_carrier_list_item[i]; + // pointA + srs_carrier_list_item->pointA = 87641 + i; + + // Uplink Channel BW-PerSCS-List + f1ap_uplink_channel_bw_per_scs_list_t *uplink_channel_bw_per_scs_list = &srs_carrier_list_item->uplink_channel_bw_per_scs_list; + + uint32_t scs_specific_carrier_list_length = 3; + uplink_channel_bw_per_scs_list->scs_specific_carrier_list_length = scs_specific_carrier_list_length; + uplink_channel_bw_per_scs_list->scs_specific_carrier = + calloc_or_fail(scs_specific_carrier_list_length, sizeof(*uplink_channel_bw_per_scs_list->scs_specific_carrier)); + for (int j = 0; j < scs_specific_carrier_list_length; j++) { + f1ap_scs_specific_carrier_t *scs_specific_carrier = &uplink_channel_bw_per_scs_list->scs_specific_carrier[j]; + // offset to carrier + scs_specific_carrier->offset_to_carrier = 100 + i + j; + // subcarrier spacing + scs_specific_carrier->subcarrier_spacing = F1AP_SUBCARRIER_SPACING_30KHZ; + // carrier bandwidth + scs_specific_carrier->carrier_bandwidth = 106 + i + j; + } + + // Active UL BWP + f1ap_active_ul_bwp_t *active_ul_bwp = &srs_carrier_list_item->active_ul_bwp; + + // location and bandwidth + active_ul_bwp->location_and_bandwidth = 2775 + i; + // subcarrier spacing + active_ul_bwp->subcarrier_spacing = F1AP_SUBCARRIER_SPACING_30KHZ; + // cyclic prefix + active_ul_bwp->cyclic_prefix = F1AP_CP_TYPE_NORMAL; + // Tx Direct Current Location + active_ul_bwp->tx_direct_current_location = 10 + i; + + // SRS Config + f1ap_srs_config_t *sRSConfig = &active_ul_bwp->srs_config; + + // srs_resource_list + sRSConfig->srs_resource_list = calloc_or_fail(1, sizeof(*sRSConfig->srs_resource_list)); + f1ap_srs_resource_list_t *srs_resource_list = sRSConfig->srs_resource_list; + uint32_t srs_resource_list_length = 3; + srs_resource_list->srs_resource_list_length = srs_resource_list_length; + srs_resource_list->srs_resource = calloc_or_fail(srs_resource_list_length, sizeof(*srs_resource_list->srs_resource)); + + // SRS resource config 1 : periodic + f1ap_srs_resource_t *srs_resource = &srs_resource_list->srs_resource[0]; + srs_resource->srs_resource_id = 22; + srs_resource->nr_of_srs_ports = F1AP_SRS_NUMBER_OF_PORTS_N2; + srs_resource->transmission_comb.present = F1AP_TRANSMISSION_COMB_PR_N2; + srs_resource->transmission_comb.choice.n2.comb_offset_n2 = 1; + srs_resource->transmission_comb.choice.n2.cyclic_shift_n2 = 3; + srs_resource->start_position = 8; + srs_resource->nr_of_symbols = F1AP_SRS_NUMBER_OF_SYMBOLS_N4; + srs_resource->repetition_factor = F1AP_SRS_REPETITION_FACTOR_RF2; + srs_resource->freq_domain_position = 32; + srs_resource->freq_domain_shift = 108; + srs_resource->c_srs = 31; + srs_resource->b_srs = 1; + srs_resource->b_hop = 3; + srs_resource->group_or_sequence_hopping = F1AP_GROUPORSEQUENCEHOPPING_GROUPHOPPING; + srs_resource->resource_type.present = F1AP_RESOURCE_TYPE_PR_PERIODIC; + + f1ap_resource_type_periodic_t *periodic = &srs_resource->resource_type.choice.periodic; + periodic->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT16; + periodic->offset = 1000; + srs_resource->sequence_id = 18; + + // SRS resource config 2 : semi-persistent + srs_resource = &srs_resource_list->srs_resource[1]; + srs_resource->srs_resource_id = 24; + srs_resource->nr_of_srs_ports = F1AP_SRS_NUMBER_OF_PORTS_N4; + srs_resource->transmission_comb.present = F1AP_TRANSMISSION_COMB_PR_N4; + srs_resource->transmission_comb.choice.n2.comb_offset_n2 = 3; + srs_resource->transmission_comb.choice.n2.cyclic_shift_n2 = 5; + srs_resource->start_position = 8; + srs_resource->nr_of_symbols = F1AP_SRS_NUMBER_OF_SYMBOLS_N2; + srs_resource->repetition_factor = F1AP_SRS_REPETITION_FACTOR_RF2; + srs_resource->freq_domain_position = 32; + srs_resource->freq_domain_shift = 108; + srs_resource->c_srs = 31; + srs_resource->b_srs = 1; + srs_resource->b_hop = 3; + srs_resource->group_or_sequence_hopping = F1AP_GROUPORSEQUENCEHOPPING_GROUPHOPPING; + srs_resource->resource_type.present = F1AP_RESOURCE_TYPE_PR_SEMI_PERSISTENT; + + srs_resource->resource_type.present = F1AP_RESOURCE_TYPE_PR_SEMI_PERSISTENT; + f1ap_resource_type_semi_persistent_t *semi_persistent = &srs_resource->resource_type.choice.semi_persistent; + semi_persistent->periodicity = F1AP_SRS_RESOURCE_TYPE_PERIODICITY_SLOT40; + semi_persistent->offset = 1000; + srs_resource->sequence_id = 12; + + // SRS resource config 2 : aperiodic + srs_resource = &srs_resource_list->srs_resource[2]; + srs_resource->srs_resource_id = 26; + srs_resource->nr_of_srs_ports = F1AP_SRS_NUMBER_OF_PORTS_N2; + srs_resource->transmission_comb.present = F1AP_TRANSMISSION_COMB_PR_N2; + srs_resource->transmission_comb.choice.n2.comb_offset_n2 = 1; + srs_resource->transmission_comb.choice.n2.cyclic_shift_n2 = 3; + srs_resource->start_position = 8; + srs_resource->nr_of_symbols = F1AP_SRS_NUMBER_OF_SYMBOLS_N4; + srs_resource->repetition_factor = F1AP_SRS_REPETITION_FACTOR_RF2; + srs_resource->freq_domain_position = 32; + srs_resource->freq_domain_shift = 108; + srs_resource->c_srs = 31; + srs_resource->b_srs = 1; + srs_resource->b_hop = 3; + srs_resource->group_or_sequence_hopping = F1AP_GROUPORSEQUENCEHOPPING_SEQUENCEHOPPING; + srs_resource->resource_type.present = F1AP_RESOURCE_TYPE_PR_APERIODIC; + // set aperiodic = 0 to enable + srs_resource->resource_type.choice.aperiodic = 0; + srs_resource->sequence_id = 10; + + // optional: pos_srs_resource_list + sRSConfig->pos_srs_resource_list = calloc_or_fail(1, sizeof(*sRSConfig->pos_srs_resource_list)); + f1ap_pos_srs_resource_list_t *pos_srs_resource_list = sRSConfig->pos_srs_resource_list; + uint32_t pos_srs_resource_list_length = 3; + pos_srs_resource_list->pos_srs_resource_list_length = pos_srs_resource_list_length; + pos_srs_resource_list->pos_srs_resource_item = + calloc_or_fail(pos_srs_resource_list_length, sizeof(*pos_srs_resource_list->pos_srs_resource_item)); + + // periodic + f1ap_pos_srs_resource_item_t *pos_srs_resource = &pos_srs_resource_list->pos_srs_resource_item[0]; + pos_srs_resource->srs_pos_resource_id = 12; + pos_srs_resource->transmission_comb_pos.present = F1AP_TRANSMISSION_COMB_POS_PR_N2; + pos_srs_resource->transmission_comb_pos.choice.n2.comb_offset_n2 = 1; + pos_srs_resource->transmission_comb_pos.choice.n2.cyclic_shift_n2 = 4; + pos_srs_resource->start_position = 9; + pos_srs_resource->nr_of_symbols = F1AP_SRS_RESOURCE_ITEM_NUMBER_OF_SYMBOLS_N8; + pos_srs_resource->freq_domain_shift = 100; + pos_srs_resource->c_srs = 20; + pos_srs_resource->group_or_sequence_hopping = F1AP_GROUPORSEQUENCEHOPPING_GROUPHOPPING; + pos_srs_resource->resource_type_pos.present = F1AP_RESOURCE_TYPE_POS_PR_PERIODIC; + pos_srs_resource->resource_type_pos.choice.periodic.periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT5; + pos_srs_resource->resource_type_pos.choice.periodic.offset = 10; + pos_srs_resource->sequence_id = 1; + + // semi-persistent + pos_srs_resource = &pos_srs_resource_list->pos_srs_resource_item[1]; + pos_srs_resource->srs_pos_resource_id = 13; + pos_srs_resource->transmission_comb_pos.present = F1AP_TRANSMISSION_COMB_POS_PR_N4; + pos_srs_resource->transmission_comb_pos.choice.n4.comb_offset_n4 = 3; + pos_srs_resource->transmission_comb_pos.choice.n4.cyclic_shift_n4 = 5; + pos_srs_resource->start_position = 12; + pos_srs_resource->nr_of_symbols = F1AP_SRS_RESOURCE_ITEM_NUMBER_OF_SYMBOLS_N12; + pos_srs_resource->freq_domain_shift = 100; + pos_srs_resource->c_srs = 20; + pos_srs_resource->group_or_sequence_hopping = F1AP_GROUPORSEQUENCEHOPPING_GROUPHOPPING; + pos_srs_resource->resource_type_pos.present = F1AP_RESOURCE_TYPE_POS_PR_SEMI_PERSISTENT; + pos_srs_resource->resource_type_pos.choice.semi_persistent.periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT32; + pos_srs_resource->resource_type_pos.choice.semi_persistent.offset = 5; + pos_srs_resource->sequence_id = 2; + + // aperiodic + pos_srs_resource = &pos_srs_resource_list->pos_srs_resource_item[2]; + pos_srs_resource->srs_pos_resource_id = 14; + pos_srs_resource->transmission_comb_pos.present = F1AP_TRANSMISSION_COMB_POS_PR_N8; + pos_srs_resource->transmission_comb_pos.choice.n8.comb_offset_n8 = 5; + pos_srs_resource->transmission_comb_pos.choice.n8.cyclic_shift_n8 = 2; + pos_srs_resource->start_position = 9; + pos_srs_resource->nr_of_symbols = F1AP_SRS_RESOURCE_ITEM_NUMBER_OF_SYMBOLS_N4; + pos_srs_resource->freq_domain_shift = 100; + pos_srs_resource->c_srs = 20; + pos_srs_resource->group_or_sequence_hopping = F1AP_GROUPORSEQUENCEHOPPING_SEQUENCEHOPPING; + pos_srs_resource->resource_type_pos.present = F1AP_RESOURCE_TYPE_POS_PR_APERIODIC; + pos_srs_resource->resource_type_pos.choice.periodic.periodicity = F1AP_SRS_RESOURCE_TYPE_POS_PERIODICITY_SLOT5; + pos_srs_resource->resource_type_pos.choice.aperiodic.slot_offset = 31; + pos_srs_resource->sequence_id = 3; + + // optional: srs_resource_set_list + sRSConfig->srs_resource_set_list = calloc_or_fail(1, sizeof(*sRSConfig->srs_resource_set_list)); + f1ap_srs_resource_set_list_t *srs_resource_set_list = sRSConfig->srs_resource_set_list; + uint32_t srs_resource_set_list_length = 3; + srs_resource_set_list->srs_resource_set_list_length = srs_resource_set_list_length; + srs_resource_set_list->srs_resource_set = + calloc_or_fail(srs_resource_set_list_length, sizeof(*srs_resource_set_list->srs_resource_set)); + + // periodic + f1ap_srs_resource_set_t *srs_resource_set = &srs_resource_set_list->srs_resource_set[0]; + srs_resource_set->srs_resource_set_id = 0; + uint8_t srs_resource_id_list_length = 5; + srs_resource_set->srs_resource_id_list.srs_resource_id_list_length = srs_resource_id_list_length; + srs_resource_set->srs_resource_id_list.srs_resource_id = + calloc_or_fail(srs_resource_id_list_length, sizeof(*srs_resource_set->srs_resource_id_list.srs_resource_id)); + for (int k = 0; k < srs_resource_id_list_length; k++) { + srs_resource_set->srs_resource_id_list.srs_resource_id[k] = k; + } + srs_resource_set->resource_set_type.present = F1AP_RESOURCE_SET_TYPE_PR_PERIODIC; + // set periodic = 0 to enable + srs_resource_set->resource_set_type.choice.periodic = 0; + + // semi-persistent + srs_resource_set = &srs_resource_set_list->srs_resource_set[1]; + srs_resource_set->srs_resource_set_id = 1; + srs_resource_id_list_length = 5; + srs_resource_set->srs_resource_id_list.srs_resource_id_list_length = srs_resource_id_list_length; + srs_resource_set->srs_resource_id_list.srs_resource_id = + calloc_or_fail(srs_resource_id_list_length, sizeof(srs_resource_set->srs_resource_id_list.srs_resource_id)); + for (int k = 0; k < srs_resource_id_list_length; k++) { + srs_resource_set->srs_resource_id_list.srs_resource_id[k] = k; + } + srs_resource_set->resource_set_type.present = F1AP_RESOURCE_SET_TYPE_PR_SEMI_PERSISTENT; + // set semi_persistent = 0 to enable + srs_resource_set->resource_set_type.choice.semi_persistent = 0; + + // aperiodic + srs_resource_set = &srs_resource_set_list->srs_resource_set[2]; + srs_resource_set->srs_resource_set_id = 2; + srs_resource_id_list_length = 5; + srs_resource_set->srs_resource_id_list.srs_resource_id_list_length = srs_resource_id_list_length; + srs_resource_set->srs_resource_id_list.srs_resource_id = + calloc_or_fail(srs_resource_id_list_length, sizeof(*srs_resource_set->srs_resource_id_list.srs_resource_id)); + for (int k = 0; k < srs_resource_id_list_length; k++) { + srs_resource_set->srs_resource_id_list.srs_resource_id[k] = k; + } + + srs_resource_set->resource_set_type.present = F1AP_RESOURCE_SET_TYPE_PR_APERIODIC; + srs_resource_set->resource_set_type.choice.aperiodic.srs_resource_trigger = 2; + srs_resource_set->resource_set_type.choice.aperiodic.slot_offset = 20; + + // optional: pos_srs_resource_set_list + sRSConfig->pos_srs_resource_set_list = calloc_or_fail(1, sizeof(*sRSConfig->pos_srs_resource_set_list)); + f1ap_pos_srs_resource_set_list_t *pos_srs_resource_set_list = sRSConfig->pos_srs_resource_set_list; + uint32_t pos_srs_resource_set_list_length = 3; + pos_srs_resource_set_list->pos_srs_resource_set_list_length = pos_srs_resource_set_list_length; + pos_srs_resource_set_list->pos_srs_resource_set_item = + calloc_or_fail(pos_srs_resource_set_list_length, sizeof(*pos_srs_resource_set_list->pos_srs_resource_set_item)); + + // periodic + f1ap_pos_srs_resource_set_item_t *pos_srs_resource_set = &pos_srs_resource_set_list->pos_srs_resource_set_item[0]; + pos_srs_resource_set->pos_srs_resource_set_id = 0; + uint8_t pos_srs_resource_id_list_length = 5; + pos_srs_resource_set->pos_srs_resource_id_list.pos_srs_resource_id_list_length = pos_srs_resource_id_list_length; + pos_srs_resource_set->pos_srs_resource_id_list.srs_pos_resource_id = + calloc_or_fail(pos_srs_resource_id_list_length, + sizeof(*pos_srs_resource_set->pos_srs_resource_id_list.srs_pos_resource_id)); + for (int k = 0; k < pos_srs_resource_id_list_length; k++) { + pos_srs_resource_set->pos_srs_resource_id_list.srs_pos_resource_id[k] = k; + } + pos_srs_resource_set->pos_resource_set_type.present = F1AP_POS_RESOURCE_SET_TYPE_PR_PERIODIC; + // set periodic = 0 to enable + pos_srs_resource_set->pos_resource_set_type.choice.periodic = 0; + + // semi-persistent + pos_srs_resource_set = &pos_srs_resource_set_list->pos_srs_resource_set_item[1]; + pos_srs_resource_set->pos_srs_resource_set_id = 1; + pos_srs_resource_id_list_length = 5; + pos_srs_resource_set->pos_srs_resource_id_list.pos_srs_resource_id_list_length = pos_srs_resource_id_list_length; + pos_srs_resource_set->pos_srs_resource_id_list.srs_pos_resource_id = + calloc_or_fail(pos_srs_resource_id_list_length, + sizeof(*pos_srs_resource_set->pos_srs_resource_id_list.srs_pos_resource_id)); + for (int k = 0; k < pos_srs_resource_id_list_length; k++) { + pos_srs_resource_set->pos_srs_resource_id_list.srs_pos_resource_id[k] = k; + } + pos_srs_resource_set->pos_resource_set_type.present = F1AP_POS_RESOURCE_SET_TYPE_PR_SEMI_PERSISTENT; + // set semi_persistent = 0 to enable + pos_srs_resource_set->pos_resource_set_type.choice.semi_persistent = 0; + + // aperiodic + pos_srs_resource_set = &pos_srs_resource_set_list->pos_srs_resource_set_item[2]; + pos_srs_resource_set->pos_srs_resource_set_id = 2; + pos_srs_resource_id_list_length = 5; + pos_srs_resource_set->pos_srs_resource_id_list.pos_srs_resource_id_list_length = pos_srs_resource_id_list_length; + pos_srs_resource_set->pos_srs_resource_id_list.srs_pos_resource_id = + calloc_or_fail(pos_srs_resource_id_list_length, + sizeof(*pos_srs_resource_set->pos_srs_resource_id_list.srs_pos_resource_id)); + for (int k = 0; k < pos_srs_resource_id_list_length; k++) { + pos_srs_resource_set->pos_srs_resource_id_list.srs_pos_resource_id[k] = k; + } + pos_srs_resource_set->pos_resource_set_type.present = F1AP_POS_RESOURCE_SET_TYPE_PR_APERIODIC; + pos_srs_resource_set->pos_resource_set_type.choice.srs_resource = 3; + } +} + +static void test_f1ap_positioning_information_response() +{ + f1ap_positioning_information_resp_t orig = { + .gNB_CU_ue_id = 12, + .gNB_DU_ue_id = 19, + }; + + // SRS configuration + orig.srs_configuration = calloc_or_fail(1, sizeof(*orig.srs_configuration)); + f1ap_srs_carrier_list_t *srs_carrier_list = &orig.srs_configuration->srs_carrier_list; + fill_srs_carrier_list(srs_carrier_list); + + F1AP_F1AP_PDU_t *f1enc = encode_positioning_information_resp(&orig); + F1AP_F1AP_PDU_t *f1dec = f1ap_encode_decode(f1enc); + f1ap_msg_free(f1enc); + + f1ap_positioning_information_resp_t decoded = {0}; + bool ret = decode_positioning_information_resp(f1dec, &decoded); + AssertFatal(ret, "decode_positioning_information_resp(): could not decode message\n"); + f1ap_msg_free(f1dec); + + ret = eq_positioning_information_resp(&orig, &decoded); + AssertFatal(ret, "eq_positioning_information_resp(): decoded message doesn't match\n"); + free_positioning_information_resp(&decoded); + + f1ap_positioning_information_resp_t cp = cp_positioning_information_resp(&orig); + ret = eq_positioning_information_resp(&orig, &cp); + AssertFatal(ret, "eq_positioning_information_resp(): copied message doesn't match\n"); + free_positioning_information_resp(&orig); + free_positioning_information_resp(&cp); + + printf("%s() successful\n", __func__); +} + +static void test_f1ap_positioning_information_failure() +{ + f1ap_positioning_information_failure_t orig = { + .gNB_CU_ue_id = 12, + .gNB_DU_ue_id = 19, + .cause = F1AP_CAUSE_MISC, + .cause_value = 3, + }; + + F1AP_F1AP_PDU_t *f1enc = encode_positioning_information_failure(&orig); + F1AP_F1AP_PDU_t *f1dec = f1ap_encode_decode(f1enc); + f1ap_msg_free(f1enc); + + f1ap_positioning_information_failure_t decoded = {0}; + bool ret = decode_positioning_information_failure(f1dec, &decoded); + AssertFatal(ret, "decode_positioning_information_failure(): could not decode message\n"); + f1ap_msg_free(f1dec); + + ret = eq_positioning_information_failure(&orig, &decoded); + AssertFatal(ret, "eq_positioning_information_failure(): decoded message doesn't match\n"); + free_positioning_information_failure(&decoded); + + f1ap_positioning_information_failure_t cp = cp_positioning_information_failure(&orig); + ret = eq_positioning_information_failure(&orig, &cp); + AssertFatal(ret, "eq_positioning_information_failure(): copied message doesn't match\n"); + free_positioning_information_failure(&orig); + free_positioning_information_failure(&cp); + + printf("%s() successful\n", __func__); +} + +static void test_f1ap_positioning_activation_request_msg(f1ap_positioning_activation_req_t *orig) +{ + F1AP_F1AP_PDU_t *f1enc = encode_positioning_activation_req(orig); + F1AP_F1AP_PDU_t *f1dec = f1ap_encode_decode(f1enc); + f1ap_msg_free(f1enc); + + f1ap_positioning_activation_req_t decoded = {0}; + bool ret = decode_positioning_activation_req(f1dec, &decoded); + AssertFatal(ret, "decode_positioning_activation_request(): could not decode message\n"); + f1ap_msg_free(f1dec); + + ret = eq_positioning_activation_req(orig, &decoded); + AssertFatal(ret, "eq_positioning_activation_request(): decoded message doesn't match\n"); + free_positioning_activation_req(&decoded); + + f1ap_positioning_activation_req_t cp = cp_positioning_activation_req(orig); + ret = eq_positioning_activation_req(orig, &cp); + AssertFatal(ret, "eq_positioning_activation_request(): copied message doesn't match\n"); + free_positioning_activation_req(&cp); + free_positioning_activation_req(orig); +} + +static void test_f1ap_positioning_activation_request() +{ + /* semipersistent srs test*/ + f1ap_positioning_activation_req_t orig = { + .gNB_CU_ue_id = 12, + .gNB_DU_ue_id = 19, + .srs_type.present = F1AP_SRS_TYPE_PR_SEMIPERSISTENTSRS, + }; + + orig.srs_type.choice.srs_resource_set_id = calloc_or_fail(1, sizeof(*orig.srs_type.choice.srs_resource_set_id)); + *orig.srs_type.choice.srs_resource_set_id = 1; + test_f1ap_positioning_activation_request_msg(&orig); + + /* aperiodic srs test*/ + orig.gNB_CU_ue_id = 12; + orig.gNB_DU_ue_id = 19; + orig.srs_type.present = F1AP_SRS_TYPE_PR_APERIODICSRS; + orig.srs_type.choice.aperiodic = calloc_or_fail(1, sizeof(*orig.srs_type.choice.aperiodic)); + // set aperiodic = 0 to enable + *orig.srs_type.choice.aperiodic = 0; + test_f1ap_positioning_activation_request_msg(&orig); + + printf("%s() successful\n", __func__); +} + +static void test_f1ap_positioning_activation_response() +{ + f1ap_positioning_activation_resp_t orig = { + .gNB_CU_ue_id = 12, + .gNB_DU_ue_id = 19, + // rest is optional and intentionally left empty + }; + F1AP_F1AP_PDU_t *f1enc = encode_positioning_activation_resp(&orig); + F1AP_F1AP_PDU_t *f1dec = f1ap_encode_decode(f1enc); + f1ap_msg_free(f1enc); + + f1ap_positioning_activation_resp_t decoded = {0}; + bool ret = decode_positioning_activation_resp(f1dec, &decoded); + AssertFatal(ret, "decode_positioning_activation_resp(): could not decode message\n"); + f1ap_msg_free(f1dec); + + ret = eq_positioning_activation_resp(&orig, &decoded); + AssertFatal(ret, "eq_positioning_activation_resp(): decoded message doesn't match\n"); + free_positioning_activation_resp(&decoded); + + f1ap_positioning_activation_resp_t cp = cp_positioning_activation_resp(&orig); + ret = eq_positioning_activation_resp(&orig, &cp); + AssertFatal(ret, "eq_positioning_activation_resp(): copied message doesn't match\n"); + free_positioning_activation_resp(&orig); + free_positioning_activation_resp(&cp); + + printf("%s() successful\n", __func__); +} + +static void test_f1ap_positioning_activation_failure() +{ + f1ap_positioning_activation_failure_t orig = { + .gNB_CU_ue_id = 12, + .gNB_DU_ue_id = 19, + .cause = F1AP_CAUSE_MISC, + .cause_value = 3, + }; + F1AP_F1AP_PDU_t *f1enc = encode_positioning_activation_failure(&orig); + F1AP_F1AP_PDU_t *f1dec = f1ap_encode_decode(f1enc); + f1ap_msg_free(f1enc); + + f1ap_positioning_activation_failure_t decoded = {0}; + bool ret = decode_positioning_activation_failure(f1dec, &decoded); + AssertFatal(ret, "decode_positioning_activation_failure(): could not decode message\n"); + f1ap_msg_free(f1dec); + + ret = eq_positioning_activation_failure(&orig, &decoded); + AssertFatal(ret, "eq_positioning_activation_failure(): decoded message doesn't match\n"); + free_positioning_activation_failure(&decoded); + + f1ap_positioning_activation_failure_t cp = cp_positioning_activation_failure(&orig); + ret = eq_positioning_activation_failure(&orig, &cp); + AssertFatal(ret, "eq_positioning_activation_failure(): copied message doesn't match\n"); + free_positioning_activation_failure(&orig); + free_positioning_activation_failure(&cp); + + printf("%s() successful\n", __func__); +} + +static void test_f1ap_positioning_deactivation_msg(f1ap_positioning_deactivation_t *orig) +{ + F1AP_F1AP_PDU_t *f1enc = encode_positioning_deactivation(orig); + F1AP_F1AP_PDU_t *f1dec = f1ap_encode_decode(f1enc); + f1ap_msg_free(f1enc); + + f1ap_positioning_deactivation_t decoded = {0}; + bool ret = decode_positioning_deactivation(f1dec, &decoded); + AssertFatal(ret, "decode_positioning_deactivation(): could not decode message\n"); + f1ap_msg_free(f1dec); + + ret = eq_positioning_deactivation(orig, &decoded); + AssertFatal(ret, "eq_positioning_deactivation(): decoded message doesn't match\n"); + free_positioning_deactivation(&decoded); + + f1ap_positioning_deactivation_t cp = cp_positioning_deactivation(orig); + ret = eq_positioning_deactivation(orig, &cp); + AssertFatal(ret, "eq_positioning_deactivation(): copied message doesn't match\n"); + free_positioning_deactivation(orig); + free_positioning_deactivation(&cp); +} + +static void test_f1ap_positioning_deactivation() +{ + /* Abort Transmission SRS Resource Set ID test*/ + f1ap_positioning_deactivation_t orig = { + .gNB_CU_ue_id = 12, + .gNB_DU_ue_id = 19, + .abort_transmission.present = F1AP_ABORT_TRANSMISSION_PR_SRSRESOURCESETID, + .abort_transmission.choice.srs_resource_set_id = 10, + }; + test_f1ap_positioning_deactivation_msg(&orig); + + /* Abort Transmission release ALL test*/ + orig.gNB_CU_ue_id = 12; + orig.gNB_DU_ue_id = 19; + orig.abort_transmission.present = F1AP_ABORT_TRANSMISSION_PR_RELEASEALL; + orig.abort_transmission.choice.release_all = true; + test_f1ap_positioning_deactivation_msg(&orig); + + printf("%s() successful\n", __func__); +} + +static void test_f1ap_positioning_information_update() +{ + f1ap_positioning_information_update_t orig = { + .gNB_CU_ue_id = 12, + .gNB_DU_ue_id = 19, + }; + + // SRS configuration + orig.srs_configuration = calloc_or_fail(1, sizeof(*orig.srs_configuration)); + f1ap_srs_carrier_list_t *srs_carrier_list = &orig.srs_configuration->srs_carrier_list; + fill_srs_carrier_list(srs_carrier_list); + + F1AP_F1AP_PDU_t *f1enc = encode_positioning_information_update(&orig); + F1AP_F1AP_PDU_t *f1dec = f1ap_encode_decode(f1enc); + f1ap_msg_free(f1enc); + + f1ap_positioning_information_update_t decoded = {0}; + bool ret = decode_positioning_information_update(f1dec, &decoded); + AssertFatal(ret, "decode_positioning_information_update(): could not decode message\n"); + f1ap_msg_free(f1dec); + + ret = eq_positioning_information_update(&orig, &decoded); + AssertFatal(ret, "eq_positioning_information_update(): decoded message doesn't match\n"); + free_positioning_information_update(&decoded); + + f1ap_positioning_information_update_t cp = cp_positioning_information_update(&orig); + ret = eq_positioning_information_update(&orig, &cp); + AssertFatal(ret, "eq_positioning_information_update(): copied message doesn't match\n"); + free_positioning_information_update(&orig); + free_positioning_information_update(&cp); + + printf("%s() successful\n", __func__); +} + +static void test_f1ap_trp_information_request() +{ + f1ap_trp_information_req_t orig = { + .transaction_id = 12, + .has_trp_list = true, + }; + + uint32_t trp_list_length = 4; + orig.trp_list.trp_list_length = trp_list_length; + orig.trp_list.trp_list_item = calloc_or_fail(trp_list_length, sizeof(*orig.trp_list.trp_list_item)); + for (int i = 0; i < trp_list_length; i++) { + orig.trp_list.trp_list_item[i].trp_id = i + 1; + } + uint8_t trp_info_type_list_length = 2; + f1ap_trp_information_type_list_t *trp_information_type_list = &orig.trp_information_type_list; + trp_information_type_list->trp_information_type_list_length = trp_info_type_list_length; + trp_information_type_list->trp_information_type_item = + calloc_or_fail(trp_info_type_list_length, sizeof(*trp_information_type_list->trp_information_type_item)); + trp_information_type_list->trp_information_type_item[0] = F1AP_TRP_INFORMATION_TYPE_ITEM_NR_ARFCN; + trp_information_type_list->trp_information_type_item[1] = F1AP_TRP_INFORMATION_TYPE_ITEM_PRS_CONFIG; + + F1AP_F1AP_PDU_t *f1enc = encode_trp_information_req(&orig); + F1AP_F1AP_PDU_t *f1dec = f1ap_encode_decode(f1enc); + f1ap_msg_free(f1enc); + + f1ap_trp_information_req_t decoded = {0}; + bool ret = decode_trp_information_req(f1dec, &decoded); + AssertFatal(ret, "decode_trp_information_req(): could not decode message\n"); + f1ap_msg_free(f1dec); + + ret = eq_trp_information_req(&orig, &decoded); + AssertFatal(ret, "eq_trp_information_req(): decoded message doesn't match\n"); + free_trp_information_req(&decoded); + + f1ap_trp_information_req_t cp = cp_trp_information_req(&orig); + ret = eq_trp_information_req(&orig, &cp); + AssertFatal(ret, "eq_trp_information_req(): copied message doesn't match\n"); + free_trp_information_req(&orig); + free_trp_information_req(&cp); + + printf("%s() successful\n", __func__); +} + +static void test_f1ap_trp_information_response() +{ + f1ap_trp_information_resp_t orig = { + .transaction_id = 12, + }; + + orig.trp_information_list.trp_information_item_length = 3; + uint32_t trp_info_item_len = orig.trp_information_list.trp_information_item_length; + orig.trp_information_list.trp_information_item = + calloc_or_fail(trp_info_item_len, sizeof(*orig.trp_information_list.trp_information_item)); + + uint8_t trp_info_type_resp_item_len = 3; + for (int i = 0; i < trp_info_item_len; i++) { + f1ap_trp_information_t *tRPInformation = &orig.trp_information_list.trp_information_item[i]; + tRPInformation->trp_information_type_response_list.trp_information_type_response_item_length = trp_info_type_resp_item_len; + tRPInformation->trp_id = 11 + i; + f1ap_trp_information_type_response_item_t *trp_info_type_resp_item = + calloc_or_fail(trp_info_type_resp_item_len, sizeof(*trp_info_type_resp_item)); + tRPInformation->trp_information_type_response_list.trp_information_type_response_item = trp_info_type_resp_item; + + // nrPCI + trp_info_type_resp_item[0].present = F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_PCI_NR; + trp_info_type_resp_item[0].choice.pci_nr = 123 + i; + + // nG_RAN_CGI + trp_info_type_resp_item[1].present = F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_NG_RAN_CGI; + trp_info_type_resp_item[1].choice.ng_ran_cgi.plmn.mcc = 208; + trp_info_type_resp_item[1].choice.ng_ran_cgi.plmn.mnc = 92 + i; + trp_info_type_resp_item[1].choice.ng_ran_cgi.plmn.mnc_digit_length = 2; + trp_info_type_resp_item[1].choice.ng_ran_cgi.nr_cellid = 117 + i; + + // geographicalCoordinates + trp_info_type_resp_item[2].present = F1AP_TRP_INFORMATION_TYPE_RESPONSE_ITEM_PR_GEOGRAPHICALCOORDINATES; + f1ap_geographical_coordinates_t *geographical_coordinates = &trp_info_type_resp_item[2].choice.geographical_coordinates; + f1ap_trp_position_definition_type_t *tRPPositionDefinitionType = &geographical_coordinates->trp_position_definition_type; + // referenced + tRPPositionDefinitionType->present = F1AP_TRP_POSITION_DEFINITION_TYPE_PR_REFERENCED; + f1ap_trp_position_referenced_t *referenced = &tRPPositionDefinitionType->choice.referenced; + // coordinate ID + referenced->reference_point.present = F1AP_REFERENCE_POINT_PR_COORDINATEID; + referenced->reference_point.choice.coordinate_id = 2; + f1ap_trp_reference_point_type_t *referencePointType = &referenced->reference_point_type; + // relative cartesian + referencePointType->present = F1AP_TRP_REFERENCE_POINT_TYPE_PR_TRPPOSITION_RELATIVE_CARTESIAN; + f1ap_relative_cartesian_location_t *trp_pos_cart = &referencePointType->choice.trp_position_relative_cartesian; + // 0 = millimeter + trp_pos_cart->xyz_unit = 0; + // random reference cartesian coordinates in millimeter + trp_pos_cart->xvalue = 7100 + i * 2; + trp_pos_cart->yvalue = 1100 + i * 2; + trp_pos_cart->zvalue = -4100 + i * 2; + // testing random values for uncertainity and confidence + trp_pos_cart->location_uncertainty.horizontal_uncertainty = i + 1; + trp_pos_cart->location_uncertainty.horizontal_confidence = i + 2; + trp_pos_cart->location_uncertainty.vertical_uncertainty = i + 3; + trp_pos_cart->location_uncertainty.vertical_confidence = i + 4; + } + + F1AP_F1AP_PDU_t *f1enc = encode_trp_information_resp(&orig); + F1AP_F1AP_PDU_t *f1dec = f1ap_encode_decode(f1enc); + f1ap_msg_free(f1enc); + + f1ap_trp_information_resp_t decoded = {0}; + bool ret = decode_trp_information_resp(f1dec, &decoded); + AssertFatal(ret, "decode_trp_information_resp(): could not decode message\n"); + f1ap_msg_free(f1dec); + + ret = eq_trp_information_resp(&orig, &decoded); + AssertFatal(ret, "eq_trp_information_resp(): decoded message doesn't match\n"); + free_trp_information_resp(&decoded); + + f1ap_trp_information_resp_t cp = cp_trp_information_resp(&orig); + ret = eq_trp_information_resp(&orig, &cp); + AssertFatal(ret, "eq_trp_information_resp(): copied message doesn't match\n"); + free_trp_information_resp(&orig); + free_trp_information_resp(&cp); + + printf("%s() successful\n", __func__); +} + +static void test_f1ap_trp_information_failure() +{ + f1ap_trp_information_failure_t orig = { + .transaction_id = 12, + .cause = F1AP_CAUSE_MISC, + .cause_value = 3, + }; + F1AP_F1AP_PDU_t *f1enc = encode_trp_information_failure(&orig); + F1AP_F1AP_PDU_t *f1dec = f1ap_encode_decode(f1enc); + f1ap_msg_free(f1enc); + + f1ap_trp_information_failure_t decoded = {0}; + bool ret = decode_trp_information_failure(f1dec, &decoded); + AssertFatal(ret, "decode_trp_information_failure(): could not decode message\n"); + f1ap_msg_free(f1dec); + + ret = eq_trp_information_failure(&orig, &decoded); + AssertFatal(ret, "eq_trp_information_failure(): decoded message doesn't match\n"); + free_trp_information_failure(&decoded); + + f1ap_trp_information_failure_t cp = cp_trp_information_failure(&orig); + ret = eq_trp_information_failure(&orig, &cp); + AssertFatal(ret, "eq_trp_information_failure(): copied message doesn't match\n"); + free_trp_information_failure(&orig); + free_trp_information_failure(&cp); + + printf("%s() successful\n", __func__); +} + +static void test_f1ap_positioning_measurement_request() +{ + f1ap_positioning_measurement_req_t orig = { + .transaction_id = 12, + .lmf_measurement_id = 1999, + .ran_measurement_id = 2225, + }; + + uint32_t trp_meas_req_list_len = 3; + orig.trp_measurement_request_list.trp_measurement_request_list_length = trp_meas_req_list_len; + orig.trp_measurement_request_list.trp_measurement_request_item = + calloc_or_fail(trp_meas_req_list_len, sizeof(*orig.trp_measurement_request_list.trp_measurement_request_item)); + for (int i = 0; i < trp_meas_req_list_len; i++) { + orig.trp_measurement_request_list.trp_measurement_request_item[i].tRPID = 115 + i; + } + + orig.pos_report_characteristics = F1AP_POSREPORTCHARACTERISTICS_PERIODIC; + orig.measurement_periodicity = F1AP_POSMEASUREMENTPERIODICITY_MS480; + + uint32_t pos_meas_quantities_len = 4; + orig.pos_measurement_quantities.pos_measurement_quantities_length = pos_meas_quantities_len; + + f1ap_pos_measurement_quantities_item_t *pos_meas_quantities_item = + calloc_or_fail(pos_meas_quantities_len, sizeof(*pos_meas_quantities_item)); + orig.pos_measurement_quantities.pos_measurement_quantities_item = pos_meas_quantities_item; + + pos_meas_quantities_item[0].pos_measurement_type = F1AP_POSMEASUREMENTTYPE_GNB_RX_TX; + pos_meas_quantities_item[1].pos_measurement_type = F1AP_POSMEASUREMENTTYPE_UL_SRS_RSRP; + pos_meas_quantities_item[2].pos_measurement_type = F1AP_POSMEASUREMENTTYPE_UL_AOA; + pos_meas_quantities_item[3].pos_measurement_type = F1AP_POSMEASUREMENTTYPE_UL_RTOA; + + // SRS configuration + orig.srs_configuration = calloc_or_fail(1, sizeof(*orig.srs_configuration)); + f1ap_srs_carrier_list_t *srs_carrier_list = &orig.srs_configuration->srs_carrier_list; + fill_srs_carrier_list(srs_carrier_list); + + F1AP_F1AP_PDU_t *f1enc = encode_positioning_measurement_req(&orig); + F1AP_F1AP_PDU_t *f1dec = f1ap_encode_decode(f1enc); + f1ap_msg_free(f1enc); + + f1ap_positioning_measurement_req_t decoded = {0}; + bool ret = decode_positioning_measurement_req(f1dec, &decoded); + AssertFatal(ret, "decode_positioning_measurement_req(): could not decode message\n"); + f1ap_msg_free(f1dec); + + ret = eq_positioning_measurement_req(&orig, &decoded); + AssertFatal(ret, "eq_positioning_measurement_req(): decoded message doesn't match\n"); + free_positioning_measurement_req(&decoded); + + f1ap_positioning_measurement_req_t cp = cp_positioning_measurement_req(&orig); + ret = eq_positioning_measurement_req(&orig, &cp); + AssertFatal(ret, "eq_positioning_measurement_req(): copied message doesn't match\n"); + free_positioning_measurement_req(&orig); + free_positioning_measurement_req(&cp); + + printf("%s() successful\n", __func__); +} + +static void test_f1ap_positioning_measurement_response() +{ + f1ap_positioning_measurement_resp_t orig = { + .transaction_id = 12, + .lmf_measurement_id = 1999, + .ran_measurement_id = 2225, + }; + + orig.pos_measurement_result_list = calloc_or_fail(1, sizeof(*orig.pos_measurement_result_list)); + uint32_t pos_meas_result_list_len = 2; + orig.pos_measurement_result_list->pos_measurement_result_list_length = pos_meas_result_list_len; + orig.pos_measurement_result_list->pos_measurement_result_list_item = + calloc_or_fail(pos_meas_result_list_len, sizeof(*orig.pos_measurement_result_list->pos_measurement_result_list_item)); + for (int i = 0; i < pos_meas_result_list_len; i++) { + f1ap_pos_measurement_result_list_item_t *pos_meas_result_list_item = + &orig.pos_measurement_result_list->pos_measurement_result_list_item[i]; + pos_meas_result_list_item->trp_id = 10 + i; + + f1ap_pos_measurement_result_t *posMeasurementResult = &pos_meas_result_list_item->pos_measurement_result; + uint32_t pos_meas_result_length = 4; + posMeasurementResult->pos_measurement_result_item_length = pos_meas_result_length; + posMeasurementResult->pos_measurement_result_item = + calloc_or_fail(pos_meas_result_length, sizeof(*posMeasurementResult->pos_measurement_result_item)); + + // Angle of arrival + f1ap_pos_measurement_result_item_t *pos_measurement_result_item = &posMeasurementResult->pos_measurement_result_item[0]; + f1ap_measured_results_value_t *measuredResultsValue = &pos_measurement_result_item->measured_results_value; + measuredResultsValue->present = F1AP_MEASURED_RESULTS_VALUE_PR_UL_ANGLEOFARRIVAL; + f1ap_ul_aoa_t *uL_AngleOfArrival = &measuredResultsValue->choice.ul_angle_of_arrival; + uL_AngleOfArrival->azimuth_aoa = 700 + i; + uL_AngleOfArrival->zenith_aoa = calloc_or_fail(1, sizeof(*uL_AngleOfArrival->zenith_aoa)); + *uL_AngleOfArrival->zenith_aoa = 450 + i; + uL_AngleOfArrival->lcs_to_gcs_translation_aoa = calloc_or_fail(1, sizeof(*uL_AngleOfArrival->lcs_to_gcs_translation_aoa)); + uL_AngleOfArrival->lcs_to_gcs_translation_aoa->alpha = 200; + uL_AngleOfArrival->lcs_to_gcs_translation_aoa->beta = 220; + uL_AngleOfArrival->lcs_to_gcs_translation_aoa->gamma = 280; + + f1ap_time_stamp_t *timeStamp = &pos_measurement_result_item->time_stamp; + timeStamp->system_frame_number = 100; + timeStamp->slot_index.present = F1AP_TIME_STAMP_SLOT_INDEX_PR_SCS_30; + timeStamp->slot_index.choice.scs_30 = 15; + + // UL SRS RSRP + pos_measurement_result_item = &posMeasurementResult->pos_measurement_result_item[1]; + measuredResultsValue = &pos_measurement_result_item->measured_results_value; + measuredResultsValue->present = F1AP_MEASURED_RESULTS_VALUE_PR_UL_SRS_RSRP; + measuredResultsValue->choice.ul_srs_rsrp = 100 + i; + + timeStamp = &pos_measurement_result_item->time_stamp; + timeStamp->system_frame_number = 101; + timeStamp->slot_index.present = F1AP_TIME_STAMP_SLOT_INDEX_PR_SCS_15; + timeStamp->slot_index.choice.scs_15 = 8; + + // UL RToA + pos_measurement_result_item = &posMeasurementResult->pos_measurement_result_item[2]; + measuredResultsValue = &pos_measurement_result_item->measured_results_value; + measuredResultsValue->present = F1AP_MEASURED_RESULTS_VALUE_PR_UL_RTOA; + f1ap_ul_rtoa_measurement_t *uL_RTOA = &measuredResultsValue->choice.ul_rtoa; + uL_RTOA->ul_rtoa_measurement_item.present = F1AP_ULRTOAMEAS_PR_K1; + uL_RTOA->ul_rtoa_measurement_item.choice.k1 = 98500 + i; + + timeStamp = &pos_measurement_result_item->time_stamp; + timeStamp->system_frame_number = 102; + timeStamp->slot_index.present = F1AP_TIME_STAMP_SLOT_INDEX_PR_SCS_60; + timeStamp->slot_index.choice.scs_60 = 31; + + // gNB RX-TX Time Diff + pos_measurement_result_item = &posMeasurementResult->pos_measurement_result_item[3]; + measuredResultsValue = &pos_measurement_result_item->measured_results_value; + measuredResultsValue->present = F1AP_MEASURED_RESULTS_VALUE_PR_GNB_RXTXTIMEDIFF; + f1ap_gnb_rx_tx_time_diff_t *gNB_RxTxTimeDiff = &measuredResultsValue->choice.gnb_rx_tx_time_diff; + gNB_RxTxTimeDiff->rx_tx_time_diff.present = F1AP_GNBRXTXTIMEDIFFMEAS_PR_K3; + gNB_RxTxTimeDiff->rx_tx_time_diff.choice.k3 = 98412 + i; + + timeStamp = &pos_measurement_result_item->time_stamp; + timeStamp->system_frame_number = 103; + timeStamp->slot_index.present = F1AP_TIME_STAMP_SLOT_INDEX_PR_SCS_120; + timeStamp->slot_index.choice.scs_120 = 70; + } + + F1AP_F1AP_PDU_t *f1enc = encode_positioning_measurement_resp(&orig); + F1AP_F1AP_PDU_t *f1dec = f1ap_encode_decode(f1enc); + f1ap_msg_free(f1enc); + + f1ap_positioning_measurement_resp_t decoded = {0}; + bool ret = decode_positioning_measurement_resp(f1dec, &decoded); + AssertFatal(ret, "decode_positioning_measurement_resp(): could not decode message\n"); + f1ap_msg_free(f1dec); + + ret = eq_positioning_measurement_resp(&orig, &decoded); + AssertFatal(ret, "eq_positioning_measurement_resp(): decoded message doesn't match\n"); + free_positioning_measurement_resp(&decoded); + + f1ap_positioning_measurement_resp_t cp = cp_positioning_measurement_resp(&orig); + ret = eq_positioning_measurement_resp(&orig, &cp); + AssertFatal(ret, "eq_positioning_measurement_resp(): copied message doesn't match\n"); + free_positioning_measurement_resp(&orig); + free_positioning_measurement_resp(&cp); + + printf("%s() successful\n", __func__); +} + +static void test_f1ap_positioning_measurement_failure() +{ + f1ap_positioning_measurement_failure_t orig = { + .transaction_id = 12, + .lmf_measurement_id = 1999, + .ran_measurement_id = 2225, + .cause = F1AP_CAUSE_MISC, + .cause_value = 3, + }; + F1AP_F1AP_PDU_t *f1enc = encode_positioning_measurement_failure(&orig); + F1AP_F1AP_PDU_t *f1dec = f1ap_encode_decode(f1enc); + f1ap_msg_free(f1enc); + + f1ap_positioning_measurement_failure_t decoded = {0}; + bool ret = decode_positioning_measurement_failure(f1dec, &decoded); + AssertFatal(ret, "decode_positioning_measurement_failure(): could not decode message\n"); + f1ap_msg_free(f1dec); + + ret = eq_positioning_measurement_failure(&orig, &decoded); + AssertFatal(ret, "eq_positioning_measurement_failure(): decoded message doesn't match\n"); + free_positioning_measurement_failure(&decoded); + + f1ap_positioning_measurement_failure_t cp = cp_positioning_measurement_failure(&orig); + ret = eq_positioning_measurement_failure(&orig, &cp); + AssertFatal(ret, "eq_positioning_measurement_failure(): copied message doesn't match\n"); + free_positioning_measurement_failure(&orig); + free_positioning_measurement_failure(&cp); + + printf("%s() successful\n", __func__); +} + +static void test_f1ap_positioning_measurement_report() +{ + f1ap_positioning_measurement_report_t orig = { + .transaction_id = 12, + .lmf_measurement_id = 1999, + .ran_measurement_id = 2225, + }; + + orig.pos_measurement_result_list = calloc_or_fail(1, sizeof(*orig.pos_measurement_result_list)); + uint32_t pos_meas_result_list_len = 2; + orig.pos_measurement_result_list->pos_measurement_result_list_length = pos_meas_result_list_len; + orig.pos_measurement_result_list->pos_measurement_result_list_item = + calloc_or_fail(pos_meas_result_list_len, sizeof(*orig.pos_measurement_result_list->pos_measurement_result_list_item)); + for (int i = 0; i < pos_meas_result_list_len; i++) { + f1ap_pos_measurement_result_list_item_t *pos_meas_result_list_item = + &orig.pos_measurement_result_list->pos_measurement_result_list_item[i]; + pos_meas_result_list_item->trp_id = 10 + i; + + f1ap_pos_measurement_result_t *posMeasurementResult = &pos_meas_result_list_item->pos_measurement_result; + uint32_t pos_meas_result_length = 4; + posMeasurementResult->pos_measurement_result_item_length = pos_meas_result_length; + posMeasurementResult->pos_measurement_result_item = + calloc_or_fail(pos_meas_result_length, sizeof(*posMeasurementResult->pos_measurement_result_item)); + + // Angle of arrival + f1ap_pos_measurement_result_item_t *pos_measurement_result_item = &posMeasurementResult->pos_measurement_result_item[0]; + f1ap_measured_results_value_t *measuredResultsValue = &pos_measurement_result_item->measured_results_value; + measuredResultsValue->present = F1AP_MEASURED_RESULTS_VALUE_PR_UL_ANGLEOFARRIVAL; + f1ap_ul_aoa_t *uL_AngleOfArrival = &measuredResultsValue->choice.ul_angle_of_arrival; + uL_AngleOfArrival->azimuth_aoa = 700 + i; + uL_AngleOfArrival->zenith_aoa = calloc_or_fail(1, sizeof(*uL_AngleOfArrival->zenith_aoa)); + *uL_AngleOfArrival->zenith_aoa = 450 + i; + uL_AngleOfArrival->lcs_to_gcs_translation_aoa = calloc_or_fail(1, sizeof(*uL_AngleOfArrival->lcs_to_gcs_translation_aoa)); + uL_AngleOfArrival->lcs_to_gcs_translation_aoa->alpha = 200; + uL_AngleOfArrival->lcs_to_gcs_translation_aoa->beta = 220; + uL_AngleOfArrival->lcs_to_gcs_translation_aoa->gamma = 280; + + f1ap_time_stamp_t *timeStamp = &pos_measurement_result_item->time_stamp; + timeStamp->system_frame_number = 100; + timeStamp->slot_index.present = F1AP_TIME_STAMP_SLOT_INDEX_PR_SCS_30; + timeStamp->slot_index.choice.scs_30 = 15; + + // UL SRS RSRP + pos_measurement_result_item = &posMeasurementResult->pos_measurement_result_item[1]; + measuredResultsValue = &pos_measurement_result_item->measured_results_value; + measuredResultsValue->present = F1AP_MEASURED_RESULTS_VALUE_PR_UL_SRS_RSRP; + measuredResultsValue->choice.ul_srs_rsrp = 100 + i; + + timeStamp = &pos_measurement_result_item->time_stamp; + timeStamp->system_frame_number = 101; + timeStamp->slot_index.present = F1AP_TIME_STAMP_SLOT_INDEX_PR_SCS_15; + timeStamp->slot_index.choice.scs_15 = 8; + + // UL RToA + pos_measurement_result_item = &posMeasurementResult->pos_measurement_result_item[2]; + measuredResultsValue = &pos_measurement_result_item->measured_results_value; + measuredResultsValue->present = F1AP_MEASURED_RESULTS_VALUE_PR_UL_RTOA; + f1ap_ul_rtoa_measurement_t *uL_RTOA = &measuredResultsValue->choice.ul_rtoa; + uL_RTOA->ul_rtoa_measurement_item.present = F1AP_ULRTOAMEAS_PR_K1; + uL_RTOA->ul_rtoa_measurement_item.choice.k1 = 98500 + i; + + timeStamp = &pos_measurement_result_item->time_stamp; + timeStamp->system_frame_number = 102; + timeStamp->slot_index.present = F1AP_TIME_STAMP_SLOT_INDEX_PR_SCS_60; + timeStamp->slot_index.choice.scs_60 = 31; + + // gNB RX-TX Time Diff + pos_measurement_result_item = &posMeasurementResult->pos_measurement_result_item[3]; + measuredResultsValue = &pos_measurement_result_item->measured_results_value; + measuredResultsValue->present = F1AP_MEASURED_RESULTS_VALUE_PR_GNB_RXTXTIMEDIFF; + f1ap_gnb_rx_tx_time_diff_t *gNB_RxTxTimeDiff = &measuredResultsValue->choice.gnb_rx_tx_time_diff; + gNB_RxTxTimeDiff->rx_tx_time_diff.present = F1AP_GNBRXTXTIMEDIFFMEAS_PR_K3; + gNB_RxTxTimeDiff->rx_tx_time_diff.choice.k3 = 98412 + i; + + timeStamp = &pos_measurement_result_item->time_stamp; + timeStamp->system_frame_number = 103; + timeStamp->slot_index.present = F1AP_TIME_STAMP_SLOT_INDEX_PR_SCS_120; + timeStamp->slot_index.choice.scs_120 = 70; + } + + F1AP_F1AP_PDU_t *f1enc = encode_positioning_measurement_report(&orig); + F1AP_F1AP_PDU_t *f1dec = f1ap_encode_decode(f1enc); + f1ap_msg_free(f1enc); + + f1ap_positioning_measurement_report_t decoded = {0}; + bool ret = decode_positioning_measurement_report(f1dec, &decoded); + AssertFatal(ret, "decode_positioning_measurement_report(): could not decode message\n"); + f1ap_msg_free(f1dec); + + ret = eq_positioning_measurement_report(&orig, &decoded); + AssertFatal(ret, "eq_positioning_measurement_report(): decoded message doesn't match\n"); + free_positioning_measurement_report(&decoded); + + f1ap_positioning_measurement_report_t cp = cp_positioning_measurement_report(&orig); + ret = eq_positioning_measurement_report(&orig, &cp); + AssertFatal(ret, "eq_positioning_measurement_report(): copied message doesn't match\n"); + free_positioning_measurement_report(&orig); + free_positioning_measurement_report(&cp); + + printf("%s() successful\n", __func__); +} + +static void test_f1ap_positioning_measurement_abort() +{ + f1ap_positioning_measurement_abort_t orig = { + .transaction_id = 12, + .lmf_measurement_id = 1999, + .ran_measurement_id = 2225, + }; + F1AP_F1AP_PDU_t *f1enc = encode_positioning_measurement_abort(&orig); + F1AP_F1AP_PDU_t *f1dec = f1ap_encode_decode(f1enc); + f1ap_msg_free(f1enc); + + f1ap_positioning_measurement_abort_t decoded = {0}; + bool ret = decode_positioning_measurement_abort(f1dec, &decoded); + AssertFatal(ret, "decode_positioning_measurement_abort(): could not decode message\n"); + f1ap_msg_free(f1dec); + + ret = eq_positioning_measurement_abort(&orig, &decoded); + AssertFatal(ret, "eq_positioning_measurement_abort(): decoded message doesn't match\n"); + free_positioning_measurement_abort(&decoded); + + f1ap_positioning_measurement_abort_t cp = cp_positioning_measurement_abort(&orig); + ret = eq_positioning_measurement_abort(&orig, &cp); + AssertFatal(ret, "eq_positioning_measurement_abort(): copied message doesn't match\n"); + free_positioning_measurement_abort(&orig); + free_positioning_measurement_abort(&cp); + + printf("%s() successful\n", __func__); +} + +static void test_f1ap_positioning_measurement_failure_indication() +{ + f1ap_positioning_measurement_failure_indication_t orig = { + .transaction_id = 12, + .lmf_measurement_id = 1999, + .ran_measurement_id = 2225, + .cause = F1AP_CAUSE_MISC, + .cause_value = 3, + }; + F1AP_F1AP_PDU_t *f1enc = encode_positioning_measurement_failure_indication(&orig); + F1AP_F1AP_PDU_t *f1dec = f1ap_encode_decode(f1enc); + f1ap_msg_free(f1enc); + + f1ap_positioning_measurement_failure_indication_t decoded = {0}; + bool ret = decode_positioning_measurement_failure_indication(f1dec, &decoded); + AssertFatal(ret, "decode_positioning_measurement_failure_indication(): could not decode message\n"); + f1ap_msg_free(f1dec); + + ret = eq_positioning_measurement_failure_indication(&orig, &decoded); + AssertFatal(ret, "eq_positioning_measurement_failure_indication(): decoded message doesn't match\n"); + free_positioning_measurement_failure_indication(&decoded); + + f1ap_positioning_measurement_failure_indication_t cp = cp_positioning_measurement_failure_indication(&orig); + ret = eq_positioning_measurement_failure_indication(&orig, &cp); + AssertFatal(ret, "eq_positioning_measurement_failure_indication(): copied message doesn't match\n"); + free_positioning_measurement_failure_indication(&orig); + free_positioning_measurement_failure_indication(&cp); + + printf("%s() successful\n", __func__); +} + +static void test_f1ap_positioning_measurement_update() +{ + f1ap_positioning_measurement_update_t orig = { + .transaction_id = 12, + .lmf_measurement_id = 1999, + .ran_measurement_id = 2225, + }; + + // SRS configuration + orig.srs_configuration = calloc_or_fail(1, sizeof(*orig.srs_configuration)); + f1ap_srs_carrier_list_t *srs_carrier_list = &orig.srs_configuration->srs_carrier_list; + fill_srs_carrier_list(srs_carrier_list); + + F1AP_F1AP_PDU_t *f1enc = encode_positioning_measurement_update(&orig); + F1AP_F1AP_PDU_t *f1dec = f1ap_encode_decode(f1enc); + f1ap_msg_free(f1enc); + + f1ap_positioning_measurement_update_t decoded = {0}; + bool ret = decode_positioning_measurement_update(f1dec, &decoded); + AssertFatal(ret, "decode_positioning_measurement_update(): could not decode message\n"); + f1ap_msg_free(f1dec); + + ret = eq_positioning_measurement_update(&orig, &decoded); + AssertFatal(ret, "eq_positioning_measurement_update(): decoded message doesn't match\n"); + free_positioning_measurement_update(&decoded); + + f1ap_positioning_measurement_update_t cp = cp_positioning_measurement_update(&orig); + ret = eq_positioning_measurement_update(&orig, &cp); + AssertFatal(ret, "eq_positioning_measurement_update(): copied message doesn't match\n"); + free_positioning_measurement_update(&orig); + free_positioning_measurement_update(&cp); + + printf("%s() successful\n", __func__); +} + int main() { test_initial_ul_rrc_message_transfer(); @@ -1294,5 +2389,23 @@ int main() test_f1ap_ue_context_release_request(); test_f1ap_ue_context_release_command(); test_f1ap_ue_context_release_complete(); + test_f1ap_positioning_information_request(); + test_f1ap_positioning_information_response(); + test_f1ap_positioning_information_failure(); + test_f1ap_positioning_activation_request(); + test_f1ap_positioning_activation_response(); + test_f1ap_positioning_activation_failure(); + test_f1ap_positioning_deactivation(); + test_f1ap_positioning_information_update(); + test_f1ap_trp_information_request(); + test_f1ap_trp_information_response(); + test_f1ap_trp_information_failure(); + test_f1ap_positioning_measurement_request(); + test_f1ap_positioning_measurement_response(); + test_f1ap_positioning_measurement_failure(); + test_f1ap_positioning_measurement_report(); + test_f1ap_positioning_measurement_abort(); + test_f1ap_positioning_measurement_failure_indication(); + test_f1ap_positioning_measurement_update(); return 0; }