1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #undef TRACE_SYSTEM 3*4882a593Smuzhiyun #define TRACE_SYSTEM net 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #if !defined(_TRACE_NET_H) || defined(TRACE_HEADER_MULTI_READ) 6*4882a593Smuzhiyun #define _TRACE_NET_H 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #include <linux/skbuff.h> 9*4882a593Smuzhiyun #include <linux/netdevice.h> 10*4882a593Smuzhiyun #include <linux/if_vlan.h> 11*4882a593Smuzhiyun #include <linux/ip.h> 12*4882a593Smuzhiyun #include <linux/tracepoint.h> 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun TRACE_EVENT(net_dev_start_xmit, 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun TP_PROTO(const struct sk_buff *skb, const struct net_device *dev), 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun TP_ARGS(skb, dev), 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun TP_STRUCT__entry( 21*4882a593Smuzhiyun __string( name, dev->name ) 22*4882a593Smuzhiyun __field( u16, queue_mapping ) 23*4882a593Smuzhiyun __field( const void *, skbaddr ) 24*4882a593Smuzhiyun __field( bool, vlan_tagged ) 25*4882a593Smuzhiyun __field( u16, vlan_proto ) 26*4882a593Smuzhiyun __field( u16, vlan_tci ) 27*4882a593Smuzhiyun __field( u16, protocol ) 28*4882a593Smuzhiyun __field( u8, ip_summed ) 29*4882a593Smuzhiyun __field( unsigned int, len ) 30*4882a593Smuzhiyun __field( unsigned int, data_len ) 31*4882a593Smuzhiyun __field( int, network_offset ) 32*4882a593Smuzhiyun __field( bool, transport_offset_valid) 33*4882a593Smuzhiyun __field( int, transport_offset) 34*4882a593Smuzhiyun __field( u8, tx_flags ) 35*4882a593Smuzhiyun __field( u16, gso_size ) 36*4882a593Smuzhiyun __field( u16, gso_segs ) 37*4882a593Smuzhiyun __field( u16, gso_type ) 38*4882a593Smuzhiyun ), 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun TP_fast_assign( 41*4882a593Smuzhiyun __assign_str(name, dev->name); 42*4882a593Smuzhiyun __entry->queue_mapping = skb->queue_mapping; 43*4882a593Smuzhiyun __entry->skbaddr = skb; 44*4882a593Smuzhiyun __entry->vlan_tagged = skb_vlan_tag_present(skb); 45*4882a593Smuzhiyun __entry->vlan_proto = ntohs(skb->vlan_proto); 46*4882a593Smuzhiyun __entry->vlan_tci = skb_vlan_tag_get(skb); 47*4882a593Smuzhiyun __entry->protocol = ntohs(skb->protocol); 48*4882a593Smuzhiyun __entry->ip_summed = skb->ip_summed; 49*4882a593Smuzhiyun __entry->len = skb->len; 50*4882a593Smuzhiyun __entry->data_len = skb->data_len; 51*4882a593Smuzhiyun __entry->network_offset = skb_network_offset(skb); 52*4882a593Smuzhiyun __entry->transport_offset_valid = 53*4882a593Smuzhiyun skb_transport_header_was_set(skb); 54*4882a593Smuzhiyun __entry->transport_offset = skb_transport_offset(skb); 55*4882a593Smuzhiyun __entry->tx_flags = skb_shinfo(skb)->tx_flags; 56*4882a593Smuzhiyun __entry->gso_size = skb_shinfo(skb)->gso_size; 57*4882a593Smuzhiyun __entry->gso_segs = skb_shinfo(skb)->gso_segs; 58*4882a593Smuzhiyun __entry->gso_type = skb_shinfo(skb)->gso_type; 59*4882a593Smuzhiyun ), 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun TP_printk("dev=%s queue_mapping=%u skbaddr=%p 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", 62*4882a593Smuzhiyun __get_str(name), __entry->queue_mapping, __entry->skbaddr, 63*4882a593Smuzhiyun __entry->vlan_tagged, __entry->vlan_proto, __entry->vlan_tci, 64*4882a593Smuzhiyun __entry->protocol, __entry->ip_summed, __entry->len, 65*4882a593Smuzhiyun __entry->data_len, 66*4882a593Smuzhiyun __entry->network_offset, __entry->transport_offset_valid, 67*4882a593Smuzhiyun __entry->transport_offset, __entry->tx_flags, 68*4882a593Smuzhiyun __entry->gso_size, __entry->gso_segs, __entry->gso_type) 69*4882a593Smuzhiyun ); 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun TRACE_EVENT(net_dev_xmit, 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun TP_PROTO(struct sk_buff *skb, 74*4882a593Smuzhiyun int rc, 75*4882a593Smuzhiyun struct net_device *dev, 76*4882a593Smuzhiyun unsigned int skb_len), 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun TP_ARGS(skb, rc, dev, skb_len), 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun TP_STRUCT__entry( 81*4882a593Smuzhiyun __field( void *, skbaddr ) 82*4882a593Smuzhiyun __field( unsigned int, len ) 83*4882a593Smuzhiyun __field( int, rc ) 84*4882a593Smuzhiyun __string( name, dev->name ) 85*4882a593Smuzhiyun ), 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun TP_fast_assign( 88*4882a593Smuzhiyun __entry->skbaddr = skb; 89*4882a593Smuzhiyun __entry->len = skb_len; 90*4882a593Smuzhiyun __entry->rc = rc; 91*4882a593Smuzhiyun __assign_str(name, dev->name); 92*4882a593Smuzhiyun ), 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun TP_printk("dev=%s skbaddr=%p len=%u rc=%d", 95*4882a593Smuzhiyun __get_str(name), __entry->skbaddr, __entry->len, __entry->rc) 96*4882a593Smuzhiyun ); 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun TRACE_EVENT(net_dev_xmit_timeout, 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun TP_PROTO(struct net_device *dev, 101*4882a593Smuzhiyun int queue_index), 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun TP_ARGS(dev, queue_index), 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun TP_STRUCT__entry( 106*4882a593Smuzhiyun __string( name, dev->name ) 107*4882a593Smuzhiyun __string( driver, netdev_drivername(dev)) 108*4882a593Smuzhiyun __field( int, queue_index ) 109*4882a593Smuzhiyun ), 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun TP_fast_assign( 112*4882a593Smuzhiyun __assign_str(name, dev->name); 113*4882a593Smuzhiyun __assign_str(driver, netdev_drivername(dev)); 114*4882a593Smuzhiyun __entry->queue_index = queue_index; 115*4882a593Smuzhiyun ), 116*4882a593Smuzhiyun 117*4882a593Smuzhiyun TP_printk("dev=%s driver=%s queue=%d", 118*4882a593Smuzhiyun __get_str(name), __get_str(driver), __entry->queue_index) 119*4882a593Smuzhiyun ); 120*4882a593Smuzhiyun 121*4882a593Smuzhiyun DECLARE_EVENT_CLASS(net_dev_template, 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun TP_PROTO(struct sk_buff *skb), 124*4882a593Smuzhiyun 125*4882a593Smuzhiyun TP_ARGS(skb), 126*4882a593Smuzhiyun 127*4882a593Smuzhiyun TP_STRUCT__entry( 128*4882a593Smuzhiyun __field( void *, skbaddr ) 129*4882a593Smuzhiyun __field( unsigned int, len ) 130*4882a593Smuzhiyun __string( name, skb->dev->name ) 131*4882a593Smuzhiyun ), 132*4882a593Smuzhiyun 133*4882a593Smuzhiyun TP_fast_assign( 134*4882a593Smuzhiyun __entry->skbaddr = skb; 135*4882a593Smuzhiyun __entry->len = skb->len; 136*4882a593Smuzhiyun __assign_str(name, skb->dev->name); 137*4882a593Smuzhiyun ), 138*4882a593Smuzhiyun 139*4882a593Smuzhiyun TP_printk("dev=%s skbaddr=%p len=%u", 140*4882a593Smuzhiyun __get_str(name), __entry->skbaddr, __entry->len) 141*4882a593Smuzhiyun ) 142*4882a593Smuzhiyun 143*4882a593Smuzhiyun DEFINE_EVENT(net_dev_template, net_dev_queue, 144*4882a593Smuzhiyun 145*4882a593Smuzhiyun TP_PROTO(struct sk_buff *skb), 146*4882a593Smuzhiyun 147*4882a593Smuzhiyun TP_ARGS(skb) 148*4882a593Smuzhiyun ); 149*4882a593Smuzhiyun 150*4882a593Smuzhiyun DEFINE_EVENT(net_dev_template, netif_receive_skb, 151*4882a593Smuzhiyun 152*4882a593Smuzhiyun TP_PROTO(struct sk_buff *skb), 153*4882a593Smuzhiyun 154*4882a593Smuzhiyun TP_ARGS(skb) 155*4882a593Smuzhiyun ); 156*4882a593Smuzhiyun 157*4882a593Smuzhiyun DEFINE_EVENT(net_dev_template, netif_rx, 158*4882a593Smuzhiyun 159*4882a593Smuzhiyun TP_PROTO(struct sk_buff *skb), 160*4882a593Smuzhiyun 161*4882a593Smuzhiyun TP_ARGS(skb) 162*4882a593Smuzhiyun ); 163*4882a593Smuzhiyun 164*4882a593Smuzhiyun DECLARE_EVENT_CLASS(net_dev_rx_verbose_template, 165*4882a593Smuzhiyun 166*4882a593Smuzhiyun TP_PROTO(const struct sk_buff *skb), 167*4882a593Smuzhiyun 168*4882a593Smuzhiyun TP_ARGS(skb), 169*4882a593Smuzhiyun 170*4882a593Smuzhiyun TP_STRUCT__entry( 171*4882a593Smuzhiyun __string( name, skb->dev->name ) 172*4882a593Smuzhiyun __field( unsigned int, napi_id ) 173*4882a593Smuzhiyun __field( u16, queue_mapping ) 174*4882a593Smuzhiyun __field( const void *, skbaddr ) 175*4882a593Smuzhiyun __field( bool, vlan_tagged ) 176*4882a593Smuzhiyun __field( u16, vlan_proto ) 177*4882a593Smuzhiyun __field( u16, vlan_tci ) 178*4882a593Smuzhiyun __field( u16, protocol ) 179*4882a593Smuzhiyun __field( u8, ip_summed ) 180*4882a593Smuzhiyun __field( u32, hash ) 181*4882a593Smuzhiyun __field( bool, l4_hash ) 182*4882a593Smuzhiyun __field( unsigned int, len ) 183*4882a593Smuzhiyun __field( unsigned int, data_len ) 184*4882a593Smuzhiyun __field( unsigned int, truesize ) 185*4882a593Smuzhiyun __field( bool, mac_header_valid) 186*4882a593Smuzhiyun __field( int, mac_header ) 187*4882a593Smuzhiyun __field( unsigned char, nr_frags ) 188*4882a593Smuzhiyun __field( u16, gso_size ) 189*4882a593Smuzhiyun __field( u16, gso_type ) 190*4882a593Smuzhiyun ), 191*4882a593Smuzhiyun 192*4882a593Smuzhiyun TP_fast_assign( 193*4882a593Smuzhiyun __assign_str(name, skb->dev->name); 194*4882a593Smuzhiyun #ifdef CONFIG_NET_RX_BUSY_POLL 195*4882a593Smuzhiyun __entry->napi_id = skb->napi_id; 196*4882a593Smuzhiyun #else 197*4882a593Smuzhiyun __entry->napi_id = 0; 198*4882a593Smuzhiyun #endif 199*4882a593Smuzhiyun __entry->queue_mapping = skb->queue_mapping; 200*4882a593Smuzhiyun __entry->skbaddr = skb; 201*4882a593Smuzhiyun __entry->vlan_tagged = skb_vlan_tag_present(skb); 202*4882a593Smuzhiyun __entry->vlan_proto = ntohs(skb->vlan_proto); 203*4882a593Smuzhiyun __entry->vlan_tci = skb_vlan_tag_get(skb); 204*4882a593Smuzhiyun __entry->protocol = ntohs(skb->protocol); 205*4882a593Smuzhiyun __entry->ip_summed = skb->ip_summed; 206*4882a593Smuzhiyun __entry->hash = skb->hash; 207*4882a593Smuzhiyun __entry->l4_hash = skb->l4_hash; 208*4882a593Smuzhiyun __entry->len = skb->len; 209*4882a593Smuzhiyun __entry->data_len = skb->data_len; 210*4882a593Smuzhiyun __entry->truesize = skb->truesize; 211*4882a593Smuzhiyun __entry->mac_header_valid = skb_mac_header_was_set(skb); 212*4882a593Smuzhiyun __entry->mac_header = skb_mac_header(skb) - skb->data; 213*4882a593Smuzhiyun __entry->nr_frags = skb_shinfo(skb)->nr_frags; 214*4882a593Smuzhiyun __entry->gso_size = skb_shinfo(skb)->gso_size; 215*4882a593Smuzhiyun __entry->gso_type = skb_shinfo(skb)->gso_type; 216*4882a593Smuzhiyun ), 217*4882a593Smuzhiyun 218*4882a593Smuzhiyun TP_printk("dev=%s napi_id=%#x queue_mapping=%u skbaddr=%p 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", 219*4882a593Smuzhiyun __get_str(name), __entry->napi_id, __entry->queue_mapping, 220*4882a593Smuzhiyun __entry->skbaddr, __entry->vlan_tagged, __entry->vlan_proto, 221*4882a593Smuzhiyun __entry->vlan_tci, __entry->protocol, __entry->ip_summed, 222*4882a593Smuzhiyun __entry->hash, __entry->l4_hash, __entry->len, 223*4882a593Smuzhiyun __entry->data_len, __entry->truesize, 224*4882a593Smuzhiyun __entry->mac_header_valid, __entry->mac_header, 225*4882a593Smuzhiyun __entry->nr_frags, __entry->gso_size, __entry->gso_type) 226*4882a593Smuzhiyun ); 227*4882a593Smuzhiyun 228*4882a593Smuzhiyun DEFINE_EVENT(net_dev_rx_verbose_template, napi_gro_frags_entry, 229*4882a593Smuzhiyun 230*4882a593Smuzhiyun TP_PROTO(const struct sk_buff *skb), 231*4882a593Smuzhiyun 232*4882a593Smuzhiyun TP_ARGS(skb) 233*4882a593Smuzhiyun ); 234*4882a593Smuzhiyun 235*4882a593Smuzhiyun DEFINE_EVENT(net_dev_rx_verbose_template, napi_gro_receive_entry, 236*4882a593Smuzhiyun 237*4882a593Smuzhiyun TP_PROTO(const struct sk_buff *skb), 238*4882a593Smuzhiyun 239*4882a593Smuzhiyun TP_ARGS(skb) 240*4882a593Smuzhiyun ); 241*4882a593Smuzhiyun 242*4882a593Smuzhiyun DEFINE_EVENT(net_dev_rx_verbose_template, netif_receive_skb_entry, 243*4882a593Smuzhiyun 244*4882a593Smuzhiyun TP_PROTO(const struct sk_buff *skb), 245*4882a593Smuzhiyun 246*4882a593Smuzhiyun TP_ARGS(skb) 247*4882a593Smuzhiyun ); 248*4882a593Smuzhiyun 249*4882a593Smuzhiyun DEFINE_EVENT(net_dev_rx_verbose_template, netif_receive_skb_list_entry, 250*4882a593Smuzhiyun 251*4882a593Smuzhiyun TP_PROTO(const struct sk_buff *skb), 252*4882a593Smuzhiyun 253*4882a593Smuzhiyun TP_ARGS(skb) 254*4882a593Smuzhiyun ); 255*4882a593Smuzhiyun 256*4882a593Smuzhiyun DEFINE_EVENT(net_dev_rx_verbose_template, netif_rx_entry, 257*4882a593Smuzhiyun 258*4882a593Smuzhiyun TP_PROTO(const struct sk_buff *skb), 259*4882a593Smuzhiyun 260*4882a593Smuzhiyun TP_ARGS(skb) 261*4882a593Smuzhiyun ); 262*4882a593Smuzhiyun 263*4882a593Smuzhiyun DEFINE_EVENT(net_dev_rx_verbose_template, netif_rx_ni_entry, 264*4882a593Smuzhiyun 265*4882a593Smuzhiyun TP_PROTO(const struct sk_buff *skb), 266*4882a593Smuzhiyun 267*4882a593Smuzhiyun TP_ARGS(skb) 268*4882a593Smuzhiyun ); 269*4882a593Smuzhiyun 270*4882a593Smuzhiyun DECLARE_EVENT_CLASS(net_dev_rx_exit_template, 271*4882a593Smuzhiyun 272*4882a593Smuzhiyun TP_PROTO(int ret), 273*4882a593Smuzhiyun 274*4882a593Smuzhiyun TP_ARGS(ret), 275*4882a593Smuzhiyun 276*4882a593Smuzhiyun TP_STRUCT__entry( 277*4882a593Smuzhiyun __field(int, ret) 278*4882a593Smuzhiyun ), 279*4882a593Smuzhiyun 280*4882a593Smuzhiyun TP_fast_assign( 281*4882a593Smuzhiyun __entry->ret = ret; 282*4882a593Smuzhiyun ), 283*4882a593Smuzhiyun 284*4882a593Smuzhiyun TP_printk("ret=%d", __entry->ret) 285*4882a593Smuzhiyun ); 286*4882a593Smuzhiyun 287*4882a593Smuzhiyun DEFINE_EVENT(net_dev_rx_exit_template, napi_gro_frags_exit, 288*4882a593Smuzhiyun 289*4882a593Smuzhiyun TP_PROTO(int ret), 290*4882a593Smuzhiyun 291*4882a593Smuzhiyun TP_ARGS(ret) 292*4882a593Smuzhiyun ); 293*4882a593Smuzhiyun 294*4882a593Smuzhiyun DEFINE_EVENT(net_dev_rx_exit_template, napi_gro_receive_exit, 295*4882a593Smuzhiyun 296*4882a593Smuzhiyun TP_PROTO(int ret), 297*4882a593Smuzhiyun 298*4882a593Smuzhiyun TP_ARGS(ret) 299*4882a593Smuzhiyun ); 300*4882a593Smuzhiyun 301*4882a593Smuzhiyun DEFINE_EVENT(net_dev_rx_exit_template, netif_receive_skb_exit, 302*4882a593Smuzhiyun 303*4882a593Smuzhiyun TP_PROTO(int ret), 304*4882a593Smuzhiyun 305*4882a593Smuzhiyun TP_ARGS(ret) 306*4882a593Smuzhiyun ); 307*4882a593Smuzhiyun 308*4882a593Smuzhiyun DEFINE_EVENT(net_dev_rx_exit_template, netif_rx_exit, 309*4882a593Smuzhiyun 310*4882a593Smuzhiyun TP_PROTO(int ret), 311*4882a593Smuzhiyun 312*4882a593Smuzhiyun TP_ARGS(ret) 313*4882a593Smuzhiyun ); 314*4882a593Smuzhiyun 315*4882a593Smuzhiyun DEFINE_EVENT(net_dev_rx_exit_template, netif_rx_ni_exit, 316*4882a593Smuzhiyun 317*4882a593Smuzhiyun TP_PROTO(int ret), 318*4882a593Smuzhiyun 319*4882a593Smuzhiyun TP_ARGS(ret) 320*4882a593Smuzhiyun ); 321*4882a593Smuzhiyun 322*4882a593Smuzhiyun DEFINE_EVENT(net_dev_rx_exit_template, netif_receive_skb_list_exit, 323*4882a593Smuzhiyun 324*4882a593Smuzhiyun TP_PROTO(int ret), 325*4882a593Smuzhiyun 326*4882a593Smuzhiyun TP_ARGS(ret) 327*4882a593Smuzhiyun ); 328*4882a593Smuzhiyun 329*4882a593Smuzhiyun #endif /* _TRACE_NET_H */ 330*4882a593Smuzhiyun 331*4882a593Smuzhiyun /* This part must be outside protection */ 332*4882a593Smuzhiyun #include <trace/define_trace.h> 333