mirror of
https://github.com/hardkernel/linux.git
synced 2026-04-02 03:03:00 +09:00
We want to use network trace events in production builds, to help diagnose Wifi problems. However, we don't want to expose raw kernel pointers in such builds. Change the format specifier for the skbaddr field, so that, if kptr_restrict is enabled, the pointers will be reported as 0. Bug: 30090733 Change-Id: Ic4bd583d37af6637343601feca875ee24479ddff Signed-off-by: mukesh agrawal <quiche@google.com>
243 lines
6.5 KiB
C
243 lines
6.5 KiB
C
#undef TRACE_SYSTEM
|
|
#define TRACE_SYSTEM net
|
|
|
|
#if !defined(_TRACE_NET_H) || defined(TRACE_HEADER_MULTI_READ)
|
|
#define _TRACE_NET_H
|
|
|
|
#include <linux/skbuff.h>
|
|
#include <linux/netdevice.h>
|
|
#include <linux/if_vlan.h>
|
|
#include <linux/ip.h>
|
|
#include <linux/tracepoint.h>
|
|
|
|
TRACE_EVENT(net_dev_start_xmit,
|
|
|
|
TP_PROTO(const struct sk_buff *skb, const struct net_device *dev),
|
|
|
|
TP_ARGS(skb, dev),
|
|
|
|
TP_STRUCT__entry(
|
|
__string( name, dev->name )
|
|
__field( u16, queue_mapping )
|
|
__field( const void *, skbaddr )
|
|
__field( bool, vlan_tagged )
|
|
__field( u16, vlan_proto )
|
|
__field( u16, vlan_tci )
|
|
__field( u16, protocol )
|
|
__field( u8, ip_summed )
|
|
__field( unsigned int, len )
|
|
__field( unsigned int, data_len )
|
|
__field( int, network_offset )
|
|
__field( bool, transport_offset_valid)
|
|
__field( int, transport_offset)
|
|
__field( u8, tx_flags )
|
|
__field( u16, gso_size )
|
|
__field( u16, gso_segs )
|
|
__field( u16, gso_type )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__assign_str(name, dev->name);
|
|
__entry->queue_mapping = skb->queue_mapping;
|
|
__entry->skbaddr = skb;
|
|
__entry->vlan_tagged = skb_vlan_tag_present(skb);
|
|
__entry->vlan_proto = ntohs(skb->vlan_proto);
|
|
__entry->vlan_tci = skb_vlan_tag_get(skb);
|
|
__entry->protocol = ntohs(skb->protocol);
|
|
__entry->ip_summed = skb->ip_summed;
|
|
__entry->len = skb->len;
|
|
__entry->data_len = skb->data_len;
|
|
__entry->network_offset = skb_network_offset(skb);
|
|
__entry->transport_offset_valid =
|
|
skb_transport_header_was_set(skb);
|
|
__entry->transport_offset = skb_transport_offset(skb);
|
|
__entry->tx_flags = skb_shinfo(skb)->tx_flags;
|
|
__entry->gso_size = skb_shinfo(skb)->gso_size;
|
|
__entry->gso_segs = skb_shinfo(skb)->gso_segs;
|
|
__entry->gso_type = skb_shinfo(skb)->gso_type;
|
|
),
|
|
|
|
TP_printk("dev=%s queue_mapping=%u skbaddr=%pK vlan_tagged=%d vlan_proto=0x%04x vlan_tci=0x%04x protocol=0x%04x ip_summed=%d len=%u data_len=%u network_offset=%d transport_offset_valid=%d transport_offset=%d tx_flags=%d gso_size=%d gso_segs=%d gso_type=%#x",
|
|
__get_str(name), __entry->queue_mapping, __entry->skbaddr,
|
|
__entry->vlan_tagged, __entry->vlan_proto, __entry->vlan_tci,
|
|
__entry->protocol, __entry->ip_summed, __entry->len,
|
|
__entry->data_len,
|
|
__entry->network_offset, __entry->transport_offset_valid,
|
|
__entry->transport_offset, __entry->tx_flags,
|
|
__entry->gso_size, __entry->gso_segs, __entry->gso_type)
|
|
);
|
|
|
|
TRACE_EVENT(net_dev_xmit,
|
|
|
|
TP_PROTO(struct sk_buff *skb,
|
|
int rc,
|
|
struct net_device *dev,
|
|
unsigned int skb_len),
|
|
|
|
TP_ARGS(skb, rc, dev, skb_len),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( void *, skbaddr )
|
|
__field( unsigned int, len )
|
|
__field( int, rc )
|
|
__string( name, dev->name )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->skbaddr = skb;
|
|
__entry->len = skb_len;
|
|
__entry->rc = rc;
|
|
__assign_str(name, dev->name);
|
|
),
|
|
|
|
TP_printk("dev=%s skbaddr=%pK len=%u rc=%d",
|
|
__get_str(name), __entry->skbaddr, __entry->len, __entry->rc)
|
|
);
|
|
|
|
DECLARE_EVENT_CLASS(net_dev_template,
|
|
|
|
TP_PROTO(struct sk_buff *skb),
|
|
|
|
TP_ARGS(skb),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( void *, skbaddr )
|
|
__field( unsigned int, len )
|
|
__string( name, skb->dev->name )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->skbaddr = skb;
|
|
__entry->len = skb->len;
|
|
__assign_str(name, skb->dev->name);
|
|
),
|
|
|
|
TP_printk("dev=%s skbaddr=%pK len=%u",
|
|
__get_str(name), __entry->skbaddr, __entry->len)
|
|
)
|
|
|
|
DEFINE_EVENT(net_dev_template, net_dev_queue,
|
|
|
|
TP_PROTO(struct sk_buff *skb),
|
|
|
|
TP_ARGS(skb)
|
|
);
|
|
|
|
DEFINE_EVENT(net_dev_template, netif_receive_skb,
|
|
|
|
TP_PROTO(struct sk_buff *skb),
|
|
|
|
TP_ARGS(skb)
|
|
);
|
|
|
|
DEFINE_EVENT(net_dev_template, netif_rx,
|
|
|
|
TP_PROTO(struct sk_buff *skb),
|
|
|
|
TP_ARGS(skb)
|
|
);
|
|
|
|
DECLARE_EVENT_CLASS(net_dev_rx_verbose_template,
|
|
|
|
TP_PROTO(const struct sk_buff *skb),
|
|
|
|
TP_ARGS(skb),
|
|
|
|
TP_STRUCT__entry(
|
|
__string( name, skb->dev->name )
|
|
__field( unsigned int, napi_id )
|
|
__field( u16, queue_mapping )
|
|
__field( const void *, skbaddr )
|
|
__field( bool, vlan_tagged )
|
|
__field( u16, vlan_proto )
|
|
__field( u16, vlan_tci )
|
|
__field( u16, protocol )
|
|
__field( u8, ip_summed )
|
|
__field( u32, hash )
|
|
__field( bool, l4_hash )
|
|
__field( unsigned int, len )
|
|
__field( unsigned int, data_len )
|
|
__field( unsigned int, truesize )
|
|
__field( bool, mac_header_valid)
|
|
__field( int, mac_header )
|
|
__field( unsigned char, nr_frags )
|
|
__field( u16, gso_size )
|
|
__field( u16, gso_type )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__assign_str(name, skb->dev->name);
|
|
#ifdef CONFIG_NET_RX_BUSY_POLL
|
|
__entry->napi_id = skb->napi_id;
|
|
#else
|
|
__entry->napi_id = 0;
|
|
#endif
|
|
__entry->queue_mapping = skb->queue_mapping;
|
|
__entry->skbaddr = skb;
|
|
__entry->vlan_tagged = skb_vlan_tag_present(skb);
|
|
__entry->vlan_proto = ntohs(skb->vlan_proto);
|
|
__entry->vlan_tci = skb_vlan_tag_get(skb);
|
|
__entry->protocol = ntohs(skb->protocol);
|
|
__entry->ip_summed = skb->ip_summed;
|
|
__entry->hash = skb->hash;
|
|
__entry->l4_hash = skb->l4_hash;
|
|
__entry->len = skb->len;
|
|
__entry->data_len = skb->data_len;
|
|
__entry->truesize = skb->truesize;
|
|
__entry->mac_header_valid = skb_mac_header_was_set(skb);
|
|
__entry->mac_header = skb_mac_header(skb) - skb->data;
|
|
__entry->nr_frags = skb_shinfo(skb)->nr_frags;
|
|
__entry->gso_size = skb_shinfo(skb)->gso_size;
|
|
__entry->gso_type = skb_shinfo(skb)->gso_type;
|
|
),
|
|
|
|
TP_printk("dev=%s napi_id=%#x queue_mapping=%u skbaddr=%pK vlan_tagged=%d vlan_proto=0x%04x vlan_tci=0x%04x protocol=0x%04x ip_summed=%d hash=0x%08x l4_hash=%d len=%u data_len=%u truesize=%u mac_header_valid=%d mac_header=%d nr_frags=%d gso_size=%d gso_type=%#x",
|
|
__get_str(name), __entry->napi_id, __entry->queue_mapping,
|
|
__entry->skbaddr, __entry->vlan_tagged, __entry->vlan_proto,
|
|
__entry->vlan_tci, __entry->protocol, __entry->ip_summed,
|
|
__entry->hash, __entry->l4_hash, __entry->len,
|
|
__entry->data_len, __entry->truesize,
|
|
__entry->mac_header_valid, __entry->mac_header,
|
|
__entry->nr_frags, __entry->gso_size, __entry->gso_type)
|
|
);
|
|
|
|
DEFINE_EVENT(net_dev_rx_verbose_template, napi_gro_frags_entry,
|
|
|
|
TP_PROTO(const struct sk_buff *skb),
|
|
|
|
TP_ARGS(skb)
|
|
);
|
|
|
|
DEFINE_EVENT(net_dev_rx_verbose_template, napi_gro_receive_entry,
|
|
|
|
TP_PROTO(const struct sk_buff *skb),
|
|
|
|
TP_ARGS(skb)
|
|
);
|
|
|
|
DEFINE_EVENT(net_dev_rx_verbose_template, netif_receive_skb_entry,
|
|
|
|
TP_PROTO(const struct sk_buff *skb),
|
|
|
|
TP_ARGS(skb)
|
|
);
|
|
|
|
DEFINE_EVENT(net_dev_rx_verbose_template, netif_rx_entry,
|
|
|
|
TP_PROTO(const struct sk_buff *skb),
|
|
|
|
TP_ARGS(skb)
|
|
);
|
|
|
|
DEFINE_EVENT(net_dev_rx_verbose_template, netif_rx_ni_entry,
|
|
|
|
TP_PROTO(const struct sk_buff *skb),
|
|
|
|
TP_ARGS(skb)
|
|
);
|
|
|
|
#endif /* _TRACE_NET_H */
|
|
|
|
/* This part must be outside protection */
|
|
#include <trace/define_trace.h>
|