Split off rtnl facility from device_info
Create an "rtnl_handler" singleton for conversing with rtnl socket.
Create "listener" objects that hold callbacks to interested parties.
BUG=chromium-os:15804
TEST=Rerun unit tests
Change-Id: Ica845b39ce6a0885a4e6d2560146ff8f5f45b900
Reviewed-on: http://gerrit.chromium.org/gerrit/1632
Reviewed-by: Chris Masone <cmasone@chromium.org>
Tested-by: Paul Stewart <pstew@chromium.org>
diff --git a/device_info.h b/device_info.h
index d519af6..9b5a030 100644
--- a/device_info.h
+++ b/device_info.h
@@ -12,7 +12,7 @@
#include "shill/device.h"
-#include "shill/shill_event.h"
+#include "shill/rtnl_listener.h"
struct nlmsghdr;
@@ -28,6 +28,7 @@
~DeviceInfo();
void Start();
void Stop();
+ static DeviceInfo *GetInstance();
static Device::Technology GetDeviceTechnology(const char *interface_name);
private:
@@ -35,34 +36,19 @@
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);
+ void AddLinkMsgHandler(struct nlmsghdr *hdr);
+ void DelLinkMsgHandler(struct nlmsghdr *hdr);
+ void LinkMsgHandler(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_;
+ scoped_ptr<Callback1<struct nlmsghdr *>::Type> link_callback_;
+ scoped_ptr<RTNLListener> link_listener_;
friend class DeviceInfoTest;
};
-enum {
- REQUEST_LINK = 1,
- REQUEST_ADDR = 2,
- REQUEST_ROUTE = 4
-};
-
} // namespace shill
#endif // SHILL_DEVICE_INFO_