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:
parent
720d598280
commit
731d831e91
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue