diff --git a/mongoose.c b/mongoose.c index 6d5d3893..81e5adaf 100644 --- a/mongoose.c +++ b/mongoose.c @@ -7850,9 +7850,11 @@ static void rx_udp(struct mg_tcpip_if *ifp, struct pkt *pkt) { struct mg_connection *c = getpeer(ifp->mgr, pkt, true); if (c == NULL) { // No UDP listener on this port. Should send ICMP, but keep silent. - } else if (c != NULL) { + } else { c->rem.port = pkt->udp->sport; c->rem.ip = pkt->ip->src; + struct connstate *s = (struct connstate *) (c + 1); + memcpy(s->mac, pkt->eth->src, sizeof(s->mac)); if (c->recv.len >= MG_MAX_RECV_SIZE) { mg_error(c, "max_recv_buf_size reached"); } else if (c->recv.size - c->recv.len < pkt->pay.len && diff --git a/src/tcpip/tcpip.c b/src/tcpip/tcpip.c index 49ac3958..40d9f18e 100644 --- a/src/tcpip/tcpip.c +++ b/src/tcpip/tcpip.c @@ -404,9 +404,11 @@ static void rx_udp(struct mg_tcpip_if *ifp, struct pkt *pkt) { struct mg_connection *c = getpeer(ifp->mgr, pkt, true); if (c == NULL) { // No UDP listener on this port. Should send ICMP, but keep silent. - } else if (c != NULL) { + } else { c->rem.port = pkt->udp->sport; c->rem.ip = pkt->ip->src; + struct connstate *s = (struct connstate *) (c + 1); + memcpy(s->mac, pkt->eth->src, sizeof(s->mac)); if (c->recv.len >= MG_MAX_RECV_SIZE) { mg_error(c, "max_recv_buf_size reached"); } else if (c->recv.size - c->recv.len < pkt->pay.len &&