[libvirt] [PATCH v2 1/5] FreeBSD: implement virNetDevExists() and virNetDevSetName().

John Ferlan jferlan at redhat.com
Tue Jan 22 01:36:52 UTC 2013


On 01/20/2013 11:22 AM, Roman Bogorodskiy wrote:
> ---
>  src/util/virnetdev.c | 20 ++++++++++++++++----
>  1 file changed, 16 insertions(+), 4 deletions(-)
> 

ACK

> diff --git a/src/util/virnetdev.c b/src/util/virnetdev.c
> index 7ffd3c2..dae267b 100644
> --- a/src/util/virnetdev.c
> +++ b/src/util/virnetdev.c
> @@ -44,7 +44,7 @@
>  
>  #define VIR_FROM_THIS VIR_FROM_NONE
>  
> -#if defined(HAVE_STRUCT_IFREQ)
> +#if defined(HAVE_STRUCT_IFREQ) || defined(__FreeBSD__)
>  static int virNetDevSetupControlFull(const char *ifname,
>                                       struct ifreq *ifr,
>                                       int domain,
> @@ -81,12 +81,15 @@ static int virNetDevSetupControlFull(const char *ifname,
>  static int virNetDevSetupControl(const char *ifname,
>                                   struct ifreq *ifr)
>  {
> +#if defined(__FreeBSD__)
> +    return virNetDevSetupControlFull(ifname, ifr, AF_LOCAL, SOCK_DGRAM);
> +#else
>      return virNetDevSetupControlFull(ifname, ifr, AF_PACKET, SOCK_DGRAM);
> +#endif
>  }
>  #endif
>  
> -
> -#if defined(SIOCGIFFLAGS) && defined(HAVE_STRUCT_IFREQ)
> +#if defined(SIOCGIFFLAGS) && (defined(HAVE_STRUCT_IFREQ) || defined(__FreeBSD__))
>  /**
>   * virNetDevExists:
>   * @ifname
> @@ -105,7 +108,12 @@ int virNetDevExists(const char *ifname)
>          return -1;
>  
>      if (ioctl(fd, SIOCGIFFLAGS, &ifr)) {
> +        /* FreeBSD throws ENXIO when interface doesn't exist */
> +#if defined(__FreeBSD__)
> +        if (errno == ENXIO)
> +#else
>          if (errno == ENODEV)
> +#endif
>              ret = 0;
>          else
>              virReportSystemError(errno,
> @@ -459,7 +467,7 @@ int virNetDevSetNamespace(const char *ifname, pid_t pidInNs)
>      return rc;
>  }
>  
> -#if defined(SIOCSIFNAME) && defined(HAVE_STRUCT_IFREQ)
> +#if defined(SIOCSIFNAME) && (defined(HAVE_STRUCT_IFREQ) || defined(__FreeBSD__))
>  /**
>   * virNetDevSetName:
>   * @ifname: name of device
> @@ -478,12 +486,16 @@ int virNetDevSetName(const char* ifname, const char *newifname)
>      if ((fd = virNetDevSetupControl(ifname, &ifr)) < 0)
>          return -1;
>  
> +#if defined(__FreeBSD__)
> +    ifr.ifr_data = newifname;
> +#else
>      if (virStrcpyStatic(ifr.ifr_newname, newifname) == NULL) {
>          virReportSystemError(ERANGE,
>                               _("Network interface name '%s' is too long"),
>                               newifname);
>          goto cleanup;
>      }
> +#endif
>  
>      if (ioctl(fd, SIOCSIFNAME, &ifr)) {
>          virReportSystemError(errno,
> 




More information about the libvir-list mailing list