blob: 0c95c8d7fe3073e0399fe463e3a1a8d750e291dd [file] [log] [blame]
Ratan Guptaa54d8f82017-09-08 17:05:46 +05301#include "config.h"
Ratan Gupta0f9dc1b2017-09-03 17:57:50 +05302#include "network_manager.hpp"
3#include "rtnetlink_server.hpp"
Ratan Guptaa54d8f82017-09-08 17:05:46 +05304#include "timer.hpp"
Ratan Gupta0f9dc1b2017-09-03 17:57:50 +05305
6#include <memory>
7
8#include <phosphor-logging/log.hpp>
Ratan Guptacb7098d2017-04-14 17:46:05 +05309#include <sdbusplus/bus.hpp>
10#include <sdbusplus/server/manager.hpp>
Ratan Gupta0f9dc1b2017-09-03 17:57:50 +053011
12namespace phosphor
13{
14namespace network
15{
16
17std::unique_ptr<phosphor::network::Manager> manager = nullptr;
Ratan Gupta16f12882017-09-22 18:26:11 +053018std::unique_ptr<phosphor::network::Timer> refreshObjectTimer = nullptr;
19std::unique_ptr<phosphor::network::Timer> restartTimer = nullptr;
Ratan Guptaa54d8f82017-09-08 17:05:46 +053020
Ratan Gupta16f12882017-09-22 18:26:11 +053021/** @brief refresh the network objects. */
Ratan Guptaa54d8f82017-09-08 17:05:46 +053022void refreshObjects()
23{
Ratan Gupta16f12882017-09-22 18:26:11 +053024 if (manager)
25 {
26 manager->createChildObjects();
27 }
28}
29
30/** @brief restart the systemd networkd. */
31void restartNetwork()
32{
33 restartSystemdUnit("systemd-networkd.service");
Ratan Guptaa54d8f82017-09-08 17:05:46 +053034}
Ratan Gupta0f9dc1b2017-09-03 17:57:50 +053035
36} //namespace network
37} //namespace phosphor
Ratan Gupta8c834932017-04-14 16:30:24 +053038
Ratan Gupta16f12882017-09-22 18:26:11 +053039void initializeTimers()
40{
41 std::function<void()> refreshFunc(
42 std::bind(&phosphor::network::refreshObjects));
43
44 std::function<void()> restartFunc(
45 std::bind(&phosphor::network::restartNetwork));
46
47 phosphor::network::refreshObjectTimer =
48 std::make_unique<phosphor::network::Timer>(refreshFunc);
49
50 phosphor::network::restartTimer =
51 std::make_unique<phosphor::network::Timer>(restartFunc);
52}
53
Ratan Gupta8c834932017-04-14 16:30:24 +053054int main(int argc, char *argv[])
55{
Ratan Gupta0f9dc1b2017-09-03 17:57:50 +053056 using namespace phosphor::logging;
57
Ratan Gupta16f12882017-09-22 18:26:11 +053058 initializeTimers();
Ratan Guptaa54d8f82017-09-08 17:05:46 +053059
Ratan Guptacb7098d2017-04-14 17:46:05 +053060 auto bus = sdbusplus::bus::new_default();
61
Ratan Gupta0f9dc1b2017-09-03 17:57:50 +053062 // Need sd_event to watch for OCC device errors
63 sd_event* event = nullptr;
64 auto r = sd_event_default(&event);
65 if (r < 0)
66 {
67 log<level::ERR>("Error creating a default sd_event handler");
68 return r;
69 }
70
71 phosphor::network::EventPtr eventPtr{event};
72 event = nullptr;
73
74 // Attach the bus to sd_event to service user requests
75 bus.attach_event(eventPtr.get(), SD_EVENT_PRIORITY_NORMAL);
76
Ratan Guptacb7098d2017-04-14 17:46:05 +053077 // Add sdbusplus Object Manager for the 'root' path of the network manager.
78 sdbusplus::server::manager::manager objManager(bus, OBJ_NETWORK);
Ratan Gupta26e87a02017-08-18 01:08:40 +053079 bus.request_name(BUSNAME_NETWORK);
Ratan Guptacb7098d2017-04-14 17:46:05 +053080
Ratan Gupta0f9dc1b2017-09-03 17:57:50 +053081 phosphor::network::manager =
82 std::make_unique<phosphor::network::Manager>(bus,
83 OBJ_NETWORK,
84 NETWORK_CONF_DIR);
Ratan Guptacb7098d2017-04-14 17:46:05 +053085
Ratan Gupta0f9dc1b2017-09-03 17:57:50 +053086 phosphor::network::rtnetlink::Server svr(eventPtr);
87
Ratan Guptab610caf2017-09-19 09:33:51 +053088 // create the network interface dbus objects and system config
Ratan Gupta0f9dc1b2017-09-03 17:57:50 +053089 phosphor::network::manager->createChildObjects();
Ratan Gupta29b0e432017-05-25 12:51:40 +053090
Ratan Guptab610caf2017-09-19 09:33:51 +053091 // create the default network files if the network file
92 // is not there for any interface.
93 // Parameter false means don't create the network
94 // files forcefully.
95 if (phosphor::network::manager->createDefaultNetworkFiles(false))
96 {
97 // if files created restart the network.
98 // don't need to call the create child objects as eventhandler
99 // will create it.
Ratan Gupta16f12882017-09-22 18:26:11 +0530100 phosphor::network::restartNetwork();
Ratan Guptab610caf2017-09-19 09:33:51 +0530101 }
Ratan Gupta0f9dc1b2017-09-03 17:57:50 +0530102 return svr.run();
Ratan Gupta8c834932017-04-14 16:30:24 +0530103}
Ratan Guptaa54d8f82017-09-08 17:05:46 +0530104