Merge "Add a class lable parameter to idletimer."
diff --git a/CommandListener.cpp b/CommandListener.cpp
index 195b07e..f562df3 100644
--- a/CommandListener.cpp
+++ b/CommandListener.cpp
@@ -1230,11 +1230,12 @@
return 0;
}
if (!strcmp(argv[1], "add")) {
- if (argc != 4) {
+ if (argc != 5) {
cli->sendMsg(ResponseCode::CommandSyntaxError, "Missing argument", false);
return 0;
}
- if(0 != sIdletimerCtrl->addInterfaceIdletimer(argv[2], atoi(argv[3]))) {
+ if(0 != sIdletimerCtrl->addInterfaceIdletimer(
+ argv[2], atoi(argv[3]), argv[4])) {
cli->sendMsg(ResponseCode::OperationFailed, "Failed to add interface", false);
} else {
cli->sendMsg(ResponseCode::CommandOkay, "Add success", false);
@@ -1242,12 +1243,13 @@
return 0;
}
if (!strcmp(argv[1], "remove")) {
- if (argc != 4) {
+ if (argc != 5) {
cli->sendMsg(ResponseCode::CommandSyntaxError, "Missing argument", false);
return 0;
}
// ashish: fixme timeout
- if (0 != sIdletimerCtrl->removeInterfaceIdletimer(argv[2], atoi(argv[3]))) {
+ if (0 != sIdletimerCtrl->removeInterfaceIdletimer(
+ argv[2], atoi(argv[3]), argv[4])) {
cli->sendMsg(ResponseCode::OperationFailed, "Failed to remove interface", false);
} else {
cli->sendMsg(ResponseCode::CommandOkay, "Remove success", false);
diff --git a/IdletimerController.cpp b/IdletimerController.cpp
index efe4f09..2bcb9b7 100644
--- a/IdletimerController.cpp
+++ b/IdletimerController.cpp
@@ -51,8 +51,8 @@
* ndc command sequence
* ------------------
* ndc idletimer enable
- * ndc idletimer add <iface> <timeout>
- * ndc idletimer remove <iface> <timeout>
+ * ndc idletimer add <iface> <timeout> <class label>
+ * ndc idletimer remove <iface> <timeout> <class label>
*
* Monitor effect on the iptables chains after each step using:
* iptables -nxvL -t nat
@@ -148,28 +148,33 @@
}
int IdletimerController::modifyInterfaceIdletimer(IptOp op, const char *iface,
- uint32_t timeout) {
+ uint32_t timeout,
+ const char *classLabel) {
int res;
char *buffer;
asprintf(&buffer, "-t nat -%c idletimer_nat_PREROUTING -i %s -j IDLETIMER"
" --timeout %u --label %s --send_nl_msg 1",
- (op == IptOpAdd) ? 'A' : 'D', iface, timeout, iface);
+ (op == IptOpAdd) ? 'A' : 'D', iface, timeout, classLabel);
res = runIpxtablesCmd(buffer);
free(buffer);
asprintf(&buffer, "-t nat -%c idletimer_nat_POSTROUTING -o %s -j IDLETIMER"
" --timeout %u --label %s --send_nl_msg 1",
- (op == IptOpAdd) ? 'A' : 'D', iface, timeout, iface);
+ (op == IptOpAdd) ? 'A' : 'D', iface, timeout, classLabel);
res |= runIpxtablesCmd(buffer);
free(buffer);
return res;
}
-int IdletimerController::addInterfaceIdletimer(const char *iface, uint32_t timeout) {
- return modifyInterfaceIdletimer(IptOpAdd, iface, timeout);
+int IdletimerController::addInterfaceIdletimer(const char *iface,
+ uint32_t timeout,
+ const char *classLabel) {
+ return modifyInterfaceIdletimer(IptOpAdd, iface, timeout, classLabel);
}
-int IdletimerController::removeInterfaceIdletimer(const char *iface, uint32_t timeout) {
- return modifyInterfaceIdletimer(IptOpDelete, iface, timeout);
+int IdletimerController::removeInterfaceIdletimer(const char *iface,
+ uint32_t timeout,
+ const char *classLabel) {
+ return modifyInterfaceIdletimer(IptOpDelete, iface, timeout, classLabel);
}
diff --git a/IdletimerController.h b/IdletimerController.h
index a55f7af..6167b48 100644
--- a/IdletimerController.h
+++ b/IdletimerController.h
@@ -24,15 +24,18 @@
int enableIdletimerControl();
int disableIdletimerControl();
- int addInterfaceIdletimer(const char *iface, uint32_t timeout);
- int removeInterfaceIdletimer(const char *iface, uint32_t timeout);
+ int addInterfaceIdletimer(const char *iface, uint32_t timeout,
+ const char *classLabel);
+ int removeInterfaceIdletimer(const char *iface, uint32_t timeout,
+ const char *classLabel);
bool setupIptablesHooks();
private:
enum IptOp { IptOpAdd, IptOpDelete };
int setDefaults();
int runIpxtablesCmd(const char *cmd);
- int modifyInterfaceIdletimer(IptOp op, const char *iface, uint32_t timeout);
+ int modifyInterfaceIdletimer(IptOp op, const char *iface, uint32_t timeout,
+ const char *classLabel);
};
#endif
diff --git a/NetlinkHandler.cpp b/NetlinkHandler.cpp
index 94e9240..47f9496 100644
--- a/NetlinkHandler.cpp
+++ b/NetlinkHandler.cpp
@@ -76,10 +76,14 @@
} else if (!strcmp(subsys, "xt_idletimer")) {
int action = evt->getAction();
- const char *iface = evt->findParam("INTERFACE");
+ const char *label = evt->findParam("LABEL");
const char *state = evt->findParam("STATE");
+ // if no LABEL, use INTERFACE instead
+ if (label == NULL) {
+ label = evt->findParam("INTERFACE");
+ }
if (state)
- notifyInterfaceActivity(iface, !strcmp("active", state));
+ notifyInterfaceClassActivity(label, !strcmp("active", state));
#if !LOG_NDEBUG
} else if (strcmp(subsys, "platform") && strcmp(subsys, "backlight")) {
@@ -131,12 +135,15 @@
msg, false);
}
-void NetlinkHandler::notifyInterfaceActivity(const char *name, bool isActive) {
+void NetlinkHandler::notifyInterfaceClassActivity(const char *name,
+ bool isActive) {
char msg[255];
- snprintf(msg, sizeof(msg), "Iface %s %s", name, isActive ? "active" : "idle");
+ snprintf(msg, sizeof(msg), "Iface %s %s", name,
+ isActive ? "active" : "idle");
ALOGV("Broadcasting interface activity msg: %s", msg);
- mNm->getBroadcaster()->sendBroadcast(isActive ? ResponseCode::InterfaceActive
- : ResponseCode::InterfaceIdle,
+ mNm->getBroadcaster()->sendBroadcast(
+ isActive ? ResponseCode::InterfaceClassActive
+ : ResponseCode::InterfaceClassIdle,
msg, false);
}
diff --git a/NetlinkHandler.h b/NetlinkHandler.h
index fe82934..50bface 100644
--- a/NetlinkHandler.h
+++ b/NetlinkHandler.h
@@ -38,6 +38,6 @@
void notifyInterfaceChanged(const char *name, bool isUp);
void notifyInterfaceLinkChanged(const char *name, bool isUp);
void notifyQuotaLimitReached(const char *name, const char *iface);
- void notifyInterfaceActivity(const char *name, bool isActive);
+ void notifyInterfaceClassActivity(const char *name, bool isActive);
};
#endif
diff --git a/NetlinkManager.h b/NetlinkManager.h
index 6515ea4..b7f011e 100644
--- a/NetlinkManager.h
+++ b/NetlinkManager.h
@@ -36,7 +36,6 @@
int mUeventSock;
int mRouteSock;
int mQuotaSock;
- int mIfaceIdleTimerSock;
public:
virtual ~NetlinkManager();
diff --git a/ResponseCode.h b/ResponseCode.h
index 5bebb0f..8ae3d91 100644
--- a/ResponseCode.h
+++ b/ResponseCode.h
@@ -72,7 +72,7 @@
static const int ServiceSetHostnameSuccess = 610;
static const int ServiceGetAddrInfoFailed = 611;
static const int ServiceGetAddrInfoSuccess = 612;
- static const int InterfaceActive = 613;
- static const int InterfaceIdle = 614;
+ static const int InterfaceClassActive = 613;
+ static const int InterfaceClassIdle = 614;
};
#endif