summaryrefslogtreecommitdiffstats
path: root/ethernet_interface.cpp
diff options
context:
space:
mode:
authorRatan Gupta <ratagupt@in.ibm.com>2017-07-25 13:47:13 +0530
committerPatrick Williams <patrick@stwcx.xyz>2017-08-13 11:32:30 +0000
commit5978dd11cba74452d6550399191195c9617c2984 (patch)
tree31afca0f99c2f8e21d6de8747f671922be567939 /ethernet_interface.cpp
parent255d514ef2a61125670ed6a5cdf942a287315749 (diff)
downloadphosphor-networkd-5978dd11cba74452d6550399191195c9617c2984.tar.gz
phosphor-networkd-5978dd11cba74452d6550399191195c9617c2984.zip
Create the VLAN Interface Object
Change-Id: I118fc4bbcad2a478a8aad976e0619537780c1227 Signed-off-by: Ratan Gupta <ratagupt@in.ibm.com>
Diffstat (limited to 'ethernet_interface.cpp')
-rw-r--r--ethernet_interface.cpp39
1 files changed, 37 insertions, 2 deletions
diff --git a/ethernet_interface.cpp b/ethernet_interface.cpp
index d7648a2..ef7b9df 100644
--- a/ethernet_interface.cpp
+++ b/ethernet_interface.cpp
@@ -1,6 +1,7 @@
#include "config.h"
#include "ipaddress.hpp"
#include "ethernet_interface.hpp"
+#include "vlan_interface.hpp"
#include "network_manager.hpp"
#include "routing_table.hpp"
@@ -36,15 +37,17 @@ EthernetInterface::EthernetInterface(sdbusplus::bus::bus& bus,
Manager& parent,
bool emitSignal) :
Ifaces(bus, objPath.c_str(), true),
+ confDir(NETWORK_CONF_DIR),
bus(bus),
manager(parent),
objPath(objPath)
{
auto intfName = objPath.substr(objPath.rfind("/") + 1);
+ std::replace(intfName.begin(), intfName.end(), '_', '.');
interfaceName(intfName);
dHCPEnabled(dhcpEnabled);
mACAddress(getMACAddress());
- createIPAddressObjects();
+
// Emit deferred signal.
if (emitSignal)
{
@@ -58,9 +61,11 @@ void EthernetInterface::createIPAddressObjects()
addrs.clear();
auto addrs = getInterfaceAddrs()[interfaceName()];
+
IP::Protocol addressType = IP::Protocol::IPv4;
IP::AddressOrigin origin = IP::AddressOrigin::Static;
route::Table routingTable;
+
for (auto& addr : addrs)
{
if (addr.addrType == AF_INET6)
@@ -284,8 +289,13 @@ std::string EthernetInterface::generateObjectPath(IP::Protocol addressType,
bool EthernetInterface::dHCPEnabled(bool value)
{
+ if (value == EthernetInterfaceIntf::dHCPEnabled())
+ {
+ return value;
+ }
+
EthernetInterfaceIntf::dHCPEnabled(value);
- if (value == true)
+ if (value)
{
manager.writeToConfigurationFile();
createIPAddressObjects();
@@ -293,5 +303,30 @@ bool EthernetInterface::dHCPEnabled(bool value)
return value;
}
+void EthernetInterface::createVLAN(VlanId id)
+{
+ std::string vlanInterfaceName = interfaceName() + "." +
+ std::to_string(id);
+ std::string path = objPath;
+ path += "_" + std::to_string(id);
+
+
+ auto vlanIntf = std::make_unique<phosphor::network::VlanInterface>(
+ bus,
+ path.c_str(),
+ EthernetInterfaceIntf::dHCPEnabled(),
+ id,
+ *this,
+ manager);
+
+ // write the device file for the vlan interface.
+ vlanIntf->writeDeviceFile();
+
+ this->vlanInterfaces.emplace(std::move(vlanInterfaceName),
+ std::move(vlanIntf));
+ // write the new vlan device entry to the configuration(network) file.
+ manager.writeToConfigurationFile();
+
+}
}//namespace network
}//namespace phosphor
OpenPOWER on IntegriCloud