| // Copyright 2023 The ChromiumOS Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef PATCHPANEL_PATCHPANEL_ADAPTOR_H_ |
| #define PATCHPANEL_PATCHPANEL_ADAPTOR_H_ |
| |
| #include <memory> |
| |
| #include <base/files/file_path.h> |
| #include <base/files/scoped_file.h> |
| #include <net-base/ip_address.h> |
| #include <patchpanel/proto_bindings/patchpanel_service.pb.h> |
| |
| #include "patchpanel/dbus_adaptors/org.chromium.patchpanel.h" |
| #include "patchpanel/dbus_client_notifier.h" |
| #include "patchpanel/metrics.h" |
| #include "patchpanel/network_monitor_service.h" |
| |
| class MetricsLibraryInterface; |
| |
| namespace shill { |
| class ProcessManager; |
| } // namespace shill |
| |
| namespace patchpanel { |
| |
| class Manager; |
| class RTNLClient; |
| class System; |
| |
| // Delegates the D-Bus binding, which is generated by chromeos-dbus-binding, to |
| // the core implementation of the patchpanel service. |
| class PatchpanelAdaptor : public org::chromium::PatchPanelInterface, |
| public org::chromium::PatchPanelAdaptor, |
| public DbusClientNotifier { |
| public: |
| PatchpanelAdaptor(const base::FilePath& cmd_path, |
| scoped_refptr<::dbus::Bus> bus, |
| System* system, |
| shill::ProcessManager* process_manager, |
| MetricsLibraryInterface* metrics, |
| std::unique_ptr<RTNLClient> rtnl_client); |
| virtual ~PatchpanelAdaptor(); |
| |
| PatchpanelAdaptor(const PatchpanelAdaptor&) = delete; |
| PatchpanelAdaptor& operator=(const PatchpanelAdaptor&) = delete; |
| |
| // Register the D-Bus methods to the D-Bus daemon. |
| void RegisterAsync( |
| brillo::dbus_utils::AsyncEventSequencer::CompletionAction cb); |
| |
| // Implements org::chromium::PatchPanelInterface, which are mapping to the |
| // exported D-Bus methods. |
| ArcShutdownResponse ArcShutdown(const ArcShutdownRequest& request) override; |
| ArcStartupResponse ArcStartup(const ArcStartupRequest& request) override; |
| ArcVmShutdownResponse ArcVmShutdown( |
| const ArcVmShutdownRequest& request) override; |
| ArcVmStartupResponse ArcVmStartup( |
| const ArcVmStartupRequest& request) override; |
| ConnectNamespaceResponse ConnectNamespace( |
| const ConnectNamespaceRequest& request, |
| const base::ScopedFD& client_fd) override; |
| LocalOnlyNetworkResponse CreateLocalOnlyNetwork( |
| const LocalOnlyNetworkRequest& request, |
| const base::ScopedFD& client_fd) override; |
| TetheredNetworkResponse CreateTetheredNetwork( |
| const TetheredNetworkRequest& request, |
| const base::ScopedFD& client_fd) override; |
| GetDevicesResponse GetDevices( |
| const GetDevicesRequest& request) const override; |
| GetDownstreamNetworkInfoResponse GetDownstreamNetworkInfo( |
| const GetDownstreamNetworkInfoRequest& request) const override; |
| TrafficCountersResponse GetTrafficCounters( |
| const TrafficCountersRequest& request) const override; |
| ModifyPortRuleResponse ModifyPortRule( |
| const ModifyPortRuleRequest& request) override; |
| ParallelsVmShutdownResponse ParallelsVmShutdown( |
| const ParallelsVmShutdownRequest& request) override; |
| ParallelsVmStartupResponse ParallelsVmStartup( |
| const ParallelsVmStartupRequest& request) override; |
| BruschettaVmShutdownResponse BruschettaVmShutdown( |
| const BruschettaVmShutdownRequest& request) override; |
| BruschettaVmStartupResponse BruschettaVmStartup( |
| const BruschettaVmStartupRequest& request) override; |
| BorealisVmShutdownResponse BorealisVmShutdown( |
| const BorealisVmShutdownRequest& request) override; |
| BorealisVmStartupResponse BorealisVmStartup( |
| const BorealisVmStartupRequest& request) override; |
| SetDnsRedirectionRuleResponse SetDnsRedirectionRule( |
| const SetDnsRedirectionRuleRequest& request, |
| const base::ScopedFD& client_fd) override; |
| SetVpnIntentResponse SetVpnIntent(const SetVpnIntentRequest& request, |
| const base::ScopedFD& socket_fd) override; |
| SetVpnLockdownResponse SetVpnLockdown( |
| const SetVpnLockdownRequest& request) override; |
| TerminaVmShutdownResponse TerminaVmShutdown( |
| const TerminaVmShutdownRequest& request) override; |
| TerminaVmStartupResponse TerminaVmStartup( |
| const TerminaVmStartupRequest& request) override; |
| |
| NotifyAndroidWifiMulticastLockChangeResponse |
| NotifyAndroidWifiMulticastLockChange( |
| const NotifyAndroidWifiMulticastLockChangeRequest& request) override; |
| |
| NotifyAndroidInteractiveStateResponse NotifyAndroidInteractiveState( |
| const NotifyAndroidInteractiveStateRequest& request) override; |
| |
| NotifySocketConnectionEventResponse NotifySocketConnectionEvent( |
| const NotifySocketConnectionEventRequest& request) override; |
| |
| SetFeatureFlagResponse SetFeatureFlag( |
| const SetFeatureFlagRequest& request) override; |
| |
| // Implements Manager::ClientNotifier, which are mapping to the exported D-Bus |
| // signals. |
| void OnNetworkDeviceChanged(std::unique_ptr<NetworkDevice> virtual_device, |
| NetworkDeviceChangedSignal::Event event) override; |
| void OnNetworkConfigurationChanged() override; |
| void OnNeighborReachabilityEvent( |
| int ifindex, |
| const net_base::IPAddress& ip_addr, |
| NeighborLinkMonitor::NeighborRole role, |
| NeighborReachabilityEventSignal::EventType event_type) override; |
| |
| private: |
| void RecordDbusEvent(DbusUmaEvent event) const; |
| |
| brillo::dbus_utils::DBusObject dbus_object_; |
| |
| // UMA metrics client. The caller should guarantee it outlives this |
| // PatchpanelAdaptor instance. |
| MetricsLibraryInterface* metrics_; |
| |
| // The core logic of patchpanel. |
| std::unique_ptr<Manager> manager_; |
| }; |
| |
| } // namespace patchpanel |
| #endif // PATCHPANEL_PATCHPANEL_ADAPTOR_H_ |