Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 74079fdc authored by James Ketrenos's avatar James Ketrenos Committed by Jeff Garzik
Browse files

[PATCH] ieee80211 Added wireless spy support



Added wireless spy support to Rx code path.

Signed-off-by: default avatarJames Ketrenos <jketreno@linux.intel.com>

NOTE:  Looks like scripts/Lindent generated output different
than the Lindented version already in-kernel, hence all the
whitespace deltas...  *sigh*
Signed-off-by: default avatarJeff Garzik <jgarzik@pobox.com>
parent b1b508e1
Loading
Loading
Loading
Loading
+44 −65
Original line number Diff line number Diff line
@@ -33,7 +33,6 @@
   represents the 2304 bytes of real data, plus a possible 8 bytes of
   WEP IV and ICV. (this interpretation suggested by Ramiro Barreiro) */


#define IEEE80211_HLEN			30
#define IEEE80211_FRAME_LEN		(IEEE80211_DATA_LEN + IEEE80211_HLEN)

@@ -117,7 +116,6 @@ struct ieee80211_hdr_3addr {
#define IEEE80211_SCTL_FRAG		0x000F
#define IEEE80211_SCTL_SEQ		0xFFF0


/* debug macros */

#ifdef CONFIG_IEEE80211_DEBUG
@@ -130,7 +128,6 @@ do { if (ieee80211_debug_level & (level)) \
#define IEEE80211_DEBUG(level, fmt, args...) do {} while (0)
#endif				/* CONFIG_IEEE80211_DEBUG */


/* debug macros not dependent on CONFIG_IEEE80211_DEBUG */

#define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x"
@@ -140,7 +137,6 @@ do { if (ieee80211_debug_level & (level)) \
 * messages. It should never be used for passing essid to user space. */
const char *escape_essid(const char *essid, u8 essid_len);


/*
 * To use the debug system:
 *
@@ -312,14 +308,12 @@ enum ieee80211_reasoncode {
	WLAN_REASON_CIPHER_SUITE_REJECTED = 24,
};


#define IEEE80211_STATMASK_SIGNAL (1<<0)
#define IEEE80211_STATMASK_RSSI (1<<1)
#define IEEE80211_STATMASK_NOISE (1<<2)
#define IEEE80211_STATMASK_RATE (1<<3)
#define IEEE80211_STATMASK_WEMASK 0x7


#define IEEE80211_CCK_MODULATION    (1<<0)
#define IEEE80211_OFDM_MODULATION   (1<<1)

@@ -377,9 +371,6 @@ enum ieee80211_reasoncode {
#define IEEE80211_NUM_CCK_RATES	            4
#define IEEE80211_OFDM_SHIFT_MASK_A         4




/* NOTE: This data is for statistical purposes; not all hardware provides this
 *       information for frames received.  Not setting these will not cause
 *       any adverse affects. */
@@ -460,17 +451,13 @@ struct ieee80211_device;

struct ieee80211_security {
	u16 active_key:2,
            enabled:1,
	    auth_mode:2,
            auth_algo:4,
            unicast_uses_group:1;
	    enabled:1, auth_mode:2, auth_algo:4, unicast_uses_group:1;
	u8 key_sizes[WEP_KEYS];
	u8 keys[WEP_KEYS][WEP_KEY_LEN];
	u8 level;
	u16 flags;
} __attribute__ ((packed));


/*

 802.11 data frame from AP
@@ -554,7 +541,6 @@ struct ieee80211_authentication {
	struct ieee80211_info_element info_element;
} __attribute__ ((packed));


struct ieee80211_probe_response {
	struct ieee80211_hdr_3addr header;
	u32 time_stamp[2];
@@ -578,7 +564,6 @@ struct ieee80211_assoc_response_frame {
	struct ieee80211_info_element info_element;	/* supported rates */
} __attribute__ ((packed));


struct ieee80211_txb {
	u8 nr_frags;
	u8 encrypted;
@@ -588,7 +573,6 @@ struct ieee80211_txb {
	struct sk_buff *fragments[0];
};


/* SWEEP TABLE ENTRIES NUMBER */
#define MAX_SWEEP_TAB_ENTRIES		  42
#define MAX_SWEEP_TAB_ENTRIES_PER_PACKET  7
@@ -651,7 +635,6 @@ enum ieee80211_state {
#define DEFAULT_MAX_SCAN_AGE (15 * HZ)
#define DEFAULT_FTS 2346


#define CFG_IEEE80211_RESERVE_FCS (1<<0)
#define CFG_IEEE80211_COMPUTE_FCS (1<<1)

@@ -670,6 +653,7 @@ struct ieee80211_device {
	int scan_age;

	int iw_mode;		/* operating mode (IW_MODE_*) */
	struct iw_spy_data spy_data;	/* iwspy support */

	spinlock_t lock;

@@ -760,7 +744,8 @@ extern inline int ieee80211_is_empty_essid(const char *essid, int essid_len)
	return 1;
}

extern inline int ieee80211_is_valid_mode(struct ieee80211_device *ieee, int mode)
extern inline int ieee80211_is_valid_mode(struct ieee80211_device *ieee,
					  int mode)
{
	/*
	 * It is possible for both access points and our device to support
@@ -811,8 +796,6 @@ extern inline int ieee80211_get_hdrlen(u16 fc)
	return hdrlen;
}



/* ieee80211.c */
extern void free_ieee80211(struct net_device *dev);
extern struct net_device *alloc_ieee80211(int sizeof_priv);
@@ -820,11 +803,9 @@ extern struct net_device *alloc_ieee80211(int sizeof_priv);
extern int ieee80211_set_encryption(struct ieee80211_device *ieee);

/* ieee80211_tx.c */
extern int ieee80211_xmit(struct sk_buff *skb,
			  struct net_device *dev);
extern int ieee80211_xmit(struct sk_buff *skb, struct net_device *dev);
extern void ieee80211_txb_free(struct ieee80211_txb *);


/* ieee80211_rx.c */
extern int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
			struct ieee80211_rx_stats *rx_stats);
@@ -843,7 +824,6 @@ extern int ieee80211_wx_get_encode(struct ieee80211_device *ieee,
				   struct iw_request_info *info,
				   union iwreq_data *wrqu, char *key);


extern inline void ieee80211_increment_scans(struct ieee80211_device *ieee)
{
	ieee->scans++;
@@ -854,5 +834,4 @@ extern inline int ieee80211_get_scans(struct ieee80211_device *ieee)
	return ieee->scans;
}


#endif				/* IEEE80211_H */
+27 −16
Original line number Diff line number Diff line
@@ -378,33 +378,47 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
	frag = WLAN_GET_SEQ_FRAG(sc);
	hdrlen = ieee80211_get_hdrlen(fc);

#ifdef NOT_YET
#if WIRELESS_EXT > 15
	/* Put this code here so that we avoid duplicating it in all
	 * Rx paths. - Jean II */
#ifdef IW_WIRELESS_SPY		/* defined in iw_handler.h */
	/* If spy monitoring on */
	if (iface->spy_data.spy_number > 0) {
	if (ieee->spy_data.spy_number > 0) {
		struct iw_quality wstats;
		wstats.level = rx_stats->signal;

		wstats.updated = 0;
		if (rx_stats->mask & IEEE80211_STATMASK_RSSI) {
			wstats.level = rx_stats->rssi;
			wstats.updated |= IW_QUAL_LEVEL_UPDATED;
		} else
			wstats.updated |= IW_QUAL_LEVEL_INVALID;

		if (rx_stats->mask & IEEE80211_STATMASK_NOISE) {
			wstats.noise = rx_stats->noise;
		wstats.updated = 6;	/* No qual value */
			wstats.updated |= IW_QUAL_NOISE_UPDATED;
		} else
			wstats.updated |= IW_QUAL_NOISE_INVALID;

		if (rx_stats->mask & IEEE80211_STATMASK_SIGNAL) {
			wstats.qual = rx_stats->signal;
			wstats.updated |= IW_QUAL_QUAL_UPDATED;
		} else
			wstats.updated |= IW_QUAL_QUAL_INVALID;

		/* Update spy records */
		wireless_spy_update(dev, hdr->addr2, &wstats);
		wireless_spy_update(ieee->dev, hdr->addr2, &wstats);
	}
#endif				/* IW_WIRELESS_SPY */
#endif				/* WIRELESS_EXT > 15 */

#ifdef NOT_YET
	hostap_update_rx_stats(local->ap, hdr, rx_stats);
#endif

#if WIRELESS_EXT > 15
	if (ieee->iw_mode == IW_MODE_MONITOR) {
		ieee80211_monitor_rx(ieee, skb, rx_stats);
		stats->rx_packets++;
		stats->rx_bytes += skb->len;
		return 1;
	}
#endif

	if (ieee->host_decrypt) {
		int idx = 0;
@@ -771,8 +785,7 @@ static inline int ieee80211_is_ofdm_rate(u8 rate)
	return 0;
}

static inline int ieee80211_network_init(struct ieee80211_device *ieee,
					 struct ieee80211_probe_response
static inline int ieee80211_network_init(struct ieee80211_device *ieee, struct ieee80211_probe_response
					 *beacon,
					 struct ieee80211_network *network,
					 struct ieee80211_rx_stats *stats)
@@ -1028,11 +1041,9 @@ static inline void update_network(struct ieee80211_network *dst,
}

static inline void ieee80211_process_probe_response(struct ieee80211_device
						    *ieee,
						    struct
						    *ieee, struct
						    ieee80211_probe_response
						    *beacon,
						    struct ieee80211_rx_stats
						    *beacon, struct ieee80211_rx_stats
						    *stats)
{
	struct ieee80211_network network;
+12 −12

File changed.

Contains only whitespace changes.

+13 −13

File changed.

Contains only whitespace changes.

+13 −13

File changed.

Contains only whitespace changes.

+13 −13

File changed.

Contains only whitespace changes.

+12 −12

File changed.

Contains only whitespace changes.

Loading