hostapd: add switch to disable neigborhood scan
authorArne Fitzenreiter <arne_f@ipfire.org>
Sat, 27 Oct 2018 07:55:19 +0000 (09:55 +0200)
committerArne Fitzenreiter <arne_f@ipfire.org>
Sat, 27 Oct 2018 14:47:12 +0000 (16:47 +0200)
this may violate regulatory rules because 40Mhz channels should disabled
if there are other networks but nearly every commercial router ignore this.

Signed-off-by: Arne Fitzenreiter <arne_f@ipfire.org>
html/cgi-bin/wlanap.cgi
langs/de/cgi-bin/de.pl
langs/en/cgi-bin/en.pl
lfs/hostapd
src/patches/hostapd/hostapd-2.6-noscan.patch [new file with mode: 0644]

index 0abbf6d..72c9a12 100644 (file)
@@ -74,6 +74,7 @@ $wlanapsettings{'DEBUG'} = '4';
 $wlanapsettings{'DRIVER'} = 'NL80211';
 $wlanapsettings{'HTCAPS'} = '';
 $wlanapsettings{'VHTCAPS'} = '';
+$wlanapsettings{'NOSCAN'} = 'off';
 
 &General::readhash("/var/ipfire/wlanap/settings", \%wlanapsettings);
 &Header::getcgihash(\%wlanapsettings);
@@ -247,6 +248,10 @@ $checked{'HIDESSID'}{'off'} = '';
 $checked{'HIDESSID'}{'on'} = '';
 $checked{'HIDESSID'}{$wlanapsettings{'HIDESSID'}} = "checked='checked'";
 
+$checked{'NOSCAN'}{'off'} = '';
+$checked{'NOSCAN'}{'on'} = '';
+$checked{'NOSCAN'}{$wlanapsettings{'NOSCAN'}} = "checked='checked'";
+
 $selected{'ENC'}{$wlanapsettings{'ENC'}} = "selected='selected'";
 $selected{'CHANNEL'}{$wlanapsettings{'CHANNEL'}} = "selected='selected'";
 $selected{'COUNTRY'}{$wlanapsettings{'COUNTRY'}} = "selected='selected'";
@@ -415,6 +420,7 @@ END
 ;
 }
 print<<END
+<tr><td width='25%' class='base'>$Lang::tr{'wlanap neighbor scan'}:&nbsp;</td><td class='base' >on <input type='radio' name='NOSCAN' value='off' $checked{'NOSCAN'}{'off'} /> | <input type='radio' name='NOSCAN' value='on' $checked{'NOSCAN'}{'on'} /> off</td><td class='base' colspan='2'>$Lang::tr{'wlanap neighbor scan warning'}</td></tr>
 <tr><td colspan='4'><br></td></tr>
 <tr><td width='25%' class='base'>$Lang::tr{'wlanap encryption'}:&nbsp;</td><td class='base' colspan='3'>
        <select name='ENC'>
@@ -626,6 +632,20 @@ END
 
  }
 
+ if ( $wlanapsettings{'NOSCAN'} eq 'on' ){
+       print CONFIGFILE <<END
+noscan=1
+END
+;
+
+ }else{
+       print CONFIGFILE <<END
+noscan=0
+END
+;
+
+ }
+
  if ( $wlanapsettings{'ENC'} eq 'wpa1'){
        print CONFIGFILE <<END
 ######################### wpa hostapd configuration ############################
index c8d4c65..42eb141 100644 (file)
 'wlanap invalid wpa' => 'Ungültige Länge in WPA-Passphrase. Muss zwischen 8 und 63 Zeichen lang sein.',
 'wlanap link dhcp' => 'Wireless Lan DHCP-Einstellungen',
 'wlanap link wireless' => 'Wireless Lan Clients freischalten',
+'wlanap neighbor scan' => 'Nachbarschaftsscan',
+'wlanap neighbor scan warning' => 'Warnung! Deaktivierung kann gegen Funkregeln verstoßen.',
 'wlanap no interface' => 'Ausgewähltes Interface ist keine WLAN-Karte!',
 'wlanap none' => 'keine',
 'wlanap notifications' => 'Hinweise',
index b563e56..e935640 100644 (file)
 'wlanap invalid wpa' => 'Invalid length in WPA Passphrase. Must be between 8 and 63 characters.',
 'wlanap link dhcp' => 'Wireless lan DHCP configuration',
 'wlanap link wireless' => 'Activate wireless lan clients',
+'wlanap neighbor scan' => 'Neighborhood scan',
+'wlanap neighbor scan warning' => 'Warning! Disabling may violate regulatory rules!',
 'wlanap no interface' => 'Selected interface is not a wirless lan card!',
 'wlanap none' => 'none',
 'wlanap notifications' => 'Notifications',
index 5a1180d..a8302cc 100644 (file)
@@ -88,6 +88,8 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        cd $(DIR_APP) && patch -p1 < $(DIR_SRC)/src/patches/wpa_supplicant/rebased-v2.6-0008-FT-Do-not-allow-multiple-Reassociation-Response-fram.patch
 
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/hostapd-2.3_increase_EAPOL-timeouts.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/hostapd/hostapd-2.6-noscan.patch
+
        cd $(DIR_APP)/hostapd && cp $(DIR_SRC)/config/hostapd/config ./.config
        cd $(DIR_APP)/hostapd && sed -e "s@/usr/local@/usr@g" -i Makefile
        cd $(DIR_APP)/hostapd && make $(MAKETUNING) $(EXTRA_MAKE)
diff --git a/src/patches/hostapd/hostapd-2.6-noscan.patch b/src/patches/hostapd/hostapd-2.6-noscan.patch
new file mode 100644 (file)
index 0000000..8009fa0
--- /dev/null
@@ -0,0 +1,62 @@
+diff -Naur hostapd-2.6.org/hostapd/config_file.c hostapd-2.6/hostapd/config_file.c
+--- hostapd-2.6.org/hostapd/config_file.c      2016-10-02 20:51:11.000000000 +0200
++++ hostapd-2.6/hostapd/config_file.c  2018-10-26 09:16:34.393456086 +0200
+@@ -2863,6 +2863,10 @@
+               }
+ #endif /* CONFIG_IEEE80211W */
+ #ifdef CONFIG_IEEE80211N
++      } else if (os_strcmp(buf, "noscan") == 0) {
++              conf->noscan = atoi(pos);
++      } else if (os_strcmp(buf, "ht_coex") == 0) {
++              conf->no_ht_coex = !atoi(pos);
+       } else if (os_strcmp(buf, "ieee80211n") == 0) {
+               conf->ieee80211n = atoi(pos);
+       } else if (os_strcmp(buf, "ht_capab") == 0) {
+diff -Naur hostapd-2.6.org/src/ap/ap_config.h hostapd-2.6/src/ap/ap_config.h
+--- hostapd-2.6.org/src/ap/ap_config.h 2016-10-02 20:51:11.000000000 +0200
++++ hostapd-2.6/src/ap/ap_config.h     2018-10-26 09:16:34.393456086 +0200
+@@ -664,6 +664,8 @@
+       int ht_op_mode_fixed;
+       u16 ht_capab;
++      int noscan;
++      int no_ht_coex;
+       int ieee80211n;
+       int secondary_channel;
+       int no_pri_sec_switch;
+diff -Naur hostapd-2.6.org/src/ap/hw_features.c hostapd-2.6/src/ap/hw_features.c
+--- hostapd-2.6.org/src/ap/hw_features.c       2016-10-02 20:51:11.000000000 +0200
++++ hostapd-2.6/src/ap/hw_features.c   2018-10-26 09:16:34.393456086 +0200
+@@ -474,7 +474,8 @@
+       int ret;
+       /* Check that HT40 is used and PRI / SEC switch is allowed */
+-      if (!iface->conf->secondary_channel || iface->conf->no_pri_sec_switch)
++      if (!iface->conf->secondary_channel || iface->conf->no_pri_sec_switch ||
++              iface->conf->noscan)
+               return 0;
+       hostapd_set_state(iface, HAPD_IFACE_HT_SCAN);
+diff -Naur hostapd-2.6.org/src/ap/ieee802_11_ht.c hostapd-2.6/src/ap/ieee802_11_ht.c
+--- hostapd-2.6.org/src/ap/ieee802_11_ht.c     2016-10-02 20:51:11.000000000 +0200
++++ hostapd-2.6/src/ap/ieee802_11_ht.c 2018-10-26 09:17:42.976793198 +0200
+@@ -244,6 +244,9 @@
+       if (!(iface->conf->ht_capab & HT_CAP_INFO_SUPP_CHANNEL_WIDTH_SET))
+               return;
++      if (iface->conf->noscan || iface->conf->no_ht_coex)
++              return;
++
+       if (len < IEEE80211_HDRLEN + 2 + sizeof(*bc_ie))
+               return;
+@@ -368,6 +371,9 @@
+       if (iface->current_mode->mode != HOSTAPD_MODE_IEEE80211G)
+               return;
++      if (iface->conf->noscan || iface->conf->no_ht_coex)
++              return;
++
+       wpa_printf(MSG_INFO, "HT: Forty MHz Intolerant is set by STA " MACSTR
+                  " in Association Request", MAC2STR(sta->addr));