summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/webserver_run.hpp3
-rw-r--r--meson.build7
-rw-r--r--redfish-core/include/redfish.hpp235
-rw-r--r--redfish-core/src/redfish.cpp227
-rw-r--r--src/webserver_main.cpp151
-rw-r--r--src/webserver_run.cpp153
6 files changed, 393 insertions, 383 deletions
diff --git a/include/webserver_run.hpp b/include/webserver_run.hpp
new file mode 100644
index 0000000000..300d68db14
--- /dev/null
+++ b/include/webserver_run.hpp
@@ -0,0 +1,3 @@
+#pragma once
+
+int run();
diff --git a/meson.build b/meson.build
index 9e84fa9238..1665946d85 100644
--- a/meson.build
+++ b/meson.build
@@ -387,11 +387,16 @@ bmcweb_dependencies += conf_h_dep
fs = import('fs')
srcfiles_bmcweb = files(
+ # Begin large files, should be at the beginning
+ 'redfish-core/src/redfish.cpp',
+ 'src/webserver_run.cpp',
+ # end large files
+
'redfish-core/src/error_messages.cpp',
'redfish-core/src/registries.cpp',
'redfish-core/src/utils/dbus_utils.cpp',
- 'redfish-core/src/utils/time_utils.cpp',
'redfish-core/src/utils/json_utils.cpp',
+ 'redfish-core/src/utils/time_utils.cpp',
'src/boost_asio_ssl.cpp',
'src/boost_asio.cpp',
'src/boost_beast.cpp',
diff --git a/redfish-core/include/redfish.hpp b/redfish-core/include/redfish.hpp
index 89d5679d1f..38a0296ab5 100644
--- a/redfish-core/include/redfish.hpp
+++ b/redfish-core/include/redfish.hpp
@@ -1,62 +1,6 @@
-/*
-// Copyright (c) 2018-2019 Intel Corporation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-*/
#pragma once
-#include "account_service.hpp"
-#include "aggregation_service.hpp"
-#include "bios.hpp"
-#include "cable.hpp"
-#include "certificate_service.hpp"
-#include "chassis.hpp"
-#include "environment_metrics.hpp"
-#include "ethernet.hpp"
-#include "event_service.hpp"
-#include "eventservice_sse.hpp"
-#include "fabric_adapters.hpp"
-#include "fan.hpp"
-#include "hypervisor_system.hpp"
-#include "log_services.hpp"
-#include "manager_diagnostic_data.hpp"
-#include "managers.hpp"
-#include "memory.hpp"
-#include "message_registries.hpp"
-#include "metric_report.hpp"
-#include "metric_report_definition.hpp"
-#include "network_protocol.hpp"
-#include "pcie.hpp"
-#include "pcie_slots.hpp"
-#include "power.hpp"
-#include "power_subsystem.hpp"
-#include "power_supply.hpp"
-#include "processor.hpp"
-#include "redfish_sessions.hpp"
-#include "redfish_v1.hpp"
-#include "roles.hpp"
-#include "sensors.hpp"
-#include "service_root.hpp"
-#include "storage.hpp"
-#include "systems.hpp"
-#include "task.hpp"
-#include "telemetry_service.hpp"
-#include "thermal.hpp"
-#include "thermal_metrics.hpp"
-#include "thermal_subsystem.hpp"
-#include "trigger.hpp"
-#include "update_service.hpp"
-#include "virtual_media.hpp"
+#include "app.hpp"
namespace redfish
{
@@ -73,182 +17,7 @@ class RedfishService
*
* @param[in] app Crow app on which Redfish will initialize
*/
- explicit RedfishService(App& app)
- {
- requestAccountServiceRoutes(app);
-#ifdef BMCWEB_ENABLE_REDFISH_AGGREGATION
- requestRoutesAggregationService(app);
- requestRoutesAggregationSourceCollection(app);
- requestRoutesAggregationSource(app);
-#endif
- requestRoutesRoles(app);
- requestRoutesRoleCollection(app);
- requestRoutesServiceRoot(app);
- requestRoutesNetworkProtocol(app);
- requestRoutesSession(app);
- requestEthernetInterfacesRoutes(app);
-#ifdef BMCWEB_ALLOW_DEPRECATED_POWER_THERMAL
- requestRoutesThermal(app);
- requestRoutesPower(app);
-#endif
-#ifdef BMCWEB_NEW_POWERSUBSYSTEM_THERMALSUBSYSTEM
- requestRoutesEnvironmentMetrics(app);
- requestRoutesPowerSubsystem(app);
- requestRoutesPowerSupply(app);
- requestRoutesPowerSupplyCollection(app);
- requestRoutesThermalMetrics(app);
- requestRoutesThermalSubsystem(app);
- requestRoutesFan(app);
- requestRoutesFanCollection(app);
-#endif
- requestRoutesManagerCollection(app);
- requestRoutesManager(app);
- requestRoutesManagerResetAction(app);
- requestRoutesManagerResetActionInfo(app);
- requestRoutesManagerResetToDefaultsAction(app);
- requestRoutesManagerDiagnosticData(app);
- requestRoutesChassisCollection(app);
- requestRoutesChassis(app);
- requestRoutesChassisResetAction(app);
- requestRoutesChassisResetActionInfo(app);
- requestRoutesChassisDrive(app);
- requestRoutesChassisDriveName(app);
- requestRoutesUpdateService(app);
- requestRoutesStorageCollection(app);
- requestRoutesStorage(app);
- requestRoutesStorageControllerCollection(app);
- requestRoutesStorageController(app);
- requestRoutesDrive(app);
- requestRoutesCable(app);
- requestRoutesCableCollection(app);
-#ifdef BMCWEB_INSECURE_ENABLE_REDFISH_FW_TFTP_UPDATE
- requestRoutesUpdateServiceActionsSimpleUpdate(app);
-#endif
- requestRoutesSoftwareInventoryCollection(app);
- requestRoutesSoftwareInventory(app);
-
- requestRoutesSystemLogServiceCollection(app);
- requestRoutesEventLogService(app);
- requestRoutesPostCodesEntryAdditionalData(app);
-
- requestRoutesPostCodesLogService(app);
- requestRoutesPostCodesClear(app);
- requestRoutesPostCodesEntry(app);
- requestRoutesPostCodesEntryCollection(app);
-
-#ifdef BMCWEB_ENABLE_REDFISH_DUMP_LOG
- requestRoutesSystemDumpService(app);
- requestRoutesSystemDumpEntryCollection(app);
- requestRoutesSystemDumpEntry(app);
- requestRoutesSystemDumpCreate(app);
- requestRoutesSystemDumpClear(app);
-
- requestRoutesBMCDumpService(app);
- requestRoutesBMCDumpEntryCollection(app);
- requestRoutesBMCDumpEntry(app);
- requestRoutesBMCDumpEntryDownload(app);
- requestRoutesBMCDumpCreate(app);
- requestRoutesBMCDumpClear(app);
-
- requestRoutesFaultLogDumpService(app);
- requestRoutesFaultLogDumpEntryCollection(app);
- requestRoutesFaultLogDumpEntry(app);
- requestRoutesFaultLogDumpClear(app);
-#endif
-
-#ifndef BMCWEB_ENABLE_REDFISH_DBUS_LOG_ENTRIES
- requestRoutesJournalEventLogEntryCollection(app);
- requestRoutesJournalEventLogEntry(app);
- requestRoutesJournalEventLogClear(app);
-#endif
-
- requestRoutesBMCLogServiceCollection(app);
-#ifdef BMCWEB_ENABLE_REDFISH_BMC_JOURNAL
- requestRoutesBMCJournalLogService(app);
- requestRoutesBMCJournalLogEntryCollection(app);
- requestRoutesBMCJournalLogEntry(app);
-#endif
-
-#ifdef BMCWEB_ENABLE_REDFISH_CPU_LOG
- requestRoutesCrashdumpService(app);
- requestRoutesCrashdumpEntryCollection(app);
- requestRoutesCrashdumpEntry(app);
- requestRoutesCrashdumpFile(app);
- requestRoutesCrashdumpClear(app);
- requestRoutesCrashdumpCollect(app);
-#endif // BMCWEB_ENABLE_REDFISH_CPU_LOG
-
- requestRoutesProcessorCollection(app);
- requestRoutesProcessor(app);
- requestRoutesOperatingConfigCollection(app);
- requestRoutesOperatingConfig(app);
- requestRoutesMemoryCollection(app);
- requestRoutesMemory(app);
-
- requestRoutesSystems(app);
-
- requestRoutesBiosService(app);
- requestRoutesBiosReset(app);
-
-#ifdef BMCWEB_ENABLE_VM_NBDPROXY
- requestNBDVirtualMediaRoutes(app);
-#endif // BMCWEB_ENABLE_VM_NBDPROXY
-
-#ifdef BMCWEB_ENABLE_REDFISH_DBUS_LOG_ENTRIES
- requestRoutesDBusLogServiceActionsClear(app);
- requestRoutesDBusEventLogEntryCollection(app);
- requestRoutesDBusEventLogEntry(app);
- requestRoutesDBusEventLogEntryDownload(app);
-#endif
-
-#ifdef BMCWEB_ENABLE_REDFISH_HOST_LOGGER
- requestRoutesSystemHostLogger(app);
- requestRoutesSystemHostLoggerCollection(app);
- requestRoutesSystemHostLoggerLogEntry(app);
-#endif
-
- requestRoutesMessageRegistryFileCollection(app);
- requestRoutesMessageRegistryFile(app);
- requestRoutesMessageRegistry(app);
-
- requestRoutesCertificateService(app);
- requestRoutesHTTPSCertificate(app);
- requestRoutesLDAPCertificate(app);
- requestRoutesTrustStoreCertificate(app);
-
- requestRoutesSystemPCIeFunctionCollection(app);
- requestRoutesSystemPCIeFunction(app);
- requestRoutesSystemPCIeDeviceCollection(app);
- requestRoutesSystemPCIeDevice(app);
-
- requestRoutesSensorCollection(app);
- requestRoutesSensor(app);
-
- requestRoutesTaskMonitor(app);
- requestRoutesTaskService(app);
- requestRoutesTaskCollection(app);
- requestRoutesTask(app);
- requestRoutesEventService(app);
- requestRoutesEventServiceSse(app);
- requestRoutesEventDestinationCollection(app);
- requestRoutesEventDestination(app);
- requestRoutesFabricAdapters(app);
- requestRoutesFabricAdapterCollection(app);
- requestRoutesSubmitTestEvent(app);
-
- requestRoutesHypervisorSystems(app);
-
- requestRoutesTelemetryService(app);
- requestRoutesMetricReportDefinitionCollection(app);
- requestRoutesMetricReportDefinition(app);
- requestRoutesMetricReportCollection(app);
- requestRoutesMetricReport(app);
- requestRoutesTriggerCollection(app);
- requestRoutesTrigger(app);
-
- // Note, this must be the last route registered
- requestRoutesRedfish(app);
- }
+ explicit RedfishService(App& app);
};
} // namespace redfish
diff --git a/redfish-core/src/redfish.cpp b/redfish-core/src/redfish.cpp
new file mode 100644
index 0000000000..58d7ddd19c
--- /dev/null
+++ b/redfish-core/src/redfish.cpp
@@ -0,0 +1,227 @@
+#include "redfish.hpp"
+
+#include "account_service.hpp"
+#include "aggregation_service.hpp"
+#include "app.hpp"
+#include "bios.hpp"
+#include "cable.hpp"
+#include "certificate_service.hpp"
+#include "chassis.hpp"
+#include "environment_metrics.hpp"
+#include "ethernet.hpp"
+#include "event_service.hpp"
+#include "eventservice_sse.hpp"
+#include "fabric_adapters.hpp"
+#include "fan.hpp"
+#include "hypervisor_system.hpp"
+#include "log_services.hpp"
+#include "manager_diagnostic_data.hpp"
+#include "managers.hpp"
+#include "memory.hpp"
+#include "message_registries.hpp"
+#include "metric_report.hpp"
+#include "metric_report_definition.hpp"
+#include "network_protocol.hpp"
+#include "pcie.hpp"
+#include "pcie_slots.hpp"
+#include "power.hpp"
+#include "power_subsystem.hpp"
+#include "power_supply.hpp"
+#include "processor.hpp"
+#include "redfish_sessions.hpp"
+#include "redfish_v1.hpp"
+#include "roles.hpp"
+#include "sensors.hpp"
+#include "service_root.hpp"
+#include "storage.hpp"
+#include "systems.hpp"
+#include "task.hpp"
+#include "telemetry_service.hpp"
+#include "thermal.hpp"
+#include "thermal_metrics.hpp"
+#include "thermal_subsystem.hpp"
+#include "trigger.hpp"
+#include "update_service.hpp"
+#include "virtual_media.hpp"
+
+namespace redfish
+{
+
+RedfishService::RedfishService(App& app)
+{
+ requestAccountServiceRoutes(app);
+#ifdef BMCWEB_ENABLE_REDFISH_AGGREGATION
+ requestRoutesAggregationService(app);
+ requestRoutesAggregationSourceCollection(app);
+ requestRoutesAggregationSource(app);
+#endif
+ requestRoutesRoles(app);
+ requestRoutesRoleCollection(app);
+ requestRoutesServiceRoot(app);
+ requestRoutesNetworkProtocol(app);
+ requestRoutesSession(app);
+ requestEthernetInterfacesRoutes(app);
+#ifdef BMCWEB_ALLOW_DEPRECATED_POWER_THERMAL
+ requestRoutesThermal(app);
+ requestRoutesPower(app);
+#endif
+#ifdef BMCWEB_NEW_POWERSUBSYSTEM_THERMALSUBSYSTEM
+ requestRoutesEnvironmentMetrics(app);
+ requestRoutesPowerSubsystem(app);
+ requestRoutesPowerSupply(app);
+ requestRoutesPowerSupplyCollection(app);
+ requestRoutesThermalMetrics(app);
+ requestRoutesThermalSubsystem(app);
+ requestRoutesFan(app);
+ requestRoutesFanCollection(app);
+#endif
+ requestRoutesManagerCollection(app);
+ requestRoutesManager(app);
+ requestRoutesManagerResetAction(app);
+ requestRoutesManagerResetActionInfo(app);
+ requestRoutesManagerResetToDefaultsAction(app);
+ requestRoutesManagerDiagnosticData(app);
+ requestRoutesChassisCollection(app);
+ requestRoutesChassis(app);
+ requestRoutesChassisResetAction(app);
+ requestRoutesChassisResetActionInfo(app);
+ requestRoutesChassisDrive(app);
+ requestRoutesChassisDriveName(app);
+ requestRoutesUpdateService(app);
+ requestRoutesStorageCollection(app);
+ requestRoutesStorage(app);
+ requestRoutesStorageControllerCollection(app);
+ requestRoutesStorageController(app);
+ requestRoutesDrive(app);
+ requestRoutesCable(app);
+ requestRoutesCableCollection(app);
+#ifdef BMCWEB_INSECURE_ENABLE_REDFISH_FW_TFTP_UPDATE
+ requestRoutesUpdateServiceActionsSimpleUpdate(app);
+#endif
+ requestRoutesSoftwareInventoryCollection(app);
+ requestRoutesSoftwareInventory(app);
+
+ requestRoutesSystemLogServiceCollection(app);
+ requestRoutesEventLogService(app);
+ requestRoutesPostCodesEntryAdditionalData(app);
+
+ requestRoutesPostCodesLogService(app);
+ requestRoutesPostCodesClear(app);
+ requestRoutesPostCodesEntry(app);
+ requestRoutesPostCodesEntryCollection(app);
+
+#ifdef BMCWEB_ENABLE_REDFISH_DUMP_LOG
+ requestRoutesSystemDumpService(app);
+ requestRoutesSystemDumpEntryCollection(app);
+ requestRoutesSystemDumpEntry(app);
+ requestRoutesSystemDumpCreate(app);
+ requestRoutesSystemDumpClear(app);
+
+ requestRoutesBMCDumpService(app);
+ requestRoutesBMCDumpEntryCollection(app);
+ requestRoutesBMCDumpEntry(app);
+ requestRoutesBMCDumpEntryDownload(app);
+ requestRoutesBMCDumpCreate(app);
+ requestRoutesBMCDumpClear(app);
+
+ requestRoutesFaultLogDumpService(app);
+ requestRoutesFaultLogDumpEntryCollection(app);
+ requestRoutesFaultLogDumpEntry(app);
+ requestRoutesFaultLogDumpClear(app);
+#endif
+
+#ifndef BMCWEB_ENABLE_REDFISH_DBUS_LOG_ENTRIES
+ requestRoutesJournalEventLogEntryCollection(app);
+ requestRoutesJournalEventLogEntry(app);
+ requestRoutesJournalEventLogClear(app);
+#endif
+
+ requestRoutesBMCLogServiceCollection(app);
+#ifdef BMCWEB_ENABLE_REDFISH_BMC_JOURNAL
+ requestRoutesBMCJournalLogService(app);
+ requestRoutesBMCJournalLogEntryCollection(app);
+ requestRoutesBMCJournalLogEntry(app);
+#endif
+
+#ifdef BMCWEB_ENABLE_REDFISH_CPU_LOG
+ requestRoutesCrashdumpService(app);
+ requestRoutesCrashdumpEntryCollection(app);
+ requestRoutesCrashdumpEntry(app);
+ requestRoutesCrashdumpFile(app);
+ requestRoutesCrashdumpClear(app);
+ requestRoutesCrashdumpCollect(app);
+#endif // BMCWEB_ENABLE_REDFISH_CPU_LOG
+
+ requestRoutesProcessorCollection(app);
+ requestRoutesProcessor(app);
+ requestRoutesOperatingConfigCollection(app);
+ requestRoutesOperatingConfig(app);
+ requestRoutesMemoryCollection(app);
+ requestRoutesMemory(app);
+
+ requestRoutesSystems(app);
+
+ requestRoutesBiosService(app);
+ requestRoutesBiosReset(app);
+
+#ifdef BMCWEB_ENABLE_VM_NBDPROXY
+ requestNBDVirtualMediaRoutes(app);
+#endif // BMCWEB_ENABLE_VM_NBDPROXY
+
+#ifdef BMCWEB_ENABLE_REDFISH_DBUS_LOG_ENTRIES
+ requestRoutesDBusLogServiceActionsClear(app);
+ requestRoutesDBusEventLogEntryCollection(app);
+ requestRoutesDBusEventLogEntry(app);
+ requestRoutesDBusEventLogEntryDownload(app);
+#endif
+
+#ifdef BMCWEB_ENABLE_REDFISH_HOST_LOGGER
+ requestRoutesSystemHostLogger(app);
+ requestRoutesSystemHostLoggerCollection(app);
+ requestRoutesSystemHostLoggerLogEntry(app);
+#endif
+
+ requestRoutesMessageRegistryFileCollection(app);
+ requestRoutesMessageRegistryFile(app);
+ requestRoutesMessageRegistry(app);
+
+ requestRoutesCertificateService(app);
+ requestRoutesHTTPSCertificate(app);
+ requestRoutesLDAPCertificate(app);
+ requestRoutesTrustStoreCertificate(app);
+
+ requestRoutesSystemPCIeFunctionCollection(app);
+ requestRoutesSystemPCIeFunction(app);
+ requestRoutesSystemPCIeDeviceCollection(app);
+ requestRoutesSystemPCIeDevice(app);
+
+ requestRoutesSensorCollection(app);
+ requestRoutesSensor(app);
+
+ requestRoutesTaskMonitor(app);
+ requestRoutesTaskService(app);
+ requestRoutesTaskCollection(app);
+ requestRoutesTask(app);
+ requestRoutesEventService(app);
+ requestRoutesEventServiceSse(app);
+ requestRoutesEventDestinationCollection(app);
+ requestRoutesEventDestination(app);
+ requestRoutesFabricAdapters(app);
+ requestRoutesFabricAdapterCollection(app);
+ requestRoutesSubmitTestEvent(app);
+
+ requestRoutesHypervisorSystems(app);
+
+ requestRoutesTelemetryService(app);
+ requestRoutesMetricReportDefinitionCollection(app);
+ requestRoutesMetricReportDefinition(app);
+ requestRoutesMetricReportCollection(app);
+ requestRoutesMetricReport(app);
+ requestRoutesTriggerCollection(app);
+ requestRoutesTrigger(app);
+
+ // Note, this must be the last route registered
+ requestRoutesRedfish(app);
+}
+
+} // namespace redfish
diff --git a/src/webserver_main.cpp b/src/webserver_main.cpp
index cc8e1bcfcf..ee752b0239 100644
--- a/src/webserver_main.cpp
+++ b/src/webserver_main.cpp
@@ -1,159 +1,12 @@
-#include "bmcweb_config.h"
-#include "app.hpp"
-#include "cors_preflight.hpp"
-#include "dbus_monitor.hpp"
-#include "dbus_singleton.hpp"
-#include "event_service_manager.hpp"
-#include "google/google_service_root.hpp"
-#include "hostname_monitor.hpp"
-#include "ibm/management_console_rest.hpp"
-#include "image_upload.hpp"
-#include "kvm_websocket.hpp"
-#include "login_routes.hpp"
-#include "nbd_proxy.hpp"
-#include "obmc_console.hpp"
-#include "openbmc_dbus_rest.hpp"
-#include "redfish.hpp"
-#include "redfish_aggregator.hpp"
-#include "security_headers.hpp"
-#include "ssl_key_handler.hpp"
-#include "user_monitor.hpp"
-#include "vm_websocket.hpp"
-#include "webassets.hpp"
-#include <systemd/sd-daemon.h>
-
-#include <boost/asio/io_context.hpp>
-#include <sdbusplus/asio/connection.hpp>
-#include <sdbusplus/bus.hpp>
-#include <sdbusplus/server.hpp>
+#include "logging.hpp"
+#include "webserver_run.hpp"
#include <exception>
#include <memory>
#include <string>
-constexpr int defaultPort = 18080;
-
-inline void setupSocket(crow::App& app)
-{
- int listenFd = sd_listen_fds(0);
- if (1 == listenFd)
- {
- BMCWEB_LOG_INFO("attempting systemd socket activation");
- if (sd_is_socket_inet(SD_LISTEN_FDS_START, AF_UNSPEC, SOCK_STREAM, 1,
- 0) != 0)
- {
- BMCWEB_LOG_INFO("Starting webserver on socket handle {}",
- SD_LISTEN_FDS_START);
- app.socket(SD_LISTEN_FDS_START);
- }
- else
- {
- BMCWEB_LOG_INFO(
- "bad incoming socket, starting webserver on port {}",
- defaultPort);
- app.port(defaultPort);
- }
- }
- else
- {
- BMCWEB_LOG_INFO("Starting webserver on port {}", defaultPort);
- app.port(defaultPort);
- }
-}
-
-static int run()
-{
- auto io = std::make_shared<boost::asio::io_context>();
- App app(io);
-
- sdbusplus::asio::connection systemBus(*io);
- crow::connections::systemBus = &systemBus;
-
- // Static assets need to be initialized before Authorization, because auth
- // needs to build the whitelist from the static routes
-
-#ifdef BMCWEB_ENABLE_STATIC_HOSTING
- crow::webassets::requestRoutes(app);
-#endif
-
-#ifdef BMCWEB_ENABLE_KVM
- crow::obmc_kvm::requestRoutes(app);
-#endif
-
-#ifdef BMCWEB_ENABLE_REDFISH
- redfish::RedfishService redfish(app);
-
- // Create EventServiceManager instance and initialize Config
- redfish::EventServiceManager::getInstance(&*io);
-
-#ifdef BMCWEB_ENABLE_REDFISH_AGGREGATION
- // Create RedfishAggregator instance and initialize Config
- redfish::RedfishAggregator::getInstance(&*io);
-#endif
-#endif
-
-#ifdef BMCWEB_ENABLE_DBUS_REST
- crow::dbus_monitor::requestRoutes(app);
- crow::image_upload::requestRoutes(app);
- crow::openbmc_mapper::requestRoutes(app);
-#endif
-
-#ifdef BMCWEB_ENABLE_HOST_SERIAL_WEBSOCKET
- crow::obmc_console::requestRoutes(app);
-#endif
-
-#ifdef BMCWEB_ENABLE_VM_WEBSOCKET
- crow::obmc_vm::requestRoutes(app);
-#endif
-
-#ifdef BMCWEB_ENABLE_IBM_MANAGEMENT_CONSOLE
- crow::ibm_mc::requestRoutes(app);
- crow::ibm_mc_lock::Lock::getInstance();
-#endif
-
-#ifdef BMCWEB_ENABLE_GOOGLE_API
- crow::google_api::requestRoutes(app);
-#endif
-
- if (bmcwebInsecureDisableXssPrevention != 0)
- {
- cors_preflight::requestRoutes(app);
- }
-
- crow::login_routes::requestRoutes(app);
-
- setupSocket(app);
-
-#ifdef BMCWEB_ENABLE_VM_NBDPROXY
- crow::nbd_proxy::requestRoutes(app);
-#endif
-
-#ifndef BMCWEB_ENABLE_REDFISH_DBUS_LOG_ENTRIES
- int rc = redfish::EventServiceManager::startEventLogMonitor(*io);
- if (rc != 0)
- {
- BMCWEB_LOG_ERROR("Redfish event handler setup failed...");
- return rc;
- }
-#endif
-
-#ifdef BMCWEB_ENABLE_SSL
- BMCWEB_LOG_INFO("Start Hostname Monitor Service...");
- crow::hostname_monitor::registerHostnameSignal();
-#endif
-
- bmcweb::registerUserRemovedSignal();
-
- app.run();
- io->run();
-
- crow::connections::systemBus = nullptr;
-
- return 0;
-}
-
int main(int /*argc*/, char** /*argv*/)
{
try
diff --git a/src/webserver_run.cpp b/src/webserver_run.cpp
new file mode 100644
index 0000000000..e5d272ead8
--- /dev/null
+++ b/src/webserver_run.cpp
@@ -0,0 +1,153 @@
+#include "webserver_run.hpp"
+
+#include "bmcweb_config.h"
+
+#include "app.hpp"
+#include "cors_preflight.hpp"
+#include "dbus_monitor.hpp"
+#include "dbus_singleton.hpp"
+#include "event_service_manager.hpp"
+#include "google/google_service_root.hpp"
+#include "hostname_monitor.hpp"
+#include "ibm/management_console_rest.hpp"
+#include "image_upload.hpp"
+#include "kvm_websocket.hpp"
+#include "login_routes.hpp"
+#include "nbd_proxy.hpp"
+#include "obmc_console.hpp"
+#include "openbmc_dbus_rest.hpp"
+#include "redfish.hpp"
+#include "redfish_aggregator.hpp"
+#include "security_headers.hpp"
+#include "ssl_key_handler.hpp"
+#include "user_monitor.hpp"
+#include "vm_websocket.hpp"
+#include "webassets.hpp"
+
+#include <systemd/sd-daemon.h>
+
+#include <boost/asio/io_context.hpp>
+#include <sdbusplus/asio/connection.hpp>
+#include <sdbusplus/bus.hpp>
+#include <sdbusplus/server.hpp>
+
+constexpr int defaultPort = 18080;
+
+static void setupSocket(crow::App& app)
+{
+ int listenFd = sd_listen_fds(0);
+ if (1 == listenFd)
+ {
+ BMCWEB_LOG_INFO("attempting systemd socket activation");
+ if (sd_is_socket_inet(SD_LISTEN_FDS_START, AF_UNSPEC, SOCK_STREAM, 1,
+ 0) != 0)
+ {
+ BMCWEB_LOG_INFO("Starting webserver on socket handle {}",
+ SD_LISTEN_FDS_START);
+ app.socket(SD_LISTEN_FDS_START);
+ }
+ else
+ {
+ BMCWEB_LOG_INFO(
+ "bad incoming socket, starting webserver on port {}",
+ defaultPort);
+ app.port(defaultPort);
+ }
+ }
+ else
+ {
+ BMCWEB_LOG_INFO("Starting webserver on port {}", defaultPort);
+ app.port(defaultPort);
+ }
+}
+
+int run()
+{
+ auto io = std::make_shared<boost::asio::io_context>();
+ App app(io);
+
+ sdbusplus::asio::connection systemBus(*io);
+ crow::connections::systemBus = &systemBus;
+
+ // Static assets need to be initialized before Authorization, because auth
+ // needs to build the whitelist from the static routes
+
+#ifdef BMCWEB_ENABLE_STATIC_HOSTING
+ crow::webassets::requestRoutes(app);
+#endif
+
+#ifdef BMCWEB_ENABLE_KVM
+ crow::obmc_kvm::requestRoutes(app);
+#endif
+
+#ifdef BMCWEB_ENABLE_REDFISH
+ redfish::RedfishService redfish(app);
+
+ // Create EventServiceManager instance and initialize Config
+ redfish::EventServiceManager::getInstance(&*io);
+
+#ifdef BMCWEB_ENABLE_REDFISH_AGGREGATION
+ // Create RedfishAggregator instance and initialize Config
+ redfish::RedfishAggregator::getInstance(&*io);
+#endif
+#endif
+
+#ifdef BMCWEB_ENABLE_DBUS_REST
+ crow::dbus_monitor::requestRoutes(app);
+ crow::image_upload::requestRoutes(app);
+ crow::openbmc_mapper::requestRoutes(app);
+#endif
+
+#ifdef BMCWEB_ENABLE_HOST_SERIAL_WEBSOCKET
+ crow::obmc_console::requestRoutes(app);
+#endif
+
+#ifdef BMCWEB_ENABLE_VM_WEBSOCKET
+ crow::obmc_vm::requestRoutes(app);
+#endif
+
+#ifdef BMCWEB_ENABLE_IBM_MANAGEMENT_CONSOLE
+ crow::ibm_mc::requestRoutes(app);
+ crow::ibm_mc_lock::Lock::getInstance();
+#endif
+
+#ifdef BMCWEB_ENABLE_GOOGLE_API
+ crow::google_api::requestRoutes(app);
+#endif
+
+ if (bmcwebInsecureDisableXssPrevention != 0)
+ {
+ cors_preflight::requestRoutes(app);
+ }
+
+ crow::login_routes::requestRoutes(app);
+
+ setupSocket(app);
+
+#ifdef BMCWEB_ENABLE_VM_NBDPROXY
+ crow::nbd_proxy::requestRoutes(app);
+#endif
+
+#ifndef BMCWEB_ENABLE_REDFISH_DBUS_LOG_ENTRIES
+ int rc = redfish::EventServiceManager::startEventLogMonitor(*io);
+ if (rc != 0)
+ {
+ BMCWEB_LOG_ERROR("Redfish event handler setup failed...");
+ return rc;
+ }
+#endif
+
+#ifdef BMCWEB_ENABLE_SSL
+ BMCWEB_LOG_INFO("Start Hostname Monitor Service...");
+ crow::hostname_monitor::registerHostnameSignal();
+#endif
+
+ bmcweb::registerUserRemovedSignal();
+
+ app.run();
+ io->run();
+
+ crow::connections::systemBus = nullptr;
+
+ return 0;
+}