Message ID | 20211111133530.2156478-2-imagedong@tencent.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | net: snmp: tracepoint support for snmp | expand |
On Thu, 11 Nov 2021 21:35:29 +0800 menglong8.dong@gmail.com wrote: > +#define DEFINE_SNMP_EVENT(proto) \ > +DEFINE_EVENT(snmp_template, snmp_##proto, \ > + TP_PROTO(struct sk_buff *skb, int field, int val), \ > + TP_ARGS(skb, field, val) \ > +) > + > +#define TRACE_SNMP(skb, proto, field, val) \ > + trace_snmp_##proto(skb, field, val) > + > +#endif Why make a separate trace event for each protocol, and not just create an enum that gets passed to the trace event? Then you could just filter on what you want. -- Steve
On Wed, Nov 17, 2021 at 5:34 AM Steven Rostedt <rostedt@goodmis.org> wrote: > > On Thu, 11 Nov 2021 21:35:29 +0800 > menglong8.dong@gmail.com wrote: > > > +#define DEFINE_SNMP_EVENT(proto) \ > > +DEFINE_EVENT(snmp_template, snmp_##proto, \ > > + TP_PROTO(struct sk_buff *skb, int field, int val), \ > > + TP_ARGS(skb, field, val) \ > > +) > > + > > +#define TRACE_SNMP(skb, proto, field, val) \ > > + trace_snmp_##proto(skb, field, val) > > + > > +#endif > > Why make a separate trace event for each protocol, and not just create an > enum that gets passed to the trace event? Then you could just filter on > what you want. enn....I'm not sure, just feel comfortable to create a separate trace event for each protocol. Maybe it is easier to use? However, making them together seems more fridently to users who want to do statistics for all protocols. I'll think over it~~~ Thanks! Menglong Dong > > -- Steve
diff --git a/include/trace/events/snmp.h b/include/trace/events/snmp.h new file mode 100644 index 000000000000..9dbd630306dd --- /dev/null +++ b/include/trace/events/snmp.h @@ -0,0 +1,45 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM snmp + +#if !defined(_TRACE_SNMP_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_SNMP_H + +#include <linux/tracepoint.h> +#include <linux/skbuff.h> +#include <linux/snmp.h> + +DECLARE_EVENT_CLASS(snmp_template, + + TP_PROTO(struct sk_buff *skb, int field, int val), + + TP_ARGS(skb, field, val), + + TP_STRUCT__entry( + __field(void *, skbaddr) + __field(int, field) + __field(int, val) + ), + + TP_fast_assign( + __entry->skbaddr = skb; + __entry->field = field; + __entry->val = val; + ), + + TP_printk("skbaddr=%p, field=%d, val=%d", __entry->skbaddr, + __entry->field, __entry->val) +); + +#define DEFINE_SNMP_EVENT(proto) \ +DEFINE_EVENT(snmp_template, snmp_##proto, \ + TP_PROTO(struct sk_buff *skb, int field, int val), \ + TP_ARGS(skb, field, val) \ +) + +#define TRACE_SNMP(skb, proto, field, val) \ + trace_snmp_##proto(skb, field, val) + +#endif + +#include <trace/define_trace.h> diff --git a/net/core/net-traces.c b/net/core/net-traces.c index c40cd8dd75c7..15ff40b83ca7 100644 --- a/net/core/net-traces.c +++ b/net/core/net-traces.c @@ -35,6 +35,7 @@ #include <trace/events/tcp.h> #include <trace/events/fib.h> #include <trace/events/qdisc.h> +#include <trace/events/snmp.h> #if IS_ENABLED(CONFIG_BRIDGE) #include <trace/events/bridge.h> EXPORT_TRACEPOINT_SYMBOL_GPL(br_fdb_add);