blob: 43e6eee8229ea1b219c1eb0f4460e231a4466e0c [file] [log] [blame]
//
// 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 DHCP_CLIENT_SERVICE_H_
#define DHCP_CLIENT_SERVICE_H_
#include <string>
#include <base/macros.h>
#include <base/memory/ref_counted.h>
#include <brillo/variant_dictionary.h>
#include "dhcp_client/dhcp.h"
#include "dhcp_client/dhcpv4.h"
#include "dhcp_client/event_dispatcher_interface.h"
#include "dhcp_client/service_adaptor_interface.h"
#include "shill/net/byte_string.h"
namespace dhcp_client {
class Manager;
class Service : public base::RefCounted<Service> {
public:
Service(Manager* manager,
int service_identifier,
EventDispatcherInterface* event_dispatcher,
const brillo::VariantDictionary& configs);
virtual ~Service();
void Start();
void Stop();
ServiceAdaptorInterface* adaptor() const { return adaptor_.get(); }
int identifier() { return identifier_; }
private:
Manager* manager_;
// Indentifier number of this service.
int identifier_;
std::unique_ptr<ServiceAdaptorInterface> adaptor_;
EventDispatcherInterface* event_dispatcher_;
// Interface parameters.
std::string interface_name_;
shill::ByteString hardware_address_;
unsigned int interface_index_;
// Unique network/connection identifier,
// lease will persist to storage if this identifier is specified.
std::string network_id_;
// Type of the DHCP service.
// It can be IPv4 only or IPv6 only or both.
DHCP::ServiceType type_;
// DHCP IPv4 configurations:
// Request hostname from server.
bool request_hostname_;
// ARP for default gateway.
bool arp_gateway_;
// Enable unicast ARP on renew.
bool unicast_arp_;
// DHCP IPv6 configurations:
// Request non-temporary address.
bool request_na_;
// Request prefix delegation.
bool request_pd_;
std::unique_ptr<DHCPV4> state_machine_ipv4_;
// Parse DHCP configurations from the VariantDictionary.
void ParseConfigs(const brillo::VariantDictionary& configs);
DISALLOW_COPY_AND_ASSIGN(Service);
};
} // namespace dhcp_client
#endif // DHCP_CLIENT_SERVICE_H_