On Tue, 15 Aug 2017 20:31:44 -0600
David Ahern <dsah...@gmail.com> wrote:

> On 8/15/17 1:11 PM, Jesper Dangaard Brouer wrote:
> > diff --git a/include/trace/events/qdisc.h b/include/trace/events/qdisc.h
> > new file mode 100644
> > index 000000000000..60d0d8bd336d
> > --- /dev/null
> > +++ b/include/trace/events/qdisc.h
> > @@ -0,0 +1,50 @@
> > +#undef TRACE_SYSTEM
> > +#define TRACE_SYSTEM qdisc
> > +
> > +#if !defined(_TRACE_QDISC_H) || defined(TRACE_HEADER_MULTI_READ)
> > +#define _TRACE_QDISC_H_
> > +
> > +#include <linux/skbuff.h>
> > +#include <linux/netdevice.h>
> > +#include <linux/tracepoint.h>
> > +#include <linux/ftrace.h>
> > +
> > +TRACE_EVENT(qdisc_dequeue,
> > +
> > +   TP_PROTO(struct Qdisc *qdisc, const struct netdev_queue *txq,
> > +            int packets, struct sk_buff *skb),
> > +
> > +   TP_ARGS(qdisc, txq, packets, skb),
> > +
> > +   TP_STRUCT__entry(
> > +           __field(        struct Qdisc *,         qdisc   )
> > +           __field(const   struct netdev_queue *,  txq     )  
> 
> Why save qdisc and txq pointers in the tracepoint data?

I wanted to attach a BPF program, and allow it to dereference these
pointers.  Which is done via bpf_probe_read like:

 unsigned int qdisc_flags; 
 bpf_probe_read(&qdisc_flags, sizeof(qdisc_flags), &ctx->qdisc->flags);


-- 
Best regards,
  Jesper Dangaard Brouer
  MSc.CS, Principal Kernel Engineer at Red Hat
  LinkedIn: http://www.linkedin.com/in/brouer

Reply via email to