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 48 : NetworkInterfaceConfig::NetworkInterfaceConfig() : _config(), _family(IPAddress::FAMILY_UNKNOWN) {} 12 : 13 19 : NetworkInterfaceConfig::NetworkInterfaceConfig( 14 19 : uint32_t const ip4Address, uint32_t const networkMask, uint32_t const defaultGateway) 15 19 : : _family(IPAddress::IPV4) 16 : { 17 19 : uint8_t const freeIndex = 3U; 18 : 19 19 : _config[IPADDRESS_INDEX] = ip4Address; 20 19 : _config[NETWORKMASK_INDEX] = networkMask; 21 19 : _config[DEFAULTGATEWAY_INDEX] = defaultGateway; 22 19 : _config[freeIndex] = 0U; 23 19 : } 24 : 25 20 : NetworkInterfaceConfig::NetworkInterfaceConfig(Ip6AddressType const& ip6Address) 26 20 : : _family(IPAddress::IPV6) 27 : { 28 20 : _config[0U] = ip6Address[0]; 29 20 : _config[1U] = ip6Address[1]; 30 20 : _config[2U] = ip6Address[2]; 31 20 : _config[3U] = ip6Address[3]; 32 20 : } 33 : 34 10 : IPAddress NetworkInterfaceConfig::ipAddress() const 35 : { 36 10 : if (_family == IPAddress::IPV4) 37 : { 38 3 : return make_ip4(_config[IPADDRESS_INDEX]); 39 : } 40 : #ifndef OPENBSW_NO_IPV6 41 7 : if (_family == IPAddress::IPV6) 42 : { 43 4 : return make_ip6(&_config[0U]); 44 : } 45 : #endif 46 : 47 3 : 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 10 : IPAddress NetworkInterfaceConfig::broadcastAddress() const 71 : { 72 10 : if (_family == IPAddress::IPV4) 73 : { 74 3 : return make_ip4( 75 3 : _config[IPADDRESS_INDEX] | (static_cast<uint32_t>(~_config[NETWORKMASK_INDEX]))); 76 : } 77 : 78 7 : return IPAddress(); 79 : } 80 : 81 22 : bool operator==(NetworkInterfaceConfig const& lhs, NetworkInterfaceConfig const& rhs) 82 : { 83 40 : return (lhs._family == rhs._family) && (lhs._config == rhs._config); 84 : } 85 : 86 : } // namespace ip