Non-Broadcom router recommendations for Time Advertisement

Can someone please recommend a reasonably priced router I can buy and flash to build a router that supports IEEE 802.11's Time Advertisement feature?

I tried to do this with a Raspberry Pi 3+ and hostapd, but the Broadcom chip has its own ideas about what a Beacon frame should look like. It deletes the fields hostapd puts in and builds its own Beacons. I wasn't able to find documentation for the Broadcom interface, much less open source to update their firmware. So I'm hoping for a router with a wifi chip that will be more friendly to open source. (Also, I need a router with a few wired ports and antenna, so a Pi isn't ideal.)

That is supported directly in OpenWrt UCI system but there are a few tricks:

  • A full hostapd (in OpenWrt, fulfilled by the wpad package) is required not wpad-mini or wpad-basic.
  • The "ieee80211v" option must also be set on the AP.
config wifi-iface 'default_radio0'
	option device 'radio0'
	option network 'lan'
	option mode 'ap'
	option ssid 'OpenWrt'
	option encryption 'none'
	option ieee80211v '1'
	option time_advertisement '2'

Just tested it on ath9k. It seems odd that a wifi driver would do anything with the extended IEs other than send them on as a blob, but anything is possible.

1 Like

Thank you!

To make sure I understand you correctly, please sanity check me. This is a standard feature in the basic OpenWRT, as long as I install full hostapd and set the ieee80211v option, and it's known to work with the ath9k wifi NIC chip (and presumbly the ath10k)? So any of the following from the OpenWRT database should work?

Routers-with-ath9k-screenshot

The Asus RT-AC58u/ RT-ACRH13 only has 128 MB RAM and shouldn't be under consideration for OpenWrt.

Thank you! The supported devices page recommends at least 64MB, but more RAM is always good. If I go with 512MB that narrows down new products to the ZyXEL and Netgear, of which Netgear is a better known brand, so I'm leaning toward the R7800.

I've flashed OpenWRT into my R7800, installed full wpad, and updated the configuration as you suggested. I'm now seeing Time_Advertisement come through in the beacons - very cool!

However, even though I also added "option time_zone 'PST8PDT'" to both radios in the config file, the time zone element isn't coming through in the beacons. I've verified it's in the temporary config files in /tmp/run, and checked my spelling. Wireshark shows the Time but not the Time Zone.

Are you seeing the Time Zone? Do you have any pointers for log files, places to ask, next steps?

Timezone did not do anything for me either. I guess if it is getting parsed into the hostapd config file the problem would be in hostapd itself.

Thank you for checking so quickly!

It's probably hostapd. Or the driver or the chip, Broadcom style. I can dig into the source code.

I'm not familiar with this distro, though. Can you please point me at where the repository for the hostapd wpad package source lives, and perhaps some doc on updating a package?

See Makefile.

Thank you!

I've git cloned it and, following the procedure at https://openwrt.org/docs/guide-developer/build-system/use-buildsystem, built a full OpenWrt.

However, there is a missing link. There is no Netgear option in "make menuconfig" and the ath79 it defaults to isn't the trick - it's building MIPS binaries instead of ARM.

Is there a procedure to add the R7800 to the menuconfig or otherwise configure .config for the R7800?

First you have to change the target type to ipq806x then you can select subtarget r7800.

1 Like

Found ipq806x in the Q's for Qualcomm. I was looking in the A's and I's. Thank you!

Update: the issue is indeed in hostapd. Line 1277 of ap/beacon.c adds the Time Advertisement to the beacon. Add another line right after it adds the time zone:
tailpos = hostapd_eid_time_zone(hapd, tailpos);
I've tested this and now beacons include both Time and Time Zone. Success!

However, this was clearly coded this way intentionally. I think that hostapd was written to match IEEE 802.11-2016. Page 1765, section 11.22.3, states:

"When dot11UTCTSFOffsetActivated is true, the Time Advertisement and Time Zone elements shall be included in all Probe Response frames, and the Time Advertisement element shall be included in the Beacon frame every dot11TimeAdvertisementDTIMInterval DTIMs. When the dot11UTCTSFOffsetActivated is false, the Time Advertisement and Time Zone elements shall not be included in Beacon and Probe Response frames."

It would appear the client has to send a Probe to get the Time Zone in a purely standard implementation, although the standard does not forbid including the Time Zone.

Since I have source code and can have my cake and eat it too, I can do it either way.

Thank you all for all your help!

2 Likes

I'd suggest to inquire about this behaviour on http://lists.infradead.org/mailman/listinfo/hostap, hostapd upstream tends to be very approachable (but it might take a while to gather a response, as Jouni seems to process his mail backlog in bulk, whenever he as time for non-urgent topics).

1 Like

Could you please give a bit more insight why wpad-full is required rather than wpad-mini (which is the default, correct)? It seems that wpad-mini has the code. Is there some difference in how the configuration file works?