blob: dc51915ed172a52867dc906d999bfcd9f94dd812 [file] [log] [blame]
Ratan Guptaa54d8f82017-09-08 17:05:46 +05301#include "config.h"
Gunnar Mills57d9c502018-09-14 14:42:34 -05002
William A. Kennington III0b111d42022-10-04 18:06:11 -07003#ifdef SYNC_MAC_FROM_INVENTORY
4#include "inventory_mac.hpp"
5#endif
Ratan Gupta0f9dc1b2017-09-03 17:57:50 +05306#include "network_manager.hpp"
7#include "rtnetlink_server.hpp"
William A. Kennington III3a70fa22018-09-20 18:48:20 -07008#include "types.hpp"
Ratan Gupta0f9dc1b2017-09-03 17:57:50 +05309
William A. Kennington III4fd52ae2022-09-30 13:49:39 -070010#include <fmt/format.h>
Ratan Gupta0f9dc1b2017-09-03 17:57:50 +053011
William A. Kennington III3a70fa22018-09-20 18:48:20 -070012#include <functional>
Ratan Guptaf6657382017-11-10 17:58:17 +053013#include <memory>
Ratan Gupta0f9dc1b2017-09-03 17:57:50 +053014#include <phosphor-logging/log.hpp>
Ratan Guptacb7098d2017-04-14 17:46:05 +053015#include <sdbusplus/bus.hpp>
16#include <sdbusplus/server/manager.hpp>
William A. Kennington III3a70fa22018-09-20 18:48:20 -070017#include <sdeventplus/event.hpp>
William A. Kennington III217bb3f2022-09-29 13:43:13 -070018#include <sdeventplus/source/signal.hpp>
19#include <stdplus/signal.hpp>
Ratan Gupta0f9dc1b2017-09-03 17:57:50 +053020
William A. Kennington III09095f82018-09-27 12:05:12 -070021using phosphor::logging::level;
22using phosphor::logging::log;
William A. Kennington III09095f82018-09-27 12:05:12 -070023
William A. Kennington III483e7772019-02-12 19:03:15 -080024constexpr char NETWORK_CONF_DIR[] = "/etc/systemd/network";
William A. Kennington III5f1eb462019-02-12 19:47:51 -080025constexpr char DEFAULT_OBJPATH[] = "/xyz/openbmc_project/network";
26
Ratan Gupta0f9dc1b2017-09-03 17:57:50 +053027namespace phosphor
28{
29namespace network
30{
31
William A. Kennington III4fd52ae2022-09-30 13:49:39 -070032std::unique_ptr<Manager> manager = nullptr;
William A. Kennington IIIc7cf25f2021-11-09 16:16:59 -080033std::unique_ptr<Timer> reloadTimer = nullptr;
Ratan Guptaa54d8f82017-09-08 17:05:46 +053034
William A. Kennington IIIc7cf25f2021-11-09 16:16:59 -080035void reloadNetworkd()
36{
37 if (manager)
38 {
39 log<level::INFO>("Sending networkd reload");
40 manager->doReloadConfigs();
41 log<level::INFO>("Done networkd reload");
42 }
43}
44
William A. Kennington III217bb3f2022-09-29 13:43:13 -070045void initializeTimers(sdeventplus::Event& event)
Ratan Gupta16f12882017-09-22 18:26:11 +053046{
William A. Kennington IIIc7cf25f2021-11-09 16:16:59 -080047 reloadTimer = std::make_unique<Timer>(event, std::bind(reloadNetworkd));
Ratan Gupta16f12882017-09-22 18:26:11 +053048}
49
William A. Kennington III217bb3f2022-09-29 13:43:13 -070050void termCb(sdeventplus::source::Signal& signal, const struct signalfd_siginfo*)
51{
52 log<level::NOTICE>("Got TERM, exiting");
53 signal.get_event().exit(0);
54}
55
William A. Kennington III4fd52ae2022-09-30 13:49:39 -070056int main()
Ratan Gupta8c834932017-04-14 16:30:24 +053057{
William A. Kennington III217bb3f2022-09-29 13:43:13 -070058 auto event = sdeventplus::Event::get_default();
59 stdplus::signal::block(SIGTERM);
60 sdeventplus::source::Signal(event, SIGTERM, termCb).set_floating(true);
61
62 initializeTimers(event);
Ratan Guptaa54d8f82017-09-08 17:05:46 +053063
Ratan Guptacb7098d2017-04-14 17:46:05 +053064 auto bus = sdbusplus::bus::new_default();
Ratan Gupta0f9dc1b2017-09-03 17:57:50 +053065 // Attach the bus to sd_event to service user requests
William A. Kennington III217bb3f2022-09-29 13:43:13 -070066 bus.attach_event(event.get(), SD_EVENT_PRIORITY_NORMAL);
Ratan Gupta0f9dc1b2017-09-03 17:57:50 +053067
Ratan Guptacb7098d2017-04-14 17:46:05 +053068 // Add sdbusplus Object Manager for the 'root' path of the network manager.
Patrick Williamsc38b0712022-07-22 19:26:54 -050069 sdbusplus::server::manager_t objManager(bus, DEFAULT_OBJPATH);
William A. Kennington III5f1eb462019-02-12 19:47:51 -080070 bus.request_name(DEFAULT_BUSNAME);
Ratan Guptacb7098d2017-04-14 17:46:05 +053071
William A. Kennington III4fd52ae2022-09-30 13:49:39 -070072 manager = std::make_unique<Manager>(bus, DEFAULT_OBJPATH, NETWORK_CONF_DIR);
Ratan Guptacb7098d2017-04-14 17:46:05 +053073
Vishwanatha Subbanna18891c62017-10-17 15:22:46 +053074 // RTNETLINK event handler
William A. Kennington III71590bf2022-10-31 14:14:16 -070075 netlink::Server svr(event, *manager);
Vishwanatha Subbanna18891c62017-10-17 15:22:46 +053076
William A. Kennington III6f39c5e2021-05-13 18:39:23 -070077#ifdef SYNC_MAC_FROM_INVENTORY
William A. Kennington III0b111d42022-10-04 18:06:11 -070078 auto runtime = inventory::watch(bus, *manager);
Manojkiran Edacc099a82020-05-11 14:25:16 +053079#endif
William A. Kennington IIIbd649af2021-10-08 17:55:13 -070080
William A. Kennington III217bb3f2022-09-29 13:43:13 -070081 return event.loop();
William A. Kennington III4fd52ae2022-09-30 13:49:39 -070082}
83
84} // namespace network
85} // namespace phosphor
86
87int main(int /*argc*/, char** /*argv*/)
88{
89 try
90 {
91 return phosphor::network::main();
92 }
93 catch (const std::exception& e)
94 {
William A. Kennington IIIbe1af442022-11-12 01:49:21 -080095 fmt::print(stderr, "FAILED: {}", e.what());
96 fflush(stderr);
William A. Kennington III4fd52ae2022-09-30 13:49:39 -070097 return 1;
98 }
Ratan Gupta8c834932017-04-14 16:30:24 +053099}