On 12/02/2015 03:27 AM, Daniel P. Berrange wrote:
On Tue, Dec 01, 2015 at 05:49:10PM -0700, Jim Fehlig wrote:
> On 11/30/2015 09:18 PM, Jim Fehlig wrote:
>> On 11/26/2015 08:10 AM, Ian Campbell wrote:
>>> Commit 0f7436ca54c9 "network: wait for DAD to finish for bridge IPv6
addresses"
>>> results in:
>>>
>>> CC util/libvirt_util_la-virnetdevmacvlan.lo
>>> util/virnetdev.c: In function 'virNetDevParseDadStatus':
>>> util/virnetdev.c:1319:188: error: cast increases required alignment of target
type [-Werror=cast-align]
>>> util/virnetdev.c:1332:41: error: cast increases required alignment of target
type [-Werror=cast-align]
>>> util/virnetdev.c:1334:92: error: cast increases required alignment of target
type [-Werror=cast-align]
>>> cc1: all warnings being treated as errors
>>>
>>> on at least ARM platforms.
>> Thanks for looking into this issue Ian.
>>
>>> The three macros involved (NLMSG_NEXT, IFA_RTA and RTA_NEXT) all appear to
>>> correctly take care of alignment, therefore suppress Wcast-align around
their
>>> uses.
>> Indeed those macros seem to handle alignment, even on one of my older machines
>> with 2.6 kernel headers. IMO this falls under the "difficult or impossible
to
>> address" scenarios that Daniel mentioned when introducing the
VIR_WARNINGS_*
>> macros via commit e57aaa6f. Adding Daniel to cc for a sanity check of my weak
ACK.
> Looks like I forgot to actually add Daniel to the cc list. Doing so now...
>
>> Regards,
>> Jim
>>
>>> Signed-off-by: Ian Campbell <ian.campbell(a)citrix.com>
>>> Cc: Maxim Perevedentsev <mperevedentsev(a)virtuozzo.com>
>>> Cc: Laine Stump <laine(a)laine.org>
>>> Cc: Dario Faggioli <dario.faggioli(a)citrix.com>
>>> Cc: Jim Fehlig <jfehlig(a)suse.com>
>>> ---
>>> src/util/virnetdev.c | 5 +++++
>>> 1 file changed, 5 insertions(+)
>>>
>>> diff --git a/src/util/virnetdev.c b/src/util/virnetdev.c
>>> index ade9afa..0bc809e 100644
>>> --- a/src/util/virnetdev.c
>>> +++ b/src/util/virnetdev.c
>>> @@ -1316,7 +1316,10 @@ virNetDevParseDadStatus(struct nlmsghdr *nlh, int
len,
>>> struct rtattr *rtattr_ptr;
>>> size_t i;
>>> struct in6_addr *addr;
>>> +
>>> + VIR_WARNINGS_NO_CAST_ALIGN
>>> for (; NLMSG_OK(nlh, len); nlh = NLMSG_NEXT(nlh, len)) {
>>> + VIR_WARNINGS_RESET
>>> if (NLMSG_PAYLOAD(nlh, 0) < sizeof(struct ifaddrmsg)) {
>>> /* Message without payload is the last one. */
>>> break;
>>> @@ -1329,9 +1332,11 @@ virNetDevParseDadStatus(struct nlmsghdr *nlh, int
len,
>>> }
>>>
>>> ifaddrmsg_len = IFA_PAYLOAD(nlh);
>>> + VIR_WARNINGS_NO_CAST_ALIGN
>>> rtattr_ptr = (struct rtattr *) IFA_RTA(ifaddrmsg_ptr);
>>> for (; RTA_OK(rtattr_ptr, ifaddrmsg_len);
>>> rtattr_ptr = RTA_NEXT(rtattr_ptr, ifaddrmsg_len)) {
>>> + VIR_WARNINGS_RESET
>>> if (RTA_PAYLOAD(rtattr_ptr) != sizeof(struct in6_addr)) {
>>> /* No address: ignore. */
>>> continue;
Yeah, that looks like about as good as we'll get to deal with this
so ACK to that change in absence of any better suggestion.
Thanks. I noticed DV tagged 1.3.0-rc1, but I've pushed this since it fixes build
failures on some arch.
Regards,
Jim