Merge remote-tracking branch 'origin/nrppa_f1ap_integration' into integration_2026_w04 (!3820)

Integrate F1AP messages required for NRPPa

This MR is one of the several MRs that will follow in the integration of NRPPa
protocol (!2437) required for positioning in 5G NR. We specifically introduce
encoding and decoding of several F1AP messages including unit tests for
verification in this MR.

The details of the F1AP messages introduced here can be seen below:
- POSITIONING INFORMATION REQUEST
- POSITIONING INFORMATION RESPONSE
  - Supported optional field: SRS Configuration
- POSITIONING INFORMATION FAILURE
- POSITIONING INFORMATION UPDATE
  - Supported optional field: SRS Configuration
- POSITIONING ACTIVATION REQUEST
- POSITIONING ACTIVATION RESPONSE
- POSITIONING ACTIVATION FAILURE
- POSITIONING DEACTIVATION
- TRP INFORMATION REQUEST
- TRP INFORMATION RESPONSE
  - Supported : NR PCI, NG-RAN CGI, NR ARFCN, Geogarphical Coordinates
- TRP INFORMATION FAILURE
- POSITIONING MEASUREMENT REQUEST
  - Supported optional field: SRS Configuration
- POSITIONING MEASUREMENT RESPONSE
- POSITIONING MEASUREMENT FAILURE
- POSITIONING MEASUREMENT REPORT
- POSITIONING MEASUREMENT ABORT
- POSITIONING MEASUREMENT FAILURE INDICATION
- POSITIONING MEASUREMENT UPDATE
  - Supported optional field: SRS Configuration

The reference to these messages can be found in 3GPP 38.473 v16.21.0
This commit is contained in:
Jaroslava Fiedlerova
2026-01-19 10:28:22 +01:00
12 changed files with 21870 additions and 21 deletions
+933
View File
@@ -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_ */
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+3 -1
View File
@@ -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()
+1
View File
@@ -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
+11 -11
View File
@@ -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_;
+43
View File
@@ -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_ */
File diff suppressed because it is too large Load Diff
+165
View File
@@ -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 <stdbool.h>
#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_ */
@@ -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);
+6 -6
View File
@@ -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) {
File diff suppressed because it is too large Load Diff