Hi! On 04.02.2011 09:51:34 +0100, Bernhard Schmidt wrote:
> On Friday 04 February 2011 07:08:08 Alexander Zagrebin wrote: > > I'm using an Ralink RT2870 based adapter (run(4) driver) in the > > hostap mode. and I've noticed that if_run doesn't support stations > > working in the power save mode (PSM). The reason is in lack of the > > TIM in beacons. The attached patch adds this functionality and > > completely fixes this issue. Despite the fact that patch is working, > > it seems that it needs an additional work. For example, now the > > result of ieee80211_beacon_update is ignored with a corresponding > > message, but may be necessary to process it... > > > > Can somebody review it? > > That looks about right, good catch! > > Handling ieee80211_beacon_update()'s return value doesn't seem to be > necessary, the mbuf's length is handled in the next few lines of code > anyways, doesn't matter if it changed or not. > > Though, I have a some doubts about just restoring bo_flags is enough > (Can't prove that with some obvious code, still..). It feels saner to me > if we just reuse the whole mbuf, similar to what ath(4) does. Can you > look at attached patch? Completely untested, so I'm not sure what does > happen on e.g. changing the SSID. I've thought about such solution, and it looks more right, but I've decided just to add ieee80211_beacon_update() to make the patch clear. I'll try your patch a bit later, but I already have a question: on the first invocation of the run_update_beacon_cb() only ieee80211_beacon_alloc() will be called. So dynamic beacon contents will not updated. Is it a problem? Also I have to note, that it seems that other wlan drivers can has this problem too: only ral's and ath's code uses ieee80211_beacon_update(). Also, I've found a kern/124753. One of replies contains a log's fragment with many records, like following: kernel: ath0: [00:18:41:c0:06:54] power save mode on, 1 sta's in ps mode kernel: ath0: [00:18:41:c0:06:54] save frame with age 0, 1 now queued kernel: ath0: [00:18:41:c0:06:54] save frame with age 0, 2 now queued kernel: ath0: [00:18:41:c0:06:54] power save mode off, 0 sta's in ps mode kernel: ath0: [00:18:41:c0:06:54] flush ps queue, 2 packets queue But there are no records, which have to be for a PSM enabled stations: When a beacon is properly updated, then we have to see records about 1. TIM updating, like ieee80211_beacon_update: TIM updated, pending 1, off 0, len 1 2. poll messages from a stations, like wlan0: [18:86:ac:10:4b:88] recv ps-poll, send packet, queue empty Thanks for your cooperation! -- Alexander Zagrebin _______________________________________________ freebsd-net@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-net To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"