Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 731d831e authored by Ashish Sharma's avatar Ashish Sharma
Browse files

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
parent 720d5982
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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();
+13 −1
Original line number Diff line number Diff line
@@ -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);
        }