From e163bd84801dec5c87978b6704cb66ac3f3ee8dc Mon Sep 17 00:00:00 2001 From: Christoph Kuhr Date: Mon, 22 Oct 2018 14:12:00 +0200 Subject: [PATCH] try arrival timestamping again --- linux/avb/avb_sockets.c | 66 ++++++++++++++++++++++------------------- 1 file changed, 35 insertions(+), 31 deletions(-) diff --git a/linux/avb/avb_sockets.c b/linux/avb/avb_sockets.c index 592111f0..4f8ce4de 100644 --- a/linux/avb/avb_sockets.c +++ b/linux/avb/avb_sockets.c @@ -106,37 +106,41 @@ int create_RAW_AVB_Transport_Socket( FILE* filepointer, int* raw_transport_socke } -// /* Set Timestamping Option => requires recvmsg to be used => timestamp in ancillary data */ -// int timestamp_flags = 0; -// timestamp_flags |= SOF_TIMESTAMPING_RX_HARDWARE; -// timestamp_flags |= SOF_TIMESTAMPING_SYS_HARDWARE; -// timestamp_flags |= SOF_TIMESTAMPING_RAW_HARDWARE; -// -// -// struct hwtstamp_config hwconfig; -// memset( &hwconfig, 0, sizeof( hwconfig )); -// hwconfig.rx_filter = HWTSTAMP_FILTER_ALL; -// hwconfig.tx_type = HWTSTAMP_TX_OFF; -// -// struct ifreq hwtstamp; -// memset((char*)&hwtstamp, 0, sizeof(struct ifreq)); -// strncpy(hwtstamp.ifr_name, ifr.ifr_name, IFNAMSIZ-1); -// hwtstamp.ifr_data = (void *) &hwconfig; -// -// if( ioctl( *raw_transport_socket, SIOCSHWTSTAMP, &hwtstamp ) == -1 ) { -// fprintf(filepointer, "[RAW TRANSPORT] ioctl timestamping failed %d %s \n", errno, strerror(errno));fflush(filepointer); -// close(*raw_transport_socket); -// return RETURN_VALUE_FAILURE; -// } -// -// -// if (setsockopt(*raw_transport_socket, SOL_SOCKET, SO_TIMESTAMPING, ×tamp_flags, sizeof(timestamp_flags) ) == -1) { -// fprintf(filepointer, "[RAW TRANSPORT] setsockopt timestamping failed %d %s \n", errno, strerror(errno));fflush(filepointer); -// close(*raw_transport_socket); -// return RETURN_VALUE_FAILURE; -// } else { -// fprintf(filepointer, "[RAW TRANSPORT] Timestamp Socket \n");fflush(filepointer); -// } + /* Set Timestamping Option => requires recvmsg to be used => timestamp in ancillary data */ + int timestamp_flags = 0; + +// timestamp_flags |= SOF_TIMESTAMPING_TX_HARDWARE; + timestamp_flags |= SOF_TIMESTAMPING_RX_HARDWARE; + timestamp_flags |= SOF_TIMESTAMPING_SYS_HARDWARE; + timestamp_flags |= SOF_TIMESTAMPING_RAW_HARDWARE; + + + struct hwtstamp_config hwconfig; + memset( &hwconfig, 0, sizeof( hwconfig )); + hwconfig.rx_filter = HWTSTAMP_FILTER_ALL; + hwconfig.tx_type = HWTSTAMP_TX_OFF; +// hwconfig.tx_type = HWTSTAMP_TX_ON; + + + struct ifreq hwtstamp; + memset((char*)&hwtstamp, 0, sizeof(struct ifreq)); + strncpy(hwtstamp.ifr_name, ifr.ifr_name, IFNAMSIZ-1); + hwtstamp.ifr_data = (void *) &hwconfig; + + if( ioctl( *raw_transport_socket, SIOCSHWTSTAMP, &hwtstamp ) == -1 ) { + fprintf(filepointer, "[RAW TRANSPORT] ioctl timestamping failed %d %s \n", errno, strerror(errno));fflush(filepointer); + close(*raw_transport_socket); + return RETURN_VALUE_FAILURE; + } + + + if (setsockopt(*raw_transport_socket, SOL_SOCKET, SO_TIMESTAMPING, ×tamp_flags, sizeof(timestamp_flags) ) == -1) { + fprintf(filepointer, "[RAW TRANSPORT] setsockopt timestamping failed %d %s \n", errno, strerror(errno));fflush(filepointer); + close(*raw_transport_socket); + return RETURN_VALUE_FAILURE; + } else { + fprintf(filepointer, "[RAW TRANSPORT] Timestamp Socket \n");fflush(filepointer); + } /* Bind Socket to Device */