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 31f1700dc9af3a243e5a56918ada028a299b507d..91f5a959bfc5623d8305328ff2aca1c57b7b4ce1 100644
--- a/nfapi/open-nFAPI/fapi/inc/nr_fapi_p7_utils.h
+++ b/nfapi/open-nFAPI/fapi/inc/nr_fapi_p7_utils.h
@@ -43,6 +43,7 @@ bool eq_tx_data_request(const nfapi_nr_tx_data_request_t *a, const nfapi_nr_tx_d
 bool eq_rx_data_indication(const nfapi_nr_rx_data_indication_t *a, const nfapi_nr_rx_data_indication_t *b);
 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);
 
 void free_dl_tti_request(nfapi_nr_dl_tti_request_t *msg);
 void free_ul_tti_request(nfapi_nr_ul_tti_request_t *msg);
@@ -52,6 +53,7 @@ void free_tx_data_request(nfapi_nr_tx_data_request_t *msg);
 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 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);
@@ -61,10 +63,12 @@ void copy_tx_data_request(const nfapi_nr_tx_data_request_t *src, nfapi_nr_tx_dat
 void copy_rx_data_indication(const nfapi_nr_rx_data_indication_t *src, nfapi_nr_rx_data_indication_t *dst);
 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);
 
 
 size_t get_tx_data_request_size(const nfapi_nr_tx_data_request_t *msg);
 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);
 #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 a7699cea89640be4f5ab11cd90dddff71e661e48..c12e88de02ed259f775554d50962f28f8f9e274c 100644
--- a/nfapi/open-nFAPI/fapi/src/nr_fapi_p7_utils.c
+++ b/nfapi/open-nFAPI/fapi/src/nr_fapi_p7_utils.c
@@ -789,6 +789,42 @@ bool eq_uci_indication(const nfapi_nr_uci_indication_t *a, const nfapi_nr_uci_in
   return true;
 }
 
+static bool eq_srs_indication_report_tlv(const nfapi_srs_report_tlv_t *a, const nfapi_srs_report_tlv_t *b)
+{
+  EQ(a->tag, b->tag);
+  EQ(a->length, b->length);
+  for (int i = 0; i < (a->length + 3) / 4; ++i) {
+    EQ(a->value[i], b->value[i]);
+  }
+  return true;
+}
+
+static bool eq_srs_indication_PDU(const nfapi_nr_srs_indication_pdu_t *a, const nfapi_nr_srs_indication_pdu_t *b)
+{
+  EQ(a->handle, b->handle);
+  EQ(a->rnti, b->rnti);
+  EQ(a->timing_advance_offset, b->timing_advance_offset);
+  EQ(a->timing_advance_offset_nsec, b->timing_advance_offset_nsec);
+  EQ(a->srs_usage, b->srs_usage);
+  EQ(a->report_type, b->report_type);
+  EQ(eq_srs_indication_report_tlv(&a->report_tlv, &b->report_tlv), true);
+  return true;
+}
+
+bool eq_srs_indication(const nfapi_nr_srs_indication_t *a, const nfapi_nr_srs_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->control_length, b->control_length);
+  EQ(a->number_of_pdus, b->number_of_pdus);
+  for (int pdu_idx = 0; pdu_idx < a->number_of_pdus; ++pdu_idx) {
+    EQ(eq_srs_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) {
@@ -930,6 +966,13 @@ void free_uci_indication(nfapi_nr_uci_indication_t *msg)
   }
 }
 
+void free_srs_indication(nfapi_nr_srs_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)
 {
@@ -1823,3 +1866,53 @@ size_t get_uci_indication_size(const nfapi_nr_uci_indication_t *msg)
 
   return total_size;
 }
+
+void copy_srs_indication_report_tlv(const nfapi_srs_report_tlv_t *src, nfapi_srs_report_tlv_t *dst)
+{
+  dst->tag = src->tag;
+  dst->length = src->length;
+  for (int i = 0; i < (dst->length + 3) / 4; ++i) {
+    dst->value[i] = src->value[i];
+  }
+}
+
+void copy_srs_indication_PDU(const nfapi_nr_srs_indication_pdu_t *src, nfapi_nr_srs_indication_pdu_t *dst)
+{
+  dst->handle = src->handle;
+  dst->rnti = src->rnti;
+  dst->timing_advance_offset = src->timing_advance_offset;
+  dst->timing_advance_offset_nsec = src->timing_advance_offset_nsec;
+  dst->srs_usage = src->srs_usage;
+  dst->report_type = src->report_type;
+  copy_srs_indication_report_tlv(&src->report_tlv, &dst->report_tlv);
+}
+
+void copy_srs_indication(const nfapi_nr_srs_indication_t *src, nfapi_nr_srs_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->control_length = src->control_length;
+  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 < src->number_of_pdus; ++pdu_idx) {
+    copy_srs_indication_PDU(&src->pdu_list[pdu_idx], &dst->pdu_list[pdu_idx]);
+  }
+}
+
+size_t get_srs_indication_size(const nfapi_nr_srs_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->control_length);
+  total_size += sizeof(msg->number_of_pdus);
+  total_size += msg->number_of_pdus * sizeof(*msg->pdu_list);
+
+  return total_size;
+}