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

feat: Add MLDv2 query response support #1009

Merged
merged 3 commits into from
Nov 27, 2024

Conversation

bergzand
Copy link
Contributor

@bergzand bergzand commented Nov 8, 2024

This add support for responding to MLDv2 Listener Queries. Both general queries and multicast specific queries are supported. The implementation tries to match the igmpv2 implementation where the spec allows it.

  • Querier's robustness variable is not handled
  • Multicast address and source specific queries are treated as regular multicast address specific queries.
  • Maximum Response Delays above 32768 are not calculated to spec.
  • Delay between the query and the report is not random, but a simple fixed delay proportional to the Maximum Response Code

I've tested this via the multicast6 example with a Linux bridge device configured with multicast_querier enabled. Multicast traffic outside the subscriptions (such as neighbor solicitations for other solicited node multicast addresses) are filtered at the bridge, and subscribed addresses are forwarded to the tap device as expected.
Unfortunately this also means only the general listener queries are tested, I'm not sure how to test multicast address specific queries at this point.

Open questions

  • Any automated tests that can and should be added to this pr?
  • @thvdveld Is there anything in this code that needs some exception on ieee802.15.4 links?

@bergzand bergzand force-pushed the pr/mldv2queryresp branch 3 times, most recently from 39323c4 to 612118c Compare November 8, 2024 15:51
This add support for responding to MLDv2 Listener Queries. Both general
queries and multicast specific queries are supported.
@thvdveld
Copy link
Contributor

Thank you for adding this!

Delay between the query and the report is not random, but a simple fixed delay proportional to the Maximum Response Code.

InterfaceInner holds a random number generator which you can use I think.

Any automated tests that can and should be added to this pr?

Maybe you could add something in src/iface/interface/tests/ipv6.rs? You could check if process_mldv2 reacts correctly to an incoming packet?

Is there anything in this code that needs some exception on ieee802.15.4 links?

I don't think so. It should behave similarly. Unless I missed an RFC.

@bergzand
Copy link
Contributor Author

InterfaceInner holds a random number generator which you can use I think.

That makes things simple, using that for the random delay now

Maybe you could add something in src/iface/interface/tests/ipv6.rs? You could check if process_mldv2 reacts correctly to an incoming packet?

added a new test to that file. I think it could be merged into the existing multicast test function, but I'll leave the decision whether that makes sense to a reviewer.

@Dirbaio Dirbaio added this pull request to the merge queue Nov 27, 2024
Merged via the queue into smoltcp-rs:main with commit 33bf798 Nov 27, 2024
10 checks passed
@bergzand bergzand deleted the pr/mldv2queryresp branch December 5, 2024 22:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

3 participants