Line data Source code
1 : // Copyright 2025 Accenture.
2 :
3 : #include "ip/NetworkInterfaceConfig.h"
4 :
5 : namespace ip
6 : {
7 : uint8_t const IPADDRESS_INDEX = 0U;
8 : uint8_t const NETWORKMASK_INDEX = 1U;
9 : uint8_t const DEFAULTGATEWAY_INDEX = 2U;
10 :
11 224 : NetworkInterfaceConfig::NetworkInterfaceConfig() : _config(), _family(IPAddress::FAMILY_UNKNOWN) {}
12 :
13 36 : NetworkInterfaceConfig::NetworkInterfaceConfig(
14 36 : uint32_t const ip4Address, uint32_t const networkMask, uint32_t const defaultGateway)
15 36 : : _family(IPAddress::IPV4)
16 : {
17 36 : uint8_t const freeIndex = 3U;
18 :
19 36 : _config[IPADDRESS_INDEX] = ip4Address;
20 36 : _config[NETWORKMASK_INDEX] = networkMask;
21 36 : _config[DEFAULTGATEWAY_INDEX] = defaultGateway;
22 36 : _config[freeIndex] = 0U;
23 36 : }
24 :
25 22 : NetworkInterfaceConfig::NetworkInterfaceConfig(Ip6AddressType const& ip6Address)
26 22 : : _family(IPAddress::IPV6)
27 : {
28 22 : _config[0U] = ip6Address[0];
29 22 : _config[1U] = ip6Address[1];
30 22 : _config[2U] = ip6Address[2];
31 22 : _config[3U] = ip6Address[3];
32 22 : }
33 :
34 109 : IPAddress NetworkInterfaceConfig::ipAddress() const
35 : {
36 109 : if (_family == IPAddress::IPV4)
37 : {
38 77 : return make_ip4(_config[IPADDRESS_INDEX]);
39 : }
40 : #ifndef OPENBSW_NO_IPV6
41 32 : if (_family == IPAddress::IPV6)
42 : {
43 11 : return make_ip6(&_config[0U]);
44 : }
45 : #endif
46 :
47 21 : return IPAddress();
48 : }
49 :
50 10 : IPAddress NetworkInterfaceConfig::networkMask() const
51 : {
52 10 : if (_family == IPAddress::IPV4)
53 : {
54 3 : return make_ip4(_config[NETWORKMASK_INDEX]);
55 : }
56 :
57 7 : return IPAddress();
58 : }
59 :
60 10 : IPAddress NetworkInterfaceConfig::defaultGateway() const
61 : {
62 10 : if (_family == IPAddress::IPV4)
63 : {
64 3 : return make_ip4(_config[DEFAULTGATEWAY_INDEX]);
65 : }
66 :
67 7 : return IPAddress();
68 : }
69 :
70 57 : IPAddress NetworkInterfaceConfig::broadcastAddress() const
71 : {
72 57 : if (_family == IPAddress::IPV4)
73 : {
74 62 : return make_ip4(
75 31 : _config[IPADDRESS_INDEX] | (static_cast<uint32_t>(~_config[NETWORKMASK_INDEX])));
76 : }
77 :
78 26 : return IPAddress();
79 : }
80 :
81 22 : bool operator==(NetworkInterfaceConfig const& lhs, NetworkInterfaceConfig const& rhs)
82 : {
83 22 : return (lhs._family == rhs._family) && (lhs._config == rhs._config);
84 : }
85 :
86 : } // namespace ip
|