Просмотр исходного кода

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

christiaans 20 лет назад
Родитель
Сommit
7fc966dced
1 измененных файлов с 8 добавлено и 5 удалено
  1. 8 5
      src/core/ipv4/ip_addr.c

+ 8 - 5
src/core/ipv4/ip_addr.c

@@ -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