Browse Source

Merge commit '32708c0a8b140efb545cc35101ee5fdeca6d6489' of github.com:joseph-henry/lwip into STABLE-2_1_x

STABLE-2_1_x
Xadhoom 5 years ago
parent
commit
1bf7e011ca
  1. 3
      src/api/sockets.c
  2. 15
      src/core/ipv6/nd6.c
  3. 6
      src/include/lwip/arch.h
  4. 2
      src/include/lwip/errno.h
  5. 15
      src/include/lwip/ip6_addr.h

3
src/api/sockets.c

@ -39,6 +39,8 @@
#include "lwip/opt.h" #include "lwip/opt.h"
extern int zts_errno;
#if LWIP_SOCKET /* don't build if not configured for use in lwipopts.h */ #if LWIP_SOCKET /* don't build if not configured for use in lwipopts.h */
#include "lwip/sockets.h" #include "lwip/sockets.h"
@ -281,6 +283,7 @@ static struct lwip_select_cb *select_cb_list;
#define sock_set_errno(sk, e) do { \ #define sock_set_errno(sk, e) do { \
const int sockerr = (e); \ const int sockerr = (e); \
set_errno(sockerr); \ set_errno(sockerr); \
zts_errno = sockerr; \
} while (0) } while (0)
/* Forward declaration of some functions */ /* Forward declaration of some functions */

15
src/core/ipv6/nd6.c

@ -1644,9 +1644,20 @@ nd6_is_prefix_in_netif(const ip6_addr_t *ip6addr, struct netif *netif)
* addresses (from autoconfiguration) have no implied subnet assignment, and * addresses (from autoconfiguration) have no implied subnet assignment, and
* are thus effectively /128 assignments. See RFC 5942 for more on this. */ * are thus effectively /128 assignments. See RFC 5942 for more on this. */
for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) { for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) {
if (ip6_addr_isvalid(netif_ip6_addr_state(netif, i)) && /*if (ip6_addr_isvalid(netif_ip6_addr_state(netif, i)) &&
netif_ip6_addr_isstatic(netif, i) && netif_ip6_addr_isstatic(netif, i) &&
ip6_addr_netcmp(ip6addr, netif_ip6_addr(netif, i))) { ip6_addr_netcmp(ip6addr, netif_ip6_addr(netif, i))) {*/
int prefix_match = 0;
if (ip6_addr_is_zt_6plane(ip6addr)) {
prefix_match = ip6_addr_6plane_cmp(ip6addr, netif_ip6_addr(netif, i));
}
if (ip6_addr_is_zt_rfc4193(ip6addr)) {
prefix_match = ip6_addr_rfc4193_cmp(ip6addr, netif_ip6_addr(netif, i));
}
if (!prefix_match) {
prefix_match = ip6_addr_netcmp(ip6addr, netif_ip6_addr(netif, i));
}
if (ip6_addr_isvalid(netif_ip6_addr_state(netif, i)) && prefix_match) {
return 1; return 1;
} }
} }

6
src/include/lwip/arch.h

@ -199,14 +199,8 @@ typedef uintptr_t mem_ptr_t;
#include <unistd.h> #include <unistd.h>
#endif #endif
#else /* SSIZE_MAX */ #else /* SSIZE_MAX */
#ifndef _MSC_VER
typedef int ssize_t; typedef int ssize_t;
#define SSIZE_MAX INT_MAX #define SSIZE_MAX INT_MAX
#else
#include <BaseTsd.h>
typedef SSIZE_T ssize_t;
#define SSIZE_MAX INT_MAX
#endif
#endif /* SSIZE_MAX */ #endif /* SSIZE_MAX */
/* some maximum values needed in lwip code */ /* some maximum values needed in lwip code */

2
src/include/lwip/errno.h

@ -191,7 +191,7 @@ extern "C" {
#else /* LWIP_ERRNO_STDINCLUDE */ #else /* LWIP_ERRNO_STDINCLUDE */
/* Define LWIP_ERRNO_INCLUDE to an equivalent of <errno.h> to include the error defines here */ /* Define LWIP_ERRNO_INCLUDE to an equivalent of <errno.h> to include the error defines here */
#ifdef LWIP_ERRNO_INCLUDE #ifdef LWIP_ERRNO_INCLUDE
#include LWIP_ERRNO_INCLUDE #include <errno.h>
#endif /* LWIP_ERRNO_INCLUDE */ #endif /* LWIP_ERRNO_INCLUDE */
#endif /* LWIP_ERRNO_STDINCLUDE */ #endif /* LWIP_ERRNO_STDINCLUDE */

15
src/include/lwip/ip6_addr.h

@ -160,6 +160,21 @@ typedef struct ip6_addr ip6_addr_t;
#define ip6_addr_netcmp(addr1, addr2) (ip6_addr_netcmp_zoneless((addr1), (addr2)) && \ #define ip6_addr_netcmp(addr1, addr2) (ip6_addr_netcmp_zoneless((addr1), (addr2)) && \
ip6_addr_cmp_zone((addr1), (addr2))) ip6_addr_cmp_zone((addr1), (addr2)))
/* Determine if an address *could* be a ZeroTier 6PLANE/Ad-hoc address */
#define ip6_addr_is_zt_6plane(addr1) (((addr1)->addr[0] & PP_HTONL(0xff000000UL)) == PP_HTONL(0xfc000000UL))
/* Compare first 40 bits of address (ff + first 32 bits of nwid XOR'd with second 32 bits of nwid) */
#define ip6_addr_6plane_cmp(addr1, addr2) (((addr1)->addr[0] == (addr2)->addr[0]) && \
((addr1)->addr[1] & PP_HTONL(0xff000000UL)) == ((addr2)->addr[1] & PP_HTONL(0xff000000UL)))
/* Determine if an address *could* be an RFC4193 address */
#define ip6_addr_is_zt_rfc4193(addr1) (((addr1)->addr[0] & PP_HTONL(0xff000000UL)) == PP_HTONL(0xfd000000UL))
/* Compare first 72 bits of address (fd + 64 bits of nwid) */
#define ip6_addr_rfc4193_cmp(addr1, addr2) (((addr1)->addr[0] == (addr2)->addr[0]) && \
((addr1)->addr[1] == (addr2)->addr[1]) && \
((addr1)->addr[2] & PP_HTONL(0xff000000UL)) == ((addr2)->addr[2] & PP_HTONL(0xff000000UL)))
/* Exact-host comparison *after* ip6_addr_netcmp() succeeded, for efficiency. */ /* Exact-host comparison *after* ip6_addr_netcmp() succeeded, for efficiency. */
#define ip6_addr_nethostcmp(addr1, addr2) (((addr1)->addr[2] == (addr2)->addr[2]) && \ #define ip6_addr_nethostcmp(addr1, addr2) (((addr1)->addr[2] == (addr2)->addr[2]) && \
((addr1)->addr[3] == (addr2)->addr[3])) ((addr1)->addr[3] == (addr2)->addr[3]))

Loading…
Cancel
Save