#include "ipaddress.hpp"
#include "ethernet_interface.hpp"
#include "util.hpp"

#include "xyz/openbmc_project/Common/error.hpp"
#include <phosphor-logging/log.hpp>
#include <phosphor-logging/elog-errors.hpp>

namespace phosphor
{
namespace network
{

using namespace phosphor::logging;
using namespace sdbusplus::xyz::openbmc_project::Common::Error;

IPAddress::IPAddress(sdbusplus::bus::bus& bus,
          const char* objPath,
          EthernetInterface& parent,
          IP::Protocol type,
          const std::string& ipaddress,
          IP::AddressOrigin origin,
          uint8_t prefixLength,
          const std::string& gateway):
          IPIfaces(bus, objPath, true),
          parent(parent)
{
   this->address(ipaddress);
   this->prefixLength(prefixLength);
   this->gateway(gateway);
   this->type(type);
   this->origin(origin);

   // Emit deferred signal.
   emit_object_added();
}


void IPAddress::delete_()
{
    if (parent.dHCPEnabled())
    {
        log<level::ERR>("DHCP enabled on the interface"),
            entry("INTERFACE=%s", parent.interfaceName().c_str());
        elog<InternalFailure>();
    }

    if (isLinkLocalIP(address()))
    {
        log<level::ERR>("Can not delete the LinkLocal address"),
            entry("INTERFACE=%s ADDRESS=%s",
                  parent.interfaceName().c_str(), address().c_str());
        elog<InternalFailure>();
    }

    parent.deleteObject(address());
}

}//namespace network
}//namespace phosphor
