[libvirt] [PATCH 1/2] xenFormatNet: correct `type=netfront' to 'type=vif' to match libxl

Chun Yan Liu cyliu at suse.com
Tue May 17 06:32:10 UTC 2016



>>> On 5/14/2016 at 12:54 AM, in message <573606AB.4080200 at suse.com>, Jim Fehlig
<jfehlig at suse.com> wrote: 
> On 05/13/2016 06:59 AM, Joao Martins wrote: 
> > 
> > On 05/12/2016 09:55 PM, Jim Fehlig wrote: 
> >> Joao Martins wrote: 
> >>> On 05/12/2016 12:54 AM, Jim Fehlig wrote: 
> >>>> On 04/21/2016 05:10 AM, Chunyan Liu wrote: 
> >>>>> According to current xl.cfg docs and xl codes, it uses type=vif 
> >>>>> instead of type=netfront. 
> >>>>> 
> >>>>> Currently after domxml-to-native, libvirt xml model=netfront will be 
> >>>>> converted to xl type=netfront. This has no problem before, xen codes 
> >>>>> for a long time just check type=ioemu, if not, set type to _VIF. 
> >>>>> 
> >>>>> Since libxl uses parse_nic_config to avoid duplicate codes, it 
> >>>>> compares 'type=vif' and 'type=ioemu' for valid parameters, others 
> >>>>> are considered as invalid, thus we have problem with type=netfront 
> >>>>> in xl config file. 
> >>>>>  #xl create sles12gm-hvm.orig 
> >>>>>  Parsing config from sles12gm-hvm.orig 
> >>>>>  Invalid parameter `type'. 
> >>>>> 
> >>>>> Correct the convertion in libvirt, so that it matchs libxl codes 
> >>>>> and also xl.cfg. 
> >>>>> 
> >>>>> Signed-off-by: Chunyan Liu <cyliu at suse.com> 
> >>>>> --- 
> >>>>>  src/xenconfig/xen_common.c | 38 ++++++++++++++++++++++++-------------- 
> >>>>>  src/xenconfig/xen_common.h |  7 ++++--- 
> >>>>>  src/xenconfig/xen_xl.c     |  4 ++-- 
> >>>>>  src/xenconfig/xen_xm.c     |  8 ++++---- 
> >>>>>  4 files changed, 34 insertions(+), 23 deletions(-) 
> >>>>> 
> >>>>> diff --git a/src/xenconfig/xen_common.c b/src/xenconfig/xen_common.c 
> >>>>> index e1d9cf6..f54d6b6 100644 
> >>>>> --- a/src/xenconfig/xen_common.c 
> >>>>> +++ b/src/xenconfig/xen_common.c 
> >>>>> @@ -801,9 +801,8 @@ xenParseCharDev(virConfPtr conf, virDomainDefPtr def) 
> >>>>>      return -1; 
> >>>>>  } 
> >>>>>   
> >>>>> - 
> >>>>>  static int 
> >>>>> -xenParseVif(virConfPtr conf, virDomainDefPtr def) 
> >>>>> +xenParseVif(virConfPtr conf, virDomainDefPtr def, const char  
> *vif_typename) 
> >>>>>  { 
> >>>>>      char *script = NULL; 
> >>>>>      virDomainNetDefPtr net = NULL; 
> >>>>> @@ -942,7 +941,7 @@ xenParseVif(virConfPtr conf, virDomainDefPtr def) 
> >>>>>                  VIR_STRDUP(net->model, model) < 0) 
> >>>>>                  goto cleanup; 
> >>>>>   
> >>>>> -            if (!model[0] && type[0] && STREQ(type, "netfront") && 
> >>>>> +            if (!model[0] && type[0] && STREQ(type, vif_typename) && 
> >>>>>                  VIR_STRDUP(net->model, "netfront") < 0) 
> >>>>>                  goto cleanup; 
> >>>>>   
> >>>>> @@ -1042,11 +1041,17 @@ xenParseGeneralMeta(virConfPtr conf, virDomainDefPtr  
> def, virCapsPtr caps) 
> >>>>>   
> >>>>>  /* 
> >>>>>   * A convenience function for parsing all config common to both XM and XL 
> >>>>> + * 
> >>>>> + * vif_typename: type name for a paravirtualized network could 
> >>>>> + * be different for xm and xl. For xm, it uses type=netfront; 
> >>>>> + * for xl, it uses type=vif. So, for xm, should pass "netfront"; 
> >>>>> + * for xl, should pass "vif". 
> >>>>>   */ 
> >>>>>  int 
> >>>>>  xenParseConfigCommon(virConfPtr conf, 
> >>>>>                       virDomainDefPtr def, 
> >>>>> -                     virCapsPtr caps) 
> >>>>> +                     virCapsPtr caps, 
> >>>>> +                     const char *vif_typename) 
> >>>> One thing I didn't recall when suggesting this approach is that  
> xenParseVif() is 
> >>>> called in xenParseConfigCommon(). I was thinking it was called from 
> >>>> xen_{xl,xm}.c and the extra parameter would only be added to the 
> >>>> xen{Format,Parse}Vif functions. I don't particularly like seeing the device 
> >>>> specific parameter added to the common functions, but wont object if others  
> are 
> >>>> fine with it. Any other opinions on that? Joao? 
> >>> That's a good point - probably we can avoid it by using 
> >>> xen{Format,Parse}Vif (with the signature change Chunyan proposes)  
> individually 
> >>> on xenParseXM and xenParseXL. 
> >> Nod. 
> >> 
> >>> And there wouldn't be any xenParseConfigCommon 
> >>> with device-specific parameters (as vif being one of the many devices that  
> the 
> >>> routine is handling). The vif config is the same between xm and xl, with  
> the 
> >>> small difference wrt to the validation on xen libxl side - so having in 
> >>> xen_common.c makes sense. 
> >> Nod again :-). 
> >> 
> >>>> And one reason I wont object is that the alternative (calling 
> >>>> xen{Format,Parse}Vif from xen_{xl,xm}.c) is a rather large change since all  
> the 
> >>>> tests/{xl,xm}configdata/ files would need to be adjusted. 
> >>> Hm, perhaps I fail to see what the large change would be. We would keep the  
> same 
> >>> interface (i.e. model=netfront as valid on libvirt-side and converting to 
> >>> type="vif" where applicable (libxl)) then the xml and .cfg won't change. 
> >>> Furthermore, we only use e1000 which is valid for both cases and Chunyan  
> adds 
> >>> one test case to cover this series. So may be the adjustment you suggest  
> above 
> >>> wouldn't be as cumbersome as to change all the tests/{xl,xm}configdata  
> files? 
> >> On the Parse side we would be fine, but on the Format side 'vif =' would  
> now be 
> >> emitted after xenFormatConfigCommon executed. So the xl.cfg output would  
> change 
> >> from e.g. 
> >> 
> > Ah, totally missed that out: it looks a large change. I think XL vif won't 
> > diverge from XM anytime soon unless we start adding support for more  
> qemu-ish 
> > features on xen libxl (e.g. vhostuser, or even block "target" field  
> equivalent). 
>  
> That's a good point. Instead of creating a bunch of turmoil now over  
> 'netfront' 
> vs 'vif', we should wait until something more substantial drives the change. 
>  
> > I am fine with the approach on the patch, but the way you suggested is  
> indeed 
> > more correct. 
>  
> Perhaps as a compromise, the new xen{Format,Parse}ConfigCommon parameter  
> could 
> be of type 'enum xenConfigFlavor' or similar, with flavors  
> XEN_CONFIG_FLAVOR_XL 
> and XEN_CONFIG_FLAVOR_XM. 

We can reuse XEN_CONFIG_FORMAT_XM/XL.
Before that we need to unify existing XEN_CONFIG_FORMAT_XM and
LIBXL_CONFIG_FORMAT_XM (actually the same) to only one
XEN_CONFIG_FORMAT_XM and moved to xen_common.h.

- Chunyan

> That would accommodate other trivial differences  
> we 
> might find in the future. 
>  
> Regards, 
> Jim 
>  
>  





More information about the libvir-list mailing list