Hi. I would like to be able to get tx timestamps of packets sent by the packet mmap interface... Actually, I try to get them with the sample code below. The problem is that it doesn't work without the joined patch. I wonder if my current implementation is good. And if not, how should i get the timestamps ? Wouldn't be a good idea to put timestamps in the ring buffer frame before give back the frame to the user ? Thanks for your help and advices. Paul. 8<------------------------------- struct timespec ts = {0,0}; struct sockaddr from_addr; static uint8_t tmp_data[256]; struct iovec msg_iov = {tmp_data, sizeof(tmp_data)}; static uint8_t cmsg_buff[256]; struct msghdr msghdr = {&from_addr, sizeof(from_addr), &msg_iov, 1, cmsg_buff, sizeof(cmsg_buff), 0}; ssize_t err = recvmsg(itf->sock_fd, &msghdr, MSG_ERRQUEUE); if(err < 0) { perror("recvmsg failed"); return -1; } struct cmsghdr *cmsg; for(cmsg = CMSG_FIRSTHDR(&msghdr); cmsg != NULL; cmsg = CMSG_NXTHDR(&msghdr, cmsg)) { if(cmsg->cmsg_level == SOL_SOCKET && cmsg->cmsg_type == SCM_TIMESTAMPING) { ts = *(struct timespec *)CMSG_DATA(cmsg); #if !defined(NDEBUG) if(itf->debug) { fprintf(stderr, "SCM_TIMESTAMPING available\n"); } #else break; #endif } else if (cmsg->cmsg_level == SOL_PACKET && cmsg->cmsg_type == PACKET_TX_TIMESTAMP) { ts = *(struct timespec *)CMSG_DATA(cmsg); #if !defined(NDEBUG) if(itf->debug) { fprintf(stderr, "PACKET_TX_TIMESTAMP available\n"); } #else break; #endif } }