[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [libvirt] Setting devid for emulated NICs (Xen 4.3.1 / libvirt 1.2.0) using libxl driver



Ian Campbell wrote:
> On Thu, 2013-12-19 at 11:39 -0700, Jim Fehlig wrote:
>   
>> Stefan Bader wrote:
>>     
>>> Oh, just while talking about setdefault. Jim, this is one of the odd things 
>>> when
>>> moving from xm to xl stack from libvirt: libvirt defaults to the netfront 
>>> NIC
>>> when no model is specified and sets the type. The libxl setdefault function 
>>> sets
>>> the model to rtl8139 but leaves the type untouched.
>>>       
>> The xend toolstack always creates both emulated and vif devices unless
>> 'type=netfront' is explicitly specified.  As you say, the guest gets to
>> choose what to do with them.  E.g. PXE boot using the emulated device,
>> or have the driver for the PV device unplug the emulated one.  I don't
>> think libxl supports this right?
>>     
>
>
> On my 4.3.1 setup, I changed the above to
>
>
>
>   if (hvm) {
>
>   x_nic->nictype = LIBXL_NIC_TYPE_VIF_IOEMU;
>
>       if (l_nic->model) {
>
>           if (VIR_STRDUP(x_nic->model, l_nic->model) < 0)
>
>       return -1;
>
>           if (STREQ(l_nic->model, "netfront"))
>
>               x_nic->nictype = LIBXL_NIC_TYPE_VIF;
>
>       }
>
>   } else {
>
>       x_nic->nictype = LIBXL_NIC_TYPE_VIF;
>
>   }
>
>
>
> which is better initialization logic IMO.  If the domain is hvm, set
> nictype to LIBXL_NIC_TYPE_VIF_IOEMU, unless model 'netfront' is
> specified.  This behavior is consistent with the legacy xen driver. 
> The change seems to work fine and resolves the PXE issue Stefan noted -
> as long as I initialize devid in libvirt.  So we'll need the above fix
> in libvirt, as well as a resolution to the nic devid initialization in
> libxl that started this thread.
>
>
>
> Regards,
>
> Jim
> It should do, in fact I thought it was the default.
>
> How are you initialising the libxl_device_nic?

  if (l_nic->model && !STREQ(l_nic->model, "netfront")) {
      if (VIR_STRDUP(x_nic->model, l_nic->model) < 0)
          return -1;
      x_nic->nictype = LIBXL_NIC_TYPE_VIF_IOEMU;
  } else {
      x_nic->nictype = LIBXL_NIC_TYPE_VIF;
  }

>  Type ==  VIF_IOEMU (which
> is the default for a VIF on an HVM guest) means both emulated and pv.
> (there were bugs in the semantics here in very early versions of libxl,
> but I thought they were fixed even before 4.2)
>   

On my 4.3.1 setup, I changed the above to

  if (hvm) {
  x_nic->nictype = LIBXL_NIC_TYPE_VIF_IOEMU;
      if (l_nic->model) {
          if (VIR_STRDUP(x_nic->model, l_nic->model) < 0)
      return -1;
          if (STREQ(l_nic->model, "netfront"))
              x_nic->nictype = LIBXL_NIC_TYPE_VIF;
      }
  } else {
      x_nic->nictype = LIBXL_NIC_TYPE_VIF;
  }

which is better initialization logic IMO.  If the domain is hvm, set
nictype to LIBXL_NIC_TYPE_VIF_IOEMU, unless model 'netfront' is
specified.  This behavior is consistent with the legacy xen driver.  The
change seems to work fine and resolves the PXE issue Stefan noted - as
long as I initialize devid in libvirt.  So we'll need the above fix in
libvirt, as well as a resolution to the nic devid initialization in
libxl that started this thread.

Regards,
Jim

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.