1
1
Commit Graph

2288 Commits

Author SHA1 Message Date
John Crispin
5526366fea unetd: cli: convey network name from inviter to joiner
The unet CLI's join handler used the joiner's --network value as the
local network name, so an unspecified --network fell back to the
literal 'unet'. The inviter typically uses a different name (e.g.
ucoord_<venue>), so the two sides ended up keyed differently and any
upper layer subscribing to the network-named unetmsg channel never
saw each other.

The inviter now passes enroll_info={ network } to enroll_start so
the inviter's network name rides along in enroll_meta. The joiner
prefers data.enroll_meta?.network when present, falling back to its
own --network value for backwards compatibility with older inviters.

Signed-off-by: John Crispin <john@phrozen.org>
2026-06-03 11:19:06 +00:00
Paul Donald
e0b9d1fdce
lldpd: bump to 1.0.22
Changes:
https://github.com/lldpd/lldpd/releases/tag/1.0.22

Fixes:

- Fix out-of-bound read access when removing VLAN tag (CVE-2026-46433, issue 787)
- Reject 0-length management address in LLDP
- Fix race condition when creating the control socket
- Fix FDP MAC address
- Fix memory leak in the BSD bridge query path
- Fix duplicate management addresses when merging EDP VLAN frames

Signed-off-by: Paul Donald <newtwen+github@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/23567
Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
2026-05-28 22:14:27 +02:00
Konstantin Demin
30394cc5b9 dropbear: rework failsafe script
- generate or use RSA only if none of the modern algorithms (Ed25519, ECDSA) are supported;
- remove size constraints for key size.

Signed-off-by: Konstantin Demin <rockdrilla@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/23217
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-05-28 01:19:35 +02:00
Konstantin Demin
04ea7ca42f dropbear: adjust failsafe script
- try to detect supported (hostkey) algorithms; otherwise fallback to predefined list;
- remove size constraint for ECDSA: custom build may include only 384 or 521 bit curves;
- remove size constraint for RSA: default RSA key size is 2048 bits which is sufficient for SSH security recommendations, and previous value of 1024 bits is considered insecure.

Signed-off-by: Konstantin Demin <rockdrilla@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/23217
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-05-28 01:19:35 +02:00
Konstantin Demin
6126cfbba9 dropbear: adjust init script
- try to detect supported (hostkey) algorithms; otherwise fallback to predefined list;
- improve hostkey generation before start;
- add new uci config option:
  - MaxSessionDuration: maximum session duration (seconds);
    overrides DROPBEAR_DEFAULT_MAX_DURATION build-time value.

Signed-off-by: Konstantin Demin <rockdrilla@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/23217
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-05-28 01:19:35 +02:00
Konstantin Demin
5d5208882a dropbear: adjust configuration
- add new options:
  - DROPBEAR_DEFAULT_MAX_DURATION
  - DROPBEAR_MAX_PUBKEY_QUERIES
- fix DROPBEAR_MLKEM768 description (fixes commit d8ff2d8cba)

Signed-off-by: Konstantin Demin <rockdrilla@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/23217
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-05-28 01:19:35 +02:00
Konstantin Demin
99b681934d dropbear: bump to 2026.91
- update dropbear to latest stable 2026.91;
  for the changes see https://matt.ucc.asn.au/dropbear/CHANGES
- cherry-pick upstream patches:
  - sntrup: Fix 64-bit literals
  - Increase MAX_HOSTKEYS to 6
  - Fix too-low pubkey key query count
- automatically refresh patches

Fixes: CVE-2019-6111, CVE-2026-35385
Signed-off-by: Konstantin Demin <rockdrilla@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/23217
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-05-28 01:19:35 +02:00
Stijn Tintel
79322d44d8 ustp: update to Git HEAD (2026-05-27)
f5d17dd60a89 mstp: add default Hello Time constant
17c36bebada1 mstp: use default Hello Time in recordTimes

Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
2026-05-27 14:32:21 +03:00
Hauke Mehrtens
a7bd3b147e uhttpd: update to Git HEAD (2026-05-21)
1b624f8f814e auth: classify $p$ lookups by account state

Link: https://github.com/openwrt/openwrt/pull/23476
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-05-23 01:52:39 +02:00
Felix Fietkau
74da669505 umdns: update to Git HEAD (2026-05-22)
bd7599d02157 fix calloc_a size argument type

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2026-05-22 14:56:09 +02:00
Felix Fietkau
4136443864 unetd: update to Git HEAD (2026-05-22)
090abf9a5521 host: fix type mismatch on calloc_a calls

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2026-05-22 14:54:34 +02:00
Andy Chiang
6eead121ee uhttpd: update to Git HEAD (2026-05-20)
6ab9abb56bcb cgi, file: fix crash due to field_len type mismatch with libubox

Signed-off-by: Andy Chiang <AndyChiang_git@outlook.com>
Link: https://github.com/openwrt/openwrt/pull/23446
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-05-20 23:37:23 +02:00
Hauke Mehrtens
6a608bcf4e uhttpd: update to Git HEAD (2026-05-15)
d2551871b5e5 client: prevent transfer_chunked counter overflow
07f0afb3bf91 client: match Host and URL attributes exactly in tls_redirect_check
05406f70d05c file: scan all entries when matching If-Match / If-None-Match
81527e1f7630 proc: restore default SIGPIPE disposition in spawned child
0df62571f158 ucode: initialize module search path only once
05317bf30a94 proc: store CGI Status message per-client instead of in a shared buffer
1781b6dec414 utils, client: cast char to unsigned before passing to ctype functions
4221eb8b33ea file: respond 500 on uh_handle_alias OOM
8e5b26f93798 file: distinguish parse failure from epoch in date precondition checks
ced7b15c3467 utils: fix one-byte overflow in uh_urldecode
53e7150619a3 file: bail out of file_write_cb on read error
93432149a7ae utils: remove unreachable return statement in uh_addr_rfc1918
add5389470f0 utils: fix off-by-one out-of-bounds read in uh_b64decode
778ccbbf5f8a main: fix daemonization stdio redirection and fd leak
2c869c094c25 client: parse Content-Length safely
9404e6c62bb7 client: parse chunked transfer chunk size safely
b33ca5d37718 auth: do not accept stored crypt hash as plaintext password
6fadf0da5050 auth: replace strcmp with constant-time password comparison

Link: https://github.com/openwrt/openwrt/pull/23379
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-05-16 00:47:41 +02:00
Hannu Nyman
dc04999b1f dnsmasq: apply six CVE-fix upstream patches to 2.92
Apply upstream patches for the recently published CVEs in dnsmasq.

Source: https://thekelleys.org.uk/dnsmasq/CVE/
Reference: https://lists.thekelleys.org.uk/pipermail/dnsmasq-discuss/2026q2/018471.html

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
Link: https://github.com/openwrt/openwrt/pull/23330
[Added this to main branch first]
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-05-13 01:51:56 +02:00
Paul Spooren
ff16e61084 uhttpd: update to Git HEAD (2026-04-21)
506e24987b97 ubus: unregister ubus subscriber on HTTP client disconnect
e619cb04cddb client: use base-10 parsing for Content-Length header

While at it, use SPDX license tags

Fixes: https://github.com/openwrt/uhttpd/issues/1
Signed-off-by: Paul Spooren <mail@aparcar.org>
Link: https://github.com/openwrt/openwrt/pull/23029
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-05-11 01:20:49 +02:00
Felix Fietkau
a6969351a7 hostapd: clear start_disabled when adding a BSS to an enabled iface
In AP+STA mode, wifi-scripts emits start_disabled=1 in the per-BSS
section of the generated hostapd config so that hostapd defers
beaconing on every BSS until apsta_state up clears the flag for the
whole iface (uc_hostapd_iface_start clears start_disabled on every BSS
and calls ieee802_11_set_beacon).

When a new BSS is added later via iface.add_bss while the iface is
already in HAPD_IFACE_ENABLED state, the freshly parsed config still
carries start_disabled=1 for that BSS. hostapd_setup_bss is invoked
with start_beacon=true, but hostapd_start_beacon then skips
ieee802_11_set_beacon because conf->start_disabled is set. The kernel
netdev is created without ever starting beacons, the carrier never
comes up, and probe-response transmission attempts fail with
"handle_probe_req: send failed".

Mirror what iface.start does: when the iface is already enabled, the
apsta channel selection has happened, so clear start_disabled for the
incoming BSS before starting it.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2026-05-04 16:29:37 +02:00
Felix Fietkau
a86da0bd1e hostapd: emit ubus key-mismatch event for SAE confirm failures
Surface SAE confirm mismatches (wrong password) through the same
key-mismatch ubus notification that is already used for PSK failures, so
consumers can react uniformly regardless of the authentication method.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2026-05-04 16:29:37 +02:00
Felix Fietkau
94fc66cce9 hostapd: avoid spurious interface reload on empty MLD config
mld_set_config() treated any call with empty prev_mld as a fresh
configuration and triggered a full Reload all interfaces, even when the
new config was also empty (the typical path on non-MLD devices).
Reloading every BSS on each netifd reconf disrupted associated stations
including PMF-protected backhaul STAs, which would self-deauth after the
SA Query timeout.

Only treat the call as a new configuration when the new config is
actually non-empty.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2026-05-04 16:29:36 +02:00
Ivan Romanov
a6a865e533 dropbear: require busybox pidof applet
The dropbear init script uses pidof, but BusyBox may be built
without it. Add a Kconfig dependency on BUSYBOX_CONFIG_PIDOF
to ensure the applet is available at runtime.

Signed-off-by: Ivan Romanov <drizt72@zoho.eu>
Link: https://github.com/openwrt/openwrt/pull/23128
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-04-29 10:12:18 +02:00
Ivan Romanov
148830a11d dnsmasq: require busybox pidof applet
The dnsmasq init script uses pidof, but BusyBox may be built
without it. Add a Kconfig dependency on BUSYBOX_CONFIG_PIDOF
to ensure the applet is available at runtime.

Signed-off-by: Ivan Romanov <drizt72@zoho.eu>
Link: https://github.com/openwrt/openwrt/pull/23132
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-04-29 10:09:20 +02:00
Felix Fietkau
53931f03dd wpa_supplicant: include ctrl-event on the DPP channel
Simplifies managing state

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2026-04-05 15:00:12 +00:00
Felix Fietkau
14145abcb2 wpa_supplicant: add ifname to recieved ctrl-event notifications
Simplifies subscribing to multiple objects.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2026-04-05 15:00:12 +00:00
Nick Hainke
acf9796d7d hostapd: update to 2026-04-02
Patches automatically refreshed.

Link: https://github.com/openwrt/openwrt/pull/22745
Signed-off-by: Nick Hainke <vincent@systemli.org>
2026-04-04 09:28:28 +02:00
Nick Hainke
20d6296141 hostapd: update to 2026-03-23
Remove upstreamed patch:
- 001-RSN-Fix-pmksa_cache_flush-prototype-mismatch-in-non-.patch
  -> https://git.w1.fi/cgit/hostap/commit/?id=f54565c6293d03bf7da5b7c4af496a62c51f0aaf

Tested-By: Daniel Pawlik <pawlik.dan@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/22578
Signed-off-by: Nick Hainke <vincent@systemli.org>
2026-03-25 14:00:49 +01:00
Felix Fietkau
befa61b1b6 bridger: update to Git HEAD (2026-03-23)
de7e00a5a673 flow: Fix vlan forwarding check with vlan filtering disabled

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2026-03-23 10:57:16 +01:00
Nick Hainke
a47208bd96 hostapd: update to 2026-03-19
Remove upstreamed patch:
- 001-PASN-Fix-the-compilation-errors-without-CONFIG_PASN.patch

Add patch:
- 001-RSN-Fix-pmksa_cache_flush-prototype-mismatch-in-non-.patch

Link: https://github.com/openwrt/openwrt/pull/22517
Signed-off-by: Nick Hainke <vincent@systemli.org>
2026-03-21 19:29:23 +01:00
Vladimir Palevich
fde5d2e210 hostapd: fix memory leak in rrm ubus interface
Add missing wpabuf_free calls to the hostapd_rrm_nr_set and
hostapd_rrm_beacon_req functions.

Signed-off-by: Vladimir Palevich <palevichva@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/22538
Signed-off-by: Nick Hainke <vincent@systemli.org>
2026-03-21 18:58:03 +01:00
Felix Fietkau
a19cdb1a95 hostapd: ubus: fix parent-tsf size in beacon report notification
parent_tsf in struct rrm_measurement_beacon_report is le32 (32-bit),
but was being added with blobmsg_add_u16, truncating the value.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2026-03-19 10:57:26 +01:00
Felix Fietkau
1d98101743 hostapd: ubus: add missing token to beacon report notification
The beacon measurement token was not included in the ubus beacon-report
notification, causing consumers that need the token (e.g. for constructing
Beacon Metrics Response TLVs) to receive null.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2026-03-19 10:57:26 +01:00
Felix Fietkau
5aea8e8916 hostapd: fix type mismatch in BSS transition responses
Use blobmsg_add_u32 for non-bool fields in order to avoid wrong
interpretations of the data on JSON/ucode conversion.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2026-03-19 10:57:26 +01:00
Felix Fietkau
c5564ba071 hostapd: ubus: fix beacon request reporting detail field size
The Reporting Detail value is a 1-byte field, but was written as le16,
producing a 2-byte write that also contradicts the length field of 1
in the subelement header.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2026-03-19 10:57:07 +01:00
Felix Fietkau
0208089ded hostapd: ubus: fix beacon request buffer overflow with reporting detail
The reporting detail subelement (up to 3 bytes) was not accounted for
in the wpabuf allocation, causing a crash when reporting_detail is set
to a valid value (0, 1, or 2).

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2026-03-19 10:51:28 +01:00
Álvaro Fernández Rojas
df45ed2da0 odhcpd: update to Git HEAD (2026-03-16)
160e5fa3957c odhcpd: ensure zero padding on DNSSL
2a316dbfd798 odhcpd: ignore NULL in dhcpv4_free_lease() stub
b960d4cbe27b ubus: fix truncated field in DHCPv6 lease query
4e26e1361335 dhcpv4: fix avl_delete on leases not in avl tree
ea5af5bffa2d dhcpv4: fix segfault when disabling interface

13cec018c0...160e5fa395

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/22454
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-03-17 02:30:20 +01:00
Paul Spooren
681eb446cf package: bump odhcpd to latest HEAD 2026-03-12
* 13cec01 dhcpv6-ia: dhcpv6_log_ia_addr(): parse return of snprintf

Signed-off-by: Paul Spooren <mail@aparcar.org>
2026-03-14 18:58:52 +01:00
Jonas Gorski
8a7eb57ab8 umdns: update to Git HEAD (2026-02-06)
a52cdb354d13 dns: validate IPv4 record addresses
b798c24205b5 dns: validate IPv6 record addresses
a3dcb4adc635 dns: validate reverse dns query name lengths

Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
2026-03-12 20:32:25 +01:00
Álvaro Fernández Rojas
56bf67d474 omcproxy: update to Git HEAD (2026-03-07)
3abb601ab77f mrib: receive_mrt: workaround for RTL8373 queries
e25491f27af3 Revert "mrib: receive_mrt: workaround for RTL8373 queries"
cd20f3a4b4f1 mrib: receive_mrt: workaround for RTL8373 queries
cad82dc5cb65 formal: fix workflow permissions
997a981ae375 github: ci: add MIPS64, PowerPC64 and RISCV64
e646f462daeb github: ci: add powerpc arch
b3d1e2e48cf4 github: ci: add cmake build and source directories
de4353546064 github: ci: disable json-c tests
2be7e63d9b68 scripts: devel-build: disable json-c tests
36adc79c7b76 github: fix CI apt dependencies
11e45f6cfe10 README: update build instructions
78eea9b83a93 omcproxy: use syslog mask for logging level
9f0a1454de10 github: add CI build
49df5f5b8704 omcproxy: add a simple build script
757c1c704c9d libubox: remove submodule
8957f6c2557b omcproxy: update cmake file
848d696419eb proxy: fix indentation warning

Link: https://github.com/openwrt/openwrt/pull/22317
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
2026-03-08 08:23:20 +01:00
Paul Donald
1e9da9798a ppp: add memmove fortify and remove MRU patch
memcpy() with overlapping src and dest buffers is an undefined behavior
in C. In the current code, a ConfRej response is generated by copying
input data in-place, where the dest address is lower than the src.
This happens to work in practice because memcpy() forward-copies data,
matching the behavior of memmove() in this case.

However, if FORTIFY_SOURCE or Address Sanitizer is enabled, memcpy()
will detect the overlap at run time and abort the program.

Replace the memcpy() with memmove() to ensure a well-defined behavior.

Reported-by: Filippo Carletti <filippo.carletti@gmail.com>

MRU patch https://github.com/ppp-project/ppp/pull/573

Signed-off-by: Paul Donald <newtwen+github@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/22286
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-03-07 00:04:48 +01:00
Nick Hainke
89f57d48f9 hostapd: update to 2026-02-27
Add patch:
- 001-PASN-Fix-the-compilation-errors-without-CONFIG_PASN.patch

Manually edit patches:
- 110-mbedtls-TLS-crypto-option-initial-port.patch
- 190-hostapd-Fix-hostapd-crash-if-setup-a-iface-with-.patch
- 191-hostapd-add-support-for-specifying-the-link-id-in-th.patch
- 220-indicate-features.patch
- 360-acs_retry.patch
  -> Remove the extra check for -EBUSY (see below) because the code we
     want to skip is now already guarded by:
     https://git.w1.fi/cgit/hostap/commit/?id=af6473761f07ae4f13ef228dec618ca62faf6ef4
      ```
      + if (ret == -EBUSY)
      +         goto fail;
      ```
- 341-mesh-ctrl-iface-channel-switch.patch
- 600-ubus_support.patch
- 601-ucode_support.patch
  -> The patch had this and similar changes:
     ```
      -		if (os_strcmp(drv->first_bss->ifname, ifname) != 0) {
      +		if (drv->first_bss->ifindex != ifi->ifi_index) {
     ```
     Those changes should be unnecessary due to the commit:
     https://git.w1.fi/cgit/hostap/commit/?id=2bf6d85963b9857b411b57cc7949e30ee2cb1216
- 780-Implement-APuP-Access-Point-Micro-Peering.patch
  -> Needs adjustement because of Enhanced Privacy Protection (EPP):
     https://git.w1.fi/cgit/hostap/commit/?id=1e13ee9c382a5d88c4bb0ffdfaf434fbb31123f3

Remove patch:
- 030-Revert-nl80211-Accept-a-global-nl80211-event-to-a-br.patch
- 060-nl80211-fix-reporting-spurious-frame-events.patch
  -> https://git.w1.fi/cgit/hostap/commit/?id=ca266cc24d8705eb1a2a0857ad326e48b1408b20
- 190-hostapd-Fix-hostapd-crash-if-setup-a-iface-with-.patch
  -> https://git.w1.fi/cgit/hostap/commit/?id=e275c3dc70e1c2947e02e43aeee6c4f9975c3dc7
- 192-nl80211-cancel-scans-whenever-the-first-bss-is-remov.patch
  -> https://git.w1.fi/cgit/hostap/commit/?id=5ce1d41803866782bbd96d575f53d43358a20a2e
- 350-nl80211_del_beacon_bss.patch
  -> https://git.w1.fi/cgit/hostap/commit/?id=b777ecb16274235974edb5c1dfcea6abab25f6c4

Tested-By: Daniel Pawlik <pawlik.dan@gmail.com>
Co-developed-by: Agustin Lorenzo <agustin.lorenzo@thinco.es>
Link: https://github.com/openwrt/openwrt/pull/20912
Signed-off-by: Nick Hainke <vincent@systemli.org>
2026-03-02 11:58:26 +01:00
Yaroslav Isakov
9d78b2f53c hostapd: fix EAP-PWD in experimental hostapd-radius server
Without initializing pwd_group, it's set to 0, which is reserved value.
When EAP-PWD is used in wpa_supplicant/eapol_test, next error is seen:
EAP-PWD: Server EAP-pwd-ID proposal: group=0 random=1 prf=1 prep=0
EAP-pwd: Unsupported or disabled proposal

Signed-off-by: Yaroslav Isakov <yaroslav.isakov@gmail.com>
2026-02-19 16:13:02 +01:00
Chad Monroe
50d3d287e4 hostapd: initialize first BSS radio_mask during driver init
Secondary BSSes inherit the alloc value which bypasses
NL80211_ATTR_VIF_RADIO_MASK in nl80211_create_iface() and causes the
kernel to default new interfaces to all radios.

The ucode bss_create fallback fails to correct this because
the interface is already UP.. the kernel rejects SET_INTERFACE with
-EBUSY.

Signed-off-by: Chad Monroe <chad@monroe.io>
2026-02-19 15:08:12 +00:00
Felix Fietkau
a570b9cbed unetd: update to Git HEAD (2026-02-15)
35c182b74fa4 host: fix for_each_routed_host macro using wrong variable name
52e504192ea7 host: fix gateway peers getting allowed IPs of unrelated hosts

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2026-02-15 14:42:03 +01:00
Nick Hainke
7585450d37 hostapd: fix 601-ucode_support.patch not applying
Code was moved from 601-ucode_support.patch into ucode.{c,h},
but the patch still contained the old hunks. As a result, the patch
no longer applies.

Fix this by dropping the moved code from 601-ucode_support.patch.

Fixes: a7756346c7 ("hostapd: extend DPP ucode API with WPS M7/M8 encrypted settings handling")
Signed-off-by: Nick Hainke <vincent@systemli.org>
2026-02-08 17:00:12 +01:00
Felix Fietkau
a7756346c7 hostapd: extend DPP ucode API with WPS M7/M8 encrypted settings handling
Add callbacks to intercept WPS M7 reception (registrar side) and M8
reception (enrollee side), allowing external code to inject extra
encrypted attributes and optionally skip credential building.

On the registrar side, the m7_rx callback receives the decrypted M7
content and can return extra data to include in M8's encrypted settings
as well as a flag to skip credential generation.

On the enrollee side, add a wps_set_m7 method to set extra encrypted
data for M7, and a m8_rx callback to handle the decrypted M8 content
externally.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2026-02-08 12:25:20 +01:00
Felix Fietkau
09de759506 hostapd: add DPP ucode API for external frame handling
Add a ucode API to hostapd and wpa_supplicant for external DPP frame
handling. This allows an external controller to intercept DPP frames
and handle the DPP protocol externally.

The API provides:
- RX callbacks (dpp_rx_action, dpp_rx_gas) called when DPP frames are
  received, allowing external handling before internal processing
- TX methods (dpp_send_action, dpp_send_gas_resp/dpp_send_gas_req) for
  transmitting DPP frames
- A ubus channel-based API (dpp_channel) for bidirectional communication
  with exclusive hook registration per interface
- CCE control for hostapd (set_cce method)

The wpa_supplicant API mirrors hostapd but adapted for STA role:
- Uses tx_gas_req instead of tx_gas_resp
- GAS RX provides full frame instead of parsed query
- No CCE control (AP-only feature)

Both implementations include:
- Timeout handling with automatic channel disconnect after 3 failures
- Hook cleanup on interface removal
- Last-caller-wins semantics for hook registration

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2026-02-07 09:27:57 +00:00
John Crispin
7fd71f2c74 unetmsg: notify subscribers when remote peer connection drops
When a remote peer's connection drops (device powered off, unetmsgd
crash, network failure), network_rx_cleanup_state silently removed
the remote publish/subscribe handles without notifying local
subscribers. This meant local clients had no way to detect that a
remote peer had disappeared.

Call handle_publish for each channel where a remote publish handle
is removed during connection cleanup, so local subscribers receive
the publisher change notification and can react accordingly.

Signed-off-by: John Crispin <john@phrozen.org>
2026-02-07 10:04:18 +01:00
Felix Fietkau
e0722d0ac4 unetmsg: only send publish notifications for remote publisher changes
handle_publish() notifies local subscribers about publisher state
changes. The publish/subscribe handler in network_socket_handle_request()
was calling it for both remote publish and subscribe changes, but
subscriber changes are not relevant to local subscribers.

Guard the handle_publish() calls with a msgtype == "publish" check,
matching the local client paths in unetmsgd-client.uc which already
have this guard.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2026-02-07 10:04:18 +01:00
Felix Fietkau
212040b5ca unetmsg: fix reconnect loop when RX authenticates before TX
When both peers connect simultaneously, the RX side can authenticate
before the TX handshake completes. network_check_auth() was sending a
ping on the unauthenticated TX channel, which gets rejected by the
remote's pre-auth handler as "Auth failed", killing the connection and
triggering an endless reconnect cycle.

Check chan.auth before interacting with the TX channel. If TX auth
hasn't completed yet, just schedule a reconnect timer - auth_data_cb
already handles state sync when TX auth completes.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2026-02-07 10:04:18 +01:00
Felix Fietkau
389a79d972 unetmsg: close all channels on network removal
network_close() only closed the listening socket without shutting down
established RX/TX connections. This left remote state in
core.remote_publish/core.remote_subscribe for hosts on the removed
network, causing stale entries in channel listings and failed routing
attempts.

Close all RX and TX channels before removing the network, which also
triggers remote state cleanup via network_rx_socket_close().

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2026-02-07 10:04:17 +01:00
Felix Fietkau
f09596f84f unetmsg: fix inverted condition in network_rx_socket_close()
The cleanup condition checked != instead of ==, inverting the logic.
This caused two problems:

When an authenticated RX connection disconnected, remote state for that
host was never cleaned up since the stored entry matched the one being
closed.

When a stale unauthenticated connection from a peer closed, any existing
authenticated connection from the same peer was incorrectly deleted and
its remote state wiped.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2026-02-07 10:04:17 +01:00
Felix Fietkau
3efcf444a1 unetmsg: fix publish notification timing around remote auth
When a remote peer's publish registrations arrive via RX before the
local TX connection is authenticated, handle_publish fires but the
subscriber can't reach the remote publisher yet since the TX channel
isn't ready.

Suppress publish notifications on the RX side when no authenticated TX
channel exists for the remote host. After TX authentication completes,
re-trigger handle_publish only for topics that the specific peer
publishes and that have local subscribers.

Signed-off-by: John Crispin <john@phrozen.org>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
2026-02-07 10:04:17 +01:00