lwIP  2.0.2
Lightweight IP stack
IP address handling

Modules

 IPv4 only
 
 IPv6 only
 

Data Structures

struct  ip_addr
 

Macros

#define IP_IS_ANY_TYPE_VAL(ipaddr)   (IP_GET_TYPE(&ipaddr) == IPADDR_TYPE_ANY)
 
#define IPADDR_ANY_TYPE_INIT   { { { { 0ul, 0ul, 0ul, 0ul } } }, IPADDR_TYPE_ANY }
 
#define ip_addr_copy(dest, src)
 
#define ip_addr_set(dest, src)
 
#define ip_addr_set_ipaddr(dest, src)   ip_addr_set(dest, src)
 
#define ip_addr_set_zero(ipaddr)
 
#define ip_addr_set_any(is_ipv6, ipaddr)
 
#define ip_addr_set_loopback(is_ipv6, ipaddr)
 
#define ip_addr_set_hton(dest, src)
 
#define ip_addr_get_network(target, host, netmask)
 
#define ip_addr_netcmp(addr1, addr2, mask)
 
#define ip_addr_cmp(addr1, addr2)
 
#define ip_addr_isany(ipaddr)
 
#define ip_addr_isany_val(ipaddr)
 
#define ip_addr_isbroadcast(ipaddr, netif)
 
#define ip_addr_ismulticast(ipaddr)
 
#define ip_addr_isloopback(ipaddr)
 
#define ip_addr_islinklocal(ipaddr)
 
#define ipaddr_ntoa(addr)
 
#define ipaddr_ntoa_r(addr, buf, buflen)
 
#define IPADDR_STRLEN_MAX   IP6ADDR_STRLEN_MAX
 
#define ip4_2_ipv4_mapped_ipv6(ip6addr, ip4addr)
 
#define unmap_ipv4_mapped_ipv6(ip4addr, ip6addr)   (ip4addr)->addr = (ip6addr)->addr[3];
 
#define IP_ANY_TYPE   (&ip_addr_any_type)
 

Typedefs

typedef struct ip_addr ip_addr_t
 

Enumerations

enum  lwip_ip_addr_type { IPADDR_TYPE_V4 = 0U, IPADDR_TYPE_V6 = 6U, IPADDR_TYPE_ANY = 46U }
 

Functions

int ipaddr_aton (const char *cp, ip_addr_t *addr)
 

Detailed Description

Macro Definition Documentation

◆ ip4_2_ipv4_mapped_ipv6

#define ip4_2_ipv4_mapped_ipv6 (   ip6addr,
  ip4addr 
)
Value:
do { \
(ip6addr)->addr[3] = (ip4addr)->addr; \
(ip6addr)->addr[2] = PP_HTONL(0x0000FFFFUL); \
(ip6addr)->addr[1] = 0; \
(ip6addr)->addr[0] = 0; } while(0);

◆ ip_addr_cmp

#define ip_addr_cmp (   addr1,
  addr2 
)
Value:
((IP_GET_TYPE(addr1) != IP_GET_TYPE(addr2)) ? 0 : (IP_IS_V6_VAL(*(addr1)) ? \
ip6_addr_cmp(ip_2_ip6(addr1), ip_2_ip6(addr2)) : \
ip4_addr_cmp(ip_2_ip4(addr1), ip_2_ip4(addr2))))
#define ip_2_ip4(ipaddr)
Definition: ip_addr.h:117
#define ip_2_ip6(ipaddr)
Definition: ip_addr.h:113
#define IP_IS_V6_VAL(ipaddr)
Definition: ip_addr.h:97

◆ ip_addr_copy

#define ip_addr_copy (   dest,
  src 
)
Value:
do{ IP_SET_TYPE_VAL(dest, IP_GET_TYPE(&src)); if(IP_IS_V6_VAL(src)){ \
ip6_addr_copy(*ip_2_ip6(&(dest)), *ip_2_ip6(&(src))); }else{ \
ip4_addr_copy(*ip_2_ip4(&(dest)), *ip_2_ip4(&(src))); }}while(0)
#define ip_2_ip4(ipaddr)
Definition: ip_addr.h:117
#define ip_2_ip6(ipaddr)
Definition: ip_addr.h:113
#define IP_IS_V6_VAL(ipaddr)
Definition: ip_addr.h:97

◆ ip_addr_get_network

#define ip_addr_get_network (   target,
  host,
  netmask 
)
Value:
do{if(IP_IS_V6(host)){ \
ip4_addr_set_zero(ip_2_ip4(target)); IP_SET_TYPE(target, IPADDR_TYPE_V6); } else { \
ip4_addr_get_network(ip_2_ip4(target), ip_2_ip4(host), ip_2_ip4(netmask)); IP_SET_TYPE(target, IPADDR_TYPE_V4); }}while(0)
#define ip_2_ip4(ipaddr)
Definition: ip_addr.h:117
Definition: ip_addr.h:58
#define IP_IS_V6(ipaddr)
Definition: ip_addr.h:101
Definition: ip_addr.h:56

◆ ip_addr_isany

#define ip_addr_isany (   ipaddr)
Value:
((IP_IS_V6(ipaddr)) ? \
ip6_addr_isany(ip_2_ip6(ipaddr)) : \
ip4_addr_isany(ip_2_ip4(ipaddr)))
#define ip_2_ip4(ipaddr)
Definition: ip_addr.h:117
#define IP_IS_V6(ipaddr)
Definition: ip_addr.h:101
#define ip_2_ip6(ipaddr)
Definition: ip_addr.h:113

◆ ip_addr_isany_val

#define ip_addr_isany_val (   ipaddr)
Value:
((IP_IS_V6_VAL(ipaddr)) ? \
ip6_addr_isany_val(*ip_2_ip6(&(ipaddr))) : \
ip4_addr_isany_val(*ip_2_ip4(&(ipaddr))))
#define ip_2_ip4(ipaddr)
Definition: ip_addr.h:117
#define ip_2_ip6(ipaddr)
Definition: ip_addr.h:113
#define IP_IS_V6_VAL(ipaddr)
Definition: ip_addr.h:97

◆ ip_addr_isbroadcast

#define ip_addr_isbroadcast (   ipaddr,
  netif 
)
Value:
((IP_IS_V6(ipaddr)) ? \
0 : \
ip4_addr_isbroadcast(ip_2_ip4(ipaddr), netif))
#define ip_2_ip4(ipaddr)
Definition: ip_addr.h:117
#define IP_IS_V6(ipaddr)
Definition: ip_addr.h:101
Definition: netif.h:225

◆ ip_addr_islinklocal

#define ip_addr_islinklocal (   ipaddr)
Value:
((IP_IS_V6(ipaddr)) ? \
ip6_addr_islinklocal(ip_2_ip6(ipaddr)) : \
ip4_addr_islinklocal(ip_2_ip4(ipaddr)))
#define ip_2_ip4(ipaddr)
Definition: ip_addr.h:117
#define IP_IS_V6(ipaddr)
Definition: ip_addr.h:101
#define ip_2_ip6(ipaddr)
Definition: ip_addr.h:113

◆ ip_addr_isloopback

#define ip_addr_isloopback (   ipaddr)
Value:
((IP_IS_V6(ipaddr)) ? \
ip6_addr_isloopback(ip_2_ip6(ipaddr)) : \
#define ip4_addr_isloopback(ipaddr)
Definition: ip4_addr.h:142
#define ip_2_ip4(ipaddr)
Definition: ip_addr.h:117
#define IP_IS_V6(ipaddr)
Definition: ip_addr.h:101
#define ip_2_ip6(ipaddr)
Definition: ip_addr.h:113

◆ ip_addr_ismulticast

#define ip_addr_ismulticast (   ipaddr)
Value:
((IP_IS_V6(ipaddr)) ? \
ip6_addr_ismulticast(ip_2_ip6(ipaddr)) : \
ip4_addr_ismulticast(ip_2_ip4(ipaddr)))
#define ip_2_ip4(ipaddr)
Definition: ip_addr.h:117
#define IP_IS_V6(ipaddr)
Definition: ip_addr.h:101
#define ip_2_ip6(ipaddr)
Definition: ip_addr.h:113

◆ ip_addr_netcmp

#define ip_addr_netcmp (   addr1,
  addr2,
  mask 
)
Value:
((IP_IS_V6(addr1) && IP_IS_V6(addr2)) ? \
0 : \
ip4_addr_netcmp(ip_2_ip4(addr1), ip_2_ip4(addr2), mask))
#define ip_2_ip4(ipaddr)
Definition: ip_addr.h:117
#define IP_IS_V6(ipaddr)
Definition: ip_addr.h:101
#define ip4_addr_netcmp(addr1, addr2, mask)
Definition: ip4_addr.h:164

◆ ip_addr_set

#define ip_addr_set (   dest,
  src 
)
Value:
do{ IP_SET_TYPE(dest, IP_GET_TYPE(src)); if(IP_IS_V6(src)){ \
ip6_addr_set(ip_2_ip6(dest), ip_2_ip6(src)); }else{ \
ip4_addr_set(ip_2_ip4(dest), ip_2_ip4(src)); }}while(0)
#define ip_2_ip4(ipaddr)
Definition: ip_addr.h:117
#define IP_IS_V6(ipaddr)
Definition: ip_addr.h:101
#define ip_2_ip6(ipaddr)
Definition: ip_addr.h:113

◆ ip_addr_set_any

#define ip_addr_set_any (   is_ipv6,
  ipaddr 
)
Value:
do{if(is_ipv6){ \
ip6_addr_set_any(ip_2_ip6(ipaddr)); IP_SET_TYPE(ipaddr, IPADDR_TYPE_V6); }else{ \
ip4_addr_set_any(ip_2_ip4(ipaddr)); IP_SET_TYPE(ipaddr, IPADDR_TYPE_V4); }}while(0)
#define ip_2_ip4(ipaddr)
Definition: ip_addr.h:117
Definition: ip_addr.h:58
Definition: ip_addr.h:56
#define ip_2_ip6(ipaddr)
Definition: ip_addr.h:113

◆ ip_addr_set_hton

#define ip_addr_set_hton (   dest,
  src 
)
Value:
do{if(IP_IS_V6(src)){ \
ip6_addr_set_hton(ip_2_ip6(ipaddr), (src)); IP_SET_TYPE(dest, IPADDR_TYPE_V6); }else{ \
ip4_addr_set_hton(ip_2_ip4(ipaddr), (src)); IP_SET_TYPE(dest, IPADDR_TYPE_V4); }}while(0)
#define ip_2_ip4(ipaddr)
Definition: ip_addr.h:117
Definition: ip_addr.h:58
#define IP_IS_V6(ipaddr)
Definition: ip_addr.h:101
Definition: ip_addr.h:56
#define ip_2_ip6(ipaddr)
Definition: ip_addr.h:113

◆ ip_addr_set_ipaddr

#define ip_addr_set_ipaddr (   dest,
  src 
)    ip_addr_set(dest, src)

◆ ip_addr_set_loopback

#define ip_addr_set_loopback (   is_ipv6,
  ipaddr 
)
Value:
do{if(is_ipv6){ \
ip6_addr_set_loopback(ip_2_ip6(ipaddr)); IP_SET_TYPE(ipaddr, IPADDR_TYPE_V6); }else{ \
ip4_addr_set_loopback(ip_2_ip4(ipaddr)); IP_SET_TYPE(ipaddr, IPADDR_TYPE_V4); }}while(0)
#define ip_2_ip4(ipaddr)
Definition: ip_addr.h:117
Definition: ip_addr.h:58
Definition: ip_addr.h:56
#define ip_2_ip6(ipaddr)
Definition: ip_addr.h:113

◆ ip_addr_set_zero

#define ip_addr_set_zero (   ipaddr)
Value:
do{ \
ip6_addr_set_zero(ip_2_ip6(ipaddr)); IP_SET_TYPE(ipaddr, 0); }while(0)
#define ip_2_ip6(ipaddr)
Definition: ip_addr.h:113

◆ IP_ANY_TYPE

#define IP_ANY_TYPE   (&ip_addr_any_type)

◆ IP_IS_ANY_TYPE_VAL

#define IP_IS_ANY_TYPE_VAL (   ipaddr)    (IP_GET_TYPE(&ipaddr) == IPADDR_TYPE_ANY)

◆ IPADDR_ANY_TYPE_INIT

#define IPADDR_ANY_TYPE_INIT   { { { { 0ul, 0ul, 0ul, 0ul } } }, IPADDR_TYPE_ANY }

◆ ipaddr_ntoa

#define ipaddr_ntoa (   addr)
Value:
(((addr) == NULL) ? "NULL" : \
((IP_IS_V6(addr)) ? ip6addr_ntoa(ip_2_ip6(addr)) : ip4addr_ntoa(ip_2_ip4(addr))))
#define ip_2_ip4(ipaddr)
Definition: ip_addr.h:117
#define IP_IS_V6(ipaddr)
Definition: ip_addr.h:101
char * ip4addr_ntoa(const ip4_addr_t *addr)
Definition: ip4_addr.c:277
char * ip6addr_ntoa(const ip6_addr_t *addr)
Definition: ip6_addr.c:175
#define ip_2_ip6(ipaddr)
Definition: ip_addr.h:113

◆ ipaddr_ntoa_r

#define ipaddr_ntoa_r (   addr,
  buf,
  buflen 
)
Value:
(((addr) == NULL) ? "NULL" : \
((IP_IS_V6(addr)) ? ip6addr_ntoa_r(ip_2_ip6(addr), buf, buflen) : ip4addr_ntoa_r(ip_2_ip4(addr), buf, buflen)))
#define ip_2_ip4(ipaddr)
Definition: ip_addr.h:117
#define IP_IS_V6(ipaddr)
Definition: ip_addr.h:101
char * ip4addr_ntoa_r(const ip4_addr_t *addr, char *buf, int buflen)
Definition: ip4_addr.c:293
char * ip6addr_ntoa_r(const ip6_addr_t *addr, char *buf, int buflen)
Definition: ip6_addr.c:191
#define ip_2_ip6(ipaddr)
Definition: ip_addr.h:113

◆ IPADDR_STRLEN_MAX

#define IPADDR_STRLEN_MAX   IP6ADDR_STRLEN_MAX

◆ unmap_ipv4_mapped_ipv6

#define unmap_ipv4_mapped_ipv6 (   ip4addr,
  ip6addr 
)    (ip4addr)->addr = (ip6addr)->addr[3];

Typedef Documentation

◆ ip_addr_t

typedef struct ip_addr ip_addr_t

A union struct for both IP version's addresses. ATTENTION: watch out for its size when adding IPv6 address scope!

Enumeration Type Documentation

◆ lwip_ip_addr_type

IP address types for use in ip_addr_t.type member.

See also
tcp_new_ip_type(), udp_new_ip_type(), raw_new_ip_type().
Enumerator
IPADDR_TYPE_V4 

IPv4

IPADDR_TYPE_V6 

IPv6

IPADDR_TYPE_ANY 

IPv4+IPv6 ("dual-stack")

Function Documentation

◆ ipaddr_aton()

int ipaddr_aton ( const char *  cp,
ip_addr_t addr 
)

Convert IP address string (both versions) to numeric. The version is auto-detected from the string.

Parameters
cpIP address string to convert
addrconversion result is stored here
Returns
1 on success, 0 on error