ARP fix for multicast transmissions. (Patch by Robert Quattlebaum.)
This commit is contained in:
parent
a8848517dd
commit
e680276954
|
@ -54,7 +54,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of the uIP TCP/IP stack.
|
* This file is part of the uIP TCP/IP stack.
|
||||||
*
|
*
|
||||||
* $Id: uip_arp.c,v 1.6 2010/10/19 18:29:04 adamdunkels Exp $
|
* $Id: uip_arp.c,v 1.7 2010/10/24 22:29:39 adamdunkels Exp $
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -374,6 +374,14 @@ uip_arp_out(void)
|
||||||
/* First check if destination is a local broadcast. */
|
/* First check if destination is a local broadcast. */
|
||||||
if(uip_ipaddr_cmp(&IPBUF->destipaddr, &uip_broadcast_addr)) {
|
if(uip_ipaddr_cmp(&IPBUF->destipaddr, &uip_broadcast_addr)) {
|
||||||
memcpy(IPBUF->ethhdr.dest.addr, broadcast_ethaddr.addr, 6);
|
memcpy(IPBUF->ethhdr.dest.addr, broadcast_ethaddr.addr, 6);
|
||||||
|
} else if(IPBUF->destipaddr.u8[0] == 224) {
|
||||||
|
/* Multicast. */
|
||||||
|
IPBUF->ethhdr.dest.addr[0] = 0x01;
|
||||||
|
IPBUF->ethhdr.dest.addr[1] = 0x00;
|
||||||
|
IPBUF->ethhdr.dest.addr[2] = 0x5e;
|
||||||
|
IPBUF->ethhdr.dest.addr[3] = IPBUF->destipaddr.u8[1];
|
||||||
|
IPBUF->ethhdr.dest.addr[4] = IPBUF->destipaddr.u8[2];
|
||||||
|
IPBUF->ethhdr.dest.addr[5] = IPBUF->destipaddr.u8[3];
|
||||||
} else {
|
} else {
|
||||||
/* Check if the destination address is on the local network. */
|
/* Check if the destination address is on the local network. */
|
||||||
if(!uip_ipaddr_maskcmp(&IPBUF->destipaddr, &uip_hostaddr, &uip_netmask)) {
|
if(!uip_ipaddr_maskcmp(&IPBUF->destipaddr, &uip_hostaddr, &uip_netmask)) {
|
||||||
|
@ -430,3 +438,4 @@ uip_arp_out(void)
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue