mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-11-01 10:57:47 +00:00
ucentral: development update
* add proxy_arp support Signed-off-by: John Crispin <john@phrozen.org>
This commit is contained in:
@@ -1,43 +1,45 @@
|
||||
From a29e75fbbb4517aa362d3f1074f13c1adf5f788e Mon Sep 17 00:00:00 2001
|
||||
From 84b526991e77774e21c3eb1a193ca3087b624e83 Mon Sep 17 00:00:00 2001
|
||||
From: John Crispin <john@phrozen.org>
|
||||
Date: Thu, 27 May 2021 13:25:19 +0200
|
||||
Subject: [PATCH 03/44] hostapd: upsate to latest HEAD
|
||||
Subject: [PATCH 01/41] hostapd: upsate to latest HEAD
|
||||
|
||||
Signed-off-by: John Crispin <john@phrozen.org>
|
||||
---
|
||||
package/network/services/hostapd/Makefile | 15 +-
|
||||
.../hostapd/files/hostapd-basic.config | 2 +-
|
||||
.../hostapd/files/hostapd-full.config | 4 +-
|
||||
.../network/services/hostapd/files/hostapd.sh | 155 +++++++++--
|
||||
.../network/services/hostapd/files/hostapd.sh | 156 ++++++++--
|
||||
...-fix-frequency-setup-with-HE-enabled.patch | 196 -------------
|
||||
.../001-wolfssl-init-RNG-with-ECC-key.patch | 43 +++
|
||||
...-init-order-disable-pri-sec-channel-.patch | 126 ---------
|
||||
...-init-order-disable-pri-sec-channel-.patch | 126 --------
|
||||
...andle-HT40-and-mode-downgrade-in-AP-.patch | 102 -------
|
||||
...ix-frequency-config-for-non-p2p-vht-.patch | 63 -----
|
||||
...ix-frequency-config-for-non-p2p-vht-.patch | 63 ----
|
||||
...nable-vht-and-he-in-default-config-p.patch | 25 --
|
||||
...er-debug-messages-for-some-error-cas.patch | 83 ------
|
||||
...lper-functions-for-vht-he-parameters.patch | 27 --
|
||||
...ompletion-callback-to-complete-mesh-.patch | 108 --------
|
||||
...ompletion-callback-to-complete-mesh-.patch | 108 -------
|
||||
...-frequency-as-pri-sec-channel-switch.patch | 26 --
|
||||
...hannels-to-be-selected-if-dfs-is-ena.patch | 10 +-
|
||||
...offchanok-on-DFS-channels-in-non-ETS.patch | 53 ----
|
||||
...rministic-channel-on-channel-switch.patch} | 2 +-
|
||||
...-fix-channel-switch-error-during-CAC.patch | 66 -----
|
||||
...rnel-driver-DFS-handler-in-userspace.patch | 48 ----
|
||||
.../014-mesh-fixes-for-mesh-init-deinit.patch | 158 -----------
|
||||
.../015-mesh-fix-DFS-deinit-init.patch | 262 ------------------
|
||||
...sts-DFS-test-for-wpa_supplicant-mesh.patch | 94 -------
|
||||
...rnel-driver-DFS-handler-in-userspace.patch | 48 ---
|
||||
.../014-mesh-fixes-for-mesh-init-deinit.patch | 158 ----------
|
||||
.../015-mesh-fix-DFS-deinit-init.patch | 262 -----------------
|
||||
...sts-DFS-test-for-wpa_supplicant-mesh.patch | 94 ------
|
||||
.../patches/017-mesh-fix-mesh_oom-test.patch | 24 --
|
||||
...ve-mesh-freq-setting-to-own-function.patch | 93 -------
|
||||
...020-ignore-4addr-mode-enabling-error.patch | 78 ------
|
||||
...ve-mesh-freq-setting-to-own-function.patch | 93 ------
|
||||
...020-ignore-4addr-mode-enabling-error.patch | 78 -----
|
||||
...0-mesh-make-forwarding-configurable.patch} | 28 +-
|
||||
...ix-sta-add-after-previous-connection.patch | 26 ++
|
||||
...use-of-uninitialized-stack-variables.patch | 25 ++
|
||||
...-dl_list_del-before-freeing-ipv6-add.patch | 19 ++
|
||||
...ewrite-neigh-code-to-not-depend-on-l.patch | 275 ++++++++++++++++++
|
||||
...-case-in-peer-addition-based-on-PD-R.patch | 45 ---
|
||||
.../patches/110-notify-mgmt-frames.patch | 116 --------
|
||||
.../patches/110-wolfssl-compile-fix.patch | 10 -
|
||||
.../120-reconfigure-wps-credentials.patch | 178 ------------
|
||||
.../hostapd/patches/200-multicall.patch | 80 +++---
|
||||
.../hostapd/patches/200-multicall.patch | 80 ++---
|
||||
.../services/hostapd/patches/300-noscan.patch | 6 +-
|
||||
.../hostapd/patches/301-mesh-noscan.patch | 10 +-
|
||||
.../patches/310-rescan_immediately.patch | 2 +-
|
||||
@@ -64,12 +66,13 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
||||
.../720-ACS-fix-channel-100-frequency.patch | 30 ++
|
||||
.../patches/720-iface_max_num_sta.patch | 82 ++++++
|
||||
.../hostapd/patches/730-ft_iface.patch | 38 +++
|
||||
.../hostapd/patches/740-snoop_iface.patch | 37 +++
|
||||
...ate-if-no-available-channel-is-found.patch | 37 ---
|
||||
...of-secondary-device-types-for-P2P-gr.patch | 33 ---
|
||||
.../services/hostapd/src/src/ap/ubus.c | 217 ++++++++++++++-
|
||||
.../services/hostapd/src/src/ap/ubus.h | 16 ++
|
||||
.../services/hostapd/src/src/ap/ubus.c | 217 +++++++++++++-
|
||||
.../services/hostapd/src/src/ap/ubus.h | 16 +
|
||||
.../hostapd/src/src/utils/build_features.h | 2 -
|
||||
64 files changed, 970 insertions(+), 2330 deletions(-)
|
||||
67 files changed, 1302 insertions(+), 2330 deletions(-)
|
||||
delete mode 100644 package/network/services/hostapd/patches/001-HE-VHT-fix-frequency-setup-with-HE-enabled.patch
|
||||
create mode 100644 package/network/services/hostapd/patches/001-wolfssl-init-RNG-with-ECC-key.patch
|
||||
delete mode 100644 package/network/services/hostapd/patches/002-mesh-fix-channel-init-order-disable-pri-sec-channel-.patch
|
||||
@@ -93,6 +96,8 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
||||
rename package/network/services/hostapd/patches/{050-mesh-make-forwarding-configurable.patch => 020-mesh-make-forwarding-configurable.patch} (89%)
|
||||
create mode 100644 package/network/services/hostapd/patches/021-fix-sta-add-after-previous-connection.patch
|
||||
create mode 100644 package/network/services/hostapd/patches/022-hostapd-fix-use-of-uninitialized-stack-variables.patch
|
||||
create mode 100644 package/network/services/hostapd/patches/023-ndisc_snoop-call-dl_list_del-before-freeing-ipv6-add.patch
|
||||
create mode 100644 package/network/services/hostapd/patches/030-driver_nl80211-rewrite-neigh-code-to-not-depend-on-l.patch
|
||||
delete mode 100644 package/network/services/hostapd/patches/060-P2P-Fix-a-corner-case-in-peer-addition-based-on-PD-R.patch
|
||||
delete mode 100644 package/network/services/hostapd/patches/110-notify-mgmt-frames.patch
|
||||
delete mode 100644 package/network/services/hostapd/patches/110-wolfssl-compile-fix.patch
|
||||
@@ -101,6 +106,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
||||
create mode 100644 package/network/services/hostapd/patches/720-ACS-fix-channel-100-frequency.patch
|
||||
create mode 100644 package/network/services/hostapd/patches/720-iface_max_num_sta.patch
|
||||
create mode 100644 package/network/services/hostapd/patches/730-ft_iface.patch
|
||||
create mode 100644 package/network/services/hostapd/patches/740-snoop_iface.patch
|
||||
delete mode 100644 package/network/services/hostapd/patches/800-dfs-enter-DFS-state-if-no-available-channel-is-found.patch
|
||||
delete mode 100644 package/network/services/hostapd/patches/801-P2P-Fix-copying-of-secondary-device-types-for-P2P-gr.patch
|
||||
|
||||
@@ -173,7 +179,7 @@ index df272e443a..61b6daf861 100644
|
||||
# EAP-SAKE for the integrated EAP server
|
||||
#CONFIG_EAP_SAKE=y
|
||||
diff --git a/package/network/services/hostapd/files/hostapd.sh b/package/network/services/hostapd/files/hostapd.sh
|
||||
index 45a49b8faa..ee9827b092 100644
|
||||
index 45a49b8faa..4591958b6f 100644
|
||||
--- a/package/network/services/hostapd/files/hostapd.sh
|
||||
+++ b/package/network/services/hostapd/files/hostapd.sh
|
||||
@@ -49,6 +49,7 @@ hostapd_append_wpa_key_mgmt() {
|
||||
@@ -451,7 +457,14 @@ index 45a49b8faa..ee9827b092 100644
|
||||
|
||||
[ -n "$ownip" ] && append bss_conf "own_ip_addr=$ownip" "$N"
|
||||
[ -n "$radius_client_addr" ] && append bss_conf "radius_client_addr=$radius_client_addr" "$N"
|
||||
@@ -703,13 +761,17 @@ hostapd_set_bss_options() {
|
||||
@@ -697,19 +755,24 @@ hostapd_set_bss_options() {
|
||||
|
||||
append bss_conf "ssid=$ssid" "$N"
|
||||
[ -n "$network_bridge" ] && append bss_conf "bridge=$network_bridge" "$N"
|
||||
+ [ -n "$network_ifname" ] && append bss_conf "snoop_iface=$network_ifname" "$N"
|
||||
[ -n "$iapp_interface" ] && {
|
||||
local ifname
|
||||
network_get_device ifname "$iapp_interface" || ifname="$iapp_interface"
|
||||
append bss_conf "iapp_interface=$ifname" "$N"
|
||||
}
|
||||
|
||||
@@ -471,7 +484,7 @@ index 45a49b8faa..ee9827b092 100644
|
||||
[ "$bss_transition" -eq "1" ] && append bss_conf "bss_transition=1" "$N"
|
||||
|
||||
json_get_vars ieee80211k rrm_neighbor_report rrm_beacon_report
|
||||
@@ -733,7 +795,7 @@ hostapd_set_bss_options() {
|
||||
@@ -733,7 +796,7 @@ hostapd_set_bss_options() {
|
||||
append bss_conf "ftm_responder=1" "$N"
|
||||
[ "$stationary_ap" -eq "1" ] && append bss_conf "stationary_ap=1" "$N"
|
||||
[ -n "$lci" ] && append bss_conf "lci=$lci" "$N"
|
||||
@@ -480,7 +493,7 @@ index 45a49b8faa..ee9827b092 100644
|
||||
}
|
||||
fi
|
||||
|
||||
@@ -757,6 +819,7 @@ hostapd_set_bss_options() {
|
||||
@@ -757,6 +820,7 @@ hostapd_set_bss_options() {
|
||||
;;
|
||||
esac
|
||||
|
||||
@@ -488,7 +501,7 @@ index 45a49b8faa..ee9827b092 100644
|
||||
append bss_conf "mobility_domain=$mobility_domain" "$N"
|
||||
append bss_conf "ft_psk_generate_local=$ft_psk_generate_local" "$N"
|
||||
append bss_conf "ft_over_ds=$ft_over_ds" "$N"
|
||||
@@ -771,6 +834,13 @@ hostapd_set_bss_options() {
|
||||
@@ -771,6 +835,13 @@ hostapd_set_bss_options() {
|
||||
set_default r0_key_lifetime 10000
|
||||
set_default pmk_r1_push 0
|
||||
|
||||
@@ -502,7 +515,7 @@ index 45a49b8faa..ee9827b092 100644
|
||||
[ -n "$r1_key_holder" ] && append bss_conf "r1_key_holder=$r1_key_holder" "$N"
|
||||
append bss_conf "r0_key_lifetime=$r0_key_lifetime" "$N"
|
||||
append bss_conf "pmk_r1_push=$pmk_r1_push" "$N"
|
||||
@@ -856,13 +926,17 @@ hostapd_set_bss_options() {
|
||||
@@ -856,13 +927,17 @@ hostapd_set_bss_options() {
|
||||
}
|
||||
|
||||
[ -n "$vlan_possible" -a -n "$dynamic_vlan" ] && {
|
||||
@@ -522,7 +535,7 @@ index 45a49b8faa..ee9827b092 100644
|
||||
[ -n "$vlan_tagged_interface" ] && \
|
||||
append bss_conf "vlan_tagged_interface=$vlan_tagged_interface" "$N"
|
||||
[ -n "$vlan_file" ] && {
|
||||
@@ -875,6 +949,7 @@ hostapd_set_bss_options() {
|
||||
@@ -875,6 +950,7 @@ hostapd_set_bss_options() {
|
||||
json_get_vars iw_hessid iw_venue_group iw_venue_type iw_network_auth_type
|
||||
json_get_vars iw_roaming_consortium iw_domain_name iw_anqp_3gpp_cell_net iw_nai_realm
|
||||
json_get_vars iw_anqp_elem iw_qos_map_set iw_ipaddr_type_availability iw_gas_address3
|
||||
@@ -530,7 +543,7 @@ index 45a49b8faa..ee9827b092 100644
|
||||
|
||||
set_default iw_enabled 0
|
||||
if [ "$iw_enabled" = "1" ]; then
|
||||
@@ -903,6 +978,8 @@ hostapd_set_bss_options() {
|
||||
@@ -903,6 +979,8 @@ hostapd_set_bss_options() {
|
||||
json_for_each_item append_iw_roaming_consortium iw_roaming_consortium
|
||||
json_for_each_item append_iw_anqp_elem iw_anqp_elem
|
||||
json_for_each_item append_iw_nai_realm iw_nai_realm
|
||||
@@ -539,7 +552,7 @@ index 45a49b8faa..ee9827b092 100644
|
||||
|
||||
iw_domain_name_conf=
|
||||
json_for_each_item append_iw_domain_name iw_domain_name
|
||||
@@ -917,9 +994,11 @@ hostapd_set_bss_options() {
|
||||
@@ -917,9 +995,11 @@ hostapd_set_bss_options() {
|
||||
|
||||
|
||||
local hs20 disable_dgaf osen anqp_domain_id hs20_deauth_req_timeout \
|
||||
@@ -553,7 +566,7 @@ index 45a49b8faa..ee9827b092 100644
|
||||
|
||||
set_default hs20 0
|
||||
set_default disable_dgaf $hs20
|
||||
@@ -938,16 +1017,31 @@ hostapd_set_bss_options() {
|
||||
@@ -938,16 +1018,31 @@ hostapd_set_bss_options() {
|
||||
[ -n "$hs20_operating_class" ] && append bss_conf "hs20_operating_class=$hs20_operating_class" "$N"
|
||||
[ -n "$hs20_t_c_filename" ] && append bss_conf "hs20_t_c_filename=$hs20_t_c_filename" "$N"
|
||||
[ -n "$hs20_t_c_timestamp" ] && append bss_conf "hs20_t_c_timestamp=$hs20_t_c_timestamp" "$N"
|
||||
@@ -586,7 +599,7 @@ index 45a49b8faa..ee9827b092 100644
|
||||
|
||||
set_default per_sta_vif 0
|
||||
if [ "$per_sta_vif" -gt 0 ]; then
|
||||
@@ -1079,9 +1173,9 @@ wpa_supplicant_set_fixed_freq() {
|
||||
@@ -1079,9 +1174,9 @@ wpa_supplicant_set_fixed_freq() {
|
||||
VHT*) append network_data "vht=1" "$N$T";;
|
||||
esac
|
||||
case "$htmode" in
|
||||
@@ -599,7 +612,7 @@ index 45a49b8faa..ee9827b092 100644
|
||||
*) append network_data "disable_vht=1" "$N$T";;
|
||||
esac
|
||||
}
|
||||
@@ -1099,7 +1193,8 @@ wpa_supplicant_add_network() {
|
||||
@@ -1099,7 +1194,8 @@ wpa_supplicant_add_network() {
|
||||
ssid bssid key \
|
||||
basic_rate mcast_rate \
|
||||
ieee80211w ieee80211r \
|
||||
@@ -609,7 +622,7 @@ index 45a49b8faa..ee9827b092 100644
|
||||
|
||||
case "$auth_type" in
|
||||
sae|owe|eap192|eap-eap192)
|
||||
@@ -1112,6 +1207,7 @@ wpa_supplicant_add_network() {
|
||||
@@ -1112,6 +1208,7 @@ wpa_supplicant_add_network() {
|
||||
|
||||
set_default ieee80211r 0
|
||||
set_default multi_ap 0
|
||||
@@ -617,7 +630,7 @@ index 45a49b8faa..ee9827b092 100644
|
||||
|
||||
local key_mgmt='NONE'
|
||||
local network_data=
|
||||
@@ -1143,7 +1239,10 @@ wpa_supplicant_add_network() {
|
||||
@@ -1143,7 +1240,10 @@ wpa_supplicant_add_network() {
|
||||
scan_ssid=""
|
||||
}
|
||||
|
||||
@@ -2679,6 +2692,312 @@ index 0000000000..c7da33f029
|
||||
+ struct hostapd_hw_modes *mode;
|
||||
+
|
||||
+ if (!params->channel) {
|
||||
diff --git a/package/network/services/hostapd/patches/023-ndisc_snoop-call-dl_list_del-before-freeing-ipv6-add.patch b/package/network/services/hostapd/patches/023-ndisc_snoop-call-dl_list_del-before-freeing-ipv6-add.patch
|
||||
new file mode 100644
|
||||
index 0000000000..9ff9b2398d
|
||||
--- /dev/null
|
||||
+++ b/package/network/services/hostapd/patches/023-ndisc_snoop-call-dl_list_del-before-freeing-ipv6-add.patch
|
||||
@@ -0,0 +1,19 @@
|
||||
+From: Felix Fietkau <nbd@nbd.name>
|
||||
+Date: Wed, 28 Jul 2021 05:43:29 +0200
|
||||
+Subject: [PATCH] ndisc_snoop: call dl_list_del before freeing ipv6 addresses
|
||||
+
|
||||
+Fixes a segmentation fault on sta disconnect
|
||||
+
|
||||
+Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
+---
|
||||
+
|
||||
+--- a/src/ap/ndisc_snoop.c
|
||||
++++ b/src/ap/ndisc_snoop.c
|
||||
+@@ -61,6 +61,7 @@ void sta_ip6addr_del(struct hostapd_data
|
||||
+ dl_list_for_each_safe(ip6addr, prev, &sta->ip6addr, struct ip6addr,
|
||||
+ list) {
|
||||
+ hostapd_drv_br_delete_ip_neigh(hapd, 6, (u8 *) &ip6addr->addr);
|
||||
++ dl_list_del(&ip6addr->list);
|
||||
+ os_free(ip6addr);
|
||||
+ }
|
||||
+ }
|
||||
diff --git a/package/network/services/hostapd/patches/030-driver_nl80211-rewrite-neigh-code-to-not-depend-on-l.patch b/package/network/services/hostapd/patches/030-driver_nl80211-rewrite-neigh-code-to-not-depend-on-l.patch
|
||||
new file mode 100644
|
||||
index 0000000000..e8a78e355e
|
||||
--- /dev/null
|
||||
+++ b/package/network/services/hostapd/patches/030-driver_nl80211-rewrite-neigh-code-to-not-depend-on-l.patch
|
||||
@@ -0,0 +1,275 @@
|
||||
+From: Felix Fietkau <nbd@nbd.name>
|
||||
+Date: Wed, 28 Jul 2021 05:49:46 +0200
|
||||
+Subject: [PATCH] driver_nl80211: rewrite neigh code to not depend on
|
||||
+ libnl3-route
|
||||
+
|
||||
+Removes an unnecessary dependency and also makes the code smaller
|
||||
+
|
||||
+Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
+---
|
||||
+
|
||||
+--- a/src/drivers/driver_nl80211.c
|
||||
++++ b/src/drivers/driver_nl80211.c
|
||||
+@@ -16,9 +16,6 @@
|
||||
+ #include <net/if.h>
|
||||
+ #include <netlink/genl/genl.h>
|
||||
+ #include <netlink/genl/ctrl.h>
|
||||
+-#ifdef CONFIG_LIBNL3_ROUTE
|
||||
+-#include <netlink/route/neighbour.h>
|
||||
+-#endif /* CONFIG_LIBNL3_ROUTE */
|
||||
+ #include <linux/rtnetlink.h>
|
||||
+ #include <netpacket/packet.h>
|
||||
+ #include <linux/errqueue.h>
|
||||
+@@ -5284,26 +5281,29 @@ fail:
|
||||
+
|
||||
+ static void rtnl_neigh_delete_fdb_entry(struct i802_bss *bss, const u8 *addr)
|
||||
+ {
|
||||
+-#ifdef CONFIG_LIBNL3_ROUTE
|
||||
+ struct wpa_driver_nl80211_data *drv = bss->drv;
|
||||
+- struct rtnl_neigh *rn;
|
||||
+- struct nl_addr *nl_addr;
|
||||
++ struct ndmsg nhdr = {
|
||||
++ .ndm_state = NUD_PERMANENT,
|
||||
++ .ndm_ifindex = bss->ifindex,
|
||||
++ .ndm_family = AF_BRIDGE,
|
||||
++ };
|
||||
++ struct nl_msg *msg;
|
||||
+ int err;
|
||||
+
|
||||
+- rn = rtnl_neigh_alloc();
|
||||
+- if (!rn)
|
||||
++ msg = nlmsg_alloc_simple(RTM_DELNEIGH, NLM_F_CREATE);
|
||||
++ if (!msg)
|
||||
+ return;
|
||||
+
|
||||
+- rtnl_neigh_set_family(rn, AF_BRIDGE);
|
||||
+- rtnl_neigh_set_ifindex(rn, bss->ifindex);
|
||||
+- nl_addr = nl_addr_build(AF_BRIDGE, (void *) addr, ETH_ALEN);
|
||||
+- if (!nl_addr) {
|
||||
+- rtnl_neigh_put(rn);
|
||||
+- return;
|
||||
+- }
|
||||
+- rtnl_neigh_set_lladdr(rn, nl_addr);
|
||||
++ if (nlmsg_append(msg, &nhdr, sizeof(nhdr), NLMSG_ALIGNTO) < 0)
|
||||
++ goto errout;
|
||||
++
|
||||
++ if (nla_put(msg, NDA_LLADDR, ETH_ALEN, (void *)addr))
|
||||
++ goto errout;
|
||||
++
|
||||
++ if (nl_send_auto_complete(drv->rtnl_sk, msg) < 0)
|
||||
++ goto errout;
|
||||
+
|
||||
+- err = rtnl_neigh_delete(drv->rtnl_sk, rn, 0);
|
||||
++ err = nl_wait_for_ack(drv->rtnl_sk);
|
||||
+ if (err < 0) {
|
||||
+ wpa_printf(MSG_DEBUG, "nl80211: bridge FDB entry delete for "
|
||||
+ MACSTR " ifindex=%d failed: %s", MAC2STR(addr),
|
||||
+@@ -5313,9 +5313,8 @@ static void rtnl_neigh_delete_fdb_entry(
|
||||
+ MACSTR, MAC2STR(addr));
|
||||
+ }
|
||||
+
|
||||
+- nl_addr_put(nl_addr);
|
||||
+- rtnl_neigh_put(rn);
|
||||
+-#endif /* CONFIG_LIBNL3_ROUTE */
|
||||
++errout:
|
||||
++ nlmsg_free(msg);
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+@@ -7691,7 +7690,6 @@ static void *i802_init(struct hostapd_da
|
||||
+ (params->num_bridge == 0 || !params->bridge[0]))
|
||||
+ add_ifidx(drv, br_ifindex, drv->ifindex);
|
||||
+
|
||||
+-#ifdef CONFIG_LIBNL3_ROUTE
|
||||
+ if (bss->added_if_into_bridge || bss->already_in_bridge) {
|
||||
+ int err;
|
||||
+
|
||||
+@@ -7708,7 +7706,6 @@ static void *i802_init(struct hostapd_da
|
||||
+ goto failed;
|
||||
+ }
|
||||
+ }
|
||||
+-#endif /* CONFIG_LIBNL3_ROUTE */
|
||||
+
|
||||
+ if (drv->capa.flags2 & WPA_DRIVER_FLAGS2_CONTROL_PORT_RX) {
|
||||
+ wpa_printf(MSG_DEBUG,
|
||||
+@@ -10655,13 +10652,14 @@ static int wpa_driver_br_add_ip_neigh(vo
|
||||
+ const u8 *ipaddr, int prefixlen,
|
||||
+ const u8 *addr)
|
||||
+ {
|
||||
+-#ifdef CONFIG_LIBNL3_ROUTE
|
||||
+ struct i802_bss *bss = priv;
|
||||
+ struct wpa_driver_nl80211_data *drv = bss->drv;
|
||||
+- struct rtnl_neigh *rn;
|
||||
+- struct nl_addr *nl_ipaddr = NULL;
|
||||
+- struct nl_addr *nl_lladdr = NULL;
|
||||
+- int family, addrsize;
|
||||
++ struct ndmsg nhdr = {
|
||||
++ .ndm_state = NUD_PERMANENT,
|
||||
++ .ndm_ifindex = bss->br_ifindex,
|
||||
++ };
|
||||
++ struct nl_msg *msg;
|
||||
++ int addrsize;
|
||||
+ int res;
|
||||
+
|
||||
+ if (!ipaddr || prefixlen == 0 || !addr)
|
||||
+@@ -10680,85 +10678,66 @@ static int wpa_driver_br_add_ip_neigh(vo
|
||||
+ }
|
||||
+
|
||||
+ if (version == 4) {
|
||||
+- family = AF_INET;
|
||||
++ nhdr.ndm_family = AF_INET;
|
||||
+ addrsize = 4;
|
||||
+ } else if (version == 6) {
|
||||
+- family = AF_INET6;
|
||||
++ nhdr.ndm_family = AF_INET6;
|
||||
+ addrsize = 16;
|
||||
+ } else {
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
+- rn = rtnl_neigh_alloc();
|
||||
+- if (rn == NULL)
|
||||
++ msg = nlmsg_alloc_simple(RTM_NEWNEIGH, NLM_F_CREATE);
|
||||
++ if (!msg)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+- /* set the destination ip address for neigh */
|
||||
+- nl_ipaddr = nl_addr_build(family, (void *) ipaddr, addrsize);
|
||||
+- if (nl_ipaddr == NULL) {
|
||||
+- wpa_printf(MSG_DEBUG, "nl80211: nl_ipaddr build failed");
|
||||
+- res = -ENOMEM;
|
||||
++ res = -ENOMEM;
|
||||
++ if (nlmsg_append(msg, &nhdr, sizeof(nhdr), NLMSG_ALIGNTO) < 0)
|
||||
+ goto errout;
|
||||
+- }
|
||||
+- nl_addr_set_prefixlen(nl_ipaddr, prefixlen);
|
||||
+- res = rtnl_neigh_set_dst(rn, nl_ipaddr);
|
||||
+- if (res) {
|
||||
+- wpa_printf(MSG_DEBUG,
|
||||
+- "nl80211: neigh set destination addr failed");
|
||||
++
|
||||
++ if (nla_put(msg, NDA_DST, addrsize, (void *)ipaddr))
|
||||
+ goto errout;
|
||||
+- }
|
||||
+
|
||||
+- /* set the corresponding lladdr for neigh */
|
||||
+- nl_lladdr = nl_addr_build(AF_BRIDGE, (u8 *) addr, ETH_ALEN);
|
||||
+- if (nl_lladdr == NULL) {
|
||||
+- wpa_printf(MSG_DEBUG, "nl80211: neigh set lladdr failed");
|
||||
+- res = -ENOMEM;
|
||||
++ if (nla_put(msg, NDA_LLADDR, ETH_ALEN, (void *)addr))
|
||||
+ goto errout;
|
||||
+- }
|
||||
+- rtnl_neigh_set_lladdr(rn, nl_lladdr);
|
||||
+
|
||||
+- rtnl_neigh_set_ifindex(rn, bss->br_ifindex);
|
||||
+- rtnl_neigh_set_state(rn, NUD_PERMANENT);
|
||||
++ res = nl_send_auto_complete(drv->rtnl_sk, msg);
|
||||
++ if (res < 0)
|
||||
++ goto errout;
|
||||
+
|
||||
+- res = rtnl_neigh_add(drv->rtnl_sk, rn, NLM_F_CREATE);
|
||||
++ res = nl_wait_for_ack(drv->rtnl_sk);
|
||||
+ if (res) {
|
||||
+ wpa_printf(MSG_DEBUG,
|
||||
+ "nl80211: Adding bridge ip neigh failed: %s",
|
||||
+ nl_geterror(res));
|
||||
+ }
|
||||
+ errout:
|
||||
+- if (nl_lladdr)
|
||||
+- nl_addr_put(nl_lladdr);
|
||||
+- if (nl_ipaddr)
|
||||
+- nl_addr_put(nl_ipaddr);
|
||||
+- if (rn)
|
||||
+- rtnl_neigh_put(rn);
|
||||
++ nlmsg_free(msg);
|
||||
+ return res;
|
||||
+-#else /* CONFIG_LIBNL3_ROUTE */
|
||||
+- return -1;
|
||||
+-#endif /* CONFIG_LIBNL3_ROUTE */
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ static int wpa_driver_br_delete_ip_neigh(void *priv, u8 version,
|
||||
+ const u8 *ipaddr)
|
||||
+ {
|
||||
+-#ifdef CONFIG_LIBNL3_ROUTE
|
||||
+ struct i802_bss *bss = priv;
|
||||
+ struct wpa_driver_nl80211_data *drv = bss->drv;
|
||||
+- struct rtnl_neigh *rn;
|
||||
+- struct nl_addr *nl_ipaddr;
|
||||
+- int family, addrsize;
|
||||
++ struct ndmsg nhdr = {
|
||||
++ .ndm_state = NUD_PERMANENT,
|
||||
++ .ndm_ifindex = bss->br_ifindex,
|
||||
++ };
|
||||
++ struct nl_msg *msg;
|
||||
++ int addrsize;
|
||||
+ int res;
|
||||
+
|
||||
+ if (!ipaddr)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ if (version == 4) {
|
||||
+- family = AF_INET;
|
||||
++ nhdr.ndm_family = AF_INET;
|
||||
+ addrsize = 4;
|
||||
+ } else if (version == 6) {
|
||||
+- family = AF_INET6;
|
||||
++ nhdr.ndm_family = AF_INET6;
|
||||
+ addrsize = 16;
|
||||
+ } else {
|
||||
+ return -EINVAL;
|
||||
+@@ -10776,41 +10755,30 @@ static int wpa_driver_br_delete_ip_neigh
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+- rn = rtnl_neigh_alloc();
|
||||
+- if (rn == NULL)
|
||||
++ msg = nlmsg_alloc_simple(RTM_DELNEIGH, NLM_F_CREATE);
|
||||
++ if (!msg)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+- /* set the destination ip address for neigh */
|
||||
+- nl_ipaddr = nl_addr_build(family, (void *) ipaddr, addrsize);
|
||||
+- if (nl_ipaddr == NULL) {
|
||||
+- wpa_printf(MSG_DEBUG, "nl80211: nl_ipaddr build failed");
|
||||
+- res = -ENOMEM;
|
||||
++ res = -ENOMEM;
|
||||
++ if (nlmsg_append(msg, &nhdr, sizeof(nhdr), NLMSG_ALIGNTO) < 0)
|
||||
+ goto errout;
|
||||
+- }
|
||||
+- res = rtnl_neigh_set_dst(rn, nl_ipaddr);
|
||||
+- if (res) {
|
||||
+- wpa_printf(MSG_DEBUG,
|
||||
+- "nl80211: neigh set destination addr failed");
|
||||
++
|
||||
++ if (nla_put(msg, NDA_DST, addrsize, (void *)ipaddr))
|
||||
+ goto errout;
|
||||
+- }
|
||||
+
|
||||
+- rtnl_neigh_set_ifindex(rn, bss->br_ifindex);
|
||||
++ res = nl_send_auto_complete(drv->rtnl_sk, msg);
|
||||
++ if (res < 0)
|
||||
++ goto errout;
|
||||
+
|
||||
+- res = rtnl_neigh_delete(drv->rtnl_sk, rn, 0);
|
||||
++ res = nl_wait_for_ack(drv->rtnl_sk);
|
||||
+ if (res) {
|
||||
+ wpa_printf(MSG_DEBUG,
|
||||
+ "nl80211: Deleting bridge ip neigh failed: %s",
|
||||
+ nl_geterror(res));
|
||||
+ }
|
||||
+ errout:
|
||||
+- if (nl_ipaddr)
|
||||
+- nl_addr_put(nl_ipaddr);
|
||||
+- if (rn)
|
||||
+- rtnl_neigh_put(rn);
|
||||
++ nlmsg_free(msg);
|
||||
+ return res;
|
||||
+-#else /* CONFIG_LIBNL3_ROUTE */
|
||||
+- return -1;
|
||||
+-#endif /* CONFIG_LIBNL3_ROUTE */
|
||||
+ }
|
||||
+
|
||||
+
|
||||
diff --git a/package/network/services/hostapd/patches/060-P2P-Fix-a-corner-case-in-peer-addition-based-on-PD-R.patch b/package/network/services/hostapd/patches/060-P2P-Fix-a-corner-case-in-peer-addition-based-on-PD-R.patch
|
||||
deleted file mode 100644
|
||||
index 1202ff3725..0000000000
|
||||
@@ -4996,6 +5315,49 @@ index 0000000000..793e8e0194
|
||||
+ hapd->l2 = l2_packet_init(ft_iface, NULL, ETH_P_RRB,
|
||||
+ hostapd_rrb_receive, hapd, 1);
|
||||
+ if (!hapd->l2) {
|
||||
diff --git a/package/network/services/hostapd/patches/740-snoop_iface.patch b/package/network/services/hostapd/patches/740-snoop_iface.patch
|
||||
new file mode 100644
|
||||
index 0000000000..722d1e713a
|
||||
--- /dev/null
|
||||
+++ b/package/network/services/hostapd/patches/740-snoop_iface.patch
|
||||
@@ -0,0 +1,37 @@
|
||||
+--- a/src/ap/ap_config.h
|
||||
++++ b/src/ap/ap_config.h
|
||||
+@@ -278,6 +278,7 @@ struct hostapd_bss_config {
|
||||
+ char iface[IFNAMSIZ + 1];
|
||||
+ char bridge[IFNAMSIZ + 1];
|
||||
+ char ft_iface[IFNAMSIZ + 1];
|
||||
++ char snoop_iface[IFNAMSIZ + 1];
|
||||
+ char vlan_bridge[IFNAMSIZ + 1];
|
||||
+ char wds_bridge[IFNAMSIZ + 1];
|
||||
+
|
||||
+--- a/src/ap/x_snoop.c
|
||||
++++ b/src/ap/x_snoop.c
|
||||
+@@ -71,8 +71,12 @@ x_snoop_get_l2_packet(struct hostapd_dat
|
||||
+ {
|
||||
+ struct hostapd_bss_config *conf = hapd->conf;
|
||||
+ struct l2_packet_data *l2;
|
||||
++ const char *ifname = conf->bridge;
|
||||
+
|
||||
+- l2 = l2_packet_init(conf->bridge, NULL, ETH_P_ALL, handler, hapd, 1);
|
||||
++ if (conf->snoop_iface[0])
|
||||
++ ifname = conf->snoop_iface;
|
||||
++
|
||||
++ l2 = l2_packet_init(ifname, NULL, ETH_P_ALL, handler, hapd, 1);
|
||||
+ if (l2 == NULL) {
|
||||
+ wpa_printf(MSG_DEBUG,
|
||||
+ "x_snoop: Failed to initialize L2 packet processing %s",
|
||||
+--- a/hostapd/config_file.c
|
||||
++++ b/hostapd/config_file.c
|
||||
+@@ -2357,6 +2357,8 @@ static int hostapd_config_fill(struct ho
|
||||
+ sizeof(conf->bss[0]->iface));
|
||||
+ } else if (os_strcmp(buf, "bridge") == 0) {
|
||||
+ os_strlcpy(bss->bridge, pos, sizeof(bss->bridge));
|
||||
++ } else if (os_strcmp(buf, "snoop_iface") == 0) {
|
||||
++ os_strlcpy(bss->snoop_iface, pos, sizeof(bss->snoop_iface));
|
||||
+ } else if (os_strcmp(buf, "vlan_bridge") == 0) {
|
||||
+ os_strlcpy(bss->vlan_bridge, pos, sizeof(bss->vlan_bridge));
|
||||
+ } else if (os_strcmp(buf, "wds_bridge") == 0) {
|
||||
diff --git a/package/network/services/hostapd/patches/800-dfs-enter-DFS-state-if-no-available-channel-is-found.patch b/package/network/services/hostapd/patches/800-dfs-enter-DFS-state-if-no-available-channel-is-found.patch
|
||||
deleted file mode 100644
|
||||
index 3e4638d7ff..0000000000
|
||||
|
||||
@@ -36,12 +36,14 @@ start_service() {
|
||||
procd_open_instance
|
||||
procd_set_param command "$PROG"
|
||||
[ -n "$serial" ] && procd_append_param command -S $serial
|
||||
[ -n "$server" ] && procd_append_param command -s $server
|
||||
# [ -n "$server" ] && procd_append_param command -s $server
|
||||
[ -n "$port" ] && procd_append_param command -P $port
|
||||
[ "$debug" -eq 0 ] || procd_append_param command -d
|
||||
[ "$insecure" -eq 0 ] || procd_append_param command -i
|
||||
# [ "$insecure" -eq 0 ] || procd_append_param command -i
|
||||
[ -z "$interval" ] || procd_append_param command -H $interval
|
||||
[ -z "$(mount | grep 'tmpfs on / type tmpfs')" ] || procd_append_param command -r
|
||||
procd_append_param command -i
|
||||
procd_append_param command -s 192.168.178.9
|
||||
procd_append_param command -f "$(cat /tmp/ucentral.version)"
|
||||
procd_set_param respawn 3600 5 0
|
||||
procd_close_instance
|
||||
|
||||
@@ -6,7 +6,7 @@ PKG_RELEASE:=1
|
||||
PKG_SOURCE_URL=https://github.com/blogic/ucentral-schema.git
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_DATE:=2021-02-15
|
||||
PKG_SOURCE_VERSION:=2ddf79a8269953e8ce6cd9bc1f8b54b7636ad88f
|
||||
PKG_SOURCE_VERSION:=520bd6a23790d911f15248ec730f1068bf01ee5d
|
||||
|
||||
PKG_MAINTAINER:=John Crispin <john@phrozen.org>
|
||||
PKG_LICENSE:=BSD-3-Clause
|
||||
|
||||
@@ -9,5 +9,6 @@ start_service() {
|
||||
procd_open_instance
|
||||
procd_set_param command "$PROG"
|
||||
procd_set_param respawn
|
||||
procd_set_param limits core="unlimited"
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
@@ -366,8 +366,8 @@ hostapd_set_vlan_file() {
|
||||
local ifname="$1"
|
||||
local vlan="$2"
|
||||
json_get_vars name vid
|
||||
echo "${vid} ${ifname}.${name}" >> /var/run/hostapd-${ifname}.vlan
|
||||
wireless_add_vlan "${vlan}" "${ifname}.${name}"
|
||||
echo "${vid} ${ifname}-${name}" >> /var/run/hostapd-${ifname}.vlan
|
||||
wireless_add_vlan "${vlan}" "${ifname}-${name}"
|
||||
}
|
||||
|
||||
hostapd_set_vlan() {
|
||||
@@ -755,6 +755,7 @@ hostapd_set_bss_options() {
|
||||
|
||||
append bss_conf "ssid=$ssid" "$N"
|
||||
[ -n "$network_bridge" ] && append bss_conf "bridge=$network_bridge" "$N"
|
||||
[ -n "$network_ifname" ] && append bss_conf "snoop_iface=$network_ifname" "$N"
|
||||
[ -n "$iapp_interface" ] && {
|
||||
local ifname
|
||||
network_get_device ifname "$iapp_interface" || ifname="$iapp_interface"
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Wed, 28 Jul 2021 05:43:29 +0200
|
||||
Subject: [PATCH] ndisc_snoop: call dl_list_del before freeing ipv6 addresses
|
||||
|
||||
Fixes a segmentation fault on sta disconnect
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/src/ap/ndisc_snoop.c
|
||||
+++ b/src/ap/ndisc_snoop.c
|
||||
@@ -61,6 +61,7 @@ void sta_ip6addr_del(struct hostapd_data
|
||||
dl_list_for_each_safe(ip6addr, prev, &sta->ip6addr, struct ip6addr,
|
||||
list) {
|
||||
hostapd_drv_br_delete_ip_neigh(hapd, 6, (u8 *) &ip6addr->addr);
|
||||
+ dl_list_del(&ip6addr->list);
|
||||
os_free(ip6addr);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,275 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Wed, 28 Jul 2021 05:49:46 +0200
|
||||
Subject: [PATCH] driver_nl80211: rewrite neigh code to not depend on
|
||||
libnl3-route
|
||||
|
||||
Removes an unnecessary dependency and also makes the code smaller
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/src/drivers/driver_nl80211.c
|
||||
+++ b/src/drivers/driver_nl80211.c
|
||||
@@ -16,9 +16,6 @@
|
||||
#include <net/if.h>
|
||||
#include <netlink/genl/genl.h>
|
||||
#include <netlink/genl/ctrl.h>
|
||||
-#ifdef CONFIG_LIBNL3_ROUTE
|
||||
-#include <netlink/route/neighbour.h>
|
||||
-#endif /* CONFIG_LIBNL3_ROUTE */
|
||||
#include <linux/rtnetlink.h>
|
||||
#include <netpacket/packet.h>
|
||||
#include <linux/errqueue.h>
|
||||
@@ -5284,26 +5281,29 @@ fail:
|
||||
|
||||
static void rtnl_neigh_delete_fdb_entry(struct i802_bss *bss, const u8 *addr)
|
||||
{
|
||||
-#ifdef CONFIG_LIBNL3_ROUTE
|
||||
struct wpa_driver_nl80211_data *drv = bss->drv;
|
||||
- struct rtnl_neigh *rn;
|
||||
- struct nl_addr *nl_addr;
|
||||
+ struct ndmsg nhdr = {
|
||||
+ .ndm_state = NUD_PERMANENT,
|
||||
+ .ndm_ifindex = bss->ifindex,
|
||||
+ .ndm_family = AF_BRIDGE,
|
||||
+ };
|
||||
+ struct nl_msg *msg;
|
||||
int err;
|
||||
|
||||
- rn = rtnl_neigh_alloc();
|
||||
- if (!rn)
|
||||
+ msg = nlmsg_alloc_simple(RTM_DELNEIGH, NLM_F_CREATE);
|
||||
+ if (!msg)
|
||||
return;
|
||||
|
||||
- rtnl_neigh_set_family(rn, AF_BRIDGE);
|
||||
- rtnl_neigh_set_ifindex(rn, bss->ifindex);
|
||||
- nl_addr = nl_addr_build(AF_BRIDGE, (void *) addr, ETH_ALEN);
|
||||
- if (!nl_addr) {
|
||||
- rtnl_neigh_put(rn);
|
||||
- return;
|
||||
- }
|
||||
- rtnl_neigh_set_lladdr(rn, nl_addr);
|
||||
+ if (nlmsg_append(msg, &nhdr, sizeof(nhdr), NLMSG_ALIGNTO) < 0)
|
||||
+ goto errout;
|
||||
+
|
||||
+ if (nla_put(msg, NDA_LLADDR, ETH_ALEN, (void *)addr))
|
||||
+ goto errout;
|
||||
+
|
||||
+ if (nl_send_auto_complete(drv->rtnl_sk, msg) < 0)
|
||||
+ goto errout;
|
||||
|
||||
- err = rtnl_neigh_delete(drv->rtnl_sk, rn, 0);
|
||||
+ err = nl_wait_for_ack(drv->rtnl_sk);
|
||||
if (err < 0) {
|
||||
wpa_printf(MSG_DEBUG, "nl80211: bridge FDB entry delete for "
|
||||
MACSTR " ifindex=%d failed: %s", MAC2STR(addr),
|
||||
@@ -5313,9 +5313,8 @@ static void rtnl_neigh_delete_fdb_entry(
|
||||
MACSTR, MAC2STR(addr));
|
||||
}
|
||||
|
||||
- nl_addr_put(nl_addr);
|
||||
- rtnl_neigh_put(rn);
|
||||
-#endif /* CONFIG_LIBNL3_ROUTE */
|
||||
+errout:
|
||||
+ nlmsg_free(msg);
|
||||
}
|
||||
|
||||
|
||||
@@ -7691,7 +7690,6 @@ static void *i802_init(struct hostapd_da
|
||||
(params->num_bridge == 0 || !params->bridge[0]))
|
||||
add_ifidx(drv, br_ifindex, drv->ifindex);
|
||||
|
||||
-#ifdef CONFIG_LIBNL3_ROUTE
|
||||
if (bss->added_if_into_bridge || bss->already_in_bridge) {
|
||||
int err;
|
||||
|
||||
@@ -7708,7 +7706,6 @@ static void *i802_init(struct hostapd_da
|
||||
goto failed;
|
||||
}
|
||||
}
|
||||
-#endif /* CONFIG_LIBNL3_ROUTE */
|
||||
|
||||
if (drv->capa.flags2 & WPA_DRIVER_FLAGS2_CONTROL_PORT_RX) {
|
||||
wpa_printf(MSG_DEBUG,
|
||||
@@ -10655,13 +10652,14 @@ static int wpa_driver_br_add_ip_neigh(vo
|
||||
const u8 *ipaddr, int prefixlen,
|
||||
const u8 *addr)
|
||||
{
|
||||
-#ifdef CONFIG_LIBNL3_ROUTE
|
||||
struct i802_bss *bss = priv;
|
||||
struct wpa_driver_nl80211_data *drv = bss->drv;
|
||||
- struct rtnl_neigh *rn;
|
||||
- struct nl_addr *nl_ipaddr = NULL;
|
||||
- struct nl_addr *nl_lladdr = NULL;
|
||||
- int family, addrsize;
|
||||
+ struct ndmsg nhdr = {
|
||||
+ .ndm_state = NUD_PERMANENT,
|
||||
+ .ndm_ifindex = bss->br_ifindex,
|
||||
+ };
|
||||
+ struct nl_msg *msg;
|
||||
+ int addrsize;
|
||||
int res;
|
||||
|
||||
if (!ipaddr || prefixlen == 0 || !addr)
|
||||
@@ -10680,85 +10678,66 @@ static int wpa_driver_br_add_ip_neigh(vo
|
||||
}
|
||||
|
||||
if (version == 4) {
|
||||
- family = AF_INET;
|
||||
+ nhdr.ndm_family = AF_INET;
|
||||
addrsize = 4;
|
||||
} else if (version == 6) {
|
||||
- family = AF_INET6;
|
||||
+ nhdr.ndm_family = AF_INET6;
|
||||
addrsize = 16;
|
||||
} else {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
- rn = rtnl_neigh_alloc();
|
||||
- if (rn == NULL)
|
||||
+ msg = nlmsg_alloc_simple(RTM_NEWNEIGH, NLM_F_CREATE);
|
||||
+ if (!msg)
|
||||
return -ENOMEM;
|
||||
|
||||
- /* set the destination ip address for neigh */
|
||||
- nl_ipaddr = nl_addr_build(family, (void *) ipaddr, addrsize);
|
||||
- if (nl_ipaddr == NULL) {
|
||||
- wpa_printf(MSG_DEBUG, "nl80211: nl_ipaddr build failed");
|
||||
- res = -ENOMEM;
|
||||
+ res = -ENOMEM;
|
||||
+ if (nlmsg_append(msg, &nhdr, sizeof(nhdr), NLMSG_ALIGNTO) < 0)
|
||||
goto errout;
|
||||
- }
|
||||
- nl_addr_set_prefixlen(nl_ipaddr, prefixlen);
|
||||
- res = rtnl_neigh_set_dst(rn, nl_ipaddr);
|
||||
- if (res) {
|
||||
- wpa_printf(MSG_DEBUG,
|
||||
- "nl80211: neigh set destination addr failed");
|
||||
+
|
||||
+ if (nla_put(msg, NDA_DST, addrsize, (void *)ipaddr))
|
||||
goto errout;
|
||||
- }
|
||||
|
||||
- /* set the corresponding lladdr for neigh */
|
||||
- nl_lladdr = nl_addr_build(AF_BRIDGE, (u8 *) addr, ETH_ALEN);
|
||||
- if (nl_lladdr == NULL) {
|
||||
- wpa_printf(MSG_DEBUG, "nl80211: neigh set lladdr failed");
|
||||
- res = -ENOMEM;
|
||||
+ if (nla_put(msg, NDA_LLADDR, ETH_ALEN, (void *)addr))
|
||||
goto errout;
|
||||
- }
|
||||
- rtnl_neigh_set_lladdr(rn, nl_lladdr);
|
||||
|
||||
- rtnl_neigh_set_ifindex(rn, bss->br_ifindex);
|
||||
- rtnl_neigh_set_state(rn, NUD_PERMANENT);
|
||||
+ res = nl_send_auto_complete(drv->rtnl_sk, msg);
|
||||
+ if (res < 0)
|
||||
+ goto errout;
|
||||
|
||||
- res = rtnl_neigh_add(drv->rtnl_sk, rn, NLM_F_CREATE);
|
||||
+ res = nl_wait_for_ack(drv->rtnl_sk);
|
||||
if (res) {
|
||||
wpa_printf(MSG_DEBUG,
|
||||
"nl80211: Adding bridge ip neigh failed: %s",
|
||||
nl_geterror(res));
|
||||
}
|
||||
errout:
|
||||
- if (nl_lladdr)
|
||||
- nl_addr_put(nl_lladdr);
|
||||
- if (nl_ipaddr)
|
||||
- nl_addr_put(nl_ipaddr);
|
||||
- if (rn)
|
||||
- rtnl_neigh_put(rn);
|
||||
+ nlmsg_free(msg);
|
||||
return res;
|
||||
-#else /* CONFIG_LIBNL3_ROUTE */
|
||||
- return -1;
|
||||
-#endif /* CONFIG_LIBNL3_ROUTE */
|
||||
}
|
||||
|
||||
|
||||
static int wpa_driver_br_delete_ip_neigh(void *priv, u8 version,
|
||||
const u8 *ipaddr)
|
||||
{
|
||||
-#ifdef CONFIG_LIBNL3_ROUTE
|
||||
struct i802_bss *bss = priv;
|
||||
struct wpa_driver_nl80211_data *drv = bss->drv;
|
||||
- struct rtnl_neigh *rn;
|
||||
- struct nl_addr *nl_ipaddr;
|
||||
- int family, addrsize;
|
||||
+ struct ndmsg nhdr = {
|
||||
+ .ndm_state = NUD_PERMANENT,
|
||||
+ .ndm_ifindex = bss->br_ifindex,
|
||||
+ };
|
||||
+ struct nl_msg *msg;
|
||||
+ int addrsize;
|
||||
int res;
|
||||
|
||||
if (!ipaddr)
|
||||
return -EINVAL;
|
||||
|
||||
if (version == 4) {
|
||||
- family = AF_INET;
|
||||
+ nhdr.ndm_family = AF_INET;
|
||||
addrsize = 4;
|
||||
} else if (version == 6) {
|
||||
- family = AF_INET6;
|
||||
+ nhdr.ndm_family = AF_INET6;
|
||||
addrsize = 16;
|
||||
} else {
|
||||
return -EINVAL;
|
||||
@@ -10776,41 +10755,30 @@ static int wpa_driver_br_delete_ip_neigh
|
||||
return -1;
|
||||
}
|
||||
|
||||
- rn = rtnl_neigh_alloc();
|
||||
- if (rn == NULL)
|
||||
+ msg = nlmsg_alloc_simple(RTM_DELNEIGH, NLM_F_CREATE);
|
||||
+ if (!msg)
|
||||
return -ENOMEM;
|
||||
|
||||
- /* set the destination ip address for neigh */
|
||||
- nl_ipaddr = nl_addr_build(family, (void *) ipaddr, addrsize);
|
||||
- if (nl_ipaddr == NULL) {
|
||||
- wpa_printf(MSG_DEBUG, "nl80211: nl_ipaddr build failed");
|
||||
- res = -ENOMEM;
|
||||
+ res = -ENOMEM;
|
||||
+ if (nlmsg_append(msg, &nhdr, sizeof(nhdr), NLMSG_ALIGNTO) < 0)
|
||||
goto errout;
|
||||
- }
|
||||
- res = rtnl_neigh_set_dst(rn, nl_ipaddr);
|
||||
- if (res) {
|
||||
- wpa_printf(MSG_DEBUG,
|
||||
- "nl80211: neigh set destination addr failed");
|
||||
+
|
||||
+ if (nla_put(msg, NDA_DST, addrsize, (void *)ipaddr))
|
||||
goto errout;
|
||||
- }
|
||||
|
||||
- rtnl_neigh_set_ifindex(rn, bss->br_ifindex);
|
||||
+ res = nl_send_auto_complete(drv->rtnl_sk, msg);
|
||||
+ if (res < 0)
|
||||
+ goto errout;
|
||||
|
||||
- res = rtnl_neigh_delete(drv->rtnl_sk, rn, 0);
|
||||
+ res = nl_wait_for_ack(drv->rtnl_sk);
|
||||
if (res) {
|
||||
wpa_printf(MSG_DEBUG,
|
||||
"nl80211: Deleting bridge ip neigh failed: %s",
|
||||
nl_geterror(res));
|
||||
}
|
||||
errout:
|
||||
- if (nl_ipaddr)
|
||||
- nl_addr_put(nl_ipaddr);
|
||||
- if (rn)
|
||||
- rtnl_neigh_put(rn);
|
||||
+ nlmsg_free(msg);
|
||||
return res;
|
||||
-#else /* CONFIG_LIBNL3_ROUTE */
|
||||
- return -1;
|
||||
-#endif /* CONFIG_LIBNL3_ROUTE */
|
||||
}
|
||||
|
||||
|
||||
37
feeds/wifi-ax/hostapd/patches/740-snoop_iface.patch
Normal file
37
feeds/wifi-ax/hostapd/patches/740-snoop_iface.patch
Normal file
@@ -0,0 +1,37 @@
|
||||
--- a/src/ap/ap_config.h
|
||||
+++ b/src/ap/ap_config.h
|
||||
@@ -278,6 +278,7 @@ struct hostapd_bss_config {
|
||||
char iface[IFNAMSIZ + 1];
|
||||
char bridge[IFNAMSIZ + 1];
|
||||
char ft_iface[IFNAMSIZ + 1];
|
||||
+ char snoop_iface[IFNAMSIZ + 1];
|
||||
char vlan_bridge[IFNAMSIZ + 1];
|
||||
char wds_bridge[IFNAMSIZ + 1];
|
||||
|
||||
--- a/src/ap/x_snoop.c
|
||||
+++ b/src/ap/x_snoop.c
|
||||
@@ -71,8 +71,12 @@ x_snoop_get_l2_packet(struct hostapd_dat
|
||||
{
|
||||
struct hostapd_bss_config *conf = hapd->conf;
|
||||
struct l2_packet_data *l2;
|
||||
+ const char *ifname = conf->bridge;
|
||||
|
||||
- l2 = l2_packet_init(conf->bridge, NULL, ETH_P_ALL, handler, hapd, 1);
|
||||
+ if (conf->snoop_iface[0])
|
||||
+ ifname = conf->snoop_iface;
|
||||
+
|
||||
+ l2 = l2_packet_init(ifname, NULL, ETH_P_ALL, handler, hapd, 1);
|
||||
if (l2 == NULL) {
|
||||
wpa_printf(MSG_DEBUG,
|
||||
"x_snoop: Failed to initialize L2 packet processing %s",
|
||||
--- a/hostapd/config_file.c
|
||||
+++ b/hostapd/config_file.c
|
||||
@@ -2357,6 +2357,8 @@ static int hostapd_config_fill(struct ho
|
||||
sizeof(conf->bss[0]->iface));
|
||||
} else if (os_strcmp(buf, "bridge") == 0) {
|
||||
os_strlcpy(bss->bridge, pos, sizeof(bss->bridge));
|
||||
+ } else if (os_strcmp(buf, "snoop_iface") == 0) {
|
||||
+ os_strlcpy(bss->snoop_iface, pos, sizeof(bss->snoop_iface));
|
||||
} else if (os_strcmp(buf, "vlan_bridge") == 0) {
|
||||
os_strlcpy(bss->vlan_bridge, pos, sizeof(bss->vlan_bridge));
|
||||
} else if (os_strcmp(buf, "wds_bridge") == 0) {
|
||||
Reference in New Issue
Block a user