|
|
3 years ago | |
|---|---|---|
| .. | ||
| main | 3 years ago | |
| CMakeLists.txt | 3 years ago | |
| README.md | 3 years ago | |
| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 |
|---|
This example shows how to use the IPV4 & IPV6 UDP multicast features via the BSD-style sockets interface.
The behaviour of the example is:
Open the project configuration menu (idf.py menuconfig).
Configure Wi-Fi or Ethernet under "Example Connection Configuration" menu. See "Establishing Wi-Fi or Ethernet Connection" section in examples/protocols/README.md for more details.
The "Example Configuration" menu allows you to configure the details of the example:
In IPV4 & IPV6 dual mode, an IPV6 socket is created and the "dual mode" options described in RFC4038 are used to bind it to the default address for both IPV4 & IPV6 and join both the configured IPV4 & IPV6 multicast groups. Otherwise, a single socket of the appropriate type is created.
The socket is always bound to the default address, so it will also receive unicast packets. If you only want to receive multicast packets for a particular address, bind() to that multicast address instead.
There are many host-side tools which can be used to interact with the UDP multicast example. One command line tool is socat which can send and receive many kinds of packets.
echo "Hi there, IPv4!" | socat STDIO UDP4-DATAGRAM:232.10.11.12:3333,ip-multicast-if=(host_ip_addr)
Replace 232.10.11.12:3333 with the IPV4 multicast address and port, and (host_ip_addr) with the host's IP address (used to find the interface to send the multicast packet on.)
socat STDIO UDP4-RECVFROM:3333,ip-add-membership=232.10.11.12:(host_ip_addr)
Replace :3333 and 232.10.11.12 with the port and IPV4 multicast address, respectively. Replace (host_ip_addr) with the host IP address, used to find the interface to listen on.
(The ,ip-add-membership=... clause may not be necessary, depending on your network configuration.)
echo "Hi there, IPV6!" | socat STDIO UDP6-DATAGRAM:[ff02::fc]:3333
Replace [ff02::fc]:3333 with the IPV6 multicast address and port, respectively.
At time of writing this is not possible without patching socat. Use a different tool or programming language to receive IPV6 multicast packets.
See the README.md file in the upper level 'examples' directory for general information about examples.