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
This commit is contained in:
Ashish Sharma 2012-04-10 18:59:16 -07:00
parent 720d598280
commit 731d831e91
2 changed files with 15 additions and 1 deletions

View File

@ -34,6 +34,8 @@ public:
const static int NlActionChange;
const static int NlActionLinkDown;
const static int NlActionLinkUp;
const static int NlActionIfaceActive;
const static int NlActionIfaceIdle;
NetlinkEvent();
virtual ~NetlinkEvent();

View File

@ -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);
}