2568 lines · 69.9 KB · C
RawDownload
#undef TRACE_SYSTEM#define TRACE_SYSTEM cfg80211 #if !defined(__RDEV_OPS_TRACE) || defined(TRACE_HEADER_MULTI_READ)#define __RDEV_OPS_TRACE #include <linux/tracepoint.h> #include <linux/rtnetlink.h>#include <net/cfg80211.h>#include "core.h" #define MAC_ENTRY(entry_mac) __array(u8, entry_mac, ETH_ALEN)#define MAC_ASSIGN(entry_mac, given_mac) do {			     \	if (given_mac)						     \		memcpy(__entry->entry_mac, given_mac, ETH_ALEN);     \	else							     \		memset(__entry->entry_mac, 0, ETH_ALEN);	     \	} while (0)#define MAC_PR_FMT "%pM"#define MAC_PR_ARG(entry_mac) (__entry->entry_mac) #define MAXNAME		32#define WIPHY_ENTRY	__array(char, wiphy_name, 32)#define WIPHY_ASSIGN	strlcpy(__entry->wiphy_name, wiphy_name(wiphy), MAXNAME)#define WIPHY_PR_FMT	"%s"#define WIPHY_PR_ARG	__entry->wiphy_name #define WDEV_ENTRY	__field(u32, id)#define WDEV_ASSIGN	(__entry->id) = (!IS_ERR_OR_NULL(wdev)	\					 ? wdev->identifier : 0)#define WDEV_PR_FMT	"wdev(%u)"#define WDEV_PR_ARG	(__entry->id) #define NETDEV_ENTRY	__array(char, name, IFNAMSIZ) \			__field(int, ifindex)#define NETDEV_ASSIGN					       \	do {						       \		memcpy(__entry->name, netdev->name, IFNAMSIZ); \		(__entry->ifindex) = (netdev->ifindex);	       \	} while (0)#define NETDEV_PR_FMT	"netdev:%s(%d)"#define NETDEV_PR_ARG	__entry->name, __entry->ifindex #define MESH_CFG_ENTRY __field(u16, dot11MeshRetryTimeout)		   \		       __field(u16, dot11MeshConfirmTimeout)		   \		       __field(u16, dot11MeshHoldingTimeout)		   \		       __field(u16, dot11MeshMaxPeerLinks)		   \		       __field(u8, dot11MeshMaxRetries)			   \		       __field(u8, dot11MeshTTL)			   \		       __field(u8, element_ttl)				   \		       __field(bool, auto_open_plinks)			   \		       __field(u32, dot11MeshNbrOffsetMaxNeighbor)	   \		       __field(u8, dot11MeshHWMPmaxPREQretries)		   \		       __field(u32, path_refresh_time)			   \		       __field(u32, dot11MeshHWMPactivePathTimeout)	   \		       __field(u16, min_discovery_timeout)		   \		       __field(u16, dot11MeshHWMPpreqMinInterval)	   \		       __field(u16, dot11MeshHWMPperrMinInterval)	   \		       __field(u16, dot11MeshHWMPnetDiameterTraversalTime) \		       __field(u8, dot11MeshHWMPRootMode)		   \		       __field(u16, dot11MeshHWMPRannInterval)		   \		       __field(bool, dot11MeshGateAnnouncementProtocol)	   \		       __field(bool, dot11MeshForwarding)		   \		       __field(s32, rssi_threshold)			   \		       __field(u16, ht_opmode)				   \		       __field(u32, dot11MeshHWMPactivePathToRootTimeout)  \		       __field(u16, dot11MeshHWMProotInterval)		   \		       __field(u16, dot11MeshHWMPconfirmationInterval)#define MESH_CFG_ASSIGN							      \	do {								      \		__entry->dot11MeshRetryTimeout = conf->dot11MeshRetryTimeout; \		__entry->dot11MeshConfirmTimeout =			      \				conf->dot11MeshConfirmTimeout;		      \		__entry->dot11MeshHoldingTimeout =			      \				conf->dot11MeshHoldingTimeout;		      \		__entry->dot11MeshMaxPeerLinks = conf->dot11MeshMaxPeerLinks; \		__entry->dot11MeshMaxRetries = conf->dot11MeshMaxRetries;     \		__entry->dot11MeshTTL = conf->dot11MeshTTL;		      \		__entry->element_ttl = conf->element_ttl;		      \		__entry->auto_open_plinks = conf->auto_open_plinks;	      \		__entry->dot11MeshNbrOffsetMaxNeighbor =		      \				conf->dot11MeshNbrOffsetMaxNeighbor;	      \		__entry->dot11MeshHWMPmaxPREQretries =			      \				conf->dot11MeshHWMPmaxPREQretries;	      \		__entry->path_refresh_time = conf->path_refresh_time;	      \		__entry->dot11MeshHWMPactivePathTimeout =		      \				conf->dot11MeshHWMPactivePathTimeout;	      \		__entry->min_discovery_timeout = conf->min_discovery_timeout; \		__entry->dot11MeshHWMPpreqMinInterval =			      \				conf->dot11MeshHWMPpreqMinInterval;	      \		__entry->dot11MeshHWMPperrMinInterval =			      \				conf->dot11MeshHWMPperrMinInterval;	      \		__entry->dot11MeshHWMPnetDiameterTraversalTime =	      \				conf->dot11MeshHWMPnetDiameterTraversalTime;  \		__entry->dot11MeshHWMPRootMode = conf->dot11MeshHWMPRootMode; \		__entry->dot11MeshHWMPRannInterval =			      \				conf->dot11MeshHWMPRannInterval;	      \		__entry->dot11MeshGateAnnouncementProtocol =		      \				conf->dot11MeshGateAnnouncementProtocol;      \		__entry->dot11MeshForwarding = conf->dot11MeshForwarding;     \		__entry->rssi_threshold = conf->rssi_threshold;		      \		__entry->ht_opmode = conf->ht_opmode;			      \		__entry->dot11MeshHWMPactivePathToRootTimeout =		      \				conf->dot11MeshHWMPactivePathToRootTimeout;   \		__entry->dot11MeshHWMProotInterval =			      \				conf->dot11MeshHWMProotInterval;	      \		__entry->dot11MeshHWMPconfirmationInterval =		      \				conf->dot11MeshHWMPconfirmationInterval;      \	} while (0) #define CHAN_ENTRY __field(enum ieee80211_band, band) \		   __field(u16, center_freq)#define CHAN_ASSIGN(chan)					  \	do {							  \		if (chan) {					  \			__entry->band = chan->band;		  \			__entry->center_freq = chan->center_freq; \		} else {					  \			__entry->band = 0;			  \			__entry->center_freq = 0;		  \		}						  \	} while (0)#define CHAN_PR_FMT "band: %d, freq: %u"#define CHAN_PR_ARG __entry->band, __entry->center_freq #define CHAN_DEF_ENTRY __field(enum ieee80211_band, band)		\		       __field(u32, control_freq)			\		       __field(u32, width)				\		       __field(u32, center_freq1)			\		       __field(u32, center_freq2)#define CHAN_DEF_ASSIGN(chandef)					\	do {								\		if ((chandef) && (chandef)->chan) {			\			__entry->band = (chandef)->chan->band;		\			__entry->control_freq =				\				(chandef)->chan->center_freq;		\			__entry->width = (chandef)->width;		\			__entry->center_freq1 = (chandef)->center_freq1;\			__entry->center_freq2 = (chandef)->center_freq2;\		} else {						\			__entry->band = 0;				\			__entry->control_freq = 0;			\			__entry->width = 0;				\			__entry->center_freq1 = 0;			\			__entry->center_freq2 = 0;			\		}							\	} while (0)#define CHAN_DEF_PR_FMT							\	"band: %d, control freq: %u, width: %d, cf1: %u, cf2: %u"#define CHAN_DEF_PR_ARG __entry->band, __entry->control_freq,		\			__entry->width, __entry->center_freq1,		\			__entry->center_freq2 #define SINFO_ENTRY __field(int, generation)	    \		    __field(u32, connected_time)    \		    __field(u32, inactive_time)	    \		    __field(u32, rx_bytes)	    \		    __field(u32, tx_bytes)	    \		    __field(u32, rx_packets)	    \		    __field(u32, tx_packets)	    \		    __field(u32, tx_retries)	    \		    __field(u32, tx_failed)	    \		    __field(u32, rx_dropped_misc)   \		    __field(u32, beacon_loss_count) \		    __field(u16, llid)		    \		    __field(u16, plid)		    \		    __field(u8, plink_state)#define SINFO_ASSIGN						       \	do {							       \		__entry->generation = sinfo->generation;	       \		__entry->connected_time = sinfo->connected_time;       \		__entry->inactive_time = sinfo->inactive_time;	       \		__entry->rx_bytes = sinfo->rx_bytes;		       \		__entry->tx_bytes = sinfo->tx_bytes;		       \		__entry->rx_packets = sinfo->rx_packets;	       \		__entry->tx_packets = sinfo->tx_packets;	       \		__entry->tx_retries = sinfo->tx_retries;	       \		__entry->tx_failed = sinfo->tx_failed;		       \		__entry->rx_dropped_misc = sinfo->rx_dropped_misc;     \		__entry->beacon_loss_count = sinfo->beacon_loss_count; \		__entry->llid = sinfo->llid;			       \		__entry->plid = sinfo->plid;			       \		__entry->plink_state = sinfo->plink_state;	       \	} while (0) #define BOOL_TO_STR(bo) (bo) ? "true" : "false" /************************************************************* *			rdev->ops traces		     * *************************************************************/ TRACE_EVENT(rdev_suspend,	TP_PROTO(struct wiphy *wiphy, struct cfg80211_wowlan *wow),	TP_ARGS(wiphy, wow),	TP_STRUCT__entry(		WIPHY_ENTRY		__field(bool, any)		__field(bool, disconnect)		__field(bool, magic_pkt)		__field(bool, gtk_rekey_failure)		__field(bool, eap_identity_req)		__field(bool, four_way_handshake)		__field(bool, rfkill_release)		__field(bool, valid_wow)	),	TP_fast_assign(		WIPHY_ASSIGN;		if (wow) {			__entry->any = wow->any;			__entry->disconnect = wow->disconnect;			__entry->magic_pkt = wow->magic_pkt;			__entry->gtk_rekey_failure = wow->gtk_rekey_failure;			__entry->eap_identity_req = wow->eap_identity_req;			__entry->four_way_handshake = wow->four_way_handshake;			__entry->rfkill_release = wow->rfkill_release;			__entry->valid_wow = true;		} else {			__entry->valid_wow = false;		}	),	TP_printk(WIPHY_PR_FMT ", wow%s - any: %d, disconnect: %d, "		  "magic pkt: %d, gtk rekey failure: %d, eap identify req: %d, "		  "four way handshake: %d, rfkill release: %d.",		  WIPHY_PR_ARG, __entry->valid_wow ? "" : "(Not configured!)",		  __entry->any, __entry->disconnect, __entry->magic_pkt,		  __entry->gtk_rekey_failure, __entry->eap_identity_req,		  __entry->four_way_handshake, __entry->rfkill_release)); TRACE_EVENT(rdev_return_int,	TP_PROTO(struct wiphy *wiphy, int ret),	TP_ARGS(wiphy, ret),	TP_STRUCT__entry(		WIPHY_ENTRY		__field(int, ret)	),	TP_fast_assign(		WIPHY_ASSIGN;		__entry->ret = ret;	),	TP_printk(WIPHY_PR_FMT ", returned: %d", WIPHY_PR_ARG, __entry->ret)); TRACE_EVENT(rdev_scan,	TP_PROTO(struct wiphy *wiphy, struct cfg80211_scan_request *request),	TP_ARGS(wiphy, request),	TP_STRUCT__entry(		WIPHY_ENTRY	),	TP_fast_assign(		WIPHY_ASSIGN;	),	TP_printk(WIPHY_PR_FMT, WIPHY_PR_ARG)); DECLARE_EVENT_CLASS(wiphy_only_evt,	TP_PROTO(struct wiphy *wiphy),	TP_ARGS(wiphy),	TP_STRUCT__entry(		WIPHY_ENTRY	),	TP_fast_assign(		WIPHY_ASSIGN;	),	TP_printk(WIPHY_PR_FMT, WIPHY_PR_ARG)); DEFINE_EVENT(wiphy_only_evt, rdev_resume,	TP_PROTO(struct wiphy *wiphy),	TP_ARGS(wiphy)); DEFINE_EVENT(wiphy_only_evt, rdev_return_void,	TP_PROTO(struct wiphy *wiphy),	TP_ARGS(wiphy)); DEFINE_EVENT(wiphy_only_evt, rdev_get_ringparam,	TP_PROTO(struct wiphy *wiphy),	TP_ARGS(wiphy)); DEFINE_EVENT(wiphy_only_evt, rdev_get_antenna,	TP_PROTO(struct wiphy *wiphy),	TP_ARGS(wiphy)); DEFINE_EVENT(wiphy_only_evt, rdev_rfkill_poll,	TP_PROTO(struct wiphy *wiphy),	TP_ARGS(wiphy)); DECLARE_EVENT_CLASS(wiphy_enabled_evt,	TP_PROTO(struct wiphy *wiphy, bool enabled),	TP_ARGS(wiphy, enabled),	TP_STRUCT__entry(		WIPHY_ENTRY		__field(bool, enabled)	),	TP_fast_assign(		WIPHY_ASSIGN;		__entry->enabled = enabled;	),	TP_printk(WIPHY_PR_FMT ", %senabled ",		  WIPHY_PR_ARG, __entry->enabled ? "" : "not ")); DEFINE_EVENT(wiphy_enabled_evt, rdev_set_wakeup,	TP_PROTO(struct wiphy *wiphy, bool enabled),	TP_ARGS(wiphy, enabled)); TRACE_EVENT(rdev_add_virtual_intf,	TP_PROTO(struct wiphy *wiphy, char *name, enum nl80211_iftype type),	TP_ARGS(wiphy, name, type),	TP_STRUCT__entry(		WIPHY_ENTRY		__string(vir_intf_name, name ? name : "<noname>")		__field(enum nl80211_iftype, type)	),	TP_fast_assign(		WIPHY_ASSIGN;		__assign_str(vir_intf_name, name ? name : "<noname>");		__entry->type = type;	),	TP_printk(WIPHY_PR_FMT ", virtual intf name: %s, type: %d",		  WIPHY_PR_ARG, __get_str(vir_intf_name), __entry->type)); DECLARE_EVENT_CLASS(wiphy_wdev_evt,	TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev),	TP_ARGS(wiphy, wdev),	TP_STRUCT__entry(		WIPHY_ENTRY		WDEV_ENTRY	),	TP_fast_assign(		WIPHY_ASSIGN;		WDEV_ASSIGN;	),	TP_printk(WIPHY_PR_FMT ", " WDEV_PR_FMT, WIPHY_PR_ARG, WDEV_PR_ARG)); DEFINE_EVENT(wiphy_wdev_evt, rdev_return_wdev,	TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev),	TP_ARGS(wiphy, wdev)); DEFINE_EVENT(wiphy_wdev_evt, rdev_del_virtual_intf,	TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev),	TP_ARGS(wiphy, wdev)); TRACE_EVENT(rdev_change_virtual_intf,	TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,		 enum nl80211_iftype type),	TP_ARGS(wiphy, netdev, type),	TP_STRUCT__entry(		WIPHY_ENTRY		NETDEV_ENTRY		__field(enum nl80211_iftype, type)	),	TP_fast_assign(		WIPHY_ASSIGN;		NETDEV_ASSIGN;		__entry->type = type;	),	TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", type: %d",		  WIPHY_PR_ARG, NETDEV_PR_ARG, __entry->type)); DECLARE_EVENT_CLASS(key_handle,	TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, u8 key_index,		 bool pairwise, const u8 *mac_addr),	TP_ARGS(wiphy, netdev, key_index, pairwise, mac_addr),	TP_STRUCT__entry(		WIPHY_ENTRY		NETDEV_ENTRY		MAC_ENTRY(mac_addr)		__field(u8, key_index)		__field(bool, pairwise)	),	TP_fast_assign(		WIPHY_ASSIGN;		NETDEV_ASSIGN;		MAC_ASSIGN(mac_addr, mac_addr);		__entry->key_index = key_index;		__entry->pairwise = pairwise;	),	TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", key_index: %u, pairwise: %s, mac addr: " MAC_PR_FMT,		  WIPHY_PR_ARG, NETDEV_PR_ARG, __entry->key_index,		  BOOL_TO_STR(__entry->pairwise), MAC_PR_ARG(mac_addr))); DEFINE_EVENT(key_handle, rdev_add_key,	TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, u8 key_index,		 bool pairwise, const u8 *mac_addr),	TP_ARGS(wiphy, netdev, key_index, pairwise, mac_addr)); DEFINE_EVENT(key_handle, rdev_get_key,	TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, u8 key_index,		 bool pairwise, const u8 *mac_addr),	TP_ARGS(wiphy, netdev, key_index, pairwise, mac_addr)); DEFINE_EVENT(key_handle, rdev_del_key,	TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, u8 key_index,		 bool pairwise, const u8 *mac_addr),	TP_ARGS(wiphy, netdev, key_index, pairwise, mac_addr)); TRACE_EVENT(rdev_set_default_key,	TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, u8 key_index,		 bool unicast, bool multicast),	TP_ARGS(wiphy, netdev, key_index, unicast, multicast),	TP_STRUCT__entry(		WIPHY_ENTRY		NETDEV_ENTRY		__field(u8, key_index)		__field(bool, unicast)		__field(bool, multicast)	),	TP_fast_assign(		WIPHY_ASSIGN;		NETDEV_ASSIGN;		__entry->key_index = key_index;		__entry->unicast = unicast;		__entry->multicast = multicast;	),	TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", key index: %u, unicast: %s, multicast: %s",		  WIPHY_PR_ARG, NETDEV_PR_ARG, __entry->key_index,		  BOOL_TO_STR(__entry->unicast),		  BOOL_TO_STR(__entry->multicast))); TRACE_EVENT(rdev_set_default_mgmt_key,	TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, u8 key_index),	TP_ARGS(wiphy, netdev, key_index),	TP_STRUCT__entry(		WIPHY_ENTRY		NETDEV_ENTRY		__field(u8, key_index)	),	TP_fast_assign(		WIPHY_ASSIGN;		NETDEV_ASSIGN;		__entry->key_index = key_index;	),	TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", key index: %u",		  WIPHY_PR_ARG, NETDEV_PR_ARG, __entry->key_index)); TRACE_EVENT(rdev_start_ap,	TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,		 struct cfg80211_ap_settings *settings),	TP_ARGS(wiphy, netdev, settings),	TP_STRUCT__entry(		WIPHY_ENTRY		NETDEV_ENTRY		CHAN_DEF_ENTRY		__field(int, beacon_interval)		__field(int, dtim_period)		__array(char, ssid, IEEE80211_MAX_SSID_LEN + 1)		__field(enum nl80211_hidden_ssid, hidden_ssid)		__field(u32, wpa_ver)		__field(bool, privacy)		__field(enum nl80211_auth_type, auth_type)		__field(int, inactivity_timeout)	),	TP_fast_assign(		WIPHY_ASSIGN;		NETDEV_ASSIGN;		CHAN_DEF_ASSIGN(&settings->chandef);		__entry->beacon_interval = settings->beacon_interval;		__entry->dtim_period = settings->dtim_period;		__entry->hidden_ssid = settings->hidden_ssid;		__entry->wpa_ver = settings->crypto.wpa_versions;		__entry->privacy = settings->privacy;		__entry->auth_type = settings->auth_type;		__entry->inactivity_timeout = settings->inactivity_timeout;		memset(__entry->ssid, 0, IEEE80211_MAX_SSID_LEN + 1);		memcpy(__entry->ssid, settings->ssid, settings->ssid_len);	),	TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", AP settings - ssid: %s, "		  CHAN_DEF_PR_FMT ", beacon interval: %d, dtim period: %d, "		  "hidden ssid: %d, wpa versions: %u, privacy: %s, "		  "auth type: %d, inactivity timeout: %d",		  WIPHY_PR_ARG, NETDEV_PR_ARG, __entry->ssid, CHAN_DEF_PR_ARG,		  __entry->beacon_interval, __entry->dtim_period,		  __entry->hidden_ssid, __entry->wpa_ver,		  BOOL_TO_STR(__entry->privacy), __entry->auth_type,		  __entry->inactivity_timeout)); TRACE_EVENT(rdev_change_beacon,	TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,		 struct cfg80211_beacon_data *info),	TP_ARGS(wiphy, netdev, info),

Lines 1–500 of 2568.