summaryrefslogtreecommitdiffstats
path: root/ethernet_interface.cpp
diff options
context:
space:
mode:
authorNagaraju Goruganti <ngorugan@in.ibm.com>2017-10-03 08:43:08 -0500
committerBrad Bishop <bradleyb@fuzziesquirrel.com>2017-10-11 23:16:31 +0000
commit66b974d2d679ece3aa67032bbc13ac166702cede (patch)
tree4c31f2c253a8b2d289aad27970a31e0a13611d03 /ethernet_interface.cpp
parentc9645fe5c874930445bca6ba51ac9daee916c99b (diff)
downloadphosphor-networkd-66b974d2d679ece3aa67032bbc13ac166702cede.tar.gz
phosphor-networkd-66b974d2d679ece3aa67032bbc13ac166702cede.zip
IP Address use case validation
-validates IPAddress/gateway using inet_pton api. -validates prefix length for ipv4/ipv6. -if dhcp is enabled, it won't allow to set ip/gateway. Resolves openbmc/openbmc#1671 Change-Id: I76c1d9d11dfb59002eb1310d87e94ee622714a4a Signed-off-by: Nagaraju Goruganti <ngorugan@in.ibm.com>
Diffstat (limited to 'ethernet_interface.cpp')
-rw-r--r--ethernet_interface.cpp37
1 files changed, 34 insertions, 3 deletions
diff --git a/ethernet_interface.cpp b/ethernet_interface.cpp
index ffaac74..5a7c61c 100644
--- a/ethernet_interface.cpp
+++ b/ethernet_interface.cpp
@@ -33,6 +33,7 @@ namespace network
using namespace phosphor::logging;
using namespace sdbusplus::xyz::openbmc_project::Common::Error;
+using Argument = xyz::openbmc_project::Common::InvalidArgument;
EthernetInterface::EthernetInterface(sdbusplus::bus::bus& bus,
const std::string& objPath,
@@ -78,7 +79,7 @@ void EthernetInterface::createIPAddressObjects()
{
origin = IP::AddressOrigin::DHCP;
}
- else if (isLinkLocal(addr.ipaddress))
+ else if (isLinkLocalIP(addr.ipaddress))
{
origin = IP::AddressOrigin::LinkLocal;
}
@@ -113,12 +114,42 @@ void EthernetInterface::iP(IP::Protocol protType,
if (dHCPEnabled())
{
log<level::INFO>("DHCP enabled on the interface"),
- entry("INTERFACE=%s",interfaceName().c_str());
- return;
+ entry("INTERFACE=%s", interfaceName().c_str());
+ dHCPEnabled(false);
}
+
IP::AddressOrigin origin = IP::AddressOrigin::Static;
+ int addressFamily = (protType == IP::Protocol::IPv4) ? AF_INET : AF_INET6;
+
+ if (!isValidIP(addressFamily, ipaddress))
+ {
+ log<level::ERR>("Not a valid IP address"),
+ entry("ADDRESS=%s", ipaddress.c_str());
+ elog<InvalidArgument>(Argument::ARGUMENT_NAME("ipaddress"),
+ Argument::ARGUMENT_VALUE(ipaddress.c_str()));
+ }
+
+ if (!gateway.empty() && (!isValidIP(addressFamily, gateway)))
+ {
+ log<level::ERR>("Not a valid Gateway"),
+ entry("GATEWAY=%s", gateway.c_str());
+ elog<InvalidArgument>(Argument::ARGUMENT_NAME("gateway"),
+ Argument::ARGUMENT_VALUE(gateway.c_str()));
+ }
+
+ if (!isValidPrefix(addressFamily, prefixLength))
+ {
+ log<level::ERR>("PrefixLength is not correct "),
+ entry("PREFIXLENGTH=%d", gateway.c_str());
+ elog<InvalidArgument>(Argument::ARGUMENT_NAME("prefixLength"),
+ Argument::ARGUMENT_VALUE(std::to_string(
+ prefixLength).c_str()));
+ return;
+ }
+
+
std::string objectPath = generateObjectPath(protType,
ipaddress,
prefixLength,
OpenPOWER on IntegriCloud