LCOV - code coverage report
Current view: top level - cpp2ethernet/src/ip - NetworkInterfaceConfig.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 38 38 100.0 %
Date: 2025-08-28 06:39:11 Functions: 8 8 100.0 %

          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

Generated by: LCOV version 1.14