From patchwork Fri Dec 15 17:01:51 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yafang Shao X-Patchwork-Id: 849258 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="glvxXkaA"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yyxcX41qNz9t1t for ; Sat, 16 Dec 2017 04:04:43 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755691AbdLORC2 (ORCPT ); Fri, 15 Dec 2017 12:02:28 -0500 Received: from mail-pg0-f65.google.com ([74.125.83.65]:35052 "EHLO mail-pg0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755510AbdLORCZ (ORCPT ); Fri, 15 Dec 2017 12:02:25 -0500 Received: by mail-pg0-f65.google.com with SMTP id q20so6182071pgv.2; Fri, 15 Dec 2017 09:02:25 -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=glvxXkaAzE7sGtAiqWp8FPzXWUDYnmCnByqJxjSZwrjNwlw1jpLZDV4g4oDSZ5QjVo j6ul5A6HOjWBqMpC2dWUT1i2zAr28Qii4D/4k2+BGUlf5cDXHXq5LKjXq03V5awi4Xqx 3qGaQzUfBt2i5BQ4Xu4Oi69jciUWZXosrgvqzPwne50g3AZxuGmZjTJHv2O+xibbe/fP usXEZhuibidRTteMmM/aCYn73ID2yRB5hWZ0Ay53kk7qv2rp7ENF/zbrgsiSTDAFYpVT jx+q2ACempo35pCun3sRW/2QZWtBwlqGpokYrW/ypf+jqb7AeNrzMVAZVk+GdNSfIKQt jDxg== 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=mUVGEvpoHw5pWnzMXMNKcum/lUgf4QwfanA/pYSWjDuOEJCoobNYUYVPu35SfdiZdX ahRn38iBgg+4EGgLjb4RssTWkUlHuMVFMd+hLI+yF1/8i9nEAHW25WiESwCArqg2E4pE 1R/z7JKO98yvZ6RoIWlaPw0bWMPqF+LB1Ooj+aNZDv7Hg3/o+3SolmrVlZlHByLvqhZB hrbdXX5b0I6dnRf5CjQ9SzOaYlMuCYZlvEF+0l4wWQhuJtsALD21EiW9XOhAs9ZqD9jz ycqVj1COI44wXJtEQeWKiEaYd1DFF9zaciF3mei3rRbLe+0Oi2zFXvYgSyqzjYlxySYI Nwzg== X-Gm-Message-State: AKGB3mLOfM0LoOTxn128X9kOrBwJE5vifrYmHXwV1xiSOC6d7bRs0HR7 a+jliiWz1poGxo/D58WvgmRWFVc8 X-Google-Smtp-Source: ACJfBotZINUuOJl6KAEP4oRtJxlkWESwPopqc7pbj3vEsvnimMlqMwi8Co79m34dPNPw9cknGEEQLw== X-Received: by 10.84.132.98 with SMTP id 89mr5876774ple.251.1513357344724; Fri, 15 Dec 2017 09:02:24 -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 v82sm14214495pfd.111.2017.12.15.09.02.22 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 15 Dec 2017 09:02:23 -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:01:51 +0800 Message-Id: <1513357314-8402-2-git-send-email-laoar.shao@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1513357314-8402-1-git-send-email-laoar.shao@gmail.com> References: <1513357314-8402-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