diff options
| -rw-r--r-- | include/trace/events/net.h | 58 | ||||
| -rw-r--r-- | net/core/dev.c | 2 | 
2 files changed, 60 insertions, 0 deletions
diff --git a/include/trace/events/net.h b/include/trace/events/net.h index f99645d05a8f..7a72f44ae6ab 100644 --- a/include/trace/events/net.h +++ b/include/trace/events/net.h  | |||
| @@ -6,9 +6,67 @@ | |||
| 6 | 6 | ||
| 7 | #include <linux/skbuff.h> | 7 | #include <linux/skbuff.h> | 
| 8 | #include <linux/netdevice.h> | 8 | #include <linux/netdevice.h> | 
| 9 | #include <linux/if_vlan.h> | ||
| 9 | #include <linux/ip.h> | 10 | #include <linux/ip.h> | 
| 10 | #include <linux/tracepoint.h> | 11 | #include <linux/tracepoint.h> | 
| 11 | 12 | ||
| 13 | TRACE_EVENT(net_dev_start_xmit, | ||
| 14 | |||
| 15 | TP_PROTO(const struct sk_buff *skb, const struct net_device *dev), | ||
| 16 | |||
| 17 | TP_ARGS(skb, dev), | ||
| 18 | |||
| 19 | TP_STRUCT__entry( | ||
| 20 | __string( name, dev->name ) | ||
| 21 | __field( u16, queue_mapping ) | ||
| 22 | __field( const void *, skbaddr ) | ||
| 23 | __field( bool, vlan_tagged ) | ||
| 24 | __field( u16, vlan_proto ) | ||
| 25 | __field( u16, vlan_tci ) | ||
| 26 | __field( u16, protocol ) | ||
| 27 | __field( u8, ip_summed ) | ||
| 28 | __field( unsigned int, len ) | ||
| 29 | __field( unsigned int, data_len ) | ||
| 30 | __field( int, network_offset ) | ||
| 31 | __field( bool, transport_offset_valid) | ||
| 32 | __field( int, transport_offset) | ||
| 33 | __field( u8, tx_flags ) | ||
| 34 | __field( u16, gso_size ) | ||
| 35 | __field( u16, gso_segs ) | ||
| 36 | __field( u16, gso_type ) | ||
| 37 | ), | ||
| 38 | |||
| 39 | TP_fast_assign( | ||
| 40 | __assign_str(name, dev->name); | ||
| 41 | __entry->queue_mapping = skb->queue_mapping; | ||
| 42 | __entry->skbaddr = skb; | ||
| 43 | __entry->vlan_tagged = vlan_tx_tag_present(skb); | ||
| 44 | __entry->vlan_proto = ntohs(skb->vlan_proto); | ||
| 45 | __entry->vlan_tci = vlan_tx_tag_get(skb); | ||
| 46 | __entry->protocol = ntohs(skb->protocol); | ||
| 47 | __entry->ip_summed = skb->ip_summed; | ||
| 48 | __entry->len = skb->len; | ||
| 49 | __entry->data_len = skb->data_len; | ||
| 50 | __entry->network_offset = skb_network_offset(skb); | ||
| 51 | __entry->transport_offset_valid = | ||
| 52 | skb_transport_header_was_set(skb); | ||
| 53 | __entry->transport_offset = skb_transport_offset(skb); | ||
| 54 | __entry->tx_flags = skb_shinfo(skb)->tx_flags; | ||
| 55 | __entry->gso_size = skb_shinfo(skb)->gso_size; | ||
| 56 | __entry->gso_segs = skb_shinfo(skb)->gso_segs; | ||
| 57 | __entry->gso_type = skb_shinfo(skb)->gso_type; | ||
| 58 | ), | ||
| 59 | |||
| 60 | 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", | ||
| 61 | __get_str(name), __entry->queue_mapping, __entry->skbaddr, | ||
| 62 | __entry->vlan_tagged, __entry->vlan_proto, __entry->vlan_tci, | ||
| 63 | __entry->protocol, __entry->ip_summed, __entry->len, | ||
| 64 | __entry->data_len, | ||
| 65 | __entry->network_offset, __entry->transport_offset_valid, | ||
| 66 | __entry->transport_offset, __entry->tx_flags, | ||
| 67 | __entry->gso_size, __entry->gso_segs, __entry->gso_type) | ||
| 68 | ); | ||
| 69 | |||
| 12 | TRACE_EVENT(net_dev_xmit, | 70 | TRACE_EVENT(net_dev_xmit, | 
| 13 | 71 | ||
| 14 | TP_PROTO(struct sk_buff *skb, | 72 | TP_PROTO(struct sk_buff *skb, | 
diff --git a/net/core/dev.c b/net/core/dev.c index 0703ee04c670..9e93a1464216 100644 --- a/net/core/dev.c +++ b/net/core/dev.c  | |||
| @@ -2596,6 +2596,7 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev, | |||
| 2596 | dev_queue_xmit_nit(skb, dev); | 2596 | dev_queue_xmit_nit(skb, dev); | 
| 2597 | 2597 | ||
| 2598 | skb_len = skb->len; | 2598 | skb_len = skb->len; | 
| 2599 | trace_net_dev_start_xmit(skb, dev); | ||
| 2599 | rc = ops->ndo_start_xmit(skb, dev); | 2600 | rc = ops->ndo_start_xmit(skb, dev); | 
| 2600 | trace_net_dev_xmit(skb, rc, dev, skb_len); | 2601 | trace_net_dev_xmit(skb, rc, dev, skb_len); | 
| 2601 | if (rc == NETDEV_TX_OK) | 2602 | if (rc == NETDEV_TX_OK) | 
| @@ -2614,6 +2615,7 @@ gso: | |||
| 2614 | dev_queue_xmit_nit(nskb, dev); | 2615 | dev_queue_xmit_nit(nskb, dev); | 
| 2615 | 2616 | ||
| 2616 | skb_len = nskb->len; | 2617 | skb_len = nskb->len; | 
| 2618 | trace_net_dev_start_xmit(nskb, dev); | ||
| 2617 | rc = ops->ndo_start_xmit(nskb, dev); | 2619 | rc = ops->ndo_start_xmit(nskb, dev); | 
| 2618 | trace_net_dev_xmit(nskb, rc, dev, skb_len); | 2620 | trace_net_dev_xmit(nskb, rc, dev, skb_len); | 
| 2619 | if (unlikely(rc != NETDEV_TX_OK)) { | 2621 | if (unlikely(rc != NETDEV_TX_OK)) { | 
