From patchwork Wed Dec 20 03:12:50 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yafang Shao X-Patchwork-Id: 851187 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="RNUsuD4o"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3z1fyB5HkWz9s82 for ; Wed, 20 Dec 2017 14:14:26 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754069AbdLTDNV (ORCPT ); Tue, 19 Dec 2017 22:13:21 -0500 Received: from mail-pl0-f67.google.com ([209.85.160.67]:37106 "EHLO mail-pl0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753983AbdLTDNS (ORCPT ); Tue, 19 Dec 2017 22:13:18 -0500 Received: by mail-pl0-f67.google.com with SMTP id s3so8229304plp.4; Tue, 19 Dec 2017 19:13:18 -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=qHz8qjkHGjIs7FloOwTG/yrTOYhKAAu90A8kwJN3H3g=; b=RNUsuD4oaCiMEtv215q4wLgB3Rhh4YT88moWjONdVazyypCyOVEl+ZXILP7ArvrE9I zk/9sUjEkMpMgR6LSopPq210D72XTx+SYwzPUw0IpO1ytKiUF8OJB7ZHBI6BI3i7DYzP j11fMJ1BiQV93l/2XvlyVZVcYr+b+oWJpCkyz9zjDI7/EPz5eC+PE9swEAFNLWPSBclt PIuFxpt7uj4QqyAu95d75WIcGPv/QpXkh3GeOCOJTprQ2G+s23GU5Zm0VRUVXlJCu7sX ILwFF9RNLe57y8AheKW5FPf3Ma2VnBhfYngTkxxkqj5WyaIup+22E6Q91wVgyzOOeOrx eOog== 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=qHz8qjkHGjIs7FloOwTG/yrTOYhKAAu90A8kwJN3H3g=; b=OA74Vf2QAmF2rBYQZSWMTPKsojyLCp3brCib7ZxS9e/zM5aKhWtEx+zAJwfNqvk2xg cjTc9QcW/xbskX4rGtr05NKVXGaZOcg0+XMVAi3AmSKTlCUZ4VkNoYnO4U7tVxMQd7qF 52Nu21ahM9Wik/n4BSKy8BJsZ7l9CEJ/6YCy7tlphiB9siYi4dlPuJeE2ud6hfd5/Sim R4sqTwtGjlorv0julPKq40UU2kdHd58XQ8+7uGDYa9p52w0Ezw4zzS/CD8O4ob505uSR fMR4V6Bo5sCxNmGl9po6S+COAplVJuHFXnX4yZ1h2xNERUim3j8b/whMHfZ2VleRQFTV IjQg== X-Gm-Message-State: AKGB3mK6uewKrY9ej8+mq8k2BYRT/NmAnK7LX1Sp2yRlfDOR03tnWPN9 jkva/6KNOcY0sGLmJqL0/ag= X-Google-Smtp-Source: ACJfBovEQLg0aJt7uKcnzbDs3dOyWW0TXkyvG5lUITe2Mo71JP/jjuxqgq8a2LJwP5siyM/dNBwJ/g== X-Received: by 10.84.131.65 with SMTP id 59mr5346422pld.156.1513739597905; Tue, 19 Dec 2017 19:13:17 -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 x4sm31401314pfb.13.2017.12.19.19.13.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 19 Dec 2017 19:13:17 -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 v3 net-next 1/5] tcp: Export to userspace the TCP state names for the trace events Date: Wed, 20 Dec 2017 11:12:50 +0800 Message-Id: <1513739574-3345-2-git-send-email-laoar.shao@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1513739574-3345-1-git-send-email-laoar.shao@gmail.com> References: <1513739574-3345-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(-) diff --git a/include/trace/events/tcp.h b/include/trace/events/tcp.h index 07cccca..ec52fb3 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