From patchwork Sat May 23 17:21:29 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vivien Didelot X-Patchwork-Id: 70551 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 0681CA04A5; Sat, 23 May 2020 22:21:47 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 061111D65E; Sat, 23 May 2020 22:21:31 +0200 (CEST) Received: from mail-qv1-f67.google.com (mail-qv1-f67.google.com [209.85.219.67]) by dpdk.org (Postfix) with ESMTP id D29991B13C for ; Sat, 23 May 2020 19:21:38 +0200 (CEST) Received: by mail-qv1-f67.google.com with SMTP id z9so6205365qvi.12 for ; Sat, 23 May 2020 10:21:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=K+4n/X8MkOp4c0heTgzPi9JGGdK3uaNSD7jdd8dzu5g=; b=NbJSdQxJ4ArH6kKMc40tSkyoJjx++7b9jrFHS585+gTJgHrowCFqsY53oZ2KADnLnX ice8Rzi93X8SepIZjK8Jin7Hgdl54/IQWnmIK8H6UoJoQRb5zh85q4tIbOCwuE9tbAMQ 9rZQEuA6vkXKWIHikPyQQQh7XIEPZcglU/6S+UuWv50GwOAxhkxQQYj6OSxntvzNCjyD hRbSZPSpDJFMrY+JzM6m3WMl3obk/C3053lJBRyBjeaqJQE6HjwVmythC/y6jgYVmcXr 2g3aSGxGQFCdlyDrkmoGpVEER2hcN2iCCZR82nMXIftJBFbII218jm09pRQ0DBxOq66H IxRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=K+4n/X8MkOp4c0heTgzPi9JGGdK3uaNSD7jdd8dzu5g=; b=pp9qSaYB/IPoLV+vTCBtWzXG5VNpAX0nVy0rQ4gmxglYXEGZyqxcq9hHgRnVf5jOV/ Th0Tbe4k/Iug9w4r0pJRf5xfPUu0MGIN4TwBnt780UMRZCv1CWz/wBM/OP/9pqymH1nj s9/CriiAT31qvIUeGRJUxDofOR7i0CFx3Ly2ettcyZAe8SGm7+b1fHWJIJUQMLe/w0rc Lov7E4QEGl2zao9YXZZ7wJv7PqK+AjyJHlkgYcj1IMBSx/1aysUdikZHW4l8Ng12QeLl oVMHgr/NEc6+puSIvH+PXVMmA//CY6scG8oaqaYWv85YEONv9ml3V/BmzpzcWqxNmEny 5d3Q== X-Gm-Message-State: AOAM533sayyuxrsKu8/opq0iELSF4/c3UZfxutidk/nsamF4hMVo/TtM Drfl9fOeqjyGr9zZ+b0BxmuNL42v X-Google-Smtp-Source: ABdhPJzLCUlMkqbJuaMxidDIufyQQc6Oh7a874CejUUd9c6e7L4hCGjirobrlupWsM9yvOlbT3j3Aw== X-Received: by 2002:a0c:b60c:: with SMTP id f12mr8972764qve.244.1590254497708; Sat, 23 May 2020 10:21:37 -0700 (PDT) Received: from localhost (modemcable249.105-163-184.mc.videotron.ca. [184.163.105.249]) by smtp.gmail.com with ESMTPSA id w14sm11049038qtt.82.2020.05.23.10.21.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 23 May 2020 10:21:36 -0700 (PDT) From: Vivien Didelot To: dev@dpdk.org Cc: patrick.keroulas@radio-canada.ca, thomas@monjalon.net, Vivien Didelot Date: Sat, 23 May 2020 13:21:29 -0400 Message-Id: <20200523172130.2285380-1-vivien.didelot@gmail.com> X-Mailer: git-send-email 2.26.2 MIME-Version: 1.0 X-Mailman-Approved-At: Sat, 23 May 2020 22:21:23 +0200 Subject: [dpdk-dev] [PATCH 1/2] net/pcap: support software Tx nanosecond timestamp X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" When capturing packets into a PCAP file, DPDK currently uses microseconds for the timestamp. But libpcap supports interpreting tv_usec as nanoseconds depending on the file timestamp precision. To support this, use PCAP_TSTAMP_PRECISION_NANO when creating the empty PCAP file as specified by PCAP_OPEN_DEAD(3PCAP) and implement nanosecond timeval addition. This also ensures that the precision reported by capinfos is nanoseconds (9). Signed-off-by: Vivien Didelot --- drivers/net/pcap/rte_eth_pcap.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/drivers/net/pcap/rte_eth_pcap.c b/drivers/net/pcap/rte_eth_pcap.c index b4c79d174..68588c3d7 100644 --- a/drivers/net/pcap/rte_eth_pcap.c +++ b/drivers/net/pcap/rte_eth_pcap.c @@ -287,6 +287,8 @@ eth_null_rx(void *queue __rte_unused, return 0; } +#define NSEC_PER_SEC 1e9 + static inline void calculate_timestamp(struct timeval *ts) { uint64_t cycles; @@ -294,8 +296,14 @@ calculate_timestamp(struct timeval *ts) { cycles = rte_get_timer_cycles() - start_cycles; cur_time.tv_sec = cycles / hz; - cur_time.tv_usec = (cycles % hz) * 1e6 / hz; - timeradd(&start_time, &cur_time, ts); + cur_time.tv_usec = (cycles % hz) * NSEC_PER_SEC / hz; + + ts->tv_sec = start_time.tv_sec + cur_time.tv_sec; + ts->tv_usec = start_time.tv_usec + cur_time.tv_usec; + if (ts->tv_usec > NSEC_PER_SEC) { + ts->tv_usec -= NSEC_PER_SEC; + ts->tv_sec += 1; + } } /* @@ -475,7 +483,8 @@ open_single_tx_pcap(const char *pcap_filename, pcap_dumper_t **dumper) * with pcap_dump_open(). We create big enough an Ethernet * pcap holder. */ - tx_pcap = pcap_open_dead(DLT_EN10MB, RTE_ETH_PCAP_SNAPSHOT_LEN); + tx_pcap = pcap_open_dead_with_tstamp_precision(DLT_EN10MB, + RTE_ETH_PCAP_SNAPSHOT_LEN, PCAP_TSTAMP_PRECISION_NANO); if (tx_pcap == NULL) { PMD_LOG(ERR, "Couldn't create dead pcap"); return -1; From patchwork Sat May 23 17:21:30 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vivien Didelot X-Patchwork-Id: 70552 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id B0018A04A5; Sat, 23 May 2020 22:21:55 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 378791D685; Sat, 23 May 2020 22:21:32 +0200 (CEST) Received: from mail-qk1-f193.google.com (mail-qk1-f193.google.com [209.85.222.193]) by dpdk.org (Postfix) with ESMTP id 524B01B13C for ; Sat, 23 May 2020 19:21:50 +0200 (CEST) Received: by mail-qk1-f193.google.com with SMTP id f83so13845882qke.13 for ; Sat, 23 May 2020 10:21:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=7BP5Krxau8MBsl/gZeTT3gn3tRfF/mYK6jvFipr0WLo=; b=RYOAG1I0btaBg0DTHHH2BzC/GjhyhQU8fzsAnNbOWaY+bXOCwn4XJioL6xhAWU1ErM lZxaV/sRDsfAokzjwybOTvjU8x90Z0RoA8Ii1/UnwyESrt4EvD2+dw4aLQcN7s1bRdEK xpRpmRCMcU1J9jF4AQoOBhjqrJvEcacGe8K8O/9eoJxnGL39UgPk3JUcB2Ep0f0sJvCp x/Hejt86VFSmUocijmyPi/gItwNgK1F8UprU6LeT2sa86L1o3bwl1ImkvyzfA3alSyzr RbcIpVXBIvKhqkx/DYdbrjCzyWkCvcA61C43Pv9TUTWOQnxyfY/YGpZKzab33ZGssX6i hA5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=7BP5Krxau8MBsl/gZeTT3gn3tRfF/mYK6jvFipr0WLo=; b=glNtAMvlaU2bG7+EtlXXwJpoHP2PwHKtmBPDDKKfhGhGFfFLrNnVtVwPdhKER9mXFq sBEWnabSv2dgER0+kCarJ+makjqKVupjjlYb2YJ6CzuyFsFgXD76TjTIB8kidFPq8cBR V6hnzvC6i+IcopIePOvfTajS9j2fyLE4NCTQlMQPg3qft2XzOC4Pk+yT2hruXZlVsMnW w+6krZPDLCQavQxBH2NmqZISo/FXK1PtCJnWDvUgOeRii1OPcHMBHXhTwmTwfmR4CK/t 0A6FG6Wx+R8PxjHdUCnRQFZVdPwxeh3Z/8IP8M86DkLgFPJze3ysgHQDzeBECEiG7HM7 MHRg== X-Gm-Message-State: AOAM532ErmLeJVBxl8XmIPFWkTCk3O0jjki4yZGb9m8veZ1ZJoo5jB06 27QxunQAVcy7x2gmLHSd5gxKdxLN X-Google-Smtp-Source: ABdhPJyr1IeqxDs72vTNBv9tkLdkwL/fuvWf3kc5lHysn1bFqF5dxf5z/CEbYj5t8dGoypkoyFKXcw== X-Received: by 2002:a05:620a:13cc:: with SMTP id g12mr20042320qkl.4.1590254509220; Sat, 23 May 2020 10:21:49 -0700 (PDT) Received: from localhost (modemcable249.105-163-184.mc.videotron.ca. [184.163.105.249]) by smtp.gmail.com with ESMTPSA id x4sm3756930qtj.43.2020.05.23.10.21.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 23 May 2020 10:21:48 -0700 (PDT) From: Vivien Didelot To: dev@dpdk.org Cc: patrick.keroulas@radio-canada.ca, thomas@monjalon.net, Vivien Didelot Date: Sat, 23 May 2020 13:21:30 -0400 Message-Id: <20200523172130.2285380-2-vivien.didelot@gmail.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200523172130.2285380-1-vivien.didelot@gmail.com> References: <20200523172130.2285380-1-vivien.didelot@gmail.com> MIME-Version: 1.0 X-Mailman-Approved-At: Sat, 23 May 2020 22:21:23 +0200 Subject: [dpdk-dev] [PATCH 2/2] net/pcap: add TODO for writing Tx HW timestamp X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" In order to write a packet with hardware timestamp enabled into a PCAP file, we need to convert its device specific raw timestamp first. This might not be trivial since querying the raw clock value from the device is still experimental, and derivating the frequency would ideally require an additional alarm thread. As a first step, pass the mbuf to the timestamp calculation function since mbuf->port and mbuf->timestamp would be needed, and add a TODO note. No functional changes. Signed-off-by: Vivien Didelot --- drivers/net/pcap/rte_eth_pcap.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/net/pcap/rte_eth_pcap.c b/drivers/net/pcap/rte_eth_pcap.c index 68588c3d7..f205a28e0 100644 --- a/drivers/net/pcap/rte_eth_pcap.c +++ b/drivers/net/pcap/rte_eth_pcap.c @@ -290,10 +290,16 @@ eth_null_rx(void *queue __rte_unused, #define NSEC_PER_SEC 1e9 static inline void -calculate_timestamp(struct timeval *ts) { +calculate_timestamp(const struct rte_mbuf *mbuf, struct timeval *ts) { uint64_t cycles; struct timeval cur_time; + if (mbuf->ol_flags & PKT_RX_TIMESTAMP) { + /* TODO: convert mbuf->timestamp into nanoseconds instead. + * See rte_eth_read_clock(). + */ + } + cycles = rte_get_timer_cycles() - start_cycles; cur_time.tv_sec = cycles / hz; cur_time.tv_usec = (cycles % hz) * NSEC_PER_SEC / hz; @@ -339,7 +345,7 @@ eth_pcap_tx_dumper(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) caplen = sizeof(temp_data); } - calculate_timestamp(&header.ts); + calculate_timestamp(mbuf, &header.ts); header.len = len; header.caplen = caplen; /* rte_pktmbuf_read() returns a pointer to the data directly