Search Linux Wireless

rtw88 multicast failure in AP mode

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

Let's assume we have 3 systems: A and B use 8821CU chip, and C uses
another chip from a different vendor.

If A is in AP mode and A and B use the rtw88 driver, pinging A from B
and C by local name doesn't work because name resolution fails: avahi
on B and C sends a multicast request to resolve A.local, A sees it and
responds, but neither B nor C sees the response.

In the same situation, but with A and B using the rtl8821cu driver
(from https://github.com/morrownr/8821cu-20210916.git), everything
works - B and C see A's response and can resolve A.local.

If C is in AP mode, resolving C from A and B also works.

This leads me to believe there's something wrong with rtw88 when
sending multicast packets in AP mode.

When it works:
AP:
13:42:01.393649 IP 10.21.12.9.45190 > 10.21.12.1.53: 1519+ SOA? local. (23)
13:42:01.394137 IP 10.21.12.1.53 > 10.21.12.9.45190: 1519 Refused 0/0/0 (23)
13:42:01.395767 IP 10.21.12.9.49431 > 10.21.12.1.53: 1519+ SOA? local. (23)
13:42:01.395968 IP 10.21.12.1.53 > 10.21.12.9.49431: 1519 Refused 0/0/0 (23)
13:42:01.498904 IP 10.21.12.9.5353 > 224.0.0.251.5353: 0 A (QM)? A.local. (52)
13:42:01.499612 IP 10.21.12.1.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0
(Cache flush) A 10.21.12.1 (62)
13:42:01.502771 IP 10.21.12.9 > 10.21.12.1: ICMP echo request, id 597,
seq 0, length 64
13:42:01.502870 IP 10.21.12.1 > 10.21.12.9: ICMP echo reply, id 597,
seq 0, length 64
13:42:02.502636 IP 10.21.12.9 > 10.21.12.1: ICMP echo request, id 597,
seq 1, length 64
13:42:02.502832 IP 10.21.12.1 > 10.21.12.9: ICMP echo reply, id 597,
seq 1, length 64
13:42:03.503137 IP 10.21.12.9 > 10.21.12.1: ICMP echo request, id 597,
seq 2, length 64
13:42:03.503332 IP 10.21.12.1 > 10.21.12.9: ICMP echo reply, id 597,
seq 2, length 64

station:
13:41:55.542970 IP 10.21.12.9.45190 > 10.21.12.1.53: 1519+ SOA? local. (23)
13:41:55.545556 IP 10.21.12.1.53 > 10.21.12.9.45190: 1519 Refused 0/0/0 (23)
13:41:55.545888 IP 10.21.12.9.49431 > 10.21.12.1.53: 1519+ SOA? local. (23)
13:41:55.547212 IP 10.21.12.1.53 > 10.21.12.9.49431: 1519 Refused 0/0/0 (23)
13:41:55.648755 IP 10.21.12.9.5353 > 224.0.0.251.5353: 0 A (QM)? A.local. (52)
13:41:55.651057 IP 10.21.12.1.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0
(Cache flush) A 10.21.12.1 (62)
13:41:55.652154 IP 10.21.12.9 > 10.21.12.1: ICMP echo request, id 597,
seq 0, length 64
13:41:55.654220 IP 10.21.12.1 > 10.21.12.9: ICMP echo reply, id 597,
seq 0, length 64
13:41:56.652499 IP 10.21.12.9 > 10.21.12.1: ICMP echo request, id 597,
seq 1, length 64
13:41:56.654529 IP 10.21.12.1 > 10.21.12.9: ICMP echo reply, id 597,
seq 1, length 64
13:41:57.652892 IP 10.21.12.9 > 10.21.12.1: ICMP echo request, id 597,
seq 2, length 64
13:41:57.654789 IP 10.21.12.1 > 10.21.12.9: ICMP echo reply, id 597,
seq 2, length 64

when it doesn't:
AP:
13:47:00.331053 IP 10.21.12.9.53078 > 10.21.12.1.53: 43258+ SOA? local. (23)
13:47:00.331459 IP 10.21.12.1.53 > 10.21.12.9.53078: 43258 Refused 0/0/0 (23)
13:47:00.334759 IP 10.21.12.9.37501 > 10.21.12.1.53: 43258+ SOA? local. (23)
13:47:00.334955 IP 10.21.12.1.53 > 10.21.12.9.37501: 43258 Refused 0/0/0 (23)
13:47:00.438593 IP 10.21.12.9.5353 > 224.0.0.251.5353: 0 A (QM)? A.local. (52)
13:47:00.438923 IP 10.21.12.9.5353 > 224.0.0.251.5353: 0 A (QM)? A.local. (52)
13:47:00.441040 IP 10.21.12.1.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0
(Cache flush) A 10.21.12.1 (62)
13:47:01.443349 IP 10.21.12.9.5353 > 224.0.0.251.5353: 0 A (QM)? A.local. (52)
13:47:01.443771 IP 10.21.12.9.5353 > 224.0.0.251.5353: 0 A (QM)? A.local. (52)
13:47:01.445513 IP 10.21.12.1.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0
(Cache flush) A 10.21.12.1 (62)
13:47:03.441963 IP 10.21.12.9.5353 > 224.0.0.251.5353: 0 A (QM)? A.local. (52)
13:47:03.442094 IP 10.21.12.9.5353 > 224.0.0.251.5353: 0 A (QM)? A.local. (52)
13:47:03.442747 IP 10.21.12.1.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0
(Cache flush) A 10.21.12.1 (62)

station:
13:46:54.483807 IP 10.21.12.9.53078 > 10.21.12.1.53: 43258+ SOA? local. (23)
13:46:54.486122 IP 10.21.12.1.53 > 10.21.12.9.53078: 43258 Refused 0/0/0 (23)
13:46:54.487262 IP 10.21.12.9.37501 > 10.21.12.1.53: 43258+ SOA? local. (23)
13:46:54.489352 IP 10.21.12.1.53 > 10.21.12.9.37501: 43258 Refused 0/0/0 (23)
13:46:54.590785 IP 10.21.12.9.5353 > 224.0.0.251.5353: 0 A (QM)? A.local. (52)
13:46:55.593347 IP 10.21.12.9.5353 > 224.0.0.251.5353: 0 A (QM)? A.local. (52)
13:46:57.594809 IP 10.21.12.9.5353 > 224.0.0.251.5353: 0 A (QM)? A.local. (52)

If all systems connect to an external AP, A and B use rtw88 or
rtl8821cu, pinging A from B and C by local name (hostname.local)
works, but this goes through normal DNS service, so it doesn't prove
anything. I did some experiments with iperf though.

If A and B are connected to an external AP this works:
A: iperf -s -B 224.0.0.55 -u
B: iperf -c 224.0.0.55 -u

B: iperf -s -B 224.0.0.55 -u
A: iperf -c 224.0.0.55 -u

if A is in AP mode and uses rtw88 OR rtl8821cu, iperf fails both in
server and client mode:
iperf -s -B 224.0.0.55 -u
multicast join failed: No such device
------------------------------------------------------------
Server listening on UDP port 5001
Binding to local address 224.0.0.55
Joining multicast group  224.0.0.55
Receiving 1470 byte datagrams
UDP buffer size:  176 KByte (default)
------------------------------------------------------------

iperf -c 224.0.0.55 -u
connect failed: Network is unreachable

If A is in AP mode and uses rtl8821cu, iperf between B (rtl8821cu) and
C works in both directions.
If A is in AP mode and uses rtw88, iperf between B (rtw88) and C
doesn't work (in both directions, no errors, just no traffic is
registered on the other side).

This indicates that there's something wrong with both sending and
receiving multicast packets in rtw88 in AP mode.

Please help me resolve this issue.

Cheers,
Marcin




[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux