diff --git a/nfapi/open-nFAPI/fapi/inc/nr_fapi_p7_utils.h b/nfapi/open-nFAPI/fapi/inc/nr_fapi_p7_utils.h
index 91f5a959bfc5623d8305328ff2aca1c57b7b4ce1..e0682dbb44e88eda2d27ff926eac4d3645393f2e 100644
--- a/nfapi/open-nFAPI/fapi/inc/nr_fapi_p7_utils.h
+++ b/nfapi/open-nFAPI/fapi/inc/nr_fapi_p7_utils.h
@@ -44,6 +44,7 @@ bool eq_rx_data_indication(const nfapi_nr_rx_data_indication_t *a, const nfapi_n
 bool eq_crc_indication(const nfapi_nr_crc_indication_t *a, const nfapi_nr_crc_indication_t *b);
 bool eq_uci_indication(const nfapi_nr_uci_indication_t *a, const nfapi_nr_uci_indication_t *b);
 bool eq_srs_indication(const nfapi_nr_srs_indication_t *a, const nfapi_nr_srs_indication_t *b);
+bool eq_rach_indication(const nfapi_nr_rach_indication_t *a, const nfapi_nr_rach_indication_t *b);
 
 void free_dl_tti_request(nfapi_nr_dl_tti_request_t *msg);
 void free_ul_tti_request(nfapi_nr_ul_tti_request_t *msg);
@@ -54,6 +55,7 @@ void free_rx_data_indication(nfapi_nr_rx_data_indication_t *msg);
 void free_crc_indication(nfapi_nr_crc_indication_t *msg);
 void free_uci_indication(nfapi_nr_uci_indication_t *msg);
 void free_srs_indication(nfapi_nr_srs_indication_t *msg);
+void free_rach_indication(nfapi_nr_rach_indication_t *msg);
 
 void copy_dl_tti_request(const nfapi_nr_dl_tti_request_t *src, nfapi_nr_dl_tti_request_t *dst);
 void copy_ul_tti_request(const nfapi_nr_ul_tti_request_t *src, nfapi_nr_ul_tti_request_t *dst);
@@ -64,6 +66,7 @@ void copy_rx_data_indication(const nfapi_nr_rx_data_indication_t *src, nfapi_nr_
 void copy_crc_indication(const nfapi_nr_crc_indication_t *src, nfapi_nr_crc_indication_t *dst);
 void copy_uci_indication(const nfapi_nr_uci_indication_t *src, nfapi_nr_uci_indication_t *dst);
 void copy_srs_indication(const nfapi_nr_srs_indication_t *src, nfapi_nr_srs_indication_t *dst);
+void copy_rach_indication(const nfapi_nr_rach_indication_t *src, nfapi_nr_rach_indication_t *dst);
 
 
 size_t get_tx_data_request_size(const nfapi_nr_tx_data_request_t *msg);
@@ -71,4 +74,5 @@ size_t get_rx_data_indication_size(const nfapi_nr_rx_data_indication_t *msg);
 size_t get_crc_indication_size(const nfapi_nr_crc_indication_t *msg);
 size_t get_uci_indication_size(const nfapi_nr_uci_indication_t *msg);
 size_t get_srs_indication_size(const nfapi_nr_srs_indication_t *msg);
+size_t get_rach_indication_size(nfapi_nr_rach_indication_t *msg);
 #endif // OPENAIRINTERFACE_NR_FAPI_P7_UTILS_H
diff --git a/nfapi/open-nFAPI/fapi/src/nr_fapi_p7_utils.c b/nfapi/open-nFAPI/fapi/src/nr_fapi_p7_utils.c
index c12e88de02ed259f775554d50962f28f8f9e274c..395cb29fe1d741efe67c07284e3b75f124022927 100644
--- a/nfapi/open-nFAPI/fapi/src/nr_fapi_p7_utils.c
+++ b/nfapi/open-nFAPI/fapi/src/nr_fapi_p7_utils.c
@@ -825,6 +825,38 @@ bool eq_srs_indication(const nfapi_nr_srs_indication_t *a, const nfapi_nr_srs_in
   return true;
 }
 
+static bool eq_rach_indication_PDU(const nfapi_nr_prach_indication_pdu_t *a, const nfapi_nr_prach_indication_pdu_t *b)
+{
+  EQ(a->phy_cell_id, b->phy_cell_id);
+  EQ(a->symbol_index, b->symbol_index);
+  EQ(a->slot_index, b->slot_index);
+  EQ(a->freq_index, b->freq_index);
+  EQ(a->avg_rssi, b->avg_rssi);
+  EQ(a->avg_snr, b->avg_snr);
+  EQ(a->num_preamble, b->num_preamble);
+  for (int preamble_idx = 0; preamble_idx < a->num_preamble; ++preamble_idx) {
+    const nfapi_nr_prach_indication_preamble_t *a_pr = &a->preamble_list[preamble_idx];
+    const nfapi_nr_prach_indication_preamble_t *b_pr = &b->preamble_list[preamble_idx];
+    EQ(a_pr->preamble_index, b_pr->preamble_index);
+    EQ(a_pr->timing_advance, b_pr->timing_advance);
+    EQ(a_pr->preamble_pwr, b_pr->preamble_pwr);
+  }
+  return true;
+}
+
+bool eq_rach_indication(const nfapi_nr_rach_indication_t *a, const nfapi_nr_rach_indication_t *b)
+{
+  EQ(a->header.message_id, b->header.message_id);
+  EQ(a->header.message_length, b->header.message_length);
+  EQ(a->sfn, b->sfn);
+  EQ(a->slot, b->slot);
+  EQ(a->number_of_pdus, b->number_of_pdus);
+  for (int pdu_idx = 0; pdu_idx < a->number_of_pdus; ++pdu_idx) {
+    EQ(eq_rach_indication_PDU(&a->pdu_list[pdu_idx], &b->pdu_list[pdu_idx]), true);
+  }
+  return true;
+}
+
 void free_dl_tti_request(nfapi_nr_dl_tti_request_t *msg)
 {
   if (msg->vendor_extension) {
@@ -973,6 +1005,13 @@ void free_srs_indication(nfapi_nr_srs_indication_t *msg)
   }
 }
 
+void free_rach_indication(nfapi_nr_rach_indication_t *msg)
+{
+  if (msg->pdu_list) {
+    free(msg->pdu_list);
+  }
+}
+
 static void copy_dl_tti_beamforming(const nfapi_nr_tx_precoding_and_beamforming_t *src,
                                     nfapi_nr_tx_precoding_and_beamforming_t *dst)
 {
@@ -1916,3 +1955,49 @@ size_t get_srs_indication_size(const nfapi_nr_srs_indication_t *msg)
 
   return total_size;
 }
+
+static void copy_rach_indication_PDU(const nfapi_nr_prach_indication_pdu_t *src, nfapi_nr_prach_indication_pdu_t *dst)
+{
+  dst->phy_cell_id = src->phy_cell_id;
+  dst->symbol_index = src->symbol_index;
+  dst->slot_index = src->slot_index;
+  dst->freq_index = src->freq_index;
+  dst->avg_rssi = src->avg_rssi;
+  dst->avg_snr = src->avg_snr;
+  dst->num_preamble = src->num_preamble;
+  for (int preamble_idx = 0; preamble_idx < dst->num_preamble; ++preamble_idx) {
+    nfapi_nr_prach_indication_preamble_t *dst_pr = &dst->preamble_list[preamble_idx];
+    const nfapi_nr_prach_indication_preamble_t *src_pr = &src->preamble_list[preamble_idx];
+    dst_pr->preamble_index = src_pr->preamble_index;
+    dst_pr->timing_advance = src_pr->timing_advance;
+    dst_pr->preamble_pwr = src_pr->preamble_pwr;
+  }
+}
+
+void copy_rach_indication(const nfapi_nr_rach_indication_t *src, nfapi_nr_rach_indication_t *dst)
+{
+  dst->header.message_id = src->header.message_id;
+  dst->header.message_length = src->header.message_length;
+  dst->sfn = src->sfn;
+  dst->slot = src->slot;
+  dst->number_of_pdus = src->number_of_pdus;
+  dst->pdu_list = calloc(dst->number_of_pdus, sizeof(*dst->pdu_list));
+  for (int pdu_idx = 0; pdu_idx < dst->number_of_pdus; ++pdu_idx) {
+    copy_rach_indication_PDU(&src->pdu_list[pdu_idx], &dst->pdu_list[pdu_idx]);
+  }
+}
+
+size_t get_rach_indication_size(nfapi_nr_rach_indication_t *msg)
+{
+  // Get size of the message (allocated pointer included)
+  size_t total_size = 0;
+
+  // Header and fixed-size fields
+  total_size += sizeof(msg->header);
+  total_size += sizeof(msg->sfn);
+  total_size += sizeof(msg->slot);
+  total_size += sizeof(msg->number_of_pdus);
+  total_size += msg->number_of_pdus * sizeof(*msg->pdu_list);
+
+  return total_size;
+}