From patchwork Fri Dec 15 17:56:48 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yafang Shao X-Patchwork-Id: 849332 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="uiRYhVXC"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yyypq62GMz9s03 for ; Sat, 16 Dec 2017 04:58:43 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755955AbdLOR5X (ORCPT ); Fri, 15 Dec 2017 12:57:23 -0500 Received: from mail-pg0-f65.google.com ([74.125.83.65]:46600 "EHLO mail-pg0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755820AbdLOR5R (ORCPT ); Fri, 15 Dec 2017 12:57:17 -0500 Received: by mail-pg0-f65.google.com with SMTP id b11so6259485pgu.13; Fri, 15 Dec 2017 09:57:16 -0800 (PST) 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; bh=yIOI8d/JjXJuGefregdOG4eFKnPqobXKatWwkjgs4ig=; b=uiRYhVXC/S6R4LzFzH3WJLSBUnVQEc7bnrzWqZa8PKbVX78xSmItWpd8g5xi00gw5L XI3mbJozoLzn4JzL6luD9+fmw9FXXyub/I7Z4RomaUXIJRVGG4i4s0g61VrMIV78gO0i WoDT4KkEl7EoH23Mfa+QPURxieRqaR0jwgP402rriYgal5m0SP8gAUAC9jZvs/41y9Rm PqJ1DY1dQLiFMx1eH334CBXN7ixOujJ2CT7p2uhkxkjmZGrr328DeqoielTDW2VcxiD9 RVh0CYoxs3n0vGZt/daCURVK9mkfBBYmm/9/MZSy5ibe+LYhTyi3JfhhZMYagF57LXc/ e6+A== 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; bh=yIOI8d/JjXJuGefregdOG4eFKnPqobXKatWwkjgs4ig=; b=dnf8xUmeKuAT7MK5rjGuy4N5KYVRRq2OM+D7x44I92NJ6o5zFIDz9KN5rX8dBIwCgp bw3F+tpXxzj43Tk5rYoiokIF0FB/T6LOa0MgqkTq+mzLNkiLbVZZMB1sLJ7En0LTIekC QOydztgdRminFqEJ0M5gJbPnBWKvgXftDCb7t9MwtPIynsXvBcvJG46kSVj3uTDf0QI1 jE9M0HOQGrsDo1ei3A3nPMVNhEmWGe1HioA5P4TybMKgjYbrct4t3qdiEC1rfQ4EWjnp 7UZ82zuZMvvaGMZVjMO/i2HkZIvqyqKmlFH7kThtU8JYVmNuhMXUGTYnJHltoCg2SciI NdZA== X-Gm-Message-State: AKGB3mKyLy6YFBnEe+8JSs9zePWi/GCnfXrSAgjhaPJmBdoRICb6ElAG RjBtK6hWXRUZxhy7aKOwN0U= X-Google-Smtp-Source: ACJfBov7FiUU8GjqPZOdUbYsYW9o24l8fEFwsudCZD2saq3J0N8xOafX5JKLq+TPC7F+UiRw3T0ocQ== X-Received: by 10.99.153.2 with SMTP id d2mr12430754pge.379.1513360636159; Fri, 15 Dec 2017 09:57:16 -0800 (PST) Received: from li1588-6.members.linode.com (li1588-6.members.linode.com. [139.162.104.6]) by smtp.gmail.com with ESMTPSA id u68sm13242329pfu.17.2017.12.15.09.57.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 15 Dec 2017 09:57:15 -0800 (PST) From: Yafang Shao To: songliubraving@fb.com, davem@davemloft.net, marcelo.leitner@gmail.com, rostedt@goodmis.org Cc: bgregg@netflix.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Yafang Shao Subject: [PATCH v2 net-next 1/4] tcp: Export to userspace the TCP state names for the trace events Date: Sat, 16 Dec 2017 01:56:48 +0800 Message-Id: <1513360611-11392-2-git-send-email-laoar.shao@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1513360611-11392-1-git-send-email-laoar.shao@gmail.com> References: <1513360611-11392-1-git-send-email-laoar.shao@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: "Steven Rostedt (VMware)" The TCP trace events (specifically tcp_set_state), maps emums to symbol names via __print_symbolic(). But this only works for reading trace events from the tracefs trace files. If perf or trace-cmd were to record these events, the event format file does not convert the enum names into numbers, and you get something like: __print_symbolic(REC->oldstate, { TCP_ESTABLISHED, "TCP_ESTABLISHED" }, { TCP_SYN_SENT, "TCP_SYN_SENT" }, { TCP_SYN_RECV, "TCP_SYN_RECV" }, { TCP_FIN_WAIT1, "TCP_FIN_WAIT1" }, { TCP_FIN_WAIT2, "TCP_FIN_WAIT2" }, { TCP_TIME_WAIT, "TCP_TIME_WAIT" }, { TCP_CLOSE, "TCP_CLOSE" }, { TCP_CLOSE_WAIT, "TCP_CLOSE_WAIT" }, { TCP_LAST_ACK, "TCP_LAST_ACK" }, { TCP_LISTEN, "TCP_LISTEN" }, { TCP_CLOSING, "TCP_CLOSING" }, { TCP_NEW_SYN_RECV, "TCP_NEW_SYN_RECV" }) Where trace-cmd and perf do not know the values of those enums. Use the TRACE_DEFINE_ENUM() macros that will have the trace events convert the enum strings into their values at system boot. This will allow perf and trace-cmd to see actual numbers and not enums: __print_symbolic(REC->oldstate, { 1, "TCP_ESTABLISHED" }, { 2, "TCP_SYN_SENT" }, { 3, "TCP_SYN_RECV" }, { 4, "TCP_FIN_WAIT1" }, { 5, "TCP_FIN_WAIT2" }, { 6, "TCP_TIME_WAIT" }, { 7, "TCP_CLOSE" }, { 8, "TCP_CLOSE_WAIT" }, { 9, "TCP_LAST_ACK" }, { 10, "TCP_LISTEN" }, { 11, "TCP_CLOSING" }, { 12, "TCP_NEW_SYN_RECV" }) Signed-off-by: Steven Rostedt (VMware) Acked-by: Song Liu Signed-off-by: Yafang Shao --- include/trace/events/tcp.h | 41 ++++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-) -- 1.8.3.1 diff --git a/include/trace/events/tcp.h b/include/trace/events/tcp.h index 07cccca..40240ac 100644 --- a/include/trace/events/tcp.h +++ b/include/trace/events/tcp.h @@ -9,21 +9,36 @@ #include #include +#define tcp_state_names \ + EM(TCP_ESTABLISHED) \ + EM(TCP_SYN_SENT) \ + EM(TCP_SYN_RECV) \ + EM(TCP_FIN_WAIT1) \ + EM(TCP_FIN_WAIT2) \ + EM(TCP_TIME_WAIT) \ + EM(TCP_CLOSE) \ + EM(TCP_CLOSE_WAIT) \ + EM(TCP_LAST_ACK) \ + EM(TCP_LISTEN) \ + EM(TCP_CLOSING) \ + EMe(TCP_NEW_SYN_RECV) \ + +/* enums need to be exported to user space */ +#undef EM +#undef EMe +#define EM(a) TRACE_DEFINE_ENUM(a); +#define EMe(a) TRACE_DEFINE_ENUM(a); + +tcp_state_names + +#undef EM +#undef EMe +#define EM(a) tcp_state_name(a), +#define EMe(a) tcp_state_name(a) + #define tcp_state_name(state) { state, #state } #define show_tcp_state_name(val) \ - __print_symbolic(val, \ - tcp_state_name(TCP_ESTABLISHED), \ - tcp_state_name(TCP_SYN_SENT), \ - tcp_state_name(TCP_SYN_RECV), \ - tcp_state_name(TCP_FIN_WAIT1), \ - tcp_state_name(TCP_FIN_WAIT2), \ - tcp_state_name(TCP_TIME_WAIT), \ - tcp_state_name(TCP_CLOSE), \ - tcp_state_name(TCP_CLOSE_WAIT), \ - tcp_state_name(TCP_LAST_ACK), \ - tcp_state_name(TCP_LISTEN), \ - tcp_state_name(TCP_CLOSING), \ - tcp_state_name(TCP_NEW_SYN_RECV)) + __print_symbolic(val, tcp_state_names) /* * tcp event with arguments sk and skb