Laine Stump wrote:
On 10/29/2014 02:08 PM, Roman Bogorodskiy wrote:
> Conrad Meyer wrote:
>
>> Hi all,
>>
>> The recent commit with SHA1 cc0e8c244d080f56392278e836cc378ba848e7aa,
>> "util: Functions to update host network device's multicast
filter,"
>> breaks the build on FreeBSD, so please address this before 1.2.10
>> release.
>>
>> Here is the output from Clang:
>>
>> CC util/libvirt_util_la-virnetdev.lo
>> util/virnetdev.c:1995:9: error: no member named 'ifr_hwaddr' in
'struct ifreq'
>> ifr.ifr_hwaddr.sa_family = AF_UNSPEC;
>> ~~~ ^
>> util/virnetdev.c:1996:52: error: no member named 'ifr_hwaddr' in
'struct ifreq'
>> virMacAddrGetRaw(macaddr, (unsigned char *)ifr.ifr_hwaddr.sa_data);
>> ~~~ ^
>> util/virnetdev.c:2043:9: error: no member named 'ifr_hwaddr' in
'struct ifreq'
>> ifr.ifr_hwaddr.sa_family = AF_UNSPEC;
>> ~~~ ^
>> util/virnetdev.c:2044:52: error: no member named 'ifr_hwaddr' in
'struct ifreq'
>> virMacAddrGetRaw(macaddr, (unsigned char *)ifr.ifr_hwaddr.sa_data);
>> ~~~ ^
>> 4 errors generated.
> I have fixes for that, will send the patches shortly.
Thank you! I was just going through all that trying to decide a useful
way to resolve it. The new code in question uses similar #if logic to
what was used for virNetDev(Get|Set)MAC(), but those functions (which
also use ifr_hwaddr) use an ioctl that doesn't exist on FreeBSD, so it's
easy. In these new cases, FreeBSD *does* have the ioctl in question, but
apparently implement it in a different way, so something different is
needed in the #if. ifr_hwaddr is a #define on Linux, but I don't know if
that is always guaranteed (or if it could sometimes directly be a member
of the ifreq struct).
I have send the patches already and added an explicit check for that
member. I'll take a look how to provide a fully functional
implementation of the functions in subject when I have more time.
Roman Bogorodskiy