blob: d519af626d2be5aecf0b5466bb470ed08ab8c124 [file] [log] [blame]
// Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SHILL_DEVICE_INFO_
#define SHILL_DEVICE_INFO_
#include <base/callback_old.h>
#include <base/hash_tables.h>
#include <base/memory/ref_counted.h>
#include <base/memory/scoped_ptr.h>
#include "shill/device.h"
#include "shill/shill_event.h"
struct nlmsghdr;
namespace shill {
class Manager;
class DeviceInfo {
public:
DeviceInfo(ControlInterface *control_interface,
EventDispatcher *dispatcher,
Manager *manager);
~DeviceInfo();
void Start();
void Stop();
static Device::Technology GetDeviceTechnology(const char *interface_name);
private:
static const char *kInterfaceUevent;
static const char *kInterfaceDriver;
static const char *kModemDrivers[];
void ParseRTNL(InputData *data);
void NextRequest(uint32_t seq);
void AddLinkMsg(struct nlmsghdr *hdr);
void DelLinkMsg(struct nlmsghdr *hdr);
void AddAddrMsg(struct nlmsghdr *hdr);
void DelAddrMsg(struct nlmsghdr *hdr);
void AddRouteMsg(struct nlmsghdr *hdr);
void DelRouteMsg(struct nlmsghdr *hdr);
bool running_;
ControlInterface *control_interface_;
EventDispatcher *dispatcher_;
Manager *manager_;
scoped_ptr<Callback1<InputData *>::Type> rtnl_callback_;
int rtnl_socket_;
base::hash_map<int, scoped_refptr<Device> > devices_;
scoped_ptr<IOInputHandler> rtnl_handler_;
int request_flags_;
uint32_t request_sequence_;
friend class DeviceInfoTest;
};
enum {
REQUEST_LINK = 1,
REQUEST_ADDR = 2,
REQUEST_ROUTE = 4
};
} // namespace shill
#endif // SHILL_DEVICE_INFO_