+O-RAN One Way Delay Measurements
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The support for the eCPRI one- way delay measurements which are specified by
+the O-RAN to be used with the Measured Transport support per Section 2.3.3.3
+of the O-RAN-WG4.CUS.0-v4.00 specification and section 3.2.4.6 of the eCPRI_v2.0
+specification is implemented in the file xran_delay_measurement.c. Structure
+definitions used by the owd measurement functions are in the file xran_fh_o_du.h
+for common data and port specific variables and parameters.
+
+The implementation of this feature has been done under the assumption that the requestor
+is the O-DU and the recipient is the O-RU. All of the action_types per the eCPRI 2.0 have
+been implemented. In the current version the timestamps are obtained using the linux
+function clock_gettime using CLOCK_REALTIME as the clock_id argument.
+
+The implementation supports both the O-RU and the O-DU side in order to do the unit test
+in loopback mode.
+
+The one-delay measurements are enabled at configuration time and run right after the
+xran_start() function is executed. The total number of consecutive measurements per port
+should be a power of 2 and in order to minimize the system startup it is advisable that
+the number is 16 or below.
+
+The following functions can be found in the xran_delay_measurement.c:
+
+xran_ecpri_one_way_delay_measurement_transmitter() which is invoked from the
+process_dpdk_io()function if the one-way delay measurements are enabled. This is
+the main function for the owd transmitter.
+
+xran_generate_delay_meas() is a general function used by the transmitter to send the appropriate
+messages based on actionType and filling up all the details for the ethernet and ecpri layers.
+
+Process_delay_meas() this function is invoked from the handle_ecpri_ethertype() function when
+the ecpri message type is ECPRI_DELAY_MEASUREMENT. This is the main owd receiver function.
+
+From the Process_delay_meas() and depending on the message received we can execute one
+of the following functions
+
+xran_process_delmeas_request() If we received a request message.
+
+xran_process_delmeas_request_w_fup() If we received a request with follow up message.
+
+xran_process_delmeas_response() If we received a response message.
+
+xran_process_delmeas_rem_request() If we received a remote request message
+
+
+xran_delmeas_rem_request_w_fup() If we received a remote request with follow up message.
+
+All of the receiver functions also can generate the appropriate send message by using
+the DPDK function rte_eth_tx_burst() to minimize the response delay.
+
+Additional utility functions used by the owd implementation for managing of timestamps
+and time measurements are:
+
+xran_ptp_ts_to_ns() that takes a TimeStamp argument from a received owd ecpri packet and
+places it in host order and returns the value in nanoseconds.
+
+xran_timespec_to_ns() that takes an argument in timespec format like the return value from the
+linux function clock_gettime() and returns a value in nanoseconds.
+
+xran_ns_to_timespec() that takes an argument in nanoseconds and returns a value by
+reference in timespec format.
+
+xran_compute_and_report_delay_estimate() This function takes an average of the computed one way
+delay measurements and prints out the average value to the console expressed in nanoseconds.
+Currently we exclude the first 2 measurements from the average.
+
+Utility functions in support of the owd ecpri packet formulation are:
+
+xran_build_owd_meas_ecpri_hdr() Builds the ecpri header with message type ECPRI_DELAY_MEASUREMENT
+and writes the payload size in network order.