Hello,
I'm developing an application using zephyr, openthread, udp, and nfc, targeting the nrf52840 (currently developing on nrf52840dk pca10056).
I initially developed and tested the application using zephyr open source (not NRF Connect SDK). The application works as expected on zephyr 2.4.
I recently ported the application to the NRF Connect SDK and upon doing this, I noticed an issue with udp multicast delivery to mesh-local addresses on the NRF Connect SDK when using the Zephyr POSIX API.
The relevant code in my application is loosely similar to the code from Zephyr's 'echo-server' sample, where it opens datagram socket and calls bind(), then calls recvfrom().
Before migrating to NRF Connect SDK and using Zephyr only, all udp multicast messages sent to FF02::1 and FF03::1 were delivered to my application through bsd sockets api, however after migrating to NRF Connect SDK, the application no longer receives udp multicast that are sent to FF03::1, but only those that are sent to FF02::1. The application is configured as a thread FTD so should receive any datagrams with destination FF03::1.
From the CLI, all ping to FF02::1 and FF03::1 work normally between all devices. Using openthread's udp cli commands to bind to a port, the device receives all FF02::1 and FF03::1 broadcasts as expected. However again my application does not receive the FF03::1, only FF02::1 broadcasts when binding through the bsd sockets api. I have not tried using the openthread udp api directly in my application. I suspect that would work, given the results when using the openthread udp commands through openthread cli.
It seems the datagrams with dest FF03::1 are received through openthread networking but not through posix api to my application, indicating a possible configuration issue or other issue with hand-off from openthread to zephyr networking. Perhaps a socket option or other KConfig option I am missing that is needed for NRF Connect SDK Zephyr to receive these datagrams? I am confused because the same code works on vanilla Zephyr project, but not here.
If I erase my DK and reflash the same code using Zephyr with no NRF Connect SDK, the application behaves normally again.
What am I missing here? Any help is greatly appreciated :)