OpenWrt DFS

Aus Opennet
Wechseln zu: Navigation, Suche

Enable DFS for OpenWRT

Aim is to enable DFS for 5GHz wifi band. Until today we found no usable solution to integrade DFS suipport into OpenWRT. Without DFS there is no official 802.11n outdoor channels support.

In the following we will log our approach to (try to) enable DFS.

Compile trunk of OpenWRT

On 2014-01-24 we made SVN checkout of OpenWRT trunk with rev. 39385. All compiled well.

1st Run

Thu Jan  1 00:08:10 1970 daemon.notice netifd: radio0 (933): Configuration file: /var/run/hostapd-phy0.conf
Thu Jan  1 00:08:10 1970 daemon.notice netifd: radio0 (933): wlan0: IEEE 802.11 Configured channel (112) not found from the channel list of current mode (2) IEEE 802.11a
Thu Jan  1 00:08:10 1970 daemon.notice netifd: radio0 (933): wlan0: IEEE 802.11 Hardware does not support configured channel
Thu Jan  1 00:08:10 1970 daemon.notice netifd: radio0 (933): Could not select hw_mode and channel. (-3)
Thu Jan  1 00:08:10 1970 daemon.notice netifd: radio0 (933): wlan0: Unable to setup interface.
Thu Jan  1 00:08:10 1970 daemon.notice netifd: radio0 (933): hostapd_free_hapd_data: Interface wlan0 wasn't started
Thu Jan  1 00:08:10 1970 daemon.notice netifd: radio0 (933): cat: can't open '/var/run/wifi-phy0.pid': No such file or directory
Thu Jan  1 00:08:10 1970 daemon.notice netifd: radio0 (933): Command failed: Invalid argument
Thu Jan  1 00:08:10 1970 daemon.notice netifd: radio0 (933): Device setup failed: HOSTAPD_START_FAILED

Message "not found from the channel list of current mode" origin:

/trunk/build_dir/target-mips_34kc_uClibc-0.9.33.2/hostapd-wpad-mini/hostapd-20131120/src/ap/hw_features.c:885

Three places in source code can generate this error. Now, find the exact place. Add more debug messages manually.

2nd Run

Again compiles and executed we get error

Thu Jan  1 00:00:49 1970 daemon.warn hostapd: wlan0: IEEE 802.11 debug oni: select_hw_mode

Therefore the reason for this error is

     ...
     case HOSTAPD_CHAN_INVALID:
       default:
          hostapd_notify_bad_chans(iface);
       return -3;
     ...

new method to search for

 hostapd_check_chans(iface)

In that method we have

      if (iface->conf->channel) {
               if (hostapd_is_usable_chans(iface))
                       return HOSTAPD_CHAN_VALID;
               else
                       return HOSTAPD_CHAN_INVALID;
       }

Search now for hostapd_is_usable_chans()

static int hostapd_is_usable_chans(struct hostapd_iface *iface)
{
       if (!hostapd_is_usable_chan(iface, iface->conf->channel, 1))
               return 0;
       if (!iface->conf->secondary_channel)
               return 1;
       return hostapd_is_usable_chan(iface, iface->conf->channel +
                                     iface->conf->secondary_channel * 4, 0);
}

There are two possible places to return zero.

Result of next test:

Thu Jan  1 00:00:19 1970 daemon.warn hostapd: wlan0: IEEE 802.11 debug oni: select_hw_mode
Thu Jan  1 00:00:19 1970 daemon.notice netifd: radio0 (697): debug oni: test1234
                 debug oni: if (!hostapd_is_usable_chan(iface, iface->conf->channel, 1))wlan0: IEEE 802.11 Configured channel (112) not found from the channel list of current mode (2) IEEE 802.11a
Thu Jan  1 00:00:19 1970 daemon.notice netifd: radio0 (697): wlan0: IEEE 802.11 debug oni: select_hw_mode

Is is the first if clause. Debug this one.

Meine Werkzeuge
Namensräume

Varianten
Aktionen
Start
Opennet
Kommunikation
Karten
Werkzeuge