Optimized for speed and size. Test against zero for both the inverted and non-inverted address. (old and new-style broadcasts)

This commit is contained in:
christiaans 2006-04-24 07:26:06 +00:00
parent 680afa4229
commit 7fc966dced

View File

@ -34,9 +34,12 @@
#include "lwip/inet.h"
#include "lwip/netif.h"
#define IP_ADDR_ANY_VALUE 0x00000000UL
#define IP_ADDR_BROADCAST_VALUE 0xffffffffUL
/* used by IP_ADDR_ANY and IP_ADDR_BROADCAST in ip_addr.h */
const struct ip_addr ip_addr_any = { 0x00000000UL };
const struct ip_addr ip_addr_broadcast = { 0xffffffffUL };
const struct ip_addr ip_addr_any = { IP_ADDR_ANY_VALUE };
const struct ip_addr ip_addr_broadcast = { IP_ADDR_BROADCAST_VALUE };
/* Determine if an address is a broadcast address on a network interface
*
@ -52,8 +55,8 @@ u8_t ip_addr_isbroadcast(struct ip_addr *addr, struct netif *netif)
addr2test = addr->addr;
/* all ones (broadcast) or all zeroes (old skool broadcast) */
if ((addr2test == ip_addr_broadcast.addr) ||
(addr2test == ip_addr_any.addr))
if ((~addr2test == IP_ADDR_ANY_VALUE) ||
(addr2test == IP_ADDR_ANY_VALUE))
return 1;
/* no broadcast support on this network interface? */
else if ((netif->flags & NETIF_FLAG_BROADCAST) == 0)
@ -67,7 +70,7 @@ u8_t ip_addr_isbroadcast(struct ip_addr *addr, struct netif *netif)
else if (ip_addr_netcmp(addr, &(netif->ip_addr), &(netif->netmask))
/* ...and host identifier bits are all ones? =>... */
&& ((addr2test & ~netif->netmask.addr) ==
(ip_addr_broadcast.addr & ~netif->netmask.addr)))
(IP_ADDR_BROADCAST_VALUE & ~netif->netmask.addr)))
/* => network broadcast address */
return 1;
else