blob: b806bfda1b681b8b20c2ad3401fd3c3fe1b3a7f0 [file] [log] [blame]
// 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_