On 04/29/2013 11:48 AM, Eric Blake wrote:
On 04/27/2013 09:50 AM, Roman Bogorodskiy wrote:
> FreeBSD (and maybe other BSDs) have different member
> names in struct ifreq when compared to Linux, such as:
>
> - uses ifr_data instead of ifr_newname for setting
> interface names
> - uses ifr_index instead of ifr_ifindex for interface
> index
>
> Also, add a check for SIOCGIFHWADDR for virNetDevValidateConfig().
>
> Use AF_LOCAL if AF_PACKET is not available.
> ---
Overall, looks sane; I'll probably apply the touchups mentioned and push
later today after testing on my own FreeBSD VM.
With this patch, I'm getting a compile failure on FreeBSD 8.2:
util/virnetdev.c:667: error: 'struct ifreq' has no member named
'ifr_ifindex'
Looking further, I see <net/if.h> has:
struct ifreq {
...
union {
...
short ifru_index;
} ifr_ifru;
#define ifr_index ifr_ifru.ifru_index
};
so it should have picked the ifreq.ifr_index path; next looking at
config.log, I see:
configure:67334: checking for struct ifreq.ifr_index
configure:67334: gcc -std=gnu99 -c -g -D_THREAD_SAFE -D_THREAD_SAFE
conftest.c >&5
In file included from conftest.c:540:
/usr/include/net/if.h:305: error: field 'ifru_addr' has incomplete type
aha - BSD's <net/if.h> is not self-contained.
I'm now testing a minor tweak to configure.ac to include further pre-req
headers; I'll post the modified version of your patch that finally gets
things working for me.
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org