Revert "Add NETLINK_ROUTE socket creation and event propagation"
This reverts commit f6a7ad814dca2f67907eaed2cc0609c684850969.
diff --git a/NetlinkHandler.cpp b/NetlinkHandler.cpp
index 0632293..800c86c 100644
--- a/NetlinkHandler.cpp
+++ b/NetlinkHandler.cpp
@@ -28,9 +28,8 @@
#include "NetlinkManager.h"
#include "ResponseCode.h"
-NetlinkHandler::NetlinkHandler(NetlinkManager *nm, int listenerSocket,
- int format) :
- NetlinkListener(listenerSocket, format) {
+NetlinkHandler::NetlinkHandler(NetlinkManager *nm, int listenerSocket) :
+ NetlinkListener(listenerSocket) {
mNm = nm;
}
@@ -51,22 +50,18 @@
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);
}
}
}
@@ -89,17 +84,7 @@
void NetlinkHandler::notifyInterfaceChanged(const char *name, bool isUp) {
char msg[255];
- 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"));
+ snprintf(msg, sizeof(msg), "Iface is %s %s", (isUp ? "up" : "down"), name);
mNm->getBroadcaster()->sendBroadcast(ResponseCode::InterfaceChange,
msg, false);
diff --git a/NetlinkHandler.h b/NetlinkHandler.h
index 492d6b1..8b2498f 100644
--- a/NetlinkHandler.h
+++ b/NetlinkHandler.h
@@ -24,7 +24,7 @@
NetlinkManager *mNm;
public:
- NetlinkHandler(NetlinkManager *nm, int listenerSocket, int format);
+ NetlinkHandler(NetlinkManager *nm, int listenerSocket);
virtual ~NetlinkHandler();
int start(void);
@@ -36,6 +36,5 @@
void notifyInterfaceAdded(const char *name);
void notifyInterfaceRemoved(const char *name);
void notifyInterfaceChanged(const char *name, bool isUp);
- void notifyInterfaceLinkChanged(const char *name, bool isUp);
};
#endif
diff --git a/NetlinkManager.cpp b/NetlinkManager.cpp
index fabf011..634fd4d 100644
--- a/NetlinkManager.cpp
+++ b/NetlinkManager.cpp
@@ -24,7 +24,6 @@
#include <sys/un.h>
#include <linux/netlink.h>
-#include <linux/rtnetlink.h>
#define LOG_TAG "Netd"
@@ -48,81 +47,49 @@
NetlinkManager::~NetlinkManager() {
}
-NetlinkHandler *NetlinkManager::setupSocket(int *sock, int socketType,
- int groups, int format) {
-
+int NetlinkManager::start() {
struct sockaddr_nl nladdr;
int sz = 64 * 1024;
memset(&nladdr, 0, sizeof(nladdr));
nladdr.nl_family = AF_NETLINK;
nladdr.nl_pid = getpid();
- nladdr.nl_groups = groups;
+ nladdr.nl_groups = 0xffffffff;
- if ((*sock = socket(PF_NETLINK, SOCK_DGRAM, socketType)) < 0) {
- LOGE("Unable to create netlink socket: %s", strerror(errno));
- return NULL;
- }
-
- if (setsockopt(*sock, SOL_SOCKET, SO_RCVBUFFORCE, &sz, sizeof(sz)) < 0) {
- LOGE("Unable to set netlink socket options: %s", strerror(errno));
- close(*sock);
- return NULL;
- }
-
- if (bind(*sock, (struct sockaddr *) &nladdr, sizeof(nladdr)) < 0) {
- LOGE("Unable to bind netlink socket: %s", strerror(errno));
- close(*sock);
- return NULL;
- }
-
- NetlinkHandler *handler = new NetlinkHandler(this, *sock, format);
- if (handler->start()) {
- LOGE("Unable to start NetlinkHandler: %s", strerror(errno));
- close(*sock);
- return NULL;
- }
-
- return handler;
-}
-
-int NetlinkManager::start() {
- if ((mUeventHandler = setupSocket(&mUeventSock, NETLINK_KOBJECT_UEVENT,
- 0xffffffff, NetlinkListener::NETLINK_FORMAT_ASCII)) == NULL) {
+ if ((mSock = socket(PF_NETLINK,
+ SOCK_DGRAM,NETLINK_KOBJECT_UEVENT)) < 0) {
+ LOGE("Unable to create uevent socket: %s", strerror(errno));
return -1;
}
- if ((mRouteHandler = setupSocket(&mRouteSock, NETLINK_ROUTE, RTMGRP_LINK,
- NetlinkListener::NETLINK_FORMAT_BINARY)) == NULL) {
+ if (setsockopt(mSock, SOL_SOCKET, SO_RCVBUFFORCE, &sz, sizeof(sz)) < 0) {
+ LOGE("Unable to set uevent socket options: %s", strerror(errno));
+ return -1;
+ }
+
+ if (bind(mSock, (struct sockaddr *) &nladdr, sizeof(nladdr)) < 0) {
+ LOGE("Unable to bind uevent socket: %s", strerror(errno));
+ return -1;
+ }
+
+ mHandler = new NetlinkHandler(this, mSock);
+ if (mHandler->start()) {
+ LOGE("Unable to start NetlinkHandler: %s", strerror(errno));
return -1;
}
return 0;
}
int NetlinkManager::stop() {
- int status = 0;
-
- if (mUeventHandler->stop()) {
- LOGE("Unable to stop uevent NetlinkHandler: %s", strerror(errno));
- status = -1;
+ if (mHandler->stop()) {
+ LOGE("Unable to stop NetlinkHandler: %s", strerror(errno));
+ return -1;
}
+ delete mHandler;
+ mHandler = NULL;
- delete mUeventHandler;
- mUeventHandler = NULL;
+ close(mSock);
+ mSock = -1;
- close(mUeventSock);
- mUeventSock = -1;
-
- if (mRouteHandler->stop()) {
- LOGE("Unable to stop route NetlinkHandler: %s", strerror(errno));
- status = -1;
- }
-
- delete mRouteHandler;
- mRouteHandler = NULL;
-
- close(mRouteSock);
- mRouteSock = -1;
-
- return status;
+ return 0;
}
diff --git a/NetlinkManager.h b/NetlinkManager.h
index ff646f4..9c7ba11 100644
--- a/NetlinkManager.h
+++ b/NetlinkManager.h
@@ -28,10 +28,8 @@
private:
SocketListener *mBroadcaster;
- NetlinkHandler *mUeventHandler;
- NetlinkHandler *mRouteHandler;
- int mUeventSock;
- int mRouteSock;
+ NetlinkHandler *mHandler;
+ int mSock;
public:
virtual ~NetlinkManager();
@@ -46,7 +44,5 @@
private:
NetlinkManager();
- NetlinkHandler* setupSocket(int *sock, int socketType, int groups,
- int format);
};
#endif