addr.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2015 Martine Lenders <mlenders@inf.fu-berlin.de>
3  *
4  * This file is subject to the terms and conditions of the GNU Lesser
5  * General Public License v2.1. See the file LICENSE in the top level
6  * directory for more details.
7  */
8 
20 #ifndef NET_IPV4_ADDR_H
21 #define NET_IPV4_ADDR_H
22 
23 #include <stdbool.h>
24 #include <stdint.h>
25 #include <stddef.h>
26 
27 #include "byteorder.h"
28 
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32 
36 #define IPV4_ADDR_MAX_STR_LEN (sizeof("255.255.255.255"))
37 
48 #define IPV4_ADDR_INIT(a, b, c, d) { .u8 = {a, b, c, d} }
49 
53 typedef union {
54  uint8_t u8[4];
56 } ipv4_addr_t;
57 
67 static inline bool ipv4_addr_equal(const ipv4_addr_t *a, const ipv4_addr_t *b)
68 {
69  return (a->u32.u32 == b->u32.u32);
70 }
71 
84 static inline bool ipv4_addr_is_multicast(const ipv4_addr_t *addr)
85 {
86  return (addr->u8[0] >= 0xE0 && addr->u8[0] <= 0xEF);
87 }
88 
101 char *ipv4_addr_to_str(char *result, const ipv4_addr_t *addr, uint8_t result_len);
102 
114 ipv4_addr_t *ipv4_addr_from_str(ipv4_addr_t *result, const char *addr);
115 
130 ipv4_addr_t *ipv4_addr_from_buf(ipv4_addr_t *result, const char *addr,
131  size_t addr_len);
132 
138 void ipv4_addr_print(const ipv4_addr_t *addr);
139 
140 #ifdef __cplusplus
141 }
142 #endif
143 
144 #endif /* NET_IPV4_ADDR_H */
Functions to work with different byte orders.
void ipv4_addr_print(const ipv4_addr_t *addr)
Print IPv4 address to stdout.
char * ipv4_addr_to_str(char *result, const ipv4_addr_t *addr, uint8_t result_len)
Converts an IPv4 address to its string representation.
ipv4_addr_t * ipv4_addr_from_buf(ipv4_addr_t *result, const char *addr, size_t addr_len)
Converts an IPv4 address from a buffer of characters to a byte-represented IPv4 address.
static bool ipv4_addr_is_multicast(const ipv4_addr_t *addr)
Check if addr is a multicast address.
Definition: addr.h:84
static bool ipv4_addr_equal(const ipv4_addr_t *a, const ipv4_addr_t *b)
Checks if two IPv4 addresses are equal.
Definition: addr.h:67
ipv4_addr_t * ipv4_addr_from_str(ipv4_addr_t *result, const char *addr)
Converts an IPv4 address string representation to a byte-represented IPv4 address.
A 32 bit integer in big endian aka network byte order.
Definition: byteorder.h:84
uint32_t u32
32 bit representation
Definition: byteorder.h:85
Data type to represent an IPv4 address.
Definition: addr.h:53
uint8_t u8[4]
as 4 8-bit unsigned integer
Definition: addr.h:54
network_uint32_t u32
as 32-bit unsigned integer
Definition: addr.h:55