From 526b838c9d647e8767fac957c53133153c3cf909 Mon Sep 17 00:00:00 2001 From: Lorenzo Colitti Date: Tue, 3 Sep 2013 00:25:14 +0900 Subject: Switch back to subsystem "net" for netlink events. The change to enable address tracking via netlink incorrectly changed the subsystem of rtnetlink events from "net" to "interface". This broke interface add/delete notifications, which come from the kernel with subsystem "net". Switch back to "net" and deal with address tracking via new action codes instead of a new subsystem. [Cherry-pick of f34861346d5c207912075fba9874090e4c947869] Bug: 10433320 Change-Id: Ibf30efb426949dfd02304cc1d9adb1c005a539a6 --- include/sysutils/NetlinkEvent.h | 2 ++ libsysutils/src/NetlinkEvent.cpp | 11 +++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/include/sysutils/NetlinkEvent.h b/include/sysutils/NetlinkEvent.h index 2a734cb..f3501cf 100644 --- a/include/sysutils/NetlinkEvent.h +++ b/include/sysutils/NetlinkEvent.h @@ -34,6 +34,8 @@ public: const static int NlActionChange; const static int NlActionLinkDown; const static int NlActionLinkUp; + const static int NlActionAddressUpdated; + const static int NlActionAddressRemoved; NetlinkEvent(); virtual ~NetlinkEvent(); diff --git a/libsysutils/src/NetlinkEvent.cpp b/libsysutils/src/NetlinkEvent.cpp index 01bec77..aae2ae7 100644 --- a/libsysutils/src/NetlinkEvent.cpp +++ b/libsysutils/src/NetlinkEvent.cpp @@ -42,6 +42,8 @@ const int NetlinkEvent::NlActionRemove = 2; const int NetlinkEvent::NlActionChange = 3; const int NetlinkEvent::NlActionLinkUp = 4; const int NetlinkEvent::NlActionLinkDown = 5; +const int NetlinkEvent::NlActionAddressUpdated = 6; +const int NetlinkEvent::NlActionAddressRemoved = 7; NetlinkEvent::NetlinkEvent() { mAction = NlActionUnknown; @@ -131,11 +133,12 @@ bool NetlinkEvent::parseIfAddrMessage(int type, struct ifaddrmsg *ifaddr, } // Fill in interface information. - mAction = (type == RTM_NEWADDR) ? NlActionAdd : NlActionRemove; - mSubsystem = strdup("address"); + mAction = (type == RTM_NEWADDR) ? NlActionAddressUpdated : + NlActionAddressRemoved; + mSubsystem = strdup("net"); asprintf(&mParams[0], "ADDRESS=%s/%d", addrstr, ifaddr->ifa_prefixlen); - asprintf(&mParams[1], "IFACE=%s", ifname); + asprintf(&mParams[1], "INTERFACE=%s", ifname); asprintf(&mParams[2], "FLAGS=%u", ifaddr->ifa_flags); asprintf(&mParams[3], "SCOPE=%u", ifaddr->ifa_scope); } else if (rta->rta_type == IFA_CACHEINFO) { @@ -205,7 +208,7 @@ bool NetlinkEvent::parseBinaryNetlinkMessage(char *buffer, int size) { mParams[0] = strdup(buffer); mAction = (ifi->ifi_flags & IFF_LOWER_UP) ? NlActionLinkUp : NlActionLinkDown; - mSubsystem = strdup("interface"); + mSubsystem = strdup("net"); break; } -- cgit v1.1