nexmon – Blame information for rev 1
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 1 | diff -Nurb madwifi-ng-r1475/ath/if_ath.c patched_madwifi-ng-r1475/ath/if_ath.c
|
2 | --- madwifi-ng-r1475/ath/if_ath.c 2006-03-19 23:32:54.000000000 +0100
|
||
3 | +++ patched_madwifi-ng-r1475/ath/if_ath.c 2006-03-19 23:23:08.000000000 +0100
|
||
4 | @@ -2171,6 +2171,7 @@
|
||
5 | struct ath_softc *sc = dev->priv; |
||
6 | struct ath_hal *ah = sc->sc_ah; |
||
7 | struct ieee80211_phy_params *ph = (struct ieee80211_phy_params *) (skb->cb + sizeof(struct ieee80211_cb)); |
||
8 | + struct ieee80211com *ic = &sc->sc_ic;
|
||
9 | const HAL_RATE_TABLE *rt; |
||
10 | int pktlen; |
||
11 | int hdrlen; |
||
12 | @@ -2185,9 +2186,13 @@
|
||
13 | struct ieee80211_frame *wh; |
||
14 | |||
15 | wh = (struct ieee80211_frame *) skb->data; |
||
16 | - try0 = ATH_TXMAXTRY;
|
||
17 | + try0 = (ic->ic_opmode == IEEE80211_M_MONITOR) ? 1 : ATH_TXMAXTRY;
|
||
18 | + /*
|
||
19 | + * The retry value has to be patched to 1 when injecting,
|
||
20 | + * otherwise the card waits for acknowledges...
|
||
21 | + */
|
||
22 | rt = sc->sc_currates; |
||
23 | - txrate = dot11_to_ratecode(sc, rt, ph->rate0);
|
||
24 | + txrate = dot11_to_ratecode(sc, rt, (ic->ic_opmode == IEEE80211_M_MONITOR) ? (ic->inject_rate / 500) : ph->rate0);
|
||
25 | power = ph->power > 60 ? 60 : ph->power; |
||
26 | hdrlen = ieee80211_anyhdrsize(wh); |
||
27 | pktlen = skb->len + IEEE80211_CRC_LEN; |
||
28 | diff -Nurb madwifi-ng-r1475/net80211/ieee80211_var.h patched_madwifi-ng-r1475/net80211/ieee80211_var.h
|
||
29 | --- madwifi-ng-r1475/net80211/ieee80211_var.h 2006-03-19 23:32:40.000000000 +0100
|
||
30 | +++ patched_madwifi-ng-r1475/net80211/ieee80211_var.h 2006-03-19 23:24:48.000000000 +0100
|
||
31 | @@ -138,6 +138,7 @@
|
||
32 | u_int16_t ic_txpowlimit; /* global tx power limit */ |
||
33 | u_int16_t ic_uapsdmaxtriggers; /* max triggers that could arrive */ |
||
34 | u_int8_t ic_coverageclass; /* coverage class */ |
||
35 | + int inject_rate; /* injection rate in Monitor mode */
|
||
36 | |||
37 | /* |
||
38 | * Channel state: |
||
39 | diff -Nurb madwifi-ng-r1475/net80211/ieee80211_wireless.c patched_madwifi-ng-r1475/net80211/ieee80211_wireless.c
|
||
40 | --- madwifi-ng-r1475/net80211/ieee80211_wireless.c 2006-03-19 23:32:40.000000000 +0100
|
||
41 | +++ patched_madwifi-ng-r1475/net80211/ieee80211_wireless.c 2006-03-19 23:30:28.000000000 +0100
|
||
42 | @@ -346,6 +346,18 @@
|
||
43 | struct ifmediareq imr; |
||
44 | int rate, retv; |
||
45 | |||
46 | + if (ic->ic_opmode == IEEE80211_M_MONITOR) {
|
||
47 | + rate = rrq->value / 1000;
|
||
48 | + if (rate != 1000 && rate != 2000 && rate != 5500 &&
|
||
49 | + rate != 11000 && rate != 6000 && rate != 9000 &&
|
||
50 | + rate != 12000 && rate != 18000 && rate != 24000 &&
|
||
51 | + rate != 36000 && rate != 48000 && rate != 54000 )
|
||
52 | + return -EINVAL;
|
||
53 | + printk(KERN_DEBUG "setting xmit rate to %d\n", rate);
|
||
54 | + ic->inject_rate = rate;
|
||
55 | + return 0;
|
||
56 | + }
|
||
57 | +
|
||
58 | if (vap->iv_media.ifm_cur == NULL) |
||
59 | return -EINVAL; |
||
60 | memset(&ifr, 0, sizeof(ifr)); |
||
61 | @@ -379,9 +391,15 @@
|
||
62 | struct iw_param *rrq, char *extra) |
||
63 | { |
||
64 | struct ieee80211vap *vap = dev->priv; |
||
65 | + struct ieee80211com *ic = vap->iv_ic;
|
||
66 | struct ifmediareq imr; |
||
67 | int rate; |
||
68 | |||
69 | + if (ic->ic_opmode == IEEE80211_M_MONITOR) {
|
||
70 | + rrq->value = ic->inject_rate * 1000;
|
||
71 | + return 0;
|
||
72 | + }
|
||
73 | +
|
||
74 | memset(&imr, 0, sizeof(imr)); |
||
75 | vap->iv_media.ifm_status(vap->iv_dev, &imr); |
||
76 | |||
77 | @@ -1051,6 +1069,7 @@
|
||
78 | __u32 *mode, char *extra) |
||
79 | { |
||
80 | struct ieee80211vap *vap = dev->priv; |
||
81 | + struct ieee80211com *ic = vap->iv_ic;
|
||
82 | struct ifmediareq imr; |
||
83 | int valid = 0; |
||
84 | |||
85 | @@ -1060,8 +1079,10 @@
|
||
86 | if (imr.ifm_active & IFM_IEEE80211_HOSTAP) |
||
87 | valid = (*mode == IW_MODE_MASTER); |
||
88 | #if WIRELESS_EXT >= 15 |
||
89 | - else if (imr.ifm_active & IFM_IEEE80211_MONITOR)
|
||
90 | + else if (imr.ifm_active & IFM_IEEE80211_MONITOR) {
|
||
91 | valid = (*mode == IW_MODE_MONITOR); |
||
92 | + ic->inject_rate = 5500; /* default = 5.5M CCK */
|
||
93 | + }
|
||
94 | #endif |
||
95 | else if (imr.ifm_active & IFM_IEEE80211_ADHOC) |
||
96 | valid = (*mode == IW_MODE_ADHOC); |