162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#undef TRACE_SYSTEM 362306a36Sopenharmony_ci#define TRACE_SYSTEM openvswitch 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci#if !defined(_TRACE_OPENVSWITCH_H) || defined(TRACE_HEADER_MULTI_READ) 662306a36Sopenharmony_ci#define _TRACE_OPENVSWITCH_H 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#include <linux/tracepoint.h> 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#include "datapath.h" 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ciTRACE_EVENT(ovs_do_execute_action, 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci TP_PROTO(struct datapath *dp, struct sk_buff *skb, 1562306a36Sopenharmony_ci struct sw_flow_key *key, const struct nlattr *a, int rem), 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci TP_ARGS(dp, skb, key, a, rem), 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci TP_STRUCT__entry( 2062306a36Sopenharmony_ci __field( void *, dpaddr ) 2162306a36Sopenharmony_ci __string( dp_name, ovs_dp_name(dp) ) 2262306a36Sopenharmony_ci __string( dev_name, skb->dev->name ) 2362306a36Sopenharmony_ci __field( void *, skbaddr ) 2462306a36Sopenharmony_ci __field( unsigned int, len ) 2562306a36Sopenharmony_ci __field( unsigned int, data_len ) 2662306a36Sopenharmony_ci __field( unsigned int, truesize ) 2762306a36Sopenharmony_ci __field( u8, nr_frags ) 2862306a36Sopenharmony_ci __field( u16, gso_size ) 2962306a36Sopenharmony_ci __field( u16, gso_type ) 3062306a36Sopenharmony_ci __field( u32, ovs_flow_hash ) 3162306a36Sopenharmony_ci __field( u32, recirc_id ) 3262306a36Sopenharmony_ci __field( void *, keyaddr ) 3362306a36Sopenharmony_ci __field( u16, key_eth_type ) 3462306a36Sopenharmony_ci __field( u8, key_ct_state ) 3562306a36Sopenharmony_ci __field( u8, key_ct_orig_proto ) 3662306a36Sopenharmony_ci __field( u16, key_ct_zone ) 3762306a36Sopenharmony_ci __field( unsigned int, flow_key_valid ) 3862306a36Sopenharmony_ci __field( u8, action_type ) 3962306a36Sopenharmony_ci __field( unsigned int, action_len ) 4062306a36Sopenharmony_ci __field( void *, action_data ) 4162306a36Sopenharmony_ci __field( u8, is_last ) 4262306a36Sopenharmony_ci ), 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci TP_fast_assign( 4562306a36Sopenharmony_ci __entry->dpaddr = dp; 4662306a36Sopenharmony_ci __assign_str(dp_name, ovs_dp_name(dp)); 4762306a36Sopenharmony_ci __assign_str(dev_name, skb->dev->name); 4862306a36Sopenharmony_ci __entry->skbaddr = skb; 4962306a36Sopenharmony_ci __entry->len = skb->len; 5062306a36Sopenharmony_ci __entry->data_len = skb->data_len; 5162306a36Sopenharmony_ci __entry->truesize = skb->truesize; 5262306a36Sopenharmony_ci __entry->nr_frags = skb_shinfo(skb)->nr_frags; 5362306a36Sopenharmony_ci __entry->gso_size = skb_shinfo(skb)->gso_size; 5462306a36Sopenharmony_ci __entry->gso_type = skb_shinfo(skb)->gso_type; 5562306a36Sopenharmony_ci __entry->ovs_flow_hash = key->ovs_flow_hash; 5662306a36Sopenharmony_ci __entry->recirc_id = key->recirc_id; 5762306a36Sopenharmony_ci __entry->keyaddr = key; 5862306a36Sopenharmony_ci __entry->key_eth_type = key->eth.type; 5962306a36Sopenharmony_ci __entry->key_ct_state = key->ct_state; 6062306a36Sopenharmony_ci __entry->key_ct_orig_proto = key->ct_orig_proto; 6162306a36Sopenharmony_ci __entry->key_ct_zone = key->ct_zone; 6262306a36Sopenharmony_ci __entry->flow_key_valid = !(key->mac_proto & SW_FLOW_KEY_INVALID); 6362306a36Sopenharmony_ci __entry->action_type = nla_type(a); 6462306a36Sopenharmony_ci __entry->action_len = nla_len(a); 6562306a36Sopenharmony_ci __entry->action_data = nla_data(a); 6662306a36Sopenharmony_ci __entry->is_last = nla_is_last(a, rem); 6762306a36Sopenharmony_ci ), 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci TP_printk("dpaddr=%p dp_name=%s dev=%s skbaddr=%p len=%u data_len=%u truesize=%u nr_frags=%d gso_size=%d gso_type=%#x ovs_flow_hash=0x%08x recirc_id=0x%08x keyaddr=%p eth_type=0x%04x ct_state=%02x ct_orig_proto=%02x ct_Zone=%04x flow_key_valid=%d action_type=%u action_len=%u action_data=%p is_last=%d", 7062306a36Sopenharmony_ci __entry->dpaddr, __get_str(dp_name), __get_str(dev_name), 7162306a36Sopenharmony_ci __entry->skbaddr, __entry->len, __entry->data_len, 7262306a36Sopenharmony_ci __entry->truesize, __entry->nr_frags, __entry->gso_size, 7362306a36Sopenharmony_ci __entry->gso_type, __entry->ovs_flow_hash, 7462306a36Sopenharmony_ci __entry->recirc_id, __entry->keyaddr, __entry->key_eth_type, 7562306a36Sopenharmony_ci __entry->key_ct_state, __entry->key_ct_orig_proto, 7662306a36Sopenharmony_ci __entry->key_ct_zone, 7762306a36Sopenharmony_ci __entry->flow_key_valid, 7862306a36Sopenharmony_ci __entry->action_type, __entry->action_len, 7962306a36Sopenharmony_ci __entry->action_data, __entry->is_last) 8062306a36Sopenharmony_ci); 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ciTRACE_EVENT(ovs_dp_upcall, 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_ci TP_PROTO(struct datapath *dp, struct sk_buff *skb, 8562306a36Sopenharmony_ci const struct sw_flow_key *key, 8662306a36Sopenharmony_ci const struct dp_upcall_info *upcall_info), 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_ci TP_ARGS(dp, skb, key, upcall_info), 8962306a36Sopenharmony_ci 9062306a36Sopenharmony_ci TP_STRUCT__entry( 9162306a36Sopenharmony_ci __field( void *, dpaddr ) 9262306a36Sopenharmony_ci __string( dp_name, ovs_dp_name(dp) ) 9362306a36Sopenharmony_ci __string( dev_name, skb->dev->name ) 9462306a36Sopenharmony_ci __field( void *, skbaddr ) 9562306a36Sopenharmony_ci __field( unsigned int, len ) 9662306a36Sopenharmony_ci __field( unsigned int, data_len ) 9762306a36Sopenharmony_ci __field( unsigned int, truesize ) 9862306a36Sopenharmony_ci __field( u8, nr_frags ) 9962306a36Sopenharmony_ci __field( u16, gso_size ) 10062306a36Sopenharmony_ci __field( u16, gso_type ) 10162306a36Sopenharmony_ci __field( u32, ovs_flow_hash ) 10262306a36Sopenharmony_ci __field( u32, recirc_id ) 10362306a36Sopenharmony_ci __field( const void *, keyaddr ) 10462306a36Sopenharmony_ci __field( u16, key_eth_type ) 10562306a36Sopenharmony_ci __field( u8, key_ct_state ) 10662306a36Sopenharmony_ci __field( u8, key_ct_orig_proto ) 10762306a36Sopenharmony_ci __field( u16, key_ct_zone ) 10862306a36Sopenharmony_ci __field( unsigned int, flow_key_valid ) 10962306a36Sopenharmony_ci __field( u8, upcall_cmd ) 11062306a36Sopenharmony_ci __field( u32, upcall_port ) 11162306a36Sopenharmony_ci __field( u16, upcall_mru ) 11262306a36Sopenharmony_ci ), 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_ci TP_fast_assign( 11562306a36Sopenharmony_ci __entry->dpaddr = dp; 11662306a36Sopenharmony_ci __assign_str(dp_name, ovs_dp_name(dp)); 11762306a36Sopenharmony_ci __assign_str(dev_name, skb->dev->name); 11862306a36Sopenharmony_ci __entry->skbaddr = skb; 11962306a36Sopenharmony_ci __entry->len = skb->len; 12062306a36Sopenharmony_ci __entry->data_len = skb->data_len; 12162306a36Sopenharmony_ci __entry->truesize = skb->truesize; 12262306a36Sopenharmony_ci __entry->nr_frags = skb_shinfo(skb)->nr_frags; 12362306a36Sopenharmony_ci __entry->gso_size = skb_shinfo(skb)->gso_size; 12462306a36Sopenharmony_ci __entry->gso_type = skb_shinfo(skb)->gso_type; 12562306a36Sopenharmony_ci __entry->ovs_flow_hash = key->ovs_flow_hash; 12662306a36Sopenharmony_ci __entry->recirc_id = key->recirc_id; 12762306a36Sopenharmony_ci __entry->keyaddr = key; 12862306a36Sopenharmony_ci __entry->key_eth_type = key->eth.type; 12962306a36Sopenharmony_ci __entry->key_ct_state = key->ct_state; 13062306a36Sopenharmony_ci __entry->key_ct_orig_proto = key->ct_orig_proto; 13162306a36Sopenharmony_ci __entry->key_ct_zone = key->ct_zone; 13262306a36Sopenharmony_ci __entry->flow_key_valid = !(key->mac_proto & SW_FLOW_KEY_INVALID); 13362306a36Sopenharmony_ci __entry->upcall_cmd = upcall_info->cmd; 13462306a36Sopenharmony_ci __entry->upcall_port = upcall_info->portid; 13562306a36Sopenharmony_ci __entry->upcall_mru = upcall_info->mru; 13662306a36Sopenharmony_ci ), 13762306a36Sopenharmony_ci 13862306a36Sopenharmony_ci TP_printk("dpaddr=%p dp_name=%s dev=%s skbaddr=%p len=%u data_len=%u truesize=%u nr_frags=%d gso_size=%d gso_type=%#x ovs_flow_hash=0x%08x recirc_id=0x%08x keyaddr=%p eth_type=0x%04x ct_state=%02x ct_orig_proto=%02x ct_zone=%04x flow_key_valid=%d upcall_cmd=%u upcall_port=%u upcall_mru=%u", 13962306a36Sopenharmony_ci __entry->dpaddr, __get_str(dp_name), __get_str(dev_name), 14062306a36Sopenharmony_ci __entry->skbaddr, __entry->len, __entry->data_len, 14162306a36Sopenharmony_ci __entry->truesize, __entry->nr_frags, __entry->gso_size, 14262306a36Sopenharmony_ci __entry->gso_type, __entry->ovs_flow_hash, 14362306a36Sopenharmony_ci __entry->recirc_id, __entry->keyaddr, __entry->key_eth_type, 14462306a36Sopenharmony_ci __entry->key_ct_state, __entry->key_ct_orig_proto, 14562306a36Sopenharmony_ci __entry->key_ct_zone, 14662306a36Sopenharmony_ci __entry->flow_key_valid, 14762306a36Sopenharmony_ci __entry->upcall_cmd, __entry->upcall_port, 14862306a36Sopenharmony_ci __entry->upcall_mru) 14962306a36Sopenharmony_ci); 15062306a36Sopenharmony_ci 15162306a36Sopenharmony_ci#endif /* _TRACE_OPENVSWITCH_H */ 15262306a36Sopenharmony_ci 15362306a36Sopenharmony_ci/* This part must be outside protection */ 15462306a36Sopenharmony_ci#undef TRACE_INCLUDE_PATH 15562306a36Sopenharmony_ci#define TRACE_INCLUDE_PATH . 15662306a36Sopenharmony_ci#undef TRACE_INCLUDE_FILE 15762306a36Sopenharmony_ci#define TRACE_INCLUDE_FILE openvswitch_trace 15862306a36Sopenharmony_ci#include <trace/define_trace.h> 159