Main Page
Namespaces
Namespace List
Namespace Members
All
Functions
Typedefs
Enumerations
Classes
Class List
Class Members
All
a
b
c
d
e
f
g
h
i
l
m
n
o
p
q
r
s
t
u
v
w
y
z
~
Functions
a
c
d
e
f
g
i
l
m
o
p
r
s
t
u
w
~
Variables
a
b
c
d
e
f
g
h
i
l
m
n
o
p
q
r
s
t
u
v
w
y
z
Files
File List
File Members
All
_
c
d
f
g
i
m
n
s
t
u
Functions
m
s
t
Variables
Typedefs
d
f
i
s
u
Enumerations
_
Enumerator
s
Macros
_
c
f
i
n
s
t
external
sbgECom
common
network
sbgNetwork.c
Go to the documentation of this file.
1
#include "
sbgNetwork.h
"
2
#include <
swap/sbgSwap.h
>
3
4
//----------------------------------------------------------------------//
5
//- IP manipulation methods -//
6
//----------------------------------------------------------------------//
7
14
SBG_COMMON_LIB_API
void
sbgNetworkIpToString
(
sbgIpAddress
ipAddr,
char
*pBuffer,
size_t
maxSize)
15
{
16
//
17
// Check input arguments
18
//
19
assert(pBuffer);
20
assert(maxSize >= 16);
21
22
SBG_UNUSED_PARAMETER
(maxSize);
23
24
//
25
// Write the IP address
26
//
27
sprintf(pBuffer,
"%u.%u.%u.%u"
,
sbgIpAddrGetA
(ipAddr),
sbgIpAddrGetB
(ipAddr),
sbgIpAddrGetC
(ipAddr),
sbgIpAddrGetD
(ipAddr));
28
}
29
35
SBG_COMMON_LIB_API
sbgIpAddress
sbgNetworkIpFromString
(
const
char
*pBuffer)
36
{
37
int32_t ipAddrA;
38
int32_t ipAddrB;
39
int32_t ipAddrC;
40
int32_t ipAddrD;
41
int32_t numReadParams;
42
43
//
44
// Check input arguments
45
//
46
assert(pBuffer);
47
48
//
49
// Parse input arguments
50
//
51
numReadParams = sscanf(pBuffer,
"%d.%d.%d.%d"
, &ipAddrA, &ipAddrB, &ipAddrC, &ipAddrD);
52
53
//
54
// Make sure the parsed IP is normal
55
//
56
if
((numReadParams == 4) && (ipAddrA >= 0) && (ipAddrA <= 255) && (ipAddrB >= 0) && (ipAddrB <= 255) && (ipAddrC >= 0) && (ipAddrC <= 255) && (ipAddrD >= 0) && (ipAddrD <= 255))
57
{
58
//
59
// Ip address correctly parsed, return it
60
//
61
return
sbgIpAddr
((uint8_t)ipAddrA, (uint8_t)ipAddrB, (uint8_t)ipAddrC, (uint8_t)ipAddrD);
62
}
63
else
64
{
65
//
66
// The IP address couldn't be parsed correctly, return a null ip address
67
//
68
return
sbgIpAddr
(0, 0, 0, 0);
69
}
70
}
71
72
//----------------------------------------------------------------------//
73
//- IP validation methods -//
74
//----------------------------------------------------------------------//
75
81
SBG_COMMON_LIB_API
bool
sbgIpNetMaskValid
(
sbgIpAddress
netmask)
82
{
83
uint32_t y;
84
uint32_t z;
85
86
//
87
// First test that the netmask is not zero, if yes, it's valid
88
//
89
if
(netmask != 0)
90
{
91
//
92
// We are doing arithmetic so we have to make sure the netmask is using the platform endianness
93
// The IP address is always stored in big endian so we have to swap it for little endian platforms
94
//
95
#if SBG_CONFIG_BIG_ENDIAN == 0
96
netmask =
sbgSwap32
(netmask);
97
#endif
98
99
//
100
// Compute the bitwise inverse
101
//
102
y = ~netmask;
103
104
//
105
// Add one to the inverse so if netmask was a proper one, there will be at most 1 bit set in this.
106
//
107
z = y + 1;
108
109
//
110
// Test that, simply and z with z - 1, which happens to be y. The result will be zero if all is OK, non zero otherwise.
111
//
112
if
((z&y) == 0)
113
{
114
//
115
// We have a valid netmask
116
//
117
return
true
;
118
}
119
else
120
{
121
return
false
;
122
}
123
}
124
125
return
true
;
126
}
sbgSwap32
SBG_INLINE uint32_t sbgSwap32(uint32_t x)
Definition:
sbgSwap.h:52
sbgIpAddr
SBG_INLINE sbgIpAddress sbgIpAddr(uint8_t a, uint8_t b, uint8_t c, uint8_t d)
Definition:
sbgNetwork.h:65
SBG_UNUSED_PARAMETER
#define SBG_UNUSED_PARAMETER(x)
Definition:
sbgDefines.h:194
sbgIpAddrGetD
SBG_INLINE uint8_t sbgIpAddrGetD(sbgIpAddress ipAddr)
Definition:
sbgNetwork.h:121
sbgSwap.h
sbgNetworkIpToString
SBG_COMMON_LIB_API void sbgNetworkIpToString(sbgIpAddress ipAddr, char *pBuffer, size_t maxSize)
Definition:
sbgNetwork.c:14
sbgIpNetMaskValid
SBG_COMMON_LIB_API bool sbgIpNetMaskValid(sbgIpAddress netmask)
Definition:
sbgNetwork.c:81
sbgIpAddrGetB
SBG_INLINE uint8_t sbgIpAddrGetB(sbgIpAddress ipAddr)
Definition:
sbgNetwork.h:93
sbgNetworkIpFromString
SBG_COMMON_LIB_API sbgIpAddress sbgNetworkIpFromString(const char *pBuffer)
Definition:
sbgNetwork.c:35
SBG_COMMON_LIB_API
#define SBG_COMMON_LIB_API
Header file that contains all common definitions.
Definition:
sbgDefines.h:58
sbgIpAddrGetA
SBG_INLINE uint8_t sbgIpAddrGetA(sbgIpAddress ipAddr)
Definition:
sbgNetwork.h:79
sbgNetwork.h
sbgIpAddress
uint32_t sbgIpAddress
Definition:
sbgTypes.h:64
sbgIpAddrGetC
SBG_INLINE uint8_t sbgIpAddrGetC(sbgIpAddress ipAddr)
Definition:
sbgNetwork.h:107
sbg_driver
Author(s): SBG Systems
autogenerated on Fri Oct 11 2024 02:13:40