Commit-ID:  9849eec3a44c6f47948117c14d7afb8cf53bf0fb
Gitweb:     https://git.kernel.org/tip/9849eec3a44c6f47948117c14d7afb8cf53bf0fb
Author:     Arnaldo Carvalho de Melo <[email protected]>
AuthorDate: Thu, 26 Jul 2018 09:26:13 -0300
Committer:  Arnaldo Carvalho de Melo <[email protected]>
CommitDate: Tue, 31 Jul 2018 10:52:41 -0300

perf beauty: Add a generator for IPPROTO_ socket's protocol constants

It'll use tools/include copy of linux/in.h to generate a table to be
used by tools, initially by the 'socket' and 'socketpair' beautifiers in
'perf trace', but that could also be used to translate from a string
constant to the integer value to be used in a eBPF or tracefs tracepoint
filter.

When used without any args it produces:

  $ tools/perf/trace/beauty/socket_ipproto.sh
  static const char *socket_ipproto[] = {
        [0] = "IP",
        [103] = "PIM",
        [108] = "COMP",
        [12] = "PUP",
        [132] = "SCTP",
        [136] = "UDPLITE",
        [137] = "MPLS",
        [17] = "UDP",
        [1] = "ICMP",
        [22] = "IDP",
        [255] = "RAW",
        [29] = "TP",
        [2] = "IGMP",
        [33] = "DCCP",
        [41] = "IPV6",
        [46] = "RSVP",
        [47] = "GRE",
        [4] = "IPIP",
        [50] = "ESP",
        [51] = "AH",
        [6] = "TCP",
        [8] = "EGP",
        [92] = "MTP",
        [94] = "BEETPH",
        [98] = "ENCAP",
  };
  $

Cc: Adrian Hunter <[email protected]>
Cc: David Ahern <[email protected]>
Cc: Jiri Olsa <[email protected]>
Cc: Namhyung Kim <[email protected]>
Cc: Wang Nan <[email protected]>
Link: https://lkml.kernel.org/n/[email protected]
Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
---
 tools/perf/trace/beauty/socket_ipproto.sh | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/tools/perf/trace/beauty/socket_ipproto.sh 
b/tools/perf/trace/beauty/socket_ipproto.sh
new file mode 100755
index 000000000000..a3cc24633bec
--- /dev/null
+++ b/tools/perf/trace/beauty/socket_ipproto.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+[ $# -eq 1 ] && header_dir=$1 || header_dir=tools/include/uapi/linux/
+
+printf "static const char *socket_ipproto[] = {\n"
+regex='^[[:space:]]+IPPROTO_(\w+)[[:space:]]+=[[:space:]]+([[:digit:]]+),.*'
+
+egrep $regex ${header_dir}/in.h | \
+       sed -r "s/$regex/\2 \1/g"       | \
+       sort | xargs printf "\t[%s] = \"%s\",\n"
+printf "};\n"

Reply via email to