Revert "Revert "Add NETLINK_ROUTE socket creation and event propagation""
This reverts commit 19fb0c4e5ec6a10473666a2d45267fbc8305ba85.
Conflicts:
NetlinkManager.cpp
Brings back Stan Chesnutt's change related to adding NETLINK_ROUTE
socket creation and event propagation.
Change-Id: I8c0625a95b7996ef75b883ce764c3244dd553a47
Signed-off-by: Mike J. Chen <mjchen@google.com>
diff --git a/NetlinkHandler.cpp b/NetlinkHandler.cpp
index 800c86c..0632293 100644
--- a/NetlinkHandler.cpp
+++ b/NetlinkHandler.cpp
@@ -28,8 +28,9 @@
#include "NetlinkManager.h"
#include "ResponseCode.h"
-NetlinkHandler::NetlinkHandler(NetlinkManager *nm, int listenerSocket) :
- NetlinkListener(listenerSocket) {
+NetlinkHandler::NetlinkHandler(NetlinkManager *nm, int listenerSocket,
+ int format) :
+ NetlinkListener(listenerSocket, format) {
mNm = nm;
}
@@ -50,18 +51,22 @@
LOGW("No subsystem found in netlink event");
return;
}
+
if (!strcmp(subsys, "net")) {
int action = evt->getAction();
+ const char *iface = evt->findParam("INTERFACE");
+
if (action == evt->NlActionAdd) {
- const char *iface = evt->findParam("INTERFACE");
notifyInterfaceAdded(iface);
} else if (action == evt->NlActionRemove) {
- const char *iface = evt->findParam("INTERFACE");
notifyInterfaceRemoved(iface);
} else if (action == evt->NlActionChange) {
evt->dump();
- const char *iface = evt->findParam("INTERFACE");
notifyInterfaceChanged("nana", true);
+ } else if (action == evt->NlActionLinkUp) {
+ notifyInterfaceLinkChanged(iface, true);
+ } else if (action == evt->NlActionLinkDown) {
+ notifyInterfaceLinkChanged(iface, false);
}
}
}
@@ -84,7 +89,17 @@
void NetlinkHandler::notifyInterfaceChanged(const char *name, bool isUp) {
char msg[255];
- snprintf(msg, sizeof(msg), "Iface is %s %s", (isUp ? "up" : "down"), name);
+ snprintf(msg, sizeof(msg), "Iface changed %s %s", name,
+ (isUp ? "up" : "down"));
+
+ mNm->getBroadcaster()->sendBroadcast(ResponseCode::InterfaceChange,
+ msg, false);
+}
+
+void NetlinkHandler::notifyInterfaceLinkChanged(const char *name, bool isUp) {
+ char msg[255];
+ snprintf(msg, sizeof(msg), "Iface linkstatus %s %s", name,
+ (isUp ? "up" : "down"));
mNm->getBroadcaster()->sendBroadcast(ResponseCode::InterfaceChange,
msg, false);