feat(lwip): add multicast packet support for UDP

This commit is contained in:
Zhang Jun Hao
2018-09-10 20:15:41 +08:00
parent 0982011e37
commit 61c53d1e1e

View File

@ -189,6 +189,9 @@ udp_input(struct pbuf *p, struct netif *inp)
struct udp_pcb *uncon_pcb;
u16_t src, dest;
u8_t broadcast;
#if ESP_LWIP
u8_t multicast;
#endif
u8_t for_us = 0;
LWIP_UNUSED_ARG(inp);
@ -214,6 +217,11 @@ udp_input(struct pbuf *p, struct netif *inp)
/* is broadcast packet ? */
broadcast = ip_addr_isbroadcast(ip_current_dest_addr(), ip_current_netif());
#if ESP_LWIP
/* is multicast packet ? */
multicast = ip_addr_ismulticast(ip_current_dest_addr());
#endif
LWIP_DEBUGF(UDP_DEBUG, ("udp_input: received datagram of length %"U16_F"\n", p->tot_len));
/* convert src and dest ports to host byte order */
@ -246,7 +254,11 @@ udp_input(struct pbuf *p, struct netif *inp)
/* compare PCB local addr+port to UDP destination addr+port */
if ((pcb->local_port == dest) &&
(udp_input_local_match(pcb, inp, broadcast) != 0)) {
(udp_input_local_match(pcb, inp, broadcast) != 0
#if ESP_LWIP
|| multicast
#endif
)) {
if (((pcb->flags & UDP_FLAGS_CONNECTED) == 0) &&
((uncon_pcb == NULL)
#if SO_REUSE
@ -261,7 +273,11 @@ udp_input(struct pbuf *p, struct netif *inp)
/* compare PCB remote addr+port to UDP source addr+port */
if ((pcb->remote_port == src) &&
(ip_addr_isany_val(pcb->remote_ip) ||
ip_addr_cmp(&pcb->remote_ip, ip_current_src_addr()))) {
ip_addr_cmp(&pcb->remote_ip, ip_current_src_addr())
#if ESP_LWIP
|| multicast
#endif
)) {
/* the first fully matching PCB */
if (prev != NULL) {
/* move the pcb to the front of udp_pcbs so that is