Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

kernel: bridge: Implement MLD Querier wake-up calls / Android bug workaround #2076

Merged
merged 1 commit into from
Oct 8, 2020

Conversation

T-X
Copy link
Contributor

@T-X T-X commented Jul 5, 2020

Implement a configurable MLD Querier wake-up calls "feature" which
works around a widely spread Android bug in connection with IGMP/MLD
snooping.

Currently there are mobile devices (e.g. Android) which are not able
to receive and respond to MLD Queries reliably because the Wifi driver
filters a lot of ICMPv6 when the device is asleep - including
MLD. This in turn breaks IPv6 communication when MLD Snooping is
enabled. However there is one ICMPv6 type which is allowed to pass and
which can be used to wake up the mobile device: ICMPv6 Echo Requests.

If this bridge is the selected MLD Querier then setting
"multicast_wakeupcall" to a number n greater than 0 will send n
ICMPv6 Echo Requests to each host behind this port to wake
them up with each MLD Query. Upon receiving a matching ICMPv6 Echo
Reply an MLD Query with a unicast ethernet destination will be sent
to the specific host(s).

Link: https://issuetracker.google.com/issues/149630944
Link: #1832

Signed-off-by: Linus Lüssing <[email protected]>

@T-X T-X force-pushed the bridge-mcast-wakeupcall branch from 74f67ff to 2a39c08 Compare July 6, 2020 11:49
@rotanid rotanid added 4. has: upstream-patches This changeset backports upstream patches 0. type: bugfix This changeset fixes abug 0. type: enhancement The changeset is an enhancement labels Jul 13, 2020
@rotanid rotanid added 2. status: waiting-on-review Awaiting review from the assignee but also interested parties. 5. needs: testing Testing of the changes is necessary 2. status: blocked Marked as blocked because it's waiting on something labels Jul 13, 2020
@rotanid
Copy link
Member

rotanid commented Jul 13, 2020

thanks. i've added some labels, including the "blocked" label which stays until this has been merged upstream, as we don't like to carry patches "forever" as you know

@rotanid
Copy link
Member

rotanid commented Aug 15, 2020

@T-X have you submitted the patches upstream, maybe you can put the links in the initial text?
at least in the google thread i can't find the patches, i did not search in Linux Kernel patchwork...

@T-X T-X force-pushed the bridge-mcast-wakeupcall branch from 2a39c08 to 8138342 Compare August 29, 2020 18:12
@T-X
Copy link
Contributor Author

T-X commented Aug 29, 2020

Changelog v2:

  • rebased to master
  • fixed the ICMPv6 header check, was a no-op due to a typo ("if (ipv6_mc_check_icmpv6 < 0)" vs. "if (ipv6_mc_check_icmpv6(skb) < 0)" ) in br_multicast_wakeupcall_check()

@T-X
Copy link
Contributor Author

T-X commented Aug 29, 2020

@rotanid I've submitted the patch to the Linux kernel mailing lists as an RFC here, but no one was really happy about it.

And I couldn't really spot an alternative suggestion which everyone would be happy about either.

So not sure if that means we'd have to deal with this issue on our own for now. Or if I should retry submitting that Linux bridge patch to OpenWrt later.

@rotanid
Copy link
Member

rotanid commented Aug 29, 2020

@T-X generally speaking we have a policy to not carry patches which aren't upstream, if we wanted to make exceptions to this i think we should allow every maintainer a veto right or at least it would need to be a majority call.

@mweinelt
Copy link
Contributor

I see the usability benefit of carrying these patches, as well as the downside with having to rebase it every once in a while. I want to have it and will gladly switch to a better solution when one comes by.

@blocktrron
Copy link
Member

I would propose to go with these patches for now, in order to give it a substantial amount of testing.

We can still drop them later on, if rebasing becomes unbearable or a better solution is worked out.

@mweinelt
Copy link
Contributor

mweinelt commented Oct 6, 2020

@T-X Please rebase, we have no routing patches and this series is introducing patchset 0002.
My bad, I'm wrong.

…karound

Implement a configurable MLD Querier wake-up calls "feature" which
works around a widely spread Android bug in connection with IGMP/MLD
snooping.

Currently there are mobile devices (e.g. Android) which are not able
to receive and respond to MLD Queries reliably because the Wifi driver
filters a lot of ICMPv6 when the device is asleep - including
MLD. This in turn breaks IPv6 communication when MLD Snooping is
enabled. However there is one ICMPv6 type which is allowed to pass and
which can be used to wake up the mobile device: ICMPv6 Echo Requests.

If this bridge is the selected MLD Querier then setting
"multicast_wakeupcall" to a number n greater than 0 will send n
ICMPv6 Echo Requests to each host behind this port to wake
them up with each MLD Query. Upon receiving a matching ICMPv6 Echo
Reply an MLD Query with a unicast ethernet destination will be sent
to the specific host(s).

Link: https://issuetracker.google.com/issues/149630944
Link: freifunk-gluon#1832

Signed-off-by: Linus Lüssing <[email protected]>
@T-X T-X force-pushed the bridge-mcast-wakeupcall branch from 8138342 to b2add48 Compare October 8, 2020 19:46
@T-X
Copy link
Contributor Author

T-X commented Oct 8, 2020

Rebase to current master done (no changes).

@mweinelt mweinelt merged commit bdadb77 into freifunk-gluon:master Oct 8, 2020
krombel added a commit to freifunkMUC/site-ffm that referenced this pull request Dec 1, 2020
…karound

Implement a configurable MLD Querier wake-up calls "feature" which
works around a widely spread Android bug in connection with IGMP/MLD
snooping.

Currently there are mobile devices (e.g. Android) which are not able
to receive and respond to MLD Queries reliably because the Wifi driver
filters a lot of ICMPv6 when the device is asleep - including
MLD. This in turn breaks IPv6 communication when MLD Snooping is
enabled. However there is one ICMPv6 type which is allowed to pass and
which can be used to wake up the mobile device: ICMPv6 Echo Requests.

If this bridge is the selected MLD Querier then setting
"multicast_wakeupcall" to a number n greater than 0 will send n
ICMPv6 Echo Requests to each host behind this port to wake
them up with each MLD Query. Upon receiving a matching ICMPv6 Echo
Reply an MLD Query with a unicast ethernet destination will be sent
to the specific host(s).

Link: https://issuetracker.google.com/issues/149630944
Link: #1832

Signed-off-by: Linus Lüssing <[email protected]>

Backport of freifunk-gluon/gluon#2076
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
0. type: bugfix This changeset fixes abug 0. type: enhancement The changeset is an enhancement 2. status: blocked Marked as blocked because it's waiting on something 2. status: waiting-on-review Awaiting review from the assignee but also interested parties. 4. has: upstream-patches This changeset backports upstream patches 5. needs: testing Testing of the changes is necessary
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Android does not respond to multicast listener queries in power saving mode
4 participants