nexmon – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 --- rtl8187_linux_26.1010.0622.2006/beta-8187/ieee80211.h 2006-06-06 04:58:02.000000000 +0200
2 +++ rtl8187_prismhdr/beta-8187/ieee80211.h 2006-11-29 20:28:16.152853116 +0100
3 @@ -156,6 +156,23 @@
4 struct list_head list;
5 };
6  
7 +#define LWNG_CAP_DID_BASE (4 | (1 << 6)) /* section 4, group 1 */
8 +#define IW_MODE_MONITOR_PRISM 15
9 +/* ARPHRD_IEEE80211_PRISM uses a bloated version of Prism2 RX frame header
10 + * (from linux-wlan-ng) */
11 +struct linux_wlan_ng_val {
12 + u32 did;
13 + u16 status, len;
14 + u32 data;
15 +} __attribute__ ((packed));
16 +
17 +struct linux_wlan_ng_prism_hdr {
18 + u32 msgcode, msglen;
19 + char devname[16];
20 + struct linux_wlan_ng_val hosttime, mactime, channel, rssi, sq, signal,
21 + noise, rate, istx, frmlen;
22 +} __attribute__ ((packed));
23 +
24 struct ieee80211_hdr {
25 u16 frame_ctl;
26 u16 duration_id;
27 --- rtl8187_linux_26.1010.0622.2006/beta-8187/r8187_core.c 2006-06-22 07:43:30.000000000 +0200
28 +++ rtl8187_prismhdr/beta-8187/r8187_core.c 2006-12-16 16:44:12.244211046 +0100
29 @@ -1112,7 +1112,10 @@
30 struct ieee80211_hdr *h = (struct ieee80211_hdr *) skb->data;
31  
32 if (le16_to_cpu(h->frame_ctl) & IEEE80211_FCTL_MOREFRAGS)
33 - morefrag = 1;
34 + {
35 + if(priv->ieee80211->iw_mode != IW_MODE_MONITOR || priv->ieee80211->raw_tx != 1)
36 + morefrag = 1;
37 + }
38 // DMESG("%x %x", h->frame_ctl, h->seq_ctl);
39 /*
40 * This function doesn't require lock because we make
41 @@ -2346,7 +2349,8 @@
42  
43 if( flen <= rx_urb->actual_length){
44  
45 - stats.signal = (desc[1] & 0x7f00)>>8;
46 +// stats.signal = (desc[1] & 0x7f00)>>8;
47 + stats.signal = (desc[1] & 0xff00)>>8;
48 stats.noise = desc[1] &0xff;
49 stats.rate = desc[0] >> 20 & 0xf;
50 stats.mac_time[0] = desc[2];
51 @@ -2368,6 +2372,8 @@
52 // priv->rxskb = skb;
53 // priv->tempstats = &stats;
54  
55 +
56 + stats.signal -= stats.noise;
57 if(!ieee80211_rx(priv->ieee80211,
58 skb, &stats))
59 dev_kfree_skb_any(skb);
60 --- rtl8187_linux_26.1010.0622.2006/beta-8187/r8187.h 2006-06-06 08:48:10.000000000 +0200
61 +++ rtl8187_prismhdr/beta-8187/r8187.h 2006-12-16 16:44:31.418296142 +0100
62 @@ -148,7 +148,7 @@
63 u8 challow[15]; //channels from 1 to 14, 0 not used
64 short up;
65 short crcmon; //if 1 allow bad crc frame reception in monitor mode
66 -// short prism_hdr;
67 + short prism_hdr;
68  
69 // struct timer_list scan_timer;
70 /*short scanpending;
71 --- rtl8187_linux_26.1010.0622.2006/ieee80211/ieee80211.h 2006-06-06 04:57:56.000000000 +0200
72 +++ rtl8187_prismhdr/ieee80211/ieee80211.h 2006-11-29 20:45:25.190415628 +0100
73 @@ -156,6 +156,22 @@
74 struct list_head list;
75 };
76  
77 +#define LWNG_CAP_DID_BASE (4 | (1 << 6)) /* section 4, group 1 */
78 +/* ARPHRD_IEEE80211_PRISM uses a bloated version of Prism2 RX frame header
79 + * (from linux-wlan-ng) */
80 +struct linux_wlan_ng_val {
81 + u32 did;
82 + u16 status, len;
83 + u32 data;
84 +} __attribute__ ((packed));
85 +
86 +struct linux_wlan_ng_prism_hdr {
87 + u32 msgcode, msglen;
88 + char devname[16];
89 + struct linux_wlan_ng_val hosttime, mactime, channel, rssi, sq, signal,
90 + noise, rate, istx, frmlen;
91 +} __attribute__ ((packed));
92 +
93 struct ieee80211_hdr {
94 u16 frame_ctl;
95 u16 duration_id;
96 --- rtl8187_linux_26.1010.0622.2006/ieee80211/ieee80211_rx.c 2006-06-06 04:58:00.000000000 +0200
97 +++ rtl8187_prismhdr/ieee80211/ieee80211_rx.c 2006-12-14 11:40:23.461865287 +0100
98 @@ -49,12 +49,72 @@
99 struct sk_buff *skb,
100 struct ieee80211_rx_stats *rx_stats)
101 {
102 - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
103 - u16 fc = le16_to_cpu(hdr->frame_ctl);
104 + struct ieee80211_hdr *hdr1 = (struct ieee80211_hdr *)skb->data;
105 + u16 fc = le16_to_cpu(hdr1->frame_ctl);
106 + int prism_header;
107 + int hdrlen, phdrlen, head_need, tail_need;
108 +
109 + if (ieee->dev->type == ARPHRD_IEEE80211_PRISM) {
110 + prism_header = 1;
111 + phdrlen = sizeof(struct linux_wlan_ng_prism_hdr);
112 + } else {
113 + prism_header = 0;
114 + phdrlen = 0;
115 + }
116 +
117 + hdrlen = ieee80211_get_hdrlen(fc);
118 +
119 + /* check if there is enough room for extra data; if not, expand skb
120 + * buffer to be large enough for the changes */
121 + head_need = phdrlen;
122 + tail_need = 0;
123 +#ifdef PRISM2_ADD_BOGUS_CRC
124 + tail_need += 4;
125 +#endif /* PRISM2_ADD_BOGUS_CRC */
126 +
127 + head_need -= skb_headroom(skb);
128 + tail_need -= skb_tailroom(skb);
129 +
130 + if (head_need > 0 || tail_need > 0) {
131 + if (pskb_expand_head(skb, head_need > 0 ? head_need : 0,
132 + tail_need > 0 ? tail_need : 0,
133 + GFP_ATOMIC)) {
134 + printk(KERN_DEBUG "%s: ieee80211_rx failed to "
135 + "reallocate skb buffer\n", ieee->dev->name);
136 + dev_kfree_skb_any(skb);
137 + return;
138 + }
139 + }
140 +
141 + if (prism_header == 1) {
142 + struct linux_wlan_ng_prism_hdr *hdr;
143 + hdr = (struct linux_wlan_ng_prism_hdr *)
144 + skb_push(skb, phdrlen);
145 + memset(hdr, 0, phdrlen);
146 + hdr->msgcode = LWNG_CAP_DID_BASE;
147 + hdr->msglen = sizeof(*hdr);
148 + memcpy(hdr->devname, ieee->dev->name, sizeof(hdr->devname));
149 +#define LWNG_SETVAL(f,i,s,l,d) \
150 +hdr->f.did = LWNG_CAP_DID_BASE | (i << 12); \
151 +hdr->f.status = s; hdr->f.len = l; hdr->f.data = d
152 + LWNG_SETVAL(hosttime, 1, 0, 4, jiffies);
153 + LWNG_SETVAL(mactime, 2, 0, 4, rx_stats->mac_time);
154 + LWNG_SETVAL(channel, 3, 1 /* no value */, 4, 0);
155 + LWNG_SETVAL(rssi, 4, 1 /* no value */, 4, 0);
156 + LWNG_SETVAL(sq, 5, 1 /* no value */, 4, 0);
157 + LWNG_SETVAL(signal, 6, 0, 4, rx_stats->signal);
158 + LWNG_SETVAL(noise, 7, 0, 4, rx_stats->noise);
159 + LWNG_SETVAL(rate, 8, 0, 4, rx_stats->rate / 5);
160 + LWNG_SETVAL(istx, 9, 0, 4, 0);
161 + LWNG_SETVAL(frmlen, 10, 0, 4, skb->len - phdrlen);
162 +#undef LWNG_SETVAL
163 + }
164  
165 skb->dev = ieee->dev;
166 skb->mac.raw = skb->data;
167 - skb_pull(skb, ieee80211_get_hdrlen(fc));
168 + skb_pull(skb, hdrlen);
169 + if (prism_header)
170 + skb_pull(skb, phdrlen);
171 skb->pkt_type = PACKET_OTHERHOST;
172 skb->protocol = __constant_htons(ETH_P_80211_RAW);
173 memset(skb->cb, 0, sizeof(skb->cb));
174 --- rtl8187_linux_26.1010.0622.2006/ieee80211/ieee80211_tx.c 2006-06-06 04:57:54.000000000 +0200
175 +++ rtl8187_prismhdr/ieee80211/ieee80211_tx.c 2006-12-16 11:57:57.695139366 +0100
176 @@ -458,7 +458,8 @@
177 ieee->seq_ctrl++;
178 //---
179 }else{
180 - if (unlikely(skb->len < sizeof(struct ieee80211_hdr_3addr))) {
181 +// if (unlikely(skb->len < sizeof(struct ieee80211_hdr_3addr))) {
182 + if (unlikely(skb->len < 14)) {
183 printk(KERN_WARNING "%s: skb too small (%d).\n",
184 ieee->dev->name, skb->len);
185 goto success;
186 --- rtl8187_linux_26.1010.0622.2006/ieee80211/ieee80211_softmac_wx.c 2006-06-06 04:57:54.000000000 +0200
187 +++ rtl8187_prismhdr/ieee80211/ieee80211_softmac_wx.c 2006-11-29 20:43:49.275996836 +0100
188 @@ -245,8 +245,7 @@
189 goto out;
190  
191 if (wrqu->mode == IW_MODE_MONITOR){
192 -
193 - ieee->dev->type = ARPHRD_IEEE80211;
194 + ieee->dev->type = ARPHRD_IEEE80211_PRISM;
195 }else{
196 ieee->dev->type = ARPHRD_ETHER;
197 }