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: 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).
This issue isn't constrained to iOS 14 but also previous versions.
Post
Replies
Boosts
Views
Activity
Hi Team,
We seem to be having issues with the multicast in our app from the time we upgraded ourselves to iOS 14. So since the privacy aspects have changed as part of the iOS 14, we included the key "Privacy - Local Network Usage Description" in the info.plist. Also, as part of our development profile I added the capability of network extensions to create an entitlement. Since we do not add Bonjour and use a 3rd party library called commoncpp for socket connections I didn't add an array key to info.plist for Bonjour.
So even after doing this, our app seems to intermittently get the packets but it is not consistent. Mostly, we do not see the data coming through but when it starts to work it will keep on working on multiple relaunches until we delete the app and reinstall it.
Also, one weird thing that I saw was that i tested with iOS 14 on these devices: iPad Pro 12.5, iPad Pro 9.7, iPhone XR and iPhone 8 Plus. So my understanding is since I have added the key in info.plist for the it should shoot that permission request pop-up for the first time the app looks for local network. But, I just saw the pop-up appearing for the iPhone 8 Plus and not on other devices. (These testing I have done is all done using the developer certificates and I have not tested using the TestFlight.)
Let me know if you need some more info regarding this and thanks in advance for your support.