nexmon – Blame information for rev 1
?pathlinks?
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 | } |