Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: add net cookie for net device trace events

In a multi-network card or container environment, this is needed in order
to differentiate between trace events relating to net devices that exist
in different network namespaces and share the same name.

for xmit_timeout trace events:
[002] ..s1. 1838.311662: net_dev_xmit_timeout: dev=eth0 driver=virtio_net queue=10 net_cookie=3
[007] ..s1. 1839.335650: net_dev_xmit_timeout: dev=eth0 driver=virtio_net queue=10 net_cookie=4100
[007] ..s1. 1844.455659: net_dev_xmit_timeout: dev=eth0 driver=virtio_net queue=10 net_cookie=3
[002] ..s1. 1850.087647: net_dev_xmit_timeout: dev=eth0 driver=virtio_net queue=10 net_cookie=3

Cc: Eran Ben Elisha <eranbe@mellanox.com>
Cc: Jiri Pirko <jiri@mellanox.com>
Cc: Cong Wang <xiyou.wangcong@gmail.com>
Cc: Jakub Kicinski <kuba@kernel.org>
Cc: Eric Dumazet <edumazet@google.com>
Cc: Simon Horman <horms@kernel.org>
Cc: Paolo Abeni <pabeni@redhat.com>
Suggested-by: Ido Schimmel <idosch@idosch.org>
Signed-off-by: Tonghao Zhang <tonghao@bamaicloud.com>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Link: https://patch.msgid.link/20251028043244.82288-1-tonghao@bamaicloud.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>

authored by

Tonghao Zhang and committed by
Paolo Abeni
27cb3de7 9e8a4434

+27 -10
+27 -10
include/trace/events/net.h
··· 35 35 __field( u16, gso_size ) 36 36 __field( u16, gso_segs ) 37 37 __field( u16, gso_type ) 38 + __field( u64, net_cookie ) 38 39 ), 39 40 40 41 TP_fast_assign( ··· 58 57 __entry->gso_size = skb_shinfo(skb)->gso_size; 59 58 __entry->gso_segs = skb_shinfo(skb)->gso_segs; 60 59 __entry->gso_type = skb_shinfo(skb)->gso_type; 60 + __entry->net_cookie = dev_net(dev)->net_cookie; 61 61 ), 62 62 63 - 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", 63 + 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 net_cookie=%llu", 64 64 __get_str(name), __entry->queue_mapping, __entry->skbaddr, 65 65 __entry->vlan_tagged, __entry->vlan_proto, __entry->vlan_tci, 66 66 __entry->protocol, __entry->ip_summed, __entry->len, 67 67 __entry->data_len, 68 68 __entry->network_offset, __entry->transport_offset_valid, 69 69 __entry->transport_offset, __entry->tx_flags, 70 - __entry->gso_size, __entry->gso_segs, __entry->gso_type) 70 + __entry->gso_size, __entry->gso_segs, 71 + __entry->gso_type, __entry->net_cookie) 71 72 ); 72 73 73 74 TRACE_EVENT(net_dev_xmit, ··· 86 83 __field( unsigned int, len ) 87 84 __field( int, rc ) 88 85 __string( name, dev->name ) 86 + __field( u64, net_cookie ) 89 87 ), 90 88 91 89 TP_fast_assign( 92 90 __entry->skbaddr = skb; 93 91 __entry->len = skb_len; 94 92 __entry->rc = rc; 93 + __entry->net_cookie = dev_net(dev)->net_cookie; 95 94 __assign_str(name); 96 95 ), 97 96 98 - TP_printk("dev=%s skbaddr=%p len=%u rc=%d", 99 - __get_str(name), __entry->skbaddr, __entry->len, __entry->rc) 97 + TP_printk("dev=%s skbaddr=%p len=%u rc=%d net_cookie=%llu", 98 + __get_str(name), __entry->skbaddr, 99 + __entry->len, __entry->rc, 100 + __entry->net_cookie) 100 101 ); 101 102 102 103 TRACE_EVENT(net_dev_xmit_timeout, ··· 114 107 __string( name, dev->name ) 115 108 __string( driver, netdev_drivername(dev)) 116 109 __field( int, queue_index ) 110 + __field( u64, net_cookie ) 117 111 ), 118 112 119 113 TP_fast_assign( 120 114 __assign_str(name); 121 115 __assign_str(driver); 122 116 __entry->queue_index = queue_index; 117 + __entry->net_cookie = dev_net(dev)->net_cookie; 123 118 ), 124 119 125 - TP_printk("dev=%s driver=%s queue=%d", 126 - __get_str(name), __get_str(driver), __entry->queue_index) 120 + TP_printk("dev=%s driver=%s queue=%d net_cookie=%llu", 121 + __get_str(name), __get_str(driver), 122 + __entry->queue_index, __entry->net_cookie) 127 123 ); 128 124 129 125 DECLARE_EVENT_CLASS(net_dev_template, ··· 139 129 __field( void *, skbaddr ) 140 130 __field( unsigned int, len ) 141 131 __string( name, skb->dev->name ) 132 + __field( u64, net_cookie ) 142 133 ), 143 134 144 135 TP_fast_assign( 145 136 __entry->skbaddr = skb; 146 137 __entry->len = skb->len; 138 + __entry->net_cookie = dev_net(skb->dev)->net_cookie; 147 139 __assign_str(name); 148 140 ), 149 141 150 - TP_printk("dev=%s skbaddr=%p len=%u", 151 - __get_str(name), __entry->skbaddr, __entry->len) 142 + TP_printk("dev=%s skbaddr=%p len=%u net_cookie=%llu", 143 + __get_str(name), __entry->skbaddr, 144 + __entry->len, 145 + __entry->net_cookie) 152 146 ) 153 147 154 148 DEFINE_EVENT(net_dev_template, net_dev_queue, ··· 202 188 __field( unsigned char, nr_frags ) 203 189 __field( u16, gso_size ) 204 190 __field( u16, gso_type ) 191 + __field( u64, net_cookie ) 205 192 ), 206 193 207 194 TP_fast_assign( ··· 229 214 __entry->nr_frags = skb_shinfo(skb)->nr_frags; 230 215 __entry->gso_size = skb_shinfo(skb)->gso_size; 231 216 __entry->gso_type = skb_shinfo(skb)->gso_type; 217 + __entry->net_cookie = dev_net(skb->dev)->net_cookie; 232 218 ), 233 219 234 - 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", 220 + 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 net_cookie=%llu", 235 221 __get_str(name), __entry->napi_id, __entry->queue_mapping, 236 222 __entry->skbaddr, __entry->vlan_tagged, __entry->vlan_proto, 237 223 __entry->vlan_tci, __entry->protocol, __entry->ip_summed, 238 224 __entry->hash, __entry->l4_hash, __entry->len, 239 225 __entry->data_len, __entry->truesize, 240 226 __entry->mac_header_valid, __entry->mac_header, 241 - __entry->nr_frags, __entry->gso_size, __entry->gso_type) 227 + __entry->nr_frags, __entry->gso_size, 228 + __entry->gso_type, __entry->net_cookie) 242 229 ); 243 230 244 231 DEFINE_EVENT(net_dev_rx_verbose_template, napi_gro_frags_entry,