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/inet.h"
#include "lwip/netif.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 */ /* 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_any = { IP_ADDR_ANY_VALUE };
const struct ip_addr ip_addr_broadcast = { 0xffffffffUL }; const struct ip_addr ip_addr_broadcast = { IP_ADDR_BROADCAST_VALUE };
/* Determine if an address is a broadcast address on a network interface /* 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; addr2test = addr->addr;
/* all ones (broadcast) or all zeroes (old skool broadcast) */ /* all ones (broadcast) or all zeroes (old skool broadcast) */
if ((addr2test == ip_addr_broadcast.addr) || if ((~addr2test == IP_ADDR_ANY_VALUE) ||
(addr2test == ip_addr_any.addr)) (addr2test == IP_ADDR_ANY_VALUE))
return 1; return 1;
/* no broadcast support on this network interface? */ /* no broadcast support on this network interface? */
else if ((netif->flags & NETIF_FLAG_BROADCAST) == 0) 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)) else if (ip_addr_netcmp(addr, &(netif->ip_addr), &(netif->netmask))
/* ...and host identifier bits are all ones? =>... */ /* ...and host identifier bits are all ones? =>... */
&& ((addr2test & ~netif->netmask.addr) == && ((addr2test & ~netif->netmask.addr) ==
(ip_addr_broadcast.addr & ~netif->netmask.addr))) (IP_ADDR_BROADCAST_VALUE & ~netif->netmask.addr)))
/* => network broadcast address */ /* => network broadcast address */
return 1; return 1;
else else