[IPv4] Fix multicast address checking
authorMichael Brown <mcb30@etherboot.org>
Mon, 19 May 2008 15:19:46 +0000 (16:19 +0100)
committerMichael Brown <mcb30@etherboot.org>
Mon, 19 May 2008 15:19:46 +0000 (16:19 +0100)
From: Viswanath Krishnamurthy <viswa.krish@gmail.com>

The current ipv4 incorrectly checks the IP address for multicast address.
This causes valid IPv4 unicast address to be trated as multicast address

For e.g if the PXE/tftp server IP address is 192.168.4.XXX where XXX is
224 or greater, it gets treated as multicast address and a ethernet
multicast address is sent out on the wire causing timeouts

src/net/ipv4.c

index 591293b..82a13c3 100644 (file)
@@ -273,7 +273,7 @@ static int ipv4_ll_addr ( struct in_addr dest, struct in_addr src,
                memcpy ( ll_dest, ll_protocol->ll_broadcast,
                         ll_protocol->ll_addr_len );
                return 0;
-       } else if ( IN_MULTICAST ( dest.s_addr ) ) {
+       } else if ( IN_MULTICAST ( ntohl ( dest.s_addr ) ) ) {
                /* Special case: IPv4 multicast over Ethernet.  This
                 * code may need to be generalised once we find out
                 * what happens for other link layers.