1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 2cf66ba58SKoki Sanagi #undef TRACE_SYSTEM 3cf66ba58SKoki Sanagi #define TRACE_SYSTEM net 4cf66ba58SKoki Sanagi 5cf66ba58SKoki Sanagi #if !defined(_TRACE_NET_H) || defined(TRACE_HEADER_MULTI_READ) 6cf66ba58SKoki Sanagi #define _TRACE_NET_H 7cf66ba58SKoki Sanagi 8cf66ba58SKoki Sanagi #include <linux/skbuff.h> 9cf66ba58SKoki Sanagi #include <linux/netdevice.h> 10d87d04a7SBen Hutchings #include <linux/if_vlan.h> 11cf66ba58SKoki Sanagi #include <linux/ip.h> 12cf66ba58SKoki Sanagi #include <linux/tracepoint.h> 13cf66ba58SKoki Sanagi 14d87d04a7SBen Hutchings TRACE_EVENT(net_dev_start_xmit, 15d87d04a7SBen Hutchings 16d87d04a7SBen Hutchings TP_PROTO(const struct sk_buff *skb, const struct net_device *dev), 17d87d04a7SBen Hutchings 18d87d04a7SBen Hutchings TP_ARGS(skb, dev), 19d87d04a7SBen Hutchings 20d87d04a7SBen Hutchings TP_STRUCT__entry( 21d87d04a7SBen Hutchings __string( name, dev->name ) 22d87d04a7SBen Hutchings __field( u16, queue_mapping ) 23d87d04a7SBen Hutchings __field( const void *, skbaddr ) 24d87d04a7SBen Hutchings __field( bool, vlan_tagged ) 25d87d04a7SBen Hutchings __field( u16, vlan_proto ) 26d87d04a7SBen Hutchings __field( u16, vlan_tci ) 27d87d04a7SBen Hutchings __field( u16, protocol ) 28d87d04a7SBen Hutchings __field( u8, ip_summed ) 29d87d04a7SBen Hutchings __field( unsigned int, len ) 30d87d04a7SBen Hutchings __field( unsigned int, data_len ) 31d87d04a7SBen Hutchings __field( int, network_offset ) 32d87d04a7SBen Hutchings __field( bool, transport_offset_valid) 33d87d04a7SBen Hutchings __field( int, transport_offset) 34d87d04a7SBen Hutchings __field( u8, tx_flags ) 35d87d04a7SBen Hutchings __field( u16, gso_size ) 36d87d04a7SBen Hutchings __field( u16, gso_segs ) 37d87d04a7SBen Hutchings __field( u16, gso_type ) 38d87d04a7SBen Hutchings ), 39d87d04a7SBen Hutchings 40d87d04a7SBen Hutchings TP_fast_assign( 41d87d04a7SBen Hutchings __assign_str(name, dev->name); 42d87d04a7SBen Hutchings __entry->queue_mapping = skb->queue_mapping; 43d87d04a7SBen Hutchings __entry->skbaddr = skb; 44df8a39deSJiri Pirko __entry->vlan_tagged = skb_vlan_tag_present(skb); 45d87d04a7SBen Hutchings __entry->vlan_proto = ntohs(skb->vlan_proto); 46df8a39deSJiri Pirko __entry->vlan_tci = skb_vlan_tag_get(skb); 47d87d04a7SBen Hutchings __entry->protocol = ntohs(skb->protocol); 48d87d04a7SBen Hutchings __entry->ip_summed = skb->ip_summed; 49d87d04a7SBen Hutchings __entry->len = skb->len; 50d87d04a7SBen Hutchings __entry->data_len = skb->data_len; 51d87d04a7SBen Hutchings __entry->network_offset = skb_network_offset(skb); 52d87d04a7SBen Hutchings __entry->transport_offset_valid = 53d87d04a7SBen Hutchings skb_transport_header_was_set(skb); 54*f88fcb1dSEric Dumazet __entry->transport_offset = skb_transport_header_was_set(skb) ? 55*f88fcb1dSEric Dumazet skb_transport_offset(skb) : 0; 56d87d04a7SBen Hutchings __entry->tx_flags = skb_shinfo(skb)->tx_flags; 57d87d04a7SBen Hutchings __entry->gso_size = skb_shinfo(skb)->gso_size; 58d87d04a7SBen Hutchings __entry->gso_segs = skb_shinfo(skb)->gso_segs; 59d87d04a7SBen Hutchings __entry->gso_type = skb_shinfo(skb)->gso_type; 60d87d04a7SBen Hutchings ), 61d87d04a7SBen Hutchings 62d87d04a7SBen Hutchings 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", 63d87d04a7SBen Hutchings __get_str(name), __entry->queue_mapping, __entry->skbaddr, 64d87d04a7SBen Hutchings __entry->vlan_tagged, __entry->vlan_proto, __entry->vlan_tci, 65d87d04a7SBen Hutchings __entry->protocol, __entry->ip_summed, __entry->len, 66d87d04a7SBen Hutchings __entry->data_len, 67d87d04a7SBen Hutchings __entry->network_offset, __entry->transport_offset_valid, 68d87d04a7SBen Hutchings __entry->transport_offset, __entry->tx_flags, 69d87d04a7SBen Hutchings __entry->gso_size, __entry->gso_segs, __entry->gso_type) 70d87d04a7SBen Hutchings ); 71d87d04a7SBen Hutchings 72cf66ba58SKoki Sanagi TRACE_EVENT(net_dev_xmit, 73cf66ba58SKoki Sanagi 74cf66ba58SKoki Sanagi TP_PROTO(struct sk_buff *skb, 75ec764bf0SKoki Sanagi int rc, 76ec764bf0SKoki Sanagi struct net_device *dev, 77ec764bf0SKoki Sanagi unsigned int skb_len), 78cf66ba58SKoki Sanagi 79ec764bf0SKoki Sanagi TP_ARGS(skb, rc, dev, skb_len), 80cf66ba58SKoki Sanagi 81cf66ba58SKoki Sanagi TP_STRUCT__entry( 82cf66ba58SKoki Sanagi __field( void *, skbaddr ) 83cf66ba58SKoki Sanagi __field( unsigned int, len ) 84cf66ba58SKoki Sanagi __field( int, rc ) 85ec764bf0SKoki Sanagi __string( name, dev->name ) 86cf66ba58SKoki Sanagi ), 87cf66ba58SKoki Sanagi 88cf66ba58SKoki Sanagi TP_fast_assign( 89cf66ba58SKoki Sanagi __entry->skbaddr = skb; 90ec764bf0SKoki Sanagi __entry->len = skb_len; 91cf66ba58SKoki Sanagi __entry->rc = rc; 92ec764bf0SKoki Sanagi __assign_str(name, dev->name); 93cf66ba58SKoki Sanagi ), 94cf66ba58SKoki Sanagi 95cf66ba58SKoki Sanagi TP_printk("dev=%s skbaddr=%p len=%u rc=%d", 96cf66ba58SKoki Sanagi __get_str(name), __entry->skbaddr, __entry->len, __entry->rc) 97cf66ba58SKoki Sanagi ); 98cf66ba58SKoki Sanagi 99141b6b2aSCong Wang TRACE_EVENT(net_dev_xmit_timeout, 100141b6b2aSCong Wang 101141b6b2aSCong Wang TP_PROTO(struct net_device *dev, 102141b6b2aSCong Wang int queue_index), 103141b6b2aSCong Wang 104141b6b2aSCong Wang TP_ARGS(dev, queue_index), 105141b6b2aSCong Wang 106141b6b2aSCong Wang TP_STRUCT__entry( 107141b6b2aSCong Wang __string( name, dev->name ) 108141b6b2aSCong Wang __string( driver, netdev_drivername(dev)) 109141b6b2aSCong Wang __field( int, queue_index ) 110141b6b2aSCong Wang ), 111141b6b2aSCong Wang 112141b6b2aSCong Wang TP_fast_assign( 113141b6b2aSCong Wang __assign_str(name, dev->name); 114141b6b2aSCong Wang __assign_str(driver, netdev_drivername(dev)); 115141b6b2aSCong Wang __entry->queue_index = queue_index; 116141b6b2aSCong Wang ), 117141b6b2aSCong Wang 118141b6b2aSCong Wang TP_printk("dev=%s driver=%s queue=%d", 119141b6b2aSCong Wang __get_str(name), __get_str(driver), __entry->queue_index) 120141b6b2aSCong Wang ); 121141b6b2aSCong Wang 122cf66ba58SKoki Sanagi DECLARE_EVENT_CLASS(net_dev_template, 123cf66ba58SKoki Sanagi 124cf66ba58SKoki Sanagi TP_PROTO(struct sk_buff *skb), 125cf66ba58SKoki Sanagi 126cf66ba58SKoki Sanagi TP_ARGS(skb), 127cf66ba58SKoki Sanagi 128cf66ba58SKoki Sanagi TP_STRUCT__entry( 129cf66ba58SKoki Sanagi __field( void *, skbaddr ) 130cf66ba58SKoki Sanagi __field( unsigned int, len ) 131cf66ba58SKoki Sanagi __string( name, skb->dev->name ) 132cf66ba58SKoki Sanagi ), 133cf66ba58SKoki Sanagi 134cf66ba58SKoki Sanagi TP_fast_assign( 135cf66ba58SKoki Sanagi __entry->skbaddr = skb; 136cf66ba58SKoki Sanagi __entry->len = skb->len; 137cf66ba58SKoki Sanagi __assign_str(name, skb->dev->name); 138cf66ba58SKoki Sanagi ), 139cf66ba58SKoki Sanagi 1406deb209dSSubash Abhinov Kasiviswanathan TP_printk("dev=%s skbaddr=%p len=%u", 141cf66ba58SKoki Sanagi __get_str(name), __entry->skbaddr, __entry->len) 142cf66ba58SKoki Sanagi ) 143cf66ba58SKoki Sanagi 144cf66ba58SKoki Sanagi DEFINE_EVENT(net_dev_template, net_dev_queue, 145cf66ba58SKoki Sanagi 146cf66ba58SKoki Sanagi TP_PROTO(struct sk_buff *skb), 147cf66ba58SKoki Sanagi 148cf66ba58SKoki Sanagi TP_ARGS(skb) 149cf66ba58SKoki Sanagi ); 150cf66ba58SKoki Sanagi 151cf66ba58SKoki Sanagi DEFINE_EVENT(net_dev_template, netif_receive_skb, 152cf66ba58SKoki Sanagi 153cf66ba58SKoki Sanagi TP_PROTO(struct sk_buff *skb), 154cf66ba58SKoki Sanagi 155cf66ba58SKoki Sanagi TP_ARGS(skb) 156cf66ba58SKoki Sanagi ); 157cf66ba58SKoki Sanagi 158cf66ba58SKoki Sanagi DEFINE_EVENT(net_dev_template, netif_rx, 159cf66ba58SKoki Sanagi 160cf66ba58SKoki Sanagi TP_PROTO(struct sk_buff *skb), 161cf66ba58SKoki Sanagi 162cf66ba58SKoki Sanagi TP_ARGS(skb) 163cf66ba58SKoki Sanagi ); 164ae78dbfaSBen Hutchings 165ae78dbfaSBen Hutchings DECLARE_EVENT_CLASS(net_dev_rx_verbose_template, 166ae78dbfaSBen Hutchings 167ae78dbfaSBen Hutchings TP_PROTO(const struct sk_buff *skb), 168ae78dbfaSBen Hutchings 169ae78dbfaSBen Hutchings TP_ARGS(skb), 170ae78dbfaSBen Hutchings 171ae78dbfaSBen Hutchings TP_STRUCT__entry( 172ae78dbfaSBen Hutchings __string( name, skb->dev->name ) 173ae78dbfaSBen Hutchings __field( unsigned int, napi_id ) 174ae78dbfaSBen Hutchings __field( u16, queue_mapping ) 175ae78dbfaSBen Hutchings __field( const void *, skbaddr ) 176ae78dbfaSBen Hutchings __field( bool, vlan_tagged ) 177ae78dbfaSBen Hutchings __field( u16, vlan_proto ) 178ae78dbfaSBen Hutchings __field( u16, vlan_tci ) 179ae78dbfaSBen Hutchings __field( u16, protocol ) 180ae78dbfaSBen Hutchings __field( u8, ip_summed ) 18161b905daSTom Herbert __field( u32, hash ) 18261b905daSTom Herbert __field( bool, l4_hash ) 183ae78dbfaSBen Hutchings __field( unsigned int, len ) 184ae78dbfaSBen Hutchings __field( unsigned int, data_len ) 185ae78dbfaSBen Hutchings __field( unsigned int, truesize ) 186ae78dbfaSBen Hutchings __field( bool, mac_header_valid) 187ae78dbfaSBen Hutchings __field( int, mac_header ) 188ae78dbfaSBen Hutchings __field( unsigned char, nr_frags ) 189ae78dbfaSBen Hutchings __field( u16, gso_size ) 190ae78dbfaSBen Hutchings __field( u16, gso_type ) 191ae78dbfaSBen Hutchings ), 192ae78dbfaSBen Hutchings 193ae78dbfaSBen Hutchings TP_fast_assign( 194ae78dbfaSBen Hutchings __assign_str(name, skb->dev->name); 195ae78dbfaSBen Hutchings #ifdef CONFIG_NET_RX_BUSY_POLL 196ae78dbfaSBen Hutchings __entry->napi_id = skb->napi_id; 197ae78dbfaSBen Hutchings #else 198ae78dbfaSBen Hutchings __entry->napi_id = 0; 199ae78dbfaSBen Hutchings #endif 200ae78dbfaSBen Hutchings __entry->queue_mapping = skb->queue_mapping; 201ae78dbfaSBen Hutchings __entry->skbaddr = skb; 202df8a39deSJiri Pirko __entry->vlan_tagged = skb_vlan_tag_present(skb); 203ae78dbfaSBen Hutchings __entry->vlan_proto = ntohs(skb->vlan_proto); 204df8a39deSJiri Pirko __entry->vlan_tci = skb_vlan_tag_get(skb); 205ae78dbfaSBen Hutchings __entry->protocol = ntohs(skb->protocol); 206ae78dbfaSBen Hutchings __entry->ip_summed = skb->ip_summed; 20761b905daSTom Herbert __entry->hash = skb->hash; 20861b905daSTom Herbert __entry->l4_hash = skb->l4_hash; 209ae78dbfaSBen Hutchings __entry->len = skb->len; 210ae78dbfaSBen Hutchings __entry->data_len = skb->data_len; 211ae78dbfaSBen Hutchings __entry->truesize = skb->truesize; 212ae78dbfaSBen Hutchings __entry->mac_header_valid = skb_mac_header_was_set(skb); 213ae78dbfaSBen Hutchings __entry->mac_header = skb_mac_header(skb) - skb->data; 214ae78dbfaSBen Hutchings __entry->nr_frags = skb_shinfo(skb)->nr_frags; 215ae78dbfaSBen Hutchings __entry->gso_size = skb_shinfo(skb)->gso_size; 216ae78dbfaSBen Hutchings __entry->gso_type = skb_shinfo(skb)->gso_type; 217ae78dbfaSBen Hutchings ), 218ae78dbfaSBen Hutchings 21961b905daSTom Herbert 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", 220ae78dbfaSBen Hutchings __get_str(name), __entry->napi_id, __entry->queue_mapping, 221ae78dbfaSBen Hutchings __entry->skbaddr, __entry->vlan_tagged, __entry->vlan_proto, 222ae78dbfaSBen Hutchings __entry->vlan_tci, __entry->protocol, __entry->ip_summed, 22361b905daSTom Herbert __entry->hash, __entry->l4_hash, __entry->len, 224ae78dbfaSBen Hutchings __entry->data_len, __entry->truesize, 225ae78dbfaSBen Hutchings __entry->mac_header_valid, __entry->mac_header, 226ae78dbfaSBen Hutchings __entry->nr_frags, __entry->gso_size, __entry->gso_type) 227ae78dbfaSBen Hutchings ); 228ae78dbfaSBen Hutchings 229ae78dbfaSBen Hutchings DEFINE_EVENT(net_dev_rx_verbose_template, napi_gro_frags_entry, 230ae78dbfaSBen Hutchings 231ae78dbfaSBen Hutchings TP_PROTO(const struct sk_buff *skb), 232ae78dbfaSBen Hutchings 233ae78dbfaSBen Hutchings TP_ARGS(skb) 234ae78dbfaSBen Hutchings ); 235ae78dbfaSBen Hutchings 236ae78dbfaSBen Hutchings DEFINE_EVENT(net_dev_rx_verbose_template, napi_gro_receive_entry, 237ae78dbfaSBen Hutchings 238ae78dbfaSBen Hutchings TP_PROTO(const struct sk_buff *skb), 239ae78dbfaSBen Hutchings 240ae78dbfaSBen Hutchings TP_ARGS(skb) 241ae78dbfaSBen Hutchings ); 242ae78dbfaSBen Hutchings 243ae78dbfaSBen Hutchings DEFINE_EVENT(net_dev_rx_verbose_template, netif_receive_skb_entry, 244ae78dbfaSBen Hutchings 245ae78dbfaSBen Hutchings TP_PROTO(const struct sk_buff *skb), 246ae78dbfaSBen Hutchings 247ae78dbfaSBen Hutchings TP_ARGS(skb) 248ae78dbfaSBen Hutchings ); 249ae78dbfaSBen Hutchings 250920572b7SEdward Cree DEFINE_EVENT(net_dev_rx_verbose_template, netif_receive_skb_list_entry, 251920572b7SEdward Cree 252920572b7SEdward Cree TP_PROTO(const struct sk_buff *skb), 253920572b7SEdward Cree 254920572b7SEdward Cree TP_ARGS(skb) 255920572b7SEdward Cree ); 256920572b7SEdward Cree 257ae78dbfaSBen Hutchings DEFINE_EVENT(net_dev_rx_verbose_template, netif_rx_entry, 258ae78dbfaSBen Hutchings 259ae78dbfaSBen Hutchings TP_PROTO(const struct sk_buff *skb), 260ae78dbfaSBen Hutchings 261ae78dbfaSBen Hutchings TP_ARGS(skb) 262ae78dbfaSBen Hutchings ); 263ae78dbfaSBen Hutchings 264b0e3f1bdSGeneviève Bastien DECLARE_EVENT_CLASS(net_dev_rx_exit_template, 265b0e3f1bdSGeneviève Bastien 266b0e3f1bdSGeneviève Bastien TP_PROTO(int ret), 267b0e3f1bdSGeneviève Bastien 268b0e3f1bdSGeneviève Bastien TP_ARGS(ret), 269b0e3f1bdSGeneviève Bastien 270b0e3f1bdSGeneviève Bastien TP_STRUCT__entry( 271b0e3f1bdSGeneviève Bastien __field(int, ret) 272b0e3f1bdSGeneviève Bastien ), 273b0e3f1bdSGeneviève Bastien 274b0e3f1bdSGeneviève Bastien TP_fast_assign( 275b0e3f1bdSGeneviève Bastien __entry->ret = ret; 276b0e3f1bdSGeneviève Bastien ), 277b0e3f1bdSGeneviève Bastien 278b0e3f1bdSGeneviève Bastien TP_printk("ret=%d", __entry->ret) 279b0e3f1bdSGeneviève Bastien ); 280b0e3f1bdSGeneviève Bastien 281b0e3f1bdSGeneviève Bastien DEFINE_EVENT(net_dev_rx_exit_template, napi_gro_frags_exit, 282b0e3f1bdSGeneviève Bastien 283b0e3f1bdSGeneviève Bastien TP_PROTO(int ret), 284b0e3f1bdSGeneviève Bastien 285b0e3f1bdSGeneviève Bastien TP_ARGS(ret) 286b0e3f1bdSGeneviève Bastien ); 287b0e3f1bdSGeneviève Bastien 288b0e3f1bdSGeneviève Bastien DEFINE_EVENT(net_dev_rx_exit_template, napi_gro_receive_exit, 289b0e3f1bdSGeneviève Bastien 290b0e3f1bdSGeneviève Bastien TP_PROTO(int ret), 291b0e3f1bdSGeneviève Bastien 292b0e3f1bdSGeneviève Bastien TP_ARGS(ret) 293b0e3f1bdSGeneviève Bastien ); 294b0e3f1bdSGeneviève Bastien 295b0e3f1bdSGeneviève Bastien DEFINE_EVENT(net_dev_rx_exit_template, netif_receive_skb_exit, 296b0e3f1bdSGeneviève Bastien 297b0e3f1bdSGeneviève Bastien TP_PROTO(int ret), 298b0e3f1bdSGeneviève Bastien 299b0e3f1bdSGeneviève Bastien TP_ARGS(ret) 300b0e3f1bdSGeneviève Bastien ); 301b0e3f1bdSGeneviève Bastien 302b0e3f1bdSGeneviève Bastien DEFINE_EVENT(net_dev_rx_exit_template, netif_rx_exit, 303b0e3f1bdSGeneviève Bastien 304b0e3f1bdSGeneviève Bastien TP_PROTO(int ret), 305b0e3f1bdSGeneviève Bastien 306b0e3f1bdSGeneviève Bastien TP_ARGS(ret) 307b0e3f1bdSGeneviève Bastien ); 308b0e3f1bdSGeneviève Bastien 309b0e3f1bdSGeneviève Bastien DEFINE_EVENT(net_dev_rx_exit_template, netif_receive_skb_list_exit, 310b0e3f1bdSGeneviève Bastien 311b0e3f1bdSGeneviève Bastien TP_PROTO(int ret), 312b0e3f1bdSGeneviève Bastien 313b0e3f1bdSGeneviève Bastien TP_ARGS(ret) 314b0e3f1bdSGeneviève Bastien ); 315b0e3f1bdSGeneviève Bastien 316cf66ba58SKoki Sanagi #endif /* _TRACE_NET_H */ 317cf66ba58SKoki Sanagi 318cf66ba58SKoki Sanagi /* This part must be outside protection */ 319cf66ba58SKoki Sanagi #include <trace/define_trace.h> 320