mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2024-08-25 23:52:51 +00:00
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:
parent
680afa4229
commit
7fc966dced
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user