summaryrefslogtreecommitdiffstats
path: root/libsysutils
diff options
context:
space:
mode:
authorAshish Sharma <ashishsharma@google.com>2012-04-10 18:59:16 -0700
committerAshish Sharma <ashishsharma@google.com>2012-04-11 17:24:46 -0700
commit731d831e91d5d9f8b15ca95367977abe35967166 (patch)
tree041d773389dc1d6543fda3bb618d2a9233632c8f /libsysutils
parent720d598280e5ebd3fb7c845a2a11520bb646d645 (diff)
downloadsystem_core-731d831e91d5d9f8b15ca95367977abe35967166.zip
system_core-731d831e91d5d9f8b15ca95367977abe35967166.tar.gz
system_core-731d831e91d5d9f8b15ca95367977abe35967166.tar.bz2
libsysutils: NetlinkEvent: add support for interface xt_IDLETIMER events.
xt_IDLETIMER events are used to infer the interface (radio) state based on a inactivity timeout value. Change-Id: I755eb54a048ca1c6ce0c646564d61188d8241851
Diffstat (limited to 'libsysutils')
-rw-r--r--libsysutils/src/NetlinkEvent.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/libsysutils/src/NetlinkEvent.cpp b/libsysutils/src/NetlinkEvent.cpp
index 4beebb7..6439711 100644
--- a/libsysutils/src/NetlinkEvent.cpp
+++ b/libsysutils/src/NetlinkEvent.cpp
@@ -25,6 +25,7 @@
#include <sys/socket.h>
#include <linux/if.h>
#include <linux/netfilter/nfnetlink.h>
+#include <linux/netfilter/xt_IDLETIMER.h>
#include <linux/netfilter_ipv4/ipt_ULOG.h>
/* From kernel's net/netfilter/xt_quota2.c */
const int QLOG_NL_EVENT = 112;
@@ -38,6 +39,8 @@ const int NetlinkEvent::NlActionRemove = 2;
const int NetlinkEvent::NlActionChange = 3;
const int NetlinkEvent::NlActionLinkUp = 4;
const int NetlinkEvent::NlActionLinkDown = 5;
+const int NetlinkEvent::NlActionIfaceActive = 6;
+const int NetlinkEvent::NlActionIfaceIdle = 7;
NetlinkEvent::NetlinkEvent() {
mAction = NlActionUnknown;
@@ -70,7 +73,8 @@ void NetlinkEvent::dump() {
}
/*
- * Parse an binary message from a NETLINK_ROUTE netlink socket.
+ * Parse an binary message from a NETLINK_ROUTE netlink socket
+ * and IDLETIMER netlink socket.
*/
bool NetlinkEvent::parseBinaryNetlinkMessage(char *buffer, int size) {
size_t sz = size;
@@ -127,6 +131,14 @@ bool NetlinkEvent::parseBinaryNetlinkMessage(char *buffer, int size) {
mSubsystem = strdup("qlog");
mAction = NlActionChange;
+ } else if (nh->nlmsg_type == NL_EVENT_TYPE_ACTIVE
+ || nh->nlmsg_type == NL_EVENT_TYPE_INACTIVE) {
+ char *ifacename;
+ ifacename = (char *)NLMSG_DATA(nh);
+ asprintf(&mParams[0], "INTERFACE=%s", ifacename);
+ mSubsystem = strdup("idletimer");
+ mAction = (nh->nlmsg_type == NL_EVENT_TYPE_ACTIVE) ?
+ NlActionIfaceActive : NlActionIfaceIdle;
} else {
SLOGD("Unexpected netlink message. type=0x%x\n", nh->nlmsg_type);
}