提交 9304d916 编写于 作者: M Michal Privoznik

virarptable: Avoid cast align warnings

We have to use VIR_WARNINGS_NO_CAST_ALIGN to avoid clang warning
about increased required alignment caused by some netlink macros.
Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
上级 1bc7e2b8
...@@ -51,10 +51,11 @@ static int ...@@ -51,10 +51,11 @@ static int
parse_rtattr(struct rtattr *tb[], int max, struct rtattr *rta, int len) parse_rtattr(struct rtattr *tb[], int max, struct rtattr *rta, int len)
{ {
memset(tb, 0, sizeof(struct rtattr *) * (max + 1)); memset(tb, 0, sizeof(struct rtattr *) * (max + 1));
while (RTA_OK(rta, len)) { VIR_WARNINGS_NO_CAST_ALIGN
for (; RTA_OK(rta, len); rta = RTA_NEXT(rta, len)) {
VIR_WARNINGS_RESET
if ((rta->rta_type <= max) && (!tb[rta->rta_type])) if ((rta->rta_type <= max) && (!tb[rta->rta_type]))
tb[rta->rta_type] = rta; tb[rta->rta_type] = rta;
rta = RTA_NEXT(rta, len);
} }
if (len) if (len)
...@@ -82,73 +83,72 @@ virArpTablePtr virArpTableGet(void) ...@@ -82,73 +83,72 @@ virArpTablePtr virArpTableGet(void)
nh = (struct nlmsghdr*)nlData; nh = (struct nlmsghdr*)nlData;
while (NLMSG_OK(nh, msglen)) { VIR_WARNINGS_NO_CAST_ALIGN
for (; NLMSG_OK(nh, msglen); nh = NLMSG_NEXT(nh, msglen)) {
VIR_WARNINGS_RESET
struct ndmsg *r = NLMSG_DATA(nh); struct ndmsg *r = NLMSG_DATA(nh);
int len = nh->nlmsg_len; int len = nh->nlmsg_len;
void *addr; void *addr;
if ((len -= NLMSG_LENGTH(sizeof(*nh))) < 0) { if ((len -= NLMSG_LENGTH(sizeof(*nh))) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("wrong nlmsg len")); _("wrong nlmsg len"));
goto cleanup; goto cleanup;
} }
if (r->ndm_family && (r->ndm_family != AF_INET)) if (r->ndm_family && (r->ndm_family != AF_INET))
goto next_nlmsg; continue;
/* catch stale and reachalbe arp entry only */ /* catch stale and reachalbe arp entry only */
if (r->ndm_state && if (r->ndm_state &&
(!(r->ndm_state == NUD_STALE || r->ndm_state == NUD_REACHABLE))) { (!(r->ndm_state == NUD_STALE || r->ndm_state == NUD_REACHABLE)))
nh = NLMSG_NEXT(nh, msglen); continue;
continue;
}
if (nh->nlmsg_type == NLMSG_DONE) if (nh->nlmsg_type == NLMSG_DONE)
goto end_of_netlink_messages; goto end_of_netlink_messages;
parse_rtattr(tb, NDA_MAX, NDA_RTA(r), VIR_WARNINGS_NO_CAST_ALIGN
nh->nlmsg_len - NLMSG_LENGTH(sizeof(*r))); parse_rtattr(tb, NDA_MAX, NDA_RTA(r),
nh->nlmsg_len - NLMSG_LENGTH(sizeof(*r)));
VIR_WARNINGS_RESET
if (tb[NDA_DST] == NULL || tb[NDA_LLADDR] == NULL) if (tb[NDA_DST] == NULL || tb[NDA_LLADDR] == NULL)
goto next_nlmsg; continue;
if (tb[NDA_DST]) { if (tb[NDA_DST]) {
virSocketAddr virAddr; virSocketAddr virAddr;
if (VIR_REALLOC_N(table->t, num + 1) < 0) if (VIR_REALLOC_N(table->t, num + 1) < 0)
goto cleanup; goto cleanup;
table->n = num + 1; table->n = num + 1;
addr = RTA_DATA(tb[NDA_DST]); addr = RTA_DATA(tb[NDA_DST]);
bzero(&virAddr, sizeof(virAddr)); bzero(&virAddr, sizeof(virAddr));
virAddr.len = sizeof(virAddr.data.inet4); virAddr.len = sizeof(virAddr.data.inet4);
virAddr.data.inet4.sin_family = AF_INET; virAddr.data.inet4.sin_family = AF_INET;
virAddr.data.inet4.sin_addr = *(struct in_addr *)addr; virAddr.data.inet4.sin_addr = *(struct in_addr *)addr;
ipstr = virSocketAddrFormat(&virAddr); ipstr = virSocketAddrFormat(&virAddr);
if (VIR_STRDUP(table->t[num].ipaddr, ipstr) < 0) if (VIR_STRDUP(table->t[num].ipaddr, ipstr) < 0)
goto cleanup; goto cleanup;
VIR_FREE(ipstr); VIR_FREE(ipstr);
} }
if (tb[NDA_LLADDR]) { if (tb[NDA_LLADDR]) {
virMacAddr macaddr; virMacAddr macaddr;
char ifmac[VIR_MAC_STRING_BUFLEN]; char ifmac[VIR_MAC_STRING_BUFLEN];
addr = RTA_DATA(tb[NDA_LLADDR]); addr = RTA_DATA(tb[NDA_LLADDR]);
memcpy(macaddr.addr, addr, VIR_MAC_BUFLEN); memcpy(macaddr.addr, addr, VIR_MAC_BUFLEN);
virMacAddrFormat(&macaddr, ifmac); virMacAddrFormat(&macaddr, ifmac);
if (VIR_STRDUP(table->t[num].mac, ifmac) < 0) if (VIR_STRDUP(table->t[num].mac, ifmac) < 0)
goto cleanup; goto cleanup;
num++; num++;
} }
next_nlmsg:
nh = NLMSG_NEXT(nh, msglen);
} }
end_of_netlink_messages: end_of_netlink_messages:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册