diff options
| author | Ratan Gupta <ratagupt@in.ibm.com> | 2017-09-19 09:33:51 +0530 |
|---|---|---|
| committer | Ratan Gupta <ratagupt@in.ibm.com> | 2017-10-03 11:02:20 +0530 |
| commit | b610caf66122dfc7293e2b11192f98eea731e5db (patch) | |
| tree | e3c721e1eb1c1bedf977f7ff2f8f9561423d33d2 | |
| parent | 677ae120d6f9ec9944c4473adf85cf0e96943019 (diff) | |
| download | phosphor-networkd-b610caf66122dfc7293e2b11192f98eea731e5db.tar.gz phosphor-networkd-b610caf66122dfc7293e2b11192f98eea731e5db.zip | |
Create the default network file during startup of network manager
if network file is not on the system then create the default network
file with dhcp enabled.
Resolves openbmc/openbmc#2332
Change-Id: I9e523c76f684dcb2951a0a730f94b11f326b5489
Signed-off-by: Ratan Gupta <ratagupt@in.ibm.com>
| -rw-r--r-- | network_manager.cpp | 91 | ||||
| -rw-r--r-- | network_manager.hpp | 10 | ||||
| -rw-r--r-- | network_manager_main.cpp | 12 |
3 files changed, 76 insertions, 37 deletions
diff --git a/network_manager.cpp b/network_manager.cpp index 4525e34..bb6d204 100644 --- a/network_manager.cpp +++ b/network_manager.cpp @@ -39,6 +39,56 @@ Manager::Manager(sdbusplus::bus::bus& bus, const char* objPath, setConfDir(confDir); } +bool Manager::createDefaultNetworkFiles(bool force) +{ + auto isCreated = false; + try + { + // Directory would have created before with + // setConfDir function. + if (force) + { + // Factory Reset case + // we need to forcefully write the files + // so delete the existing ones. + if (fs::is_directory(confDir)) + { + for (const auto& file : fs::directory_iterator(confDir)) + { + fs::remove(file.path()); + } + } + } + + auto interfaceStrList = getInterfaces(); + for (const auto& interface : interfaceStrList) + { + auto fileName = systemd::config::networkFilePrefix + interface + + systemd::config::networkFileSuffix; + + fs::path filePath = confDir; + filePath /= fileName; + + // create the interface specific network file + // if not exist or we forcefully wants to write + // the network file. + + if (force || !fs::is_regular_file(filePath.string())) + { + bmc::writeDHCPDefault(filePath.string(), interface); + log<level::INFO>("Created the default network file.", + entry("INTERFACE=%s", interface.c_str())); + isCreated = true; + } + } + } + catch (std::exception& e) + { + log<level::ERR>("Unable to create the default network file"); + } + return isCreated; +} + void Manager::setConfDir(const fs::path& dir) { confDir = dir; @@ -130,45 +180,14 @@ void Manager::vLAN(IntfName interfaceName, uint32_t id) void Manager::reset() { - const std::string networkConfig = confDir.string(); - bool interfacesMapped = false; - - if(fs::is_directory(networkConfig)) - { - for(auto& file : fs::directory_iterator(networkConfig)) - { - fs::remove(file.path()); - } - - for (auto& intf : interfaces) - { - auto fileName = systemd::config::networkFilePrefix + intf.first + - systemd::config::networkFileSuffix; - - fs::path filePath = networkConfig; - filePath /= fileName; - - bmc::writeDHCPDefault(filePath.string(), intf.first); - interfacesMapped = true; - } - - if(interfacesMapped) - { - log<level::INFO>("Network configuration reset to DHCP."); - } - else - { - log<level::ERR>("No network interfaces are mapped."); - elog<InternalFailure>(); - } - } - else + if(!createDefaultNetworkFiles(true)) { - log<level::ERR>("Network configuration directory not found!"); - elog<InternalFailure>(); + log<level::ERR>("Network Factory Reset failed."); + return; + // TODO: openbmc/openbmc#1721 - Log ResetFailed error here. } - return; + log<level::INFO>("Network Factory Reset done."); } // Need to merge the below function with the code which writes the diff --git a/network_manager.hpp b/network_manager.hpp index 0d15fc6..70ed8fc 100644 --- a/network_manager.hpp +++ b/network_manager.hpp @@ -94,11 +94,19 @@ class Manager : public details::VLANCreateIface */ const DHCPConfPtr& getDHCPConf() { return dhcpConf; } - private: + /** @brief create the default network files for each interface + * @detail if force param is true then forcefully create the network + * files otherwise if network file doesn't exist then + * create it. + * @param[in] force - forcefully create the file + * @return true if network file created else false + */ + bool createDefaultNetworkFiles(bool force); /** @brief restart the systemd networkd. */ void restartNetwork(); + private: /** @brief Persistent sdbusplus DBus bus connection. */ sdbusplus::bus::bus& bus; diff --git a/network_manager_main.cpp b/network_manager_main.cpp index 7fa3b05..969b705 100644 --- a/network_manager_main.cpp +++ b/network_manager_main.cpp @@ -63,8 +63,20 @@ int main(int argc, char *argv[]) phosphor::network::rtnetlink::Server svr(eventPtr); + // create the network interface dbus objects and system config phosphor::network::manager->createChildObjects(); + // create the default network files if the network file + // is not there for any interface. + // Parameter false means don't create the network + // files forcefully. + if (phosphor::network::manager->createDefaultNetworkFiles(false)) + { + // if files created restart the network. + // don't need to call the create child objects as eventhandler + // will create it. + phosphor::network::manager->restartNetwork(); + } return svr.run(); } |

