Simplify code that parses ifa_flags. am: c00d57d353

Change-Id: I4f5627d268050c18b3b4dc41d56da2675ff3c8f1
This commit is contained in:
Lorenzo Colitti 2020-05-11 13:53:48 +00:00 committed by Automerger Merge Worker
commit a789cb5bbe

View file

@ -180,7 +180,7 @@ bool NetlinkEvent::parseIfAddrMessage(const struct nlmsghdr *nh) {
struct ifa_cacheinfo *cacheinfo = nullptr;
char addrstr[INET6_ADDRSTRLEN] = "";
char ifname[IFNAMSIZ] = "";
uint32_t flags = 0;
uint32_t flags;
if (!checkRtNetlinkLength(nh, sizeof(*ifaddr)))
return false;
@ -195,6 +195,9 @@ bool NetlinkEvent::parseIfAddrMessage(const struct nlmsghdr *nh) {
// For log messages.
const char *msgtype = rtMessageName(type);
// First 8 bits of flags. In practice will always be overridden when parsing IFA_FLAGS below.
flags = ifaddr->ifa_flags;
struct rtattr *rta;
int len = IFA_PAYLOAD(nh);
for (rta = IFA_RTA(ifaddr); RTA_OK(rta, len); rta = RTA_NEXT(rta, len)) {
@ -231,10 +234,6 @@ bool NetlinkEvent::parseIfAddrMessage(const struct nlmsghdr *nh) {
SLOGD("Unknown ifindex %d in %s", ifaddr->ifa_index, msgtype);
}
// First 8 bits of flags. In practice will always be overridden by the IFA_FLAGS below,
// because that always appears after IFA_ADDRESS. But just in case, support both orders.
flags = (flags & 0xffffff00) | ifaddr->ifa_flags;
} else if (rta->rta_type == IFA_CACHEINFO) {
// Address lifetime information.
if (maybeLogDuplicateAttribute(cacheinfo, "IFA_CACHEINFO", msgtype))
@ -249,7 +248,6 @@ bool NetlinkEvent::parseIfAddrMessage(const struct nlmsghdr *nh) {
cacheinfo = (struct ifa_cacheinfo *) RTA_DATA(rta);
} else if (rta->rta_type == IFA_FLAGS) {
// In practice IFA_FLAGS is always after IFA_ADDRESS, so this will overwrite the flags.
flags = *(uint32_t*)RTA_DATA(rta);
}
}