From patchwork Wed Dec 12 15:29:25 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul Chavent X-Patchwork-Id: 205567 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 9850E2C0086 for ; Thu, 13 Dec 2012 02:33:34 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754178Ab2LLPdc (ORCPT ); Wed, 12 Dec 2012 10:33:32 -0500 Received: from briaree.onecert.fr ([134.212.190.4]:50096 "EHLO briaree.onecert.fr" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754125Ab2LLPdb (ORCPT ); Wed, 12 Dec 2012 10:33:31 -0500 Received: from neree.onecert.fr (thetis.onecert.fr [134.212.178.12]) by briaree.onecert.fr (8.14.3/8.14.3/ONERA-SRI) with ESMTP id qBCFW1m3009240; Wed, 12 Dec 2012 16:32:01 +0100 Received: from neree.onecert.fr (thetis.antiviral [127.0.0.1]) by neree.onecert.fr (8.14.3/8.14.3/ONERA-SRI) with ESMTP id qBCFW1TR019408; Wed, 12 Dec 2012 16:32:01 +0100 Received: from wdcsd911h.onecert.fr (wdcsd911h.cert.fr [134.212.241.58]) by neree.onecert.fr (8.14.3/8.14.3/ONERA-SRI) with ESMTP id qBCFVxom019404; Wed, 12 Dec 2012 16:31:59 +0100 From: Paul Chavent To: davem@davemloft.net, edumazet@google.com, daniel.borkmann@tik.ee.ethz.ch, xemul@parallels.com, ebiederm@xmission.com, netdev@vger.kernel.org Cc: Paul Chavent Subject: [RFC] net : add tx timestamp to packet mmap. Date: Wed, 12 Dec 2012 16:29:25 +0100 Message-Id: <1355326165-12277-1-git-send-email-paul.chavent@onera.fr> X-Mailer: git-send-email 1.7.12.1 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.2.3 (briaree.onecert.fr [134.212.190.4]); Wed, 12 Dec 2012 16:32:02 +0100 (CET) X-Virus-Scanned: clamav-milter 0.97.3 at briaree.onecert.fr X-Virus-Status: Clean X-Spam-Status: No, score=-4.4 required=6.0 tests=ALL_TRUSTED, BAYES_00 autolearn=ham version=3.2.5-onera_sri_4 X-Spam-Checker-Version: SpamAssassin 3.2.5-onera_sri_4 (2008-06-10) on briaree.onecert.fr Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This patch allow to generate tx timestamps of packets sent by the packet mmap interface. Actually, you can't get tx timestamps with the sample code below. 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 it back to the user ? Thanks for your comments. /* BEGIN OF SAMPLE CODE */ 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); fprintf(stderr, "SCM_TIMESTAMPING available\n"); } else if (cmsg->cmsg_level == SOL_PACKET && cmsg->cmsg_type == PACKET_TX_TIMESTAMP) { ts = *(struct timespec *)CMSG_DATA(cmsg); fprintf(stderr, "PACKET_TX_TIMESTAMP available\n"); } } /* END OF SAMPLE CODE */ Signed-off-by: Paul Chavent --- net/packet/af_packet.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index e639645..948748b 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -1857,6 +1857,10 @@ static int tpacket_fill_skb(struct packet_sock *po, struct sk_buff *skb, void *data; int err; + err = sock_tx_timestamp(&po->sk, &skb_shinfo(skb)->tx_flags); + if (err < 0) + return err; + ph.raw = frame; skb->protocol = proto;