Classes | Defines | Typedefs | Functions | Variables

alexb/lib/lwip/contrib/src/include/ipv4/lwip/ip_addr.h File Reference

#include "lwip/opt.h"
#include "lwip/def.h"

Classes

struct  ip_addr
struct  ip_addr_packed
struct  ip_addr2

Defines

#define IP_ADDR_ANY   ((ip_addr_t *)&ip_addr_any)
 IP_ADDR_ can be used as a fixed IP address for the wildcard and the broadcast address.
#define IP_ADDR_BROADCAST   ((ip_addr_t *)&ip_addr_broadcast)
#define IPADDR_NONE   ((u32_t)0xffffffffUL)
 255.255.255.255
#define IPADDR_LOOPBACK   ((u32_t)0x7f000001UL)
 127.0.0.1
#define IPADDR_ANY   ((u32_t)0x00000000UL)
 0.0.0.0
#define IPADDR_BROADCAST   ((u32_t)0xffffffffUL)
 255.255.255.255
#define IP_CLASSA(a)   ((((u32_t)(a)) & 0x80000000UL) == 0)
#define IP_CLASSA_NET   0xff000000
#define IP_CLASSA_NSHIFT   24
#define IP_CLASSA_HOST   (0xffffffff & ~IP_CLASSA_NET)
#define IP_CLASSA_MAX   128
#define IP_CLASSB(a)   ((((u32_t)(a)) & 0xc0000000UL) == 0x80000000UL)
#define IP_CLASSB_NET   0xffff0000
#define IP_CLASSB_NSHIFT   16
#define IP_CLASSB_HOST   (0xffffffff & ~IP_CLASSB_NET)
#define IP_CLASSB_MAX   65536
#define IP_CLASSC(a)   ((((u32_t)(a)) & 0xe0000000UL) == 0xc0000000UL)
#define IP_CLASSC_NET   0xffffff00
#define IP_CLASSC_NSHIFT   8
#define IP_CLASSC_HOST   (0xffffffff & ~IP_CLASSC_NET)
#define IP_CLASSD(a)   (((u32_t)(a) & 0xf0000000UL) == 0xe0000000UL)
#define IP_CLASSD_NET   0xf0000000
#define IP_CLASSD_NSHIFT   28
#define IP_CLASSD_HOST   0x0fffffff
#define IP_MULTICAST(a)   IP_CLASSD(a)
#define IP_EXPERIMENTAL(a)   (((u32_t)(a) & 0xf0000000UL) == 0xf0000000UL)
#define IP_BADCLASS(a)   (((u32_t)(a) & 0xf0000000UL) == 0xf0000000UL)
#define IP_LOOPBACKNET   127
#define IP4_ADDR(ipaddr, a, b, c, d)
 Set an IP address given by the four byte-parts.
#define IPADDR2_COPY(dest, src)   SMEMCPY(dest, src, sizeof(ip_addr_t))
 MEMCPY-like copying of IP addresses where addresses are known to be 16-bit-aligned if the port is correctly configured (so a port could define this to copying 2 u16_t's) - no NULL-pointer-checking needed.
#define ip_addr_copy(dest, src)   ((dest).addr = (src).addr)
 Copy IP address - faster than ip_addr_set: no NULL check.
#define ip_addr_set(dest, src)
 Safely copy one IP address to another (src may be NULL).
#define ip_addr_set_zero(ipaddr)   ((ipaddr)->addr = 0)
 Set complete address to zero.
#define ip_addr_set_any(ipaddr)   ((ipaddr)->addr = IPADDR_ANY)
 Set address to IPADDR_ANY (no need for htonl()).
#define ip_addr_set_loopback(ipaddr)   ((ipaddr)->addr = PP_HTONL(IPADDR_LOOPBACK))
 Set address to loopback address.
#define ip_addr_set_hton(dest, src)
 Safely copy one IP address to another and change byte order from host- to network-order.
#define ip4_addr_set_u32(dest_ipaddr, src_u32)   ((dest_ipaddr)->addr = (src_u32))
 IPv4 only: set the IP address given as an u32_t.
#define ip4_addr_get_u32(src_ipaddr)   ((src_ipaddr)->addr)
 IPv4 only: get the IP address as an u32_t.
#define ip_addr_get_network(target, host, netmask)   ((target)->addr = ((host)->addr) & ((netmask)->addr))
 Get the network address by combining host address with netmask.
#define ip_addr_netcmp(addr1, addr2, mask)
 Determine if two address are on the same network.
#define ip_addr_cmp(addr1, addr2)   ((addr1)->addr == (addr2)->addr)
#define ip_addr_isany(addr1)   ((addr1) == NULL || (addr1)->addr == IPADDR_ANY)
#define ip_addr_isbroadcast(ipaddr, netif)   ip4_addr_isbroadcast((ipaddr)->addr, (netif))
#define ip_addr_netmask_valid(netmask)   ip4_addr_netmask_valid((netmask)->addr)
#define ip_addr_ismulticast(addr1)   (((addr1)->addr & PP_HTONL(0xf0000000UL)) == PP_HTONL(0xe0000000UL))
#define ip_addr_islinklocal(addr1)   (((addr1)->addr & PP_HTONL(0xffff0000UL)) == PP_HTONL(0xa9fe0000UL))
#define ip_addr_debug_print(debug, ipaddr)
#define ip4_addr1(ipaddr)   (((u8_t*)(ipaddr))[0])
#define ip4_addr2(ipaddr)   (((u8_t*)(ipaddr))[1])
#define ip4_addr3(ipaddr)   (((u8_t*)(ipaddr))[2])
#define ip4_addr4(ipaddr)   (((u8_t*)(ipaddr))[3])
#define ip4_addr1_16(ipaddr)   ((u16_t)ip4_addr1(ipaddr))
#define ip4_addr2_16(ipaddr)   ((u16_t)ip4_addr2(ipaddr))
#define ip4_addr3_16(ipaddr)   ((u16_t)ip4_addr3(ipaddr))
#define ip4_addr4_16(ipaddr)   ((u16_t)ip4_addr4(ipaddr))
#define ip_ntoa(ipaddr)   ipaddr_ntoa(ipaddr)
 For backwards compatibility.

Typedefs

typedef typedefPACK_STRUCT_END
struct ip_addr 
ip_addr_t
 ip_addr_t uses a struct for convenience only, so that the same defines can operate both on ip_addr_t as well as on ip_addr_p_t.
typedef struct ip_addr_packed ip_addr_p_t

Functions

u8_t ip4_addr_isbroadcast (u32_t addr, const struct netif *netif)
 Determine if an address is a broadcast address on a network interface.
u8_t ip4_addr_netmask_valid (u32_t netmask)
 Checks if a netmask is valid (starting with ones, then only zeros).
u32_t ipaddr_addr (const char *cp)
 Ascii internet address interpretation routine.
int ipaddr_aton (const char *cp, ip_addr_t *addr)
 Check whether "cp" is a valid ascii representation of an Internet address and convert to a binary address.
char * ipaddr_ntoa (const ip_addr_t *addr)
 returns ptr to static buffer; not reentrant!
char * ipaddr_ntoa_r (const ip_addr_t *addr, char *buf, int buflen)
 Same as ipaddr_ntoa, but reentrant since a user-supplied buffer is used.

Variables

PACK_STRUCT_BEGIN struct
ip_addr_packed 
PACK_STRUCT_STRUCT
const ip_addr_t ip_addr_any
const ip_addr_t ip_addr_broadcast

Define Documentation

#define IP4_ADDR (   ipaddr,
  a,
  b,
  c,
  d 
)
Value:
(ipaddr)->addr = ((u32_t)((a) & 0xff) << 24) | \
                         ((u32_t)((b) & 0xff) << 16) | \
                         ((u32_t)((c) & 0xff) << 8)  | \
                          (u32_t)((d) & 0xff)

Set an IP address given by the four byte-parts.

#define ip4_addr1 (   ipaddr  )     (((u8_t*)(ipaddr))[0])
#define ip4_addr1_16 (   ipaddr  )     ((u16_t)ip4_addr1(ipaddr))
#define ip4_addr2 (   ipaddr  )     (((u8_t*)(ipaddr))[1])
#define ip4_addr2_16 (   ipaddr  )     ((u16_t)ip4_addr2(ipaddr))
#define ip4_addr3 (   ipaddr  )     (((u8_t*)(ipaddr))[2])
#define ip4_addr3_16 (   ipaddr  )     ((u16_t)ip4_addr3(ipaddr))
#define ip4_addr4 (   ipaddr  )     (((u8_t*)(ipaddr))[3])
#define ip4_addr4_16 (   ipaddr  )     ((u16_t)ip4_addr4(ipaddr))
#define ip4_addr_get_u32 (   src_ipaddr  )     ((src_ipaddr)->addr)

IPv4 only: get the IP address as an u32_t.

#define ip4_addr_set_u32 (   dest_ipaddr,
  src_u32 
)    ((dest_ipaddr)->addr = (src_u32))

IPv4 only: set the IP address given as an u32_t.

#define IP_ADDR_ANY   ((ip_addr_t *)&ip_addr_any)

IP_ADDR_ can be used as a fixed IP address for the wildcard and the broadcast address.

#define IP_ADDR_BROADCAST   ((ip_addr_t *)&ip_addr_broadcast)
#define ip_addr_cmp (   addr1,
  addr2 
)    ((addr1)->addr == (addr2)->addr)
#define ip_addr_copy (   dest,
  src 
)    ((dest).addr = (src).addr)

Copy IP address - faster than ip_addr_set: no NULL check.

#define ip_addr_debug_print (   debug,
  ipaddr 
)
Value:
LWIP_DEBUGF(debug, ("%"U16_F".%"U16_F".%"U16_F".%"U16_F,             \
                      ipaddr != NULL ? ip4_addr1_16(ipaddr) : 0,       \
                      ipaddr != NULL ? ip4_addr2_16(ipaddr) : 0,       \
                      ipaddr != NULL ? ip4_addr3_16(ipaddr) : 0,       \
                      ipaddr != NULL ? ip4_addr4_16(ipaddr) : 0))
#define ip_addr_get_network (   target,
  host,
  netmask 
)    ((target)->addr = ((host)->addr) & ((netmask)->addr))

Get the network address by combining host address with netmask.

#define ip_addr_isany (   addr1  )     ((addr1) == NULL || (addr1)->addr == IPADDR_ANY)
#define ip_addr_isbroadcast (   ipaddr,
  netif 
)    ip4_addr_isbroadcast((ipaddr)->addr, (netif))
#define ip_addr_islinklocal (   addr1  )     (((addr1)->addr & PP_HTONL(0xffff0000UL)) == PP_HTONL(0xa9fe0000UL))
#define ip_addr_ismulticast (   addr1  )     (((addr1)->addr & PP_HTONL(0xf0000000UL)) == PP_HTONL(0xe0000000UL))
#define ip_addr_netcmp (   addr1,
  addr2,
  mask 
)
Value:
(((addr1)->addr & \
                                              (mask)->addr) == \
                                             ((addr2)->addr & \
                                              (mask)->addr))

Determine if two address are on the same network.

  • addr1 IP address 1
  • addr2 IP address 2
  • mask network identifier mask
    Returns:
    !0 if the network identifiers of both address match
#define ip_addr_netmask_valid (   netmask  )     ip4_addr_netmask_valid((netmask)->addr)
#define ip_addr_set (   dest,
  src 
)
Value:
((dest)->addr = \
                                    ((src) == NULL ? 0 : \
                                    (src)->addr))

Safely copy one IP address to another (src may be NULL).

#define ip_addr_set_any (   ipaddr  )     ((ipaddr)->addr = IPADDR_ANY)

Set address to IPADDR_ANY (no need for htonl()).

#define ip_addr_set_hton (   dest,
  src 
)
Value:
((dest)->addr = \
                               ((src) == NULL ? 0:\
                               htonl((src)->addr)))

Safely copy one IP address to another and change byte order from host- to network-order.

#define ip_addr_set_loopback (   ipaddr  )     ((ipaddr)->addr = PP_HTONL(IPADDR_LOOPBACK))

Set address to loopback address.

#define ip_addr_set_zero (   ipaddr  )     ((ipaddr)->addr = 0)

Set complete address to zero.

#define IP_BADCLASS (   a  )     (((u32_t)(a) & 0xf0000000UL) == 0xf0000000UL)
#define IP_CLASSA (   a  )     ((((u32_t)(a)) & 0x80000000UL) == 0)
#define IP_CLASSA_HOST   (0xffffffff & ~IP_CLASSA_NET)
#define IP_CLASSA_MAX   128
#define IP_CLASSA_NET   0xff000000
#define IP_CLASSA_NSHIFT   24
#define IP_CLASSB (   a  )     ((((u32_t)(a)) & 0xc0000000UL) == 0x80000000UL)
#define IP_CLASSB_HOST   (0xffffffff & ~IP_CLASSB_NET)
#define IP_CLASSB_MAX   65536
#define IP_CLASSB_NET   0xffff0000
#define IP_CLASSB_NSHIFT   16
#define IP_CLASSC (   a  )     ((((u32_t)(a)) & 0xe0000000UL) == 0xc0000000UL)
#define IP_CLASSC_HOST   (0xffffffff & ~IP_CLASSC_NET)
#define IP_CLASSC_NET   0xffffff00
#define IP_CLASSC_NSHIFT   8
#define IP_CLASSD (   a  )     (((u32_t)(a) & 0xf0000000UL) == 0xe0000000UL)
#define IP_CLASSD_HOST   0x0fffffff
#define IP_CLASSD_NET   0xf0000000
#define IP_CLASSD_NSHIFT   28
#define IP_EXPERIMENTAL (   a  )     (((u32_t)(a) & 0xf0000000UL) == 0xf0000000UL)
#define IP_LOOPBACKNET   127
#define IP_MULTICAST (   a  )     IP_CLASSD(a)
#define ip_ntoa (   ipaddr  )     ipaddr_ntoa(ipaddr)

For backwards compatibility.

#define IPADDR2_COPY (   dest,
  src 
)    SMEMCPY(dest, src, sizeof(ip_addr_t))

MEMCPY-like copying of IP addresses where addresses are known to be 16-bit-aligned if the port is correctly configured (so a port could define this to copying 2 u16_t's) - no NULL-pointer-checking needed.

#define IPADDR_ANY   ((u32_t)0x00000000UL)

0.0.0.0

#define IPADDR_BROADCAST   ((u32_t)0xffffffffUL)

255.255.255.255

#define IPADDR_LOOPBACK   ((u32_t)0x7f000001UL)

127.0.0.1

#define IPADDR_NONE   ((u32_t)0xffffffffUL)

255.255.255.255


Typedef Documentation

typedef struct ip_addr_packed ip_addr_p_t
typedef typedefPACK_STRUCT_END struct ip_addr ip_addr_t

ip_addr_t uses a struct for convenience only, so that the same defines can operate both on ip_addr_t as well as on ip_addr_p_t.


Function Documentation

u8_t ip4_addr_isbroadcast ( u32_t  addr,
const struct netif netif 
)

Determine if an address is a broadcast address on a network interface.

Parameters:
addr address to be checked
netif the network interface against which the address is checked
Returns:
returns non-zero if the address is a broadcast address
u8_t ip4_addr_netmask_valid ( u32_t  netmask  ) 

Checks if a netmask is valid (starting with ones, then only zeros).

Parameters:
netmask the IPv4 netmask to check (in network byte order!)
Returns:
1 if the netmask is valid, 0 if it is not
u32_t ipaddr_addr ( const char *  cp  ) 

Ascii internet address interpretation routine.

The value returned is in network order.

Parameters:
cp IP address in ascii represenation (e.g. "127.0.0.1")
Returns:
ip address in network order
int ipaddr_aton ( const char *  cp,
ip_addr_t addr 
)

Check whether "cp" is a valid ascii representation of an Internet address and convert to a binary address.

Returns 1 if the address is valid, 0 if not. This replaces inet_addr, the return value from which cannot distinguish between failure and a local broadcast address.

Parameters:
cp IP address in ascii represenation (e.g. "127.0.0.1")
addr pointer to which to save the ip address in network order
Returns:
1 if cp could be converted to addr, 0 on failure
char* ipaddr_ntoa ( const ip_addr_t addr  ) 

returns ptr to static buffer; not reentrant!

returns ptr to static buffer; not reentrant!

returns ptr to static buffer; not reentrant!

Parameters:
addr ip address in network order to convert
Returns:
pointer to a global static (!) buffer that holds the ASCII represenation of addr
char* ipaddr_ntoa_r ( const ip_addr_t addr,
char *  buf,
int  buflen 
)

Same as ipaddr_ntoa, but reentrant since a user-supplied buffer is used.

Parameters:
addr ip address in network order to convert
buf target buffer where the string is stored
buflen length of buf
Returns:
either pointer to buf which now holds the ASCII representation of addr or NULL if buf was too small

Variable Documentation

PACK_STRUCT_BEGIN struct ip_addr2 PACK_STRUCT_STRUCT
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines