-
Notifications
You must be signed in to change notification settings - Fork 387
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
[Multicast] Support IGMPv3 leave action #3389
Conversation
d87b248
to
c125719
Compare
Codecov Report
@@ Coverage Diff @@
## main #3389 +/- ##
==========================================
- Coverage 62.11% 53.80% -8.31%
==========================================
Files 269 375 +106
Lines 26852 51498 +24646
==========================================
+ Hits 16680 27711 +11031
- Misses 8334 21376 +13042
- Partials 1838 2411 +573
Flags with carried forward coverage won't be shown. Click here to find out more.
|
c125719
to
699d80e
Compare
klog.InfoS("Received IGMPv3 Report message", "group", mgroup.String(), "interface", iface.PodName) | ||
klog.InfoS("Received IGMPv3 Report message", "group", mgroup.String(), "interface", iface.InterfaceName, "recordType", gr.Type, "sourceCount", gr.NumberOfSources) | ||
evtType := groupJoin | ||
if gr.Type == protocol.IGMPIsIn && gr.NumberOfSources == 0 { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think it should be gr.Type == protocol.IGMPToIn
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do you mean we don't check gr.NumberOfSources? I think it is necessary, from rfc 3376 (IGMPv3), recordType==IsIn and source list is empty are required at the same time. https://datatracker.ietf.org/doc/html/rfc3376
Previous versions of IGMP did not support source filters and had a
simpler service interface consisting of Join and Leave operations to
enable and disable reception of a given multicast address (from *all*
sources) on a given interface. The equivalent operations in the new
service interface follow:
The Join operation is equivalent to
IPMulticastListen ( socket, interface, multicast-address,
EXCLUDE, {} )
and the Leave operation is equivalent to:
IPMulticastListen ( socket, interface, multicast-address,
INCLUDE, {} )
where {} is an empty source list.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
My bad. I forgot to add gr.NumberOfSources == 0
. So the correct logic should be?
if gr.Type == protocol.IGMPToIn && gr.NumberOfSources == 0 {
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should it check if it's MODE_IS_INCLUDE
or CHANGE_TO_INCLUDE_MODE
? or we handle response only?
https://datatracker.ietf.org/doc/html/rfc3376#section-4.2.12
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think your concern is correct, I would add support for CHANGE_TO_INCLUDE_MODE.
klog.InfoS("Received IGMPv3 Report message", "group", mgroup.String(), "interface", iface.PodName) | ||
klog.InfoS("Received IGMPv3 Report message", "group", mgroup.String(), "interface", iface.InterfaceName, "recordType", gr.Type, "sourceCount", gr.NumberOfSources) | ||
evtType := groupJoin | ||
if gr.Type == protocol.IGMPIsIn && gr.NumberOfSources == 0 { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should it check if it's MODE_IS_INCLUDE
or CHANGE_TO_INCLUDE_MODE
? or we handle response only?
https://datatracker.ietf.org/doc/html/rfc3376#section-4.2.12
In commit message: |
IGMPv3 doesn't have an explicit message to describe a member leaving a multicast group. Instead, IGMPv3 report message is used, but the group record has an empty "include" sources. So Antrea Agent checks the group record type and source number with IGMPv3 report message, and picks out the groups which the member expects to leave. Signed-off-by: wenyingd <wenyingd@vmware.com>
/test-all Windows and IPv6 are not relevant, skip those tests. |
@wenyingd there is no update pushed |
699d80e
to
48c9d7c
Compare
My bad, seems network issue, changes are pushed |
/test-all Windows and IPv6 are not relevant, skip those tests. |
/test-multicast-e2e |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
/test-multicast-e2e |
LGTM |
/test-multicast-e2e |
2 similar comments
/test-multicast-e2e |
/test-multicast-e2e |
The failed cases in multicast e2e is about TestAntreaPolicy, not the patch relevant. Multicast dedicated cases are passed |
IGMPv3 doesn't have an explicit message to describe a member leaving a
multicast group. Instead, IGMPv3 report message is used, but the group
record has an empty "include" sources. So Antrea Agent checks the group
record type and source number with IGMPv3 report message, and picks out
the groups which the member expects to leave.
Fixes #3388
Signed-off-by: wenyingd wenyingd@vmware.com