129 lines
3.8 KiB
C++
129 lines
3.8 KiB
C++
//
|
|
// Copyright (C) 2015 The Android Open Source Project
|
|
//
|
|
// 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.
|
|
//
|
|
|
|
#ifndef SHILL_DAEMON_TASK_H_
|
|
#define SHILL_DAEMON_TASK_H_
|
|
|
|
#include <memory>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include <base/callback.h>
|
|
|
|
#include "shill/event_dispatcher.h"
|
|
#if !defined(DISABLE_WIFI)
|
|
#include "shill/wifi/callback80211_metrics.h"
|
|
#endif // DISABLE_WIFI
|
|
|
|
namespace shill {
|
|
|
|
class Config;
|
|
class ControlInterface;
|
|
class DHCPProvider;
|
|
class Error;
|
|
class Manager;
|
|
class Metrics;
|
|
class ProcessManager;
|
|
class RoutingTable;
|
|
class RTNLHandler;
|
|
|
|
#if !defined(DISABLE_WIFI)
|
|
class NetlinkManager;
|
|
#endif // DISABLE_WIFI
|
|
|
|
// DaemonTask contains most of the logic used in ShillDaemon (e.g.
|
|
// init/shutdown, start/stop). This class is kept separate from ShillDaemon to
|
|
// ensure that it does not inherit brillo::Daemon. This is necessary for
|
|
// DaemonTask unit tests to run, since the base::ExitManager inherited from
|
|
// brillo::Daemon cannot coexist with the base::ExitManager used by shill's
|
|
// test_runner.cc.
|
|
class DaemonTask {
|
|
public:
|
|
// Run-time settings retrieved from command line.
|
|
struct Settings {
|
|
Settings()
|
|
: ignore_unknown_ethernet(false),
|
|
minimum_mtu(0),
|
|
passive_mode(false),
|
|
use_portal_list(false) {}
|
|
std::string accept_hostname_from;
|
|
std::string default_technology_order;
|
|
std::vector<std::string> device_blacklist;
|
|
std::vector<std::string> device_whitelist;
|
|
std::vector<std::string> dhcpv6_enabled_devices;
|
|
bool ignore_unknown_ethernet;
|
|
int minimum_mtu;
|
|
bool passive_mode;
|
|
std::string portal_list;
|
|
std::string prepend_dns_servers;
|
|
bool use_portal_list;
|
|
};
|
|
|
|
DaemonTask(const Settings& settings, Config* config);
|
|
virtual ~DaemonTask();
|
|
|
|
// Starts the termination actions in the manager. Returns true if
|
|
// termination actions have completed synchronously, and false
|
|
// otherwise. Arranges for |completion_callback| to be invoked after
|
|
// all asynchronous work completes, but ignores
|
|
// |completion_callback| if no asynchronous work is required.
|
|
virtual bool Quit(const base::Closure& completion_callback);
|
|
|
|
// Break the termination loop started in DaemonTask::OnShutdown. Invoked
|
|
// after shill completes its termination tasks during shutdown.
|
|
void BreakTerminationLoop();
|
|
|
|
protected:
|
|
void Init();
|
|
|
|
private:
|
|
friend class DaemonTaskTest;
|
|
friend class DaemonTaskForTest;
|
|
|
|
void Start();
|
|
|
|
// Apply run-time settings to the manager.
|
|
void ApplySettings();
|
|
|
|
// Called when the termination actions are completed.
|
|
void TerminationActionsCompleted(const Error& error);
|
|
|
|
// Calls Stop() and then causes the dispatcher message loop to terminate and
|
|
// return to the main function which started the daemon.
|
|
void StopAndReturnToMain();
|
|
|
|
void Stop();
|
|
|
|
Settings settings_;
|
|
Config* config_;
|
|
std::unique_ptr<EventDispatcher> dispatcher_;
|
|
std::unique_ptr<ControlInterface> control_;
|
|
std::unique_ptr<Metrics> metrics_;
|
|
RTNLHandler* rtnl_handler_;
|
|
RoutingTable* routing_table_;
|
|
DHCPProvider* dhcp_provider_;
|
|
ProcessManager* process_manager_;
|
|
#if !defined(DISABLE_WIFI)
|
|
NetlinkManager* netlink_manager_;
|
|
std::unique_ptr<Callback80211Metrics> callback80211_metrics_;
|
|
#endif // DISABLE_WIFI
|
|
std::unique_ptr<Manager> manager_;
|
|
base::Closure termination_completed_callback_;
|
|
};
|
|
|
|
} // namespace shill
|
|
|
|
#endif // SHILL_DAEMON_TASK_H_
|