QSC Post Quantum Cryptographic Library 1.0.0.6c (A6)
A post quantum secure library written in Ansi C
 
Loading...
Searching...
No Matches
ipinfo.h File Reference

IP information function definitions. More...

#include <stdio.h>
#include <string.h>
#include "common.h"
#include "arrayutils.h"
#include "intutils.h"
#include "memutils.h"
#include "socketflags.h"
#include "stringutils.h"

Go to the source code of this file.

Data Structures

struct  qsc_ipinfo_ipv4_address
 The IPv4 address structure. More...
 
struct  qsc_ipinfo_ipv4_info
 The IPv4 information structure. More...
 
struct  qsc_ipinfo_ipv6_address
 The IPv6 address structure. More...
 
struct  qsc_ipinfo_ipv6_info
 The IPv6 information structure. More...
 

Macros

#define QSC_IPINFO_IPV4_BYTELEN   0x04U
 The IPv4 byte array length.
 
#define QSC_IPINFO_IPV4_MINLEN   0x08U
 The minimum IPv4 string length.
 
#define QSC_IPINFO_IPV4_STRNLEN   0x16U
 The IPv4 string length.
 
#define QSC_IPINFO_IPV4_MASK_STRNLEN   0x10U
 The IPv4 subnet mask string length.
 
#define QSC_IPINFO_IPV6_BYTELEN   0x10U
 The IPv6 byte array length.
 
#define QSC_IPINFO_IP_MAX_BYTELEN   (QSC_IPINFO_IPV6_BYTELEN)
 The maximum IP byte array length.
 
#define QSC_IPINFO_IPV6_STRNLEN   0x41U
 The IPv6 string length.
 
#define QSC_IPINFO_IPV6_MASK_STRNLEN   0x41U
 The IPv6 subnet mask string length.
 
#define QSC_IPINFO_MAX_SIZE   (QSC_IPINFO_IPV6_STRNLEN)
 The maximum IP string length.
 

Enumerations

enum  qsc_ipinfo_address_types { qsc_ipinfo_address_type_none = 0x00U , qsc_ipinfo_address_type_ipv4 = 0x01U , qsc_ipinfo_address_type_ipv6 = 0x02U , qsc_ipinfo_address_type_unknown = 0xFFU }
 The IP address family types. More...
 

Functions

QSC_EXPORT_API qsc_ipinfo_address_types qsc_ipinfo_get_address_type (const char *address)
 Determine the IP address type from a string.
 
QSC_EXPORT_API qsc_ipinfo_ipv4_address qsc_ipinfo_ipv4_address_any (void)
 Use the device's primary IPv4 address.
 
QSC_EXPORT_API void qsc_ipinfo_ipv4_address_clear (qsc_ipinfo_ipv4_address *address)
 Clear the IPv4 address structure.
 
QSC_EXPORT_API qsc_ipinfo_ipv4_address qsc_ipinfo_ipv4_address_from_array (const uint8_t *address)
 Instantiate an IPv4 address structure from a byte array.
 
QSC_EXPORT_API qsc_ipinfo_ipv4_address qsc_ipinfo_ipv4_address_from_bytes (uint8_t a1, uint8_t a2, uint8_t a3, uint8_t a4)
 Instantiate an IPv4 address structure from individual bytes.
 
QSC_EXPORT_API qsc_ipinfo_ipv4_address qsc_ipinfo_ipv4_address_from_string (const char input[QSC_IPINFO_IPV4_STRNLEN])
 Instantiate an IPv4 address structure from a string.
 
QSC_EXPORT_API bool qsc_ipinfo_ipv4_address_is_equal (const qsc_ipinfo_ipv4_address *a, const qsc_ipinfo_ipv4_address *b)
 Compare two IPv4 address structures for equality.
 
QSC_EXPORT_API bool qsc_ipinfo_ipv4_address_is_routable (const qsc_ipinfo_ipv4_address *address)
 Test if the IPv4 address is a valid public address.
 
QSC_EXPORT_API bool qsc_ipinfo_ipv4_address_is_valid (const qsc_ipinfo_ipv4_address *address)
 Test if the IPv4 address is valid.
 
QSC_EXPORT_API bool qsc_ipinfo_ipv4_address_string_is_valid (const char *address)
 Test if the IPv4 address string is valid.
 
QSC_EXPORT_API bool qsc_ipinfo_ipv4_address_is_zeroed (const qsc_ipinfo_ipv4_address *address)
 Test if the IPv4 address is zeroed.
 
QSC_EXPORT_API qsc_ipinfo_ipv4_address qsc_ipinfo_ipv4_address_loopback (void)
 Get a copy of the IPv4 loopback address.
 
QSC_EXPORT_API void qsc_ipinfo_ipv4_address_get_mask (char mask[QSC_IPINFO_IPV4_MASK_STRNLEN], const qsc_ipinfo_ipv4_address *address)
 Get the IPv4 network subnet mask string.
 
QSC_EXPORT_API uint8_t qsc_ipinfo_ipv4_address_get_cidr_mask (const qsc_ipinfo_ipv4_address *address)
 Get the IPv4 network subnet CIDR length.
 
QSC_EXPORT_API void qsc_ipinfo_ipv4_address_to_array (uint8_t *output, const qsc_ipinfo_ipv4_address *address)
 Serialize an IPv4 address structure to a byte array.
 
QSC_EXPORT_API void qsc_ipinfo_ipv4_address_to_string (char output[QSC_IPINFO_IPV4_STRNLEN], const qsc_ipinfo_ipv4_address *address)
 Serialize an IPv4 address structure to a string.
 
QSC_EXPORT_API void qsc_ipinfo_ipv4_array_to_string (char output[QSC_IPINFO_IPV4_STRNLEN], const uint8_t *address)
 Convert an IPv4 address array to a string.
 
QSC_EXPORT_API qsc_ipv6_address_prefix_types qsc_ipinfo_ipv6_address_type (const qsc_ipinfo_ipv6_address *address)
 Get the IPv6 address routing prefix type.
 
QSC_EXPORT_API qsc_ipinfo_ipv6_address qsc_ipinfo_ipv6_address_any (void)
 Get a copy of the IPv6 loopback address.
 
QSC_EXPORT_API void qsc_ipinfo_ipv6_address_clear (qsc_ipinfo_ipv6_address *address)
 Clear the IPv6 address structure.
 
QSC_EXPORT_API qsc_ipinfo_ipv6_address qsc_ipinfo_ipv6_address_from_array (const uint8_t *address)
 Instantiate an IPv6 address structure from a byte array.
 
QSC_EXPORT_API qsc_ipinfo_ipv6_address qsc_ipinfo_ipv6_address_from_string (const char input[QSC_IPINFO_IPV6_STRNLEN])
 Instantiate an IPv6 address structure from a string.
 
QSC_EXPORT_API bool qsc_ipinfo_ipv6_address_is_equal (const qsc_ipinfo_ipv6_address *a, const qsc_ipinfo_ipv6_address *b)
 Compare two IPv6 address structures for equality.
 
QSC_EXPORT_API bool qsc_ipinfo_ipv6_address_is_routable (const qsc_ipinfo_ipv6_address *address)
 Test if the IPv6 address is a valid public address.
 
QSC_EXPORT_API bool qsc_ipinfo_ipv6_address_is_valid (const qsc_ipinfo_ipv6_address *address)
 Test if the IPv6 address is valid.
 
QSC_EXPORT_API bool qsc_ipinfo_ipv6_address_string_is_valid (const char *address)
 Test if the IPv6 address string is valid.
 
QSC_EXPORT_API bool qsc_ipinfo_ipv6_address_is_zeroed (const qsc_ipinfo_ipv6_address *address)
 Test if the IPv6 address is zeroed.
 
QSC_EXPORT_API qsc_ipinfo_ipv6_address qsc_ipinfo_ipv6_address_loopback (void)
 Get a copy of the IPv6 loopback address.
 
QSC_EXPORT_API void qsc_ipinfo_ipv6_address_get_mask (char mask[QSC_IPINFO_IPV6_MASK_STRNLEN], const qsc_ipinfo_ipv6_address *address)
 Get the IPv6 network subnet mask string.
 
QSC_EXPORT_API uint8_t qsc_ipinfo_ipv6_address_get_cidr_mask (const qsc_ipinfo_ipv6_address *address)
 Get the IPv6 network subnet CIDR length.
 
QSC_EXPORT_API void qsc_ipinfo_ipv6_address_to_array (uint8_t *output, const qsc_ipinfo_ipv6_address *address)
 Serialize an IPv6 address structure to a byte array.
 
QSC_EXPORT_API void qsc_ipinfo_ipv6_address_to_string (char output[QSC_IPINFO_IPV6_STRNLEN], const qsc_ipinfo_ipv6_address *address)
 Serialize an IPv6 address structure to a string.
 
QSC_EXPORT_API void qsc_ipinfo_ipv6_array_to_string (char output[QSC_IPINFO_IPV6_STRNLEN], const uint8_t *address)
 Convert an IPv6 address array to a string.
 
QSC_EXPORT_API uint8_t qsc_ipinfo_ipv4_mask_to_cidr (const char mask[QSC_IPINFO_IPV4_MASK_STRNLEN])
 Convert a subnet mask string to a CIDR mask.
 
QSC_EXPORT_API void qsc_ipinfo_ipv4_cidr_to_mask (char mask[QSC_IPINFO_IPV4_MASK_STRNLEN], uint8_t cidr)
 Convert a CIDR mask to a subnet mask string.
 

Detailed Description

IP information function definitions.

This header provides functions for working with IP addresses, including determining the type of an IP address, creating and comparing IPv4 and IPv6 address structures, serializing and deserializing IP addresses, and converting between various representations such as strings, arrays, and CIDR masks.

// Example usage:
ipinfo_t info;
if (ipinfo_parse("192.168.1.1", &info)) {
// Process the parsed IP address.
}

Reference Links:

Enumeration Type Documentation

◆ qsc_ipinfo_address_types

The IP address family types.

Enumerator
qsc_ipinfo_address_type_none 

The address type is not set.

qsc_ipinfo_address_type_ipv4 

The address type is IPv4.

qsc_ipinfo_address_type_ipv6 

The address type is IPv6.

qsc_ipinfo_address_type_unknown 

The address type is unknown.

Function Documentation

◆ qsc_ipinfo_get_address_type()

QSC_EXPORT_API qsc_ipinfo_address_types qsc_ipinfo_get_address_type ( const char * address)

Determine the IP address type from a string.

Parameters
address[const char*] A pointer to the address string.
Returns
[qsc_ipinfo_address_types] Returns the IP address type.

◆ qsc_ipinfo_ipv4_address_any()

QSC_EXPORT_API qsc_ipinfo_ipv4_address qsc_ipinfo_ipv4_address_any ( void )

Use the device's primary IPv4 address.

Returns
[qsc_ipinfo_ipv4_address] Returns the primary IPv4 address structure.

◆ qsc_ipinfo_ipv4_address_clear()

QSC_EXPORT_API void qsc_ipinfo_ipv4_address_clear ( qsc_ipinfo_ipv4_address * address)

Clear the IPv4 address structure.

Parameters
address[qsc_ipinfo_ipv4_address*] A pointer to the IPv4 address structure.

◆ qsc_ipinfo_ipv4_address_from_array()

QSC_EXPORT_API qsc_ipinfo_ipv4_address qsc_ipinfo_ipv4_address_from_array ( const uint8_t * address)

Instantiate an IPv4 address structure from a byte array.

Parameters
address[const uint8_t*] A pointer to the byte array containing the serialized address.
Returns
[qsc_ipinfo_ipv4_address] Returns the initialized IPv4 address structure.

◆ qsc_ipinfo_ipv4_address_from_bytes()

QSC_EXPORT_API qsc_ipinfo_ipv4_address qsc_ipinfo_ipv4_address_from_bytes ( uint8_t a1,
uint8_t a2,
uint8_t a3,
uint8_t a4 )

Instantiate an IPv4 address structure from individual bytes.

Parameters
a1[uint8_t] The first address octet.
a2[uint8_t] The second address octet.
a3[uint8_t] The third address octet.
a4[uint8_t] The fourth address octet.
Returns
[qsc_ipinfo_ipv4_address] Returns the initialized IPv4 address structure.

◆ qsc_ipinfo_ipv4_address_from_string()

QSC_EXPORT_API qsc_ipinfo_ipv4_address qsc_ipinfo_ipv4_address_from_string ( const char input[QSC_IPINFO_IPV4_STRNLEN])

Instantiate an IPv4 address structure from a string.

Parameters
input[const char*] A pointer to the serialized address string.
Returns
[qsc_ipinfo_ipv4_address] Returns the initialized IPv4 address structure.

◆ qsc_ipinfo_ipv4_address_get_cidr_mask()

QSC_EXPORT_API uint8_t qsc_ipinfo_ipv4_address_get_cidr_mask ( const qsc_ipinfo_ipv4_address * address)

Get the IPv4 network subnet CIDR length.

Parameters
address[const qsc_ipinfo_ipv4_address*] A pointer to the IPv4 address structure.
Returns
[uint8_t] Returns the mask length in bits.

◆ qsc_ipinfo_ipv4_address_get_mask()

QSC_EXPORT_API void qsc_ipinfo_ipv4_address_get_mask ( char mask[QSC_IPINFO_IPV4_MASK_STRNLEN],
const qsc_ipinfo_ipv4_address * address )

Get the IPv4 network subnet mask string.

Parameters
mask[char*] The output mask string.
address[const qsc_ipinfo_ipv4_address*] A pointer to the IPv4 address structure.

◆ qsc_ipinfo_ipv4_address_is_equal()

QSC_EXPORT_API bool qsc_ipinfo_ipv4_address_is_equal ( const qsc_ipinfo_ipv4_address * a,
const qsc_ipinfo_ipv4_address * b )

Compare two IPv4 address structures for equality.

Parameters
a[const qsc_ipinfo_ipv4_address*] A pointer to the first IPv4 address structure.
b[const qsc_ipinfo_ipv4_address*] A pointer to the second IPv4 address structure.
Returns
[bool] Returns true if the address structures are equal.

◆ qsc_ipinfo_ipv4_address_is_routable()

QSC_EXPORT_API bool qsc_ipinfo_ipv4_address_is_routable ( const qsc_ipinfo_ipv4_address * address)

Test if the IPv4 address is a valid public address.

Parameters
address[const qsc_ipinfo_ipv4_address*] A pointer to the IPv4 address structure.
Returns
[bool] Returns true if the address is valid.

◆ qsc_ipinfo_ipv4_address_is_valid()

QSC_EXPORT_API bool qsc_ipinfo_ipv4_address_is_valid ( const qsc_ipinfo_ipv4_address * address)

Test if the IPv4 address is valid.

Parameters
address[const qsc_ipinfo_ipv4_address*] A pointer to the IPv4 address structure.
Returns
[bool] Returns true if the address is valid.

◆ qsc_ipinfo_ipv4_address_is_zeroed()

QSC_EXPORT_API bool qsc_ipinfo_ipv4_address_is_zeroed ( const qsc_ipinfo_ipv4_address * address)

Test if the IPv4 address is zeroed.

Parameters
address[const qsc_ipinfo_ipv4_address*] A pointer to the IPv4 address structure.
Returns
[bool] Returns true if the address is zeroed.

◆ qsc_ipinfo_ipv4_address_loopback()

QSC_EXPORT_API qsc_ipinfo_ipv4_address qsc_ipinfo_ipv4_address_loopback ( void )

Get a copy of the IPv4 loopback address.

Returns
[qsc_ipinfo_ipv4_address] Returns a copy of the IPv4 loopback address.

◆ qsc_ipinfo_ipv4_address_string_is_valid()

QSC_EXPORT_API bool qsc_ipinfo_ipv4_address_string_is_valid ( const char * address)

Test if the IPv4 address string is valid.

Parameters
address[const char*] A pointer to the IPv4 address string.
Returns
[bool] Returns true if the address string is valid.

◆ qsc_ipinfo_ipv4_address_to_array()

QSC_EXPORT_API void qsc_ipinfo_ipv4_address_to_array ( uint8_t * output,
const qsc_ipinfo_ipv4_address * address )

Serialize an IPv4 address structure to a byte array.

Parameters
output[uint8_t*] The address output byte array.
address[const qsc_ipinfo_ipv4_address*] A pointer to the IPv4 address structure.

◆ qsc_ipinfo_ipv4_address_to_string()

QSC_EXPORT_API void qsc_ipinfo_ipv4_address_to_string ( char output[QSC_IPINFO_IPV4_STRNLEN],
const qsc_ipinfo_ipv4_address * address )

Serialize an IPv4 address structure to a string.

Parameters
output[char*] The serialized address string output array.
address[const qsc_ipinfo_ipv4_address*] A pointer to the IPv4 address structure.

◆ qsc_ipinfo_ipv4_array_to_string()

QSC_EXPORT_API void qsc_ipinfo_ipv4_array_to_string ( char output[QSC_IPINFO_IPV4_STRNLEN],
const uint8_t * address )

Convert an IPv4 address array to a string.

Parameters
output[char*] The serialized address string output array.
address[const uint8_t*] A pointer to the IPv4 address array.

◆ qsc_ipinfo_ipv4_cidr_to_mask()

QSC_EXPORT_API void qsc_ipinfo_ipv4_cidr_to_mask ( char mask[QSC_IPINFO_IPV4_MASK_STRNLEN],
uint8_t cidr )

Convert a CIDR mask to a subnet mask string.

Parameters
mask[char*] The output mask string.
cidr[uint8_t] The input CIDR mask.

◆ qsc_ipinfo_ipv4_mask_to_cidr()

QSC_EXPORT_API uint8_t qsc_ipinfo_ipv4_mask_to_cidr ( const char mask[QSC_IPINFO_IPV4_MASK_STRNLEN])

Convert a subnet mask string to a CIDR mask.

Parameters
mask[const char*] The subnet mask string.
Returns
[uint8_t] Returns the mask length in bits.

◆ qsc_ipinfo_ipv6_address_any()

QSC_EXPORT_API qsc_ipinfo_ipv6_address qsc_ipinfo_ipv6_address_any ( void )

Get a copy of the IPv6 loopback address.

Returns
[qsc_ipinfo_ipv6_address] Returns a copy of the IPv6 loopback address.

◆ qsc_ipinfo_ipv6_address_clear()

QSC_EXPORT_API void qsc_ipinfo_ipv6_address_clear ( qsc_ipinfo_ipv6_address * address)

Clear the IPv6 address structure.

Parameters
address[qsc_ipinfo_ipv6_address*] A pointer to the IPv6 address structure.

◆ qsc_ipinfo_ipv6_address_from_array()

QSC_EXPORT_API qsc_ipinfo_ipv6_address qsc_ipinfo_ipv6_address_from_array ( const uint8_t * address)

Instantiate an IPv6 address structure from a byte array.

Parameters
address[const uint8_t*] A pointer to the byte array containing the serialized address.
Returns
[qsc_ipinfo_ipv6_address] Returns the initialized IPv6 address structure.

◆ qsc_ipinfo_ipv6_address_from_string()

QSC_EXPORT_API qsc_ipinfo_ipv6_address qsc_ipinfo_ipv6_address_from_string ( const char input[QSC_IPINFO_IPV6_STRNLEN])

Instantiate an IPv6 address structure from a string.

Parameters
input[const char*] A pointer to the serialized address string.
Returns
[qsc_ipinfo_ipv6_address] Returns the initialized IPv6 address structure.

◆ qsc_ipinfo_ipv6_address_get_cidr_mask()

QSC_EXPORT_API uint8_t qsc_ipinfo_ipv6_address_get_cidr_mask ( const qsc_ipinfo_ipv6_address * address)

Get the IPv6 network subnet CIDR length.

Parameters
address[const qsc_ipinfo_ipv6_address*] A pointer to the IPv6 address structure.
Returns
[uint8_t] Returns the mask length in bits.

◆ qsc_ipinfo_ipv6_address_get_mask()

QSC_EXPORT_API void qsc_ipinfo_ipv6_address_get_mask ( char mask[QSC_IPINFO_IPV6_MASK_STRNLEN],
const qsc_ipinfo_ipv6_address * address )

Get the IPv6 network subnet mask string.

Parameters
mask[char*] The output mask string.
address[const qsc_ipinfo_ipv6_address*] A pointer to the IPv6 address structure.

◆ qsc_ipinfo_ipv6_address_is_equal()

QSC_EXPORT_API bool qsc_ipinfo_ipv6_address_is_equal ( const qsc_ipinfo_ipv6_address * a,
const qsc_ipinfo_ipv6_address * b )

Compare two IPv6 address structures for equality.

Parameters
a[const qsc_ipinfo_ipv6_address*] A pointer to the first IPv6 address structure.
b[const qsc_ipinfo_ipv6_address*] A pointer to the second IPv6 address structure.
Returns
[bool] Returns true if the address structures are equal.

◆ qsc_ipinfo_ipv6_address_is_routable()

QSC_EXPORT_API bool qsc_ipinfo_ipv6_address_is_routable ( const qsc_ipinfo_ipv6_address * address)

Test if the IPv6 address is a valid public address.

Parameters
address[const qsc_ipinfo_ipv6_address*] A pointer to the IPv6 address structure.
Returns
[bool] Returns true if the address is valid.

◆ qsc_ipinfo_ipv6_address_is_valid()

QSC_EXPORT_API bool qsc_ipinfo_ipv6_address_is_valid ( const qsc_ipinfo_ipv6_address * address)

Test if the IPv6 address is valid.

Parameters
address[const qsc_ipinfo_ipv6_address*] A pointer to the IPv6 address structure.
Returns
[bool] Returns true if the address is valid.

◆ qsc_ipinfo_ipv6_address_is_zeroed()

QSC_EXPORT_API bool qsc_ipinfo_ipv6_address_is_zeroed ( const qsc_ipinfo_ipv6_address * address)

Test if the IPv6 address is zeroed.

Parameters
address[const qsc_ipinfo_ipv6_address*] A pointer to the IPv6 address structure.
Returns
[bool] Returns true if the address is zeroed.

◆ qsc_ipinfo_ipv6_address_loopback()

QSC_EXPORT_API qsc_ipinfo_ipv6_address qsc_ipinfo_ipv6_address_loopback ( void )

Get a copy of the IPv6 loopback address.

Returns
[qsc_ipinfo_ipv6_address] Returns a copy of the IPv6 loopback address.

◆ qsc_ipinfo_ipv6_address_string_is_valid()

QSC_EXPORT_API bool qsc_ipinfo_ipv6_address_string_is_valid ( const char * address)

Test if the IPv6 address string is valid.

Parameters
address[const char*] A pointer to the IPv6 address string.
Returns
[bool] Returns true if the address string is valid.

◆ qsc_ipinfo_ipv6_address_to_array()

QSC_EXPORT_API void qsc_ipinfo_ipv6_address_to_array ( uint8_t * output,
const qsc_ipinfo_ipv6_address * address )

Serialize an IPv6 address structure to a byte array.

Parameters
output[uint8_t*] The address output byte array.
address[const qsc_ipinfo_ipv6_address*] A pointer to the IPv6 address structure.

◆ qsc_ipinfo_ipv6_address_to_string()

QSC_EXPORT_API void qsc_ipinfo_ipv6_address_to_string ( char output[QSC_IPINFO_IPV6_STRNLEN],
const qsc_ipinfo_ipv6_address * address )

Serialize an IPv6 address structure to a string.

Parameters
output[char*] The address string output array.
address[const qsc_ipinfo_ipv6_address*] A pointer to the IPv6 address structure.

◆ qsc_ipinfo_ipv6_address_type()

QSC_EXPORT_API qsc_ipv6_address_prefix_types qsc_ipinfo_ipv6_address_type ( const qsc_ipinfo_ipv6_address * address)

Get the IPv6 address routing prefix type.

Parameters
address[const qsc_ipinfo_ipv6_address*] A pointer to the IPv6 address structure.
Returns
[qsc_ipv6_address_prefix_types] Returns the IPv6 prefix type.

◆ qsc_ipinfo_ipv6_array_to_string()

QSC_EXPORT_API void qsc_ipinfo_ipv6_array_to_string ( char output[QSC_IPINFO_IPV6_STRNLEN],
const uint8_t * address )

Convert an IPv6 address array to a string.

Parameters
output[char*] The address string output array.
address[const uint8_t*] A pointer to the IPv6 address array.