sbgECom Library  4.0.1987-stable
C library to interface SBG Systems IMU/AHRS/INS
sbgNetwork.h File Reference

Network related tools. More...

#include <sbgCommon.h>

Go to the source code of this file.

Macros

#define SBG_IPV4_UNSPECIFIED_ADDR   sbgIpAddr(0, 0, 0, 0)
 
#define SBG_IPV4_BROADCAST_ADDR   sbgIpAddr(255, 255, 255, 255)
 
#define SBG_NETWORK_IPV4_STRING_SIZE   (16)
 

Functions

SBG_INLINE sbgIpAddress sbgIpAddr (uint8_t a, uint8_t b, uint8_t c, uint8_t d)
 
SBG_INLINE uint8_t sbgIpAddrGetA (sbgIpAddress ipAddr)
 
SBG_INLINE uint8_t sbgIpAddrGetB (sbgIpAddress ipAddr)
 
SBG_INLINE uint8_t sbgIpAddrGetC (sbgIpAddress ipAddr)
 
SBG_INLINE uint8_t sbgIpAddrGetD (sbgIpAddress ipAddr)
 
SBG_COMMON_LIB_API void sbgNetworkIpToString (sbgIpAddress ipAddr, char *pBuffer, size_t maxSize)
 
SBG_COMMON_LIB_API sbgIpAddress sbgNetworkIpFromString (const char *pBuffer)
 
SBG_INLINE sbgIpAddress sbgIpGetNetworkAddr (sbgIpAddress ipAddress, sbgIpAddress netmask)
 
SBG_INLINE sbgIpAddress sbgIpGetHostAddr (sbgIpAddress ipAddress, sbgIpAddress netmask)
 
SBG_INLINE bool sbgIpAddressIsUnspecified (sbgIpAddress ipAddress)
 
SBG_INLINE bool sbgIpAddressValid (sbgIpAddress ipAddress)
 
SBG_INLINE sbgIpAddress sbgIpAddrWithinSubnet (sbgIpAddress ipAddress, sbgIpAddress netmask)
 
SBG_INLINE bool sbgIpAddrIsSameNetwork (sbgIpAddress firstIpAddr, sbgIpAddress secondIpAddr, sbgIpAddress netmask)
 
SBG_COMMON_LIB_API bool sbgIpNetMaskValid (sbgIpAddress netmask)
 

Detailed Description

Network related tools.

Author
SBG Systems
Date
September 15, 2015

IP v4 address is stored in memory with a uint32_t. Each address component A.B.C.D is stored in 8 bits using the network endianess ie Big Endian.

We thus have the following memory organisation:

In Little Endian: |LSB| | |MSB| | A | B | C | D |

In Big Endian: |MSB| | |LSB| | A | B | C | D |

License

The MIT license

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Macro Definition Documentation

◆ SBG_IPV4_UNSPECIFIED_ADDR

#define SBG_IPV4_UNSPECIFIED_ADDR   sbgIpAddr(0, 0, 0, 0)

This represents an undefined IP address.

◆ SBG_IPV4_BROADCAST_ADDR

#define SBG_IPV4_BROADCAST_ADDR   sbgIpAddr(255, 255, 255, 255)

Broadcast IP address used to address all devices within the same network.

◆ SBG_NETWORK_IPV4_STRING_SIZE

#define SBG_NETWORK_IPV4_STRING_SIZE   (16)

String size for representation of an IPV4

Function Documentation

◆ sbgIpAddr()

SBG_INLINE sbgIpAddress sbgIpAddr ( uint8_t  a,
uint8_t  b,
uint8_t  c,
uint8_t  d 
)

Build an IP V4 address in the form a.b.c.d

Parameters
[in]aFirst 8 bits IP address.
[in]bSecond 8 bits IP address.
[in]cThird 8 bits IP address.
[in]dLast 8 bits IP address.
Returns
An initialized IP address object.

◆ sbgIpAddrGetA()

SBG_INLINE uint8_t sbgIpAddrGetA ( sbgIpAddress  ipAddr)

Return the first A field of of an IP v4 address of the form A.B.C.D

Parameters
[in]ipAddrAn sbgIpAddress to convert.
Returns
The A field of the IP address.

Referenced by sbgIpAddressValid().

◆ sbgIpAddrGetB()

SBG_INLINE uint8_t sbgIpAddrGetB ( sbgIpAddress  ipAddr)

Return the first B field of of an IP v4 address of the form A.B.C.D

Parameters
[in]ipAddrAn sbgIpAddress to convert.
Returns
The B field of the IP address.

◆ sbgIpAddrGetC()

SBG_INLINE uint8_t sbgIpAddrGetC ( sbgIpAddress  ipAddr)

Return the first C field of of an IP v4 address of the form A.B.C.D

Parameters
[in]ipAddrAn sbgIpAddress to convert.
Returns
The C field of the IP address.

◆ sbgIpAddrGetD()

SBG_INLINE uint8_t sbgIpAddrGetD ( sbgIpAddress  ipAddr)

Return the first D field of of an IP v4 address of the form A.B.C.D

Parameters
[in]ipAddrAn sbgIpAddress to convert.
Returns
The D field of the IP address.

◆ sbgNetworkIpToString()

SBG_COMMON_LIB_API void sbgNetworkIpToString ( sbgIpAddress  ipAddr,
char *  pBuffer,
size_t  maxSize 
)

Convert an ip to a string of the form A.B.C.D

Parameters
[in]ipAddrIP address to convert to a string.
[out]pBufferPointer on an allocated buffer than can hold ip address as a string.
[in]maxSizeMaximum number of chars that can be stored in pBuffer including the NULL char.

◆ sbgNetworkIpFromString()

SBG_COMMON_LIB_API sbgIpAddress sbgNetworkIpFromString ( const char *  pBuffer)

Convert an ip address stored in a string of the form A.B.C.D to an sbgIpAddress object.

Parameters
[in]pBufferIP address as a string of the form A.B.C.D
Returns
IP address parsed from the string or 0.0.0.0 if the IP is invalid.

◆ sbgIpGetNetworkAddr()

SBG_INLINE sbgIpAddress sbgIpGetNetworkAddr ( sbgIpAddress  ipAddress,
sbgIpAddress  netmask 
)

Given an ip address and the netmask, returns the network part (ip & subnetMask)

Parameters
[in]ipAddressThe ip address stored in an uint32_t (host endianness).
[in]netmaskThe netmask stored in an uint32_t (host endianness).
Returns
The network part of the ip address.

◆ sbgIpGetHostAddr()

SBG_INLINE sbgIpAddress sbgIpGetHostAddr ( sbgIpAddress  ipAddress,
sbgIpAddress  netmask 
)

Given an ip address and the netmask, returns the host part (ip & ~subnetMask)

Parameters
[in]ipAddressThe ip address stored in an uint32_t (host endianness).
[in]netmaskThe netmask stored in an uint32_t (host endianness).
Returns
The host part of the ip address.

Referenced by sbgIpAddrWithinSubnet().

◆ sbgIpAddressIsUnspecified()

SBG_INLINE bool sbgIpAddressIsUnspecified ( sbgIpAddress  ipAddress)

Returns true if the provided IP address is unspecified ie (0.0.0.0)

Parameters
[in]ipAddressThe ip address to test
Returns
true if the ip address is unspecified or false otherwise.

◆ sbgIpAddressValid()

SBG_INLINE bool sbgIpAddressValid ( sbgIpAddress  ipAddress)

Check if an IpV4 address is valid. The ip address format is A.B.C.D and A should respect 0 < A < 224

Parameters
[in]ipAddressThe ip address stored in an uint32_t (host endianness).
Returns
true if the ip address is valid ie contiguous.

References sbgIpAddrGetA().

◆ sbgIpAddrWithinSubnet()

SBG_INLINE sbgIpAddress sbgIpAddrWithinSubnet ( sbgIpAddress  ipAddress,
sbgIpAddress  netmask 
)

Given an ip address and the netmask, returns true if this ip address is within the subnet.

Parameters
[in]ipAddressThe ip address stored in an uint32_t (host endianness).
[in]netmaskThe netmask stored in an uint32_t (host endianness).
Returns
true if this ip address is within the subnet or false otherwise.

References sbgIpGetHostAddr().

◆ sbgIpAddrIsSameNetwork()

SBG_INLINE bool sbgIpAddrIsSameNetwork ( sbgIpAddress  firstIpAddr,
sbgIpAddress  secondIpAddr,
sbgIpAddress  netmask 
)

Check if two ip addresses are in the same network given the subnet.

Parameters
[in]firstIpAddrThe first IP address to check.
[in]secondIpAddrThe second IP address to check.
[in]netmaskThe netmask of the network.
Returns
true if the two ip addresses are in the same network.

◆ sbgIpNetMaskValid()

SBG_COMMON_LIB_API bool sbgIpNetMaskValid ( sbgIpAddress  netmask)

Check if an IpV4 netmask is valid, the mask should be contiguous (1111 followed by 0)

Parameters
[in]netmaskThe netmask stored in an uint32_t (host endianness).
Returns
true if the netmask is valid ie contiguous.