feat(coap): Add define "COAP_IPV6" to enable/disable IPv6 function

This commit is contained in:
Dong Heng
2018-10-10 19:25:47 +08:00
parent f8b212de5f
commit 919a5bf9ea
5 changed files with 14 additions and 0 deletions

View File

@ -62,7 +62,9 @@ typedef struct coap_address_t {
struct sockaddr sa; struct sockaddr sa;
struct sockaddr_storage st; struct sockaddr_storage st;
struct sockaddr_in sin; struct sockaddr_in sin;
#if COAP_IPV6
struct sockaddr_in6 sin6; struct sockaddr_in6 sin6;
#endif
} addr; } addr;
} coap_address_t; } coap_address_t;
@ -79,10 +81,12 @@ _coap_address_isany_impl(const coap_address_t *a) {
switch (a->addr.sa.sa_family) { switch (a->addr.sa.sa_family) {
case AF_INET: case AF_INET:
return a->addr.sin.sin_addr.s_addr == INADDR_ANY; return a->addr.sin.sin_addr.s_addr == INADDR_ANY;
#if COAP_IPV6
case AF_INET6: case AF_INET6:
return memcmp(&in6addr_any, return memcmp(&in6addr_any,
&a->addr.sin6.sin6_addr, &a->addr.sin6.sin6_addr,
sizeof(in6addr_any)) == 0; sizeof(in6addr_any)) == 0;
#endif
default: default:
; ;
} }

View File

@ -28,10 +28,12 @@ coap_address_equals(const coap_address_t *a, const coap_address_t *b) {
a->addr.sin.sin_port == b->addr.sin.sin_port && a->addr.sin.sin_port == b->addr.sin.sin_port &&
memcmp(&a->addr.sin.sin_addr, &b->addr.sin.sin_addr, memcmp(&a->addr.sin.sin_addr, &b->addr.sin.sin_addr,
sizeof(struct in_addr)) == 0; sizeof(struct in_addr)) == 0;
#if COAP_IPV6
case AF_INET6: case AF_INET6:
return a->addr.sin6.sin6_port == b->addr.sin6.sin6_port && return a->addr.sin6.sin6_port == b->addr.sin6.sin6_port &&
memcmp(&a->addr.sin6.sin6_addr, &b->addr.sin6.sin6_addr, memcmp(&a->addr.sin6.sin6_addr, &b->addr.sin6.sin6_addr,
sizeof(struct in6_addr)) == 0; sizeof(struct in6_addr)) == 0;
#endif
default: /* fall through and signal error */ default: /* fall through and signal error */
; ;
} }
@ -45,8 +47,10 @@ int coap_is_mcast(const coap_address_t *a) {
switch (a->addr.sa.sa_family) { switch (a->addr.sa.sa_family) {
case AF_INET: case AF_INET:
return IN_MULTICAST(ntohl(a->addr.sin.sin_addr.s_addr)); return IN_MULTICAST(ntohl(a->addr.sin.sin_addr.s_addr));
#if COAP_IPV6
case AF_INET6: case AF_INET6:
return IN6_IS_ADDR_MULTICAST(&a->addr.sin6.sin6_addr); return IN6_IS_ADDR_MULTICAST(&a->addr.sin6.sin6_addr);
#endif
default: /* fall through and signal error */ default: /* fall through and signal error */
; ;
} }

View File

@ -170,6 +170,7 @@ coap_print_addr(const struct coap_address_t *addr, unsigned char *buf, size_t le
addrptr = &addr->addr.sin.sin_addr; addrptr = &addr->addr.sin.sin_addr;
port = ntohs(addr->addr.sin.sin_port); port = ntohs(addr->addr.sin.sin_port);
break; break;
#if COAP_IPV6
case AF_INET6: case AF_INET6:
if (len < 7) /* do not proceed if buffer is even too short for [::]:0 */ if (len < 7) /* do not proceed if buffer is even too short for [::]:0 */
return 0; return 0;
@ -180,6 +181,7 @@ coap_print_addr(const struct coap_address_t *addr, unsigned char *buf, size_t le
port = ntohs(addr->addr.sin6.sin6_port); port = ntohs(addr->addr.sin6.sin6_port);
break; break;
#endif
default: default:
memcpy(buf, "(unknown address type)", min(22, len)); memcpy(buf, "(unknown address type)", min(22, len));
return min(22, len); return min(22, len);

View File

@ -508,12 +508,14 @@ coap_transaction_id(const coap_address_t *peer, const coap_pdu_t *pdu,
coap_hash((const unsigned char *)&peer->addr.sin.sin_addr, coap_hash((const unsigned char *)&peer->addr.sin.sin_addr,
sizeof(peer->addr.sin.sin_addr), h); sizeof(peer->addr.sin.sin_addr), h);
break; break;
#if COAP_IPV6
case AF_INET6: case AF_INET6:
coap_hash((const unsigned char *)&peer->addr.sin6.sin6_port, coap_hash((const unsigned char *)&peer->addr.sin6.sin6_port,
sizeof(peer->addr.sin6.sin6_port), h); sizeof(peer->addr.sin6.sin6_port), h);
coap_hash((const unsigned char *)&peer->addr.sin6.sin6_addr, coap_hash((const unsigned char *)&peer->addr.sin6.sin6_addr,
sizeof(peer->addr.sin6.sin6_addr), h); sizeof(peer->addr.sin6.sin6_addr), h);
break; break;
#endif
default: default:
return; return;
} }

View File

@ -36,6 +36,8 @@
#define CUSTOM_COAP_NETWORK_SEND #define CUSTOM_COAP_NETWORK_SEND
#define CUSTOM_COAP_NETWORK_READ #define CUSTOM_COAP_NETWORK_READ
#define COAP_IPV6 LWIP_IPV6
#endif #endif
#endif /* COAP_CONFIG_POSIX_H_ */ #endif /* COAP_CONFIG_POSIX_H_ */