After fixing super annoying bug about garbage scan results,
I noticed smaller bug:
My wireless leds stop blinking if I enable monitor mode
(Note that this time this doesn't happen if I enable promisc mode)
Only module reload or recreation of wlan0 using iw helps.
This is due to the fact that once card is put in monitor mode it stays
there always.
(I will fix this bug when I have time)
But leds should work even in monitor mode.
Btw, do leds indicate RX activity or TX or both?
Best regards,
Maxim Levitsky
PS:
I will soon buy a standalone wireless card (pci express)
Are iwlwifi based cards aviable?
Maxim Levitsky wrote:
> After fixing super annoying bug about garbage scan results,
> I noticed smaller bug:
>
> My wireless leds stop blinking if I enable monitor mode
> (Note that this time this doesn't happen if I enable promisc mode)
Ok, now I understand how its leds work.
the STATISTICS_NOTIFICATION reply from microcode drives all the led
blinking code. on each such notification the handler decides based on
traffic whenever to turn led solid or blink it.
the handler for 3945 actually counts recieved and transmitted packets!:
> static inline u8 get_blink_rate(struct iwl3945_priv *priv)
> {
> int index;
> u64 current_tpt = priv->rxtxpackets;
> s64 tpt = current_tpt - priv->led_tpt;
>
> if (tpt < 0)
> tpt = -tpt;
> priv->led_tpt = current_tpt;
in iwl3945-led.c
priv->rxtxpackets is updated each time a packet is recieved/transmitted
by iwl3945_pass_packet_to_mac80211:
> #ifdef CONFIG_IWL3945_LEDS
> if (ieee80211_is_data(hdr->frame_control))
> priv->rxtxpackets += len;
> #endif
and iwl3945_build_tx_cmd_basic:
> #ifdef CONFIG_IWL3945_LEDS
> priv->rxtxpackets += le16_to_cpu(cmd->cmd.tx.len);
> #endif
now the problem is that as soon as the firmware enters the monitor mode
it stops sending STATISTICS_NOTIFICATION.
So ether I need a way to tell firmware to continue sending this message,
or use a timer instead in monitor mode.
How I can tell the firmware to send STATISTICS_NOTIFICATION in monitor mode?
Intel developers, can you comment on this?
Btw, the led code really should be shared between 3945/4965.
Best regards,
Maxim Levitsky
On Sat, Aug 2, 2008 at 12:43 PM, Maxim Levitsky <[email protected]> wrote:
> After fixing super annoying bug about garbage scan results,
> I noticed smaller bug:
>
> My wireless leds stop blinking if I enable monitor mode
> (Note that this time this doesn't happen if I enable promisc mode)
>
> Only module reload or recreation of wlan0 using iw helps.
> This is due to the fact that once card is put in monitor mode it stays
> there always.
> (I will fix this bug when I have time)
Great.
>
> But leds should work even in monitor mode.
>
> Btw, do leds indicate RX activity or TX or both?
>
I've excluded RX for now. Since the filtering of the RX packets was
removed for favor or mac80211 filtering there was a lot of false
blinking.
<snip>
static int iwl_get_blink_rate(struct iwl_priv *priv)
{
int i;
u64 current_tpt = priv->tx_stats[2].bytes;
/* FIXME: + priv->rx_stats[2].bytes; */
</snip>
I'm pretty sure I won't have time to look at now
> PS:
>
> I will soon buy a standalone wireless card (pci express)
> Are iwlwifi based cards aviable?
Not sure if the cards are available stand alone.
Thanks
Tomas
On Mon, Aug 4, 2008 at 12:56 AM, Maxim Levitsky <[email protected]> wrote:
> Maxim Levitsky wrote:
>> After fixing super annoying bug about garbage scan results,
>> I noticed smaller bug:
>>
>> My wireless leds stop blinking if I enable monitor mode
>> (Note that this time this doesn't happen if I enable promisc mode)
>
> Ok, now I understand how its leds work.
>
> the STATISTICS_NOTIFICATION reply from microcode drives all the led
> blinking code. on each such notification the handler decides based on
> traffic whenever to turn led solid or blink it.
>
> the handler for 3945 actually counts recieved and transmitted packets!:
>
>> static inline u8 get_blink_rate(struct iwl3945_priv *priv)
>> {
>> int index;
>> u64 current_tpt = priv->rxtxpackets;
>> s64 tpt = current_tpt - priv->led_tpt;
>>
>> if (tpt < 0)
>> tpt = -tpt;
>> priv->led_tpt = current_tpt;
>
>
> in iwl3945-led.c
Right I forgot I didn't change this in 3945.
> priv->rxtxpackets is updated each time a packet is recieved/transmitted
> by iwl3945_pass_packet_to_mac80211:
>
>> #ifdef CONFIG_IWL3945_LEDS
>> if (ieee80211_is_data(hdr->frame_control))
>> priv->rxtxpackets += len;
>> #endif
>
>
> and iwl3945_build_tx_cmd_basic:
>
>> #ifdef CONFIG_IWL3945_LEDS
>> priv->rxtxpackets += le16_to_cpu(cmd->cmd.tx.len);
>> #endif
>
>
>
>
> now the problem is that as soon as the firmware enters the monitor mode
> it stops sending STATISTICS_NOTIFICATION.
> So ether I need a way to tell firmware to continue sending this message,
> or use a timer instead in monitor mode.
>
> How I can tell the firmware to send STATISTICS_NOTIFICATION in monitor mode?
> Intel developers, can you comment on this?
>
Statistic notification is just used as a point where NIC is woken up.
We don't wan to wake up NIC just for LED command.
But in monitor mode nic have to be run in CAM mode anyway so you can
send the command out from the led timer directly.
>
> Btw, the led code really should be shared between 3945/4965.
Oh, more then LED code :) But that's a lot of infrastructure code that
need to be done. I still have hard heard on guys who split the code at
the first place but that's already a history..
Tomas