Hi Team,
We are using BSD sockets for the multicast. Also, we do not use Bonjour and use something called commoncpp for socket connections. This is what we observed :
Test Configurations:
Various Apple iOS devices (iPad, iPhones)
iOS version: 13.7 and 14.1 tested (older iOS show similar behavior)
iOS Application that receives multicast data (note: entitlement obtained for iOS 14+)
Network IGMP Querier (managed L2 switch) is configured to use IGMP V2 for queries {SSIDIGMPV2QUERIER}
Network IGMP Querier (managed L2 switch) is configured to use IGMP V1 for queries {SSIDIGMPV1QUERIER}
Scenario 1 (App works):
1. Forget all SSIDs except the desired SSID {SSIDIGMPV2QUERIER}
2. Power off the iOS device
3. Power on the iOS device
4. Ensure the desired SSID {SSIDIGMPV2QUERIER} is connected
5. Launch the app
6. Confirm iOS selects IGMP v2 for IGMP reports
(app works as expected, data is received)
Scenario 2 (App does not work, multicast only initially received)
1. Create a test SSID with an IGMP V1 querier {SSIDIGMPV1QUERIER}
2. Connect to this network, ensure iOS selects IGMP v1 for IGMP reports
3. Disconnect from the IGMP v1 network, connect to the IGMP v2 network {SSIDIGMPV2QUERIER}
4. Launch the app
5. Confirm iOS make a single IGMP v1 report when the app is opened, no further reports made after
6. Wait for "Group Membership Interval" [RFC3375, section 8.4] to elapse (time with no IGMP report for the querier to stop sending the multicast data to iOS)
7. Confirm multicast data no longer received by the app
8. Wait for Older Version Querier Present Timeout [RFC3375, sections 7.2.1 / 8.12] to elapse, iOS should upgrade to IGMP v2 but does not.
9. Disable WiFi, enable Wifi, iOS still uses IGMP v1 reports
10. Kill the app / reopen the app, multicast received initially then times out.
11. Only way found to get out of this state is to power cycle the iOS device
Questions:
We are using BSD sockets for the multicast. Also, we do not use Bonjour and use something called commoncpp for socket connections. This is what we observed :
Test Configurations:
Various Apple iOS devices (iPad, iPhones)
iOS version: 13.7 and 14.1 tested (older iOS show similar behavior)
iOS Application that receives multicast data (note: entitlement obtained for iOS 14+)
Network IGMP Querier (managed L2 switch) is configured to use IGMP V2 for queries {SSIDIGMPV2QUERIER}
Network IGMP Querier (managed L2 switch) is configured to use IGMP V1 for queries {SSIDIGMPV1QUERIER}
Scenario 1 (App works):
1. Forget all SSIDs except the desired SSID {SSIDIGMPV2QUERIER}
2. Power off the iOS device
3. Power on the iOS device
4. Ensure the desired SSID {SSIDIGMPV2QUERIER} is connected
5. Launch the app
6. Confirm iOS selects IGMP v2 for IGMP reports
(app works as expected, data is received)
Scenario 2 (App does not work, multicast only initially received)
1. Create a test SSID with an IGMP V1 querier {SSIDIGMPV1QUERIER}
2. Connect to this network, ensure iOS selects IGMP v1 for IGMP reports
3. Disconnect from the IGMP v1 network, connect to the IGMP v2 network {SSIDIGMPV2QUERIER}
4. Launch the app
5. Confirm iOS make a single IGMP v1 report when the app is opened, no further reports made after
6. Wait for "Group Membership Interval" [RFC3375, section 8.4] to elapse (time with no IGMP report for the querier to stop sending the multicast data to iOS)
7. Confirm multicast data no longer received by the app
8. Wait for Older Version Querier Present Timeout [RFC3375, sections 7.2.1 / 8.12] to elapse, iOS should upgrade to IGMP v2 but does not.
9. Disable WiFi, enable Wifi, iOS still uses IGMP v1 reports
10. Kill the app / reopen the app, multicast received initially then times out.
11. Only way found to get out of this state is to power cycle the iOS device
Questions:
Why does iOS seem to never "upgrade" to IGMP v2/v3 when no IGMP v1 querier is present per the IGMP RFC
Is there any application-level way to force IGMP version in iOS or trigger periodic IGMP reports when in this condition?
Is there a rationale for why iOS ignores IGMP v2 queries when operating in IGMP v1 mode (it seems like an artificial restriction to me that will break things with no obvious benefit that I can see).