blob: c7c053739ecf34eb75b5614ad89ec64f8da35966 [file] [log] [blame]
Paul Stewart0af98bf2011-05-10 17:38:08 -07001// Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef SHILL_DEVICE_INFO_
6#define SHILL_DEVICE_INFO_
7
mukesh agrawal8f317b62011-07-15 11:53:23 -07008#include <set>
9#include <string>
10
Chris Masone487b8bf2011-05-13 16:27:57 -070011#include <base/callback_old.h>
Paul Stewart0af98bf2011-05-10 17:38:08 -070012#include <base/hash_tables.h>
Paul Stewartb50f0b92011-05-16 16:31:42 -070013#include <base/memory/ref_counted.h>
Chris Masone487b8bf2011-05-13 16:27:57 -070014#include <base/memory/scoped_ptr.h>
Paul Stewart0af98bf2011-05-10 17:38:08 -070015
Chris Masone9be4a9d2011-05-16 15:44:09 -070016#include "shill/device.h"
Paul Stewartb50f0b92011-05-16 16:31:42 -070017
Paul Stewarta3c56f92011-05-26 07:08:52 -070018#include "shill/rtnl_listener.h"
Paul Stewart0af98bf2011-05-10 17:38:08 -070019
Paul Stewartb50f0b92011-05-16 16:31:42 -070020struct nlmsghdr;
21
Paul Stewart0af98bf2011-05-10 17:38:08 -070022namespace shill {
23
Paul Stewartb50f0b92011-05-16 16:31:42 -070024class Manager;
25
Paul Stewart0af98bf2011-05-10 17:38:08 -070026class DeviceInfo {
27 public:
Paul Stewartb50f0b92011-05-16 16:31:42 -070028 DeviceInfo(ControlInterface *control_interface,
29 EventDispatcher *dispatcher,
30 Manager *manager);
Paul Stewart0af98bf2011-05-10 17:38:08 -070031 ~DeviceInfo();
Darin Petkov887f2982011-07-14 16:10:17 -070032
mukesh agrawal8f317b62011-07-15 11:53:23 -070033 void AddDeviceToBlackList(const std::string &device_name);
Paul Stewart0af98bf2011-05-10 17:38:08 -070034 void Start();
35 void Stop();
Darin Petkov887f2982011-07-14 16:10:17 -070036
Paul Stewartb50f0b92011-05-16 16:31:42 -070037 static Device::Technology GetDeviceTechnology(const char *interface_name);
Paul Stewart0af98bf2011-05-10 17:38:08 -070038
39 private:
Darin Petkov887f2982011-07-14 16:10:17 -070040 friend class DeviceInfoTest;
41
Paul Stewartb50f0b92011-05-16 16:31:42 -070042 static const char *kInterfaceUevent;
43 static const char *kInterfaceDriver;
44 static const char *kModemDrivers[];
45
Paul Stewarta3c56f92011-05-26 07:08:52 -070046 void AddLinkMsgHandler(struct nlmsghdr *hdr);
47 void DelLinkMsgHandler(struct nlmsghdr *hdr);
48 void LinkMsgHandler(struct nlmsghdr *hdr);
Paul Stewart0af98bf2011-05-10 17:38:08 -070049
Darin Petkov67d8ecf2011-07-26 16:03:30 -070050 void RemoveDevice(int interface_index);
51
Paul Stewartb50f0b92011-05-16 16:31:42 -070052 ControlInterface *control_interface_;
Paul Stewart0af98bf2011-05-10 17:38:08 -070053 EventDispatcher *dispatcher_;
Paul Stewartb50f0b92011-05-16 16:31:42 -070054 Manager *manager_;
Chris Masonec1e50412011-06-07 13:04:53 -070055 base::hash_map<int, DeviceRefPtr> devices_;
Paul Stewarta3c56f92011-05-26 07:08:52 -070056 scoped_ptr<Callback1<struct nlmsghdr *>::Type> link_callback_;
57 scoped_ptr<RTNLListener> link_listener_;
mukesh agrawal8f317b62011-07-15 11:53:23 -070058 std::set<std::string> black_list_;
Paul Stewart0af98bf2011-05-10 17:38:08 -070059};
60
Paul Stewart0af98bf2011-05-10 17:38:08 -070061} // namespace shill
62
63#endif // SHILL_DEVICE_INFO_