1. 09 12月, 2019 5 次提交
    • D
      conf: pass netprefix in the domain parser config struct · a7b6e49d
      Daniel P. Berrangé 提交于
      Instead of using the virCapsPtr information, pass the driver specific
      netprefix in the domain parser struct. This eliminates one more use of
      virCapsPtr from the XML parsing/formatting code.
      Reviewed-by: NMichal Privoznik <mprivozn@redhat.com>
      Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
      a7b6e49d
    • D
      conf: pass in default architecture via domain XML options · 6430c005
      Daniel P. Berrangé 提交于
      When parsing the guest XML we must fill in the default guest arch if it
      is not already present because later parts of the parsing process need
      this information.
      
      If no arch is specified we lookup the first guest in the capabilities
      data matching the os type and virt type. In most cases this will result
      in picking the host architecture but there are some exceptions...
      
       - The test driver is hardcoded to always use i686 arch
       - The VMWare/ESX drivers will always place i686 guests ahead
         of x86_64 guests in capabilities, so effectively they always
         use i686
       - The QEMU driver can potentially return any arch at all
         depending on what combination of QEMU binaries are installed.
      
      The domain XML hardware configurations are inherently architecture
      specific in many places. As a result whomever/whatever created the
      domain XML will have had a particular architecture in mind when
      specifying the config. In pretty much any sensible case this arch
      will have been the native host architecture. i686 on x86_64 is
      the only sensible divergance because both these archs are
      compatible from a domaain XML config POV.
      
      IOW, although the QEMU driver can pick an almost arbitrary arch as its
      default, in the real world no application or user is likely to be
      relying on this default arch being anything other than native.
      
      With all this in mind, it is reasonable to change the XML parser to
      allow the default architecture to be passed via the domain XML options
      struct. If no info is explicitly given then it is safe & sane to pick
      the host native architecture as the default for the guest.
      Reviewed-by: NMichal Privoznik <mprivozn@redhat.com>
      Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
      6430c005
    • D
      conf: sanitize virDomainObjFormat & virDomainDefFormat* APIs · 92d41214
      Daniel P. Berrangé 提交于
      Moving their instance parameter to be the first one, and give consistent
      ordering of other parameters across all functions. Ensure that the xml
      options are passed into both functions in prep for future work.
      Reviewed-by: NMichal Privoznik <mprivozn@redhat.com>
      Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
      92d41214
    • D
      conf: sanitize virDomainSaveStatus & virDomainSaveConfig APIs · 908701c6
      Daniel P. Berrangé 提交于
      Our normal practice is for the object type to be the name prefix, and
      the object instance be the first parameter passed in.
      
      Rename these to virDomainObjSave and virDomainDefSave moving their
      primary parameter to be the first one. Ensure that the xml options
      are passed into both functions in prep for future work.
      
      Finally enforce checking of the return type and mark all parameters
      as non-NULL.
      Reviewed-by: NMichal Privoznik <mprivozn@redhat.com>
      Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
      908701c6
    • J
      qemu: cold-unplug of sound · 863c0d8e
      Jidong Xia 提交于
      With this patch users can cold unplug some sound devices.
      use "virsh detach-device vm sound.xml --config" command.
      Reviewed-by: NCole Robinson <crobinso@redhat.com>
      Signed-off-by: NJidong Xia <xiajidong@cmss.chinamobile.com>
      863c0d8e
  2. 26 11月, 2019 5 次提交
    • L
      conf: add hypervisor agnostic, domain start-time, validation function for NetDef · b03d9e95
      Laine Stump 提交于
      <interface> devices (virDomainNetDef) are a bit different from other
      types of devices in that their actual type may come from a network (in
      the form of a port connection), and that doesn't happen until the
      domain is started. This means that any validation of an <interface> at
      parse time needs to be a bit liberal in what it accepts - when
      type='network', you could think that something is/isn't allowed, but
      once the domain is started and a port is created by the configured
      network, the opposite might be true.
      
      To solve this problem hypervisor drivers need to do an extra
      validation step when the domain is being started. I recently (commit
      3cff23f7, libvirt 5.7.0) added a function to peform such validation
      for all interfaces to the QEMU driver -
      qemuDomainValidateActualNetDef() - but while that function is a good
      single point to call for the multiple places that need to "start" an
      interface (domain startup, device hotplug, device update), it can't be
      called by the other hypervisor drivers, since 1) it's in the QEMU
      driver, and 2) it contains some checks specific to QEMU. For
      validation that applies to network devices on *all* hypervisors, we
      need yet another interface validation function that can be called by
      any hypervisor driver (not just QEMU) right after its network port has
      been created during domain startup or hotplug. This patch adds that
      function - virDomainActualNetDefValidate(), in the conf directory,
      and calls it in appropriate places in the QEMU, lxc, and libxl
      drivers.
      
      This new function is the place to put all network device validation
      that 1) is hypervisor agnostic, and 2) can't be done until we know the
      "actual type" of an interface.
      
      There is no framework for validation at domain startup as there is for
      post-parse validation, but I don't want to create a whole elaborate
      system that will only be used by one type of device. For that reason,
      I just made a single function that should be called directly from the
      hypervisors, when they are initializing interfaces to start a domain,
      right after conditionally allocating the network port (and regardless
      of whether or not that was actually needed). In the case of the QEMU
      driver, qemuDomainValidateActualNetDef() is already called in all the
      appropriate places, so we can just call the new function from
      there. In the case of the other hypervisors, we search for
      virDomainNetAllocateActualDevice() (which is the hypervisor-agnostic
      function that calls virNetworkPortCreateXML()), and add the call to our
      new function right after that.
      
      The new function itself could be plunked down into many places in the
      code, but we already have 3 validation functions for network devices
      in 2 different places (not counting any basic validation done in
      virDomainNetDefParseXML() itself):
      
      1) post-parse hypervisor-agnostic
         (virDomainNetDefValidate() - domain_conf.c:6145)
      2) post-parse hypervisor-specific
         (qemuDomainDeviceDefValidateNetwork() - qemu_domain.c:5498)
      3) domain-start hypervisor-specific
         (qemuDomainValidateActualNetDef() - qemu_domain.c:5390)
      
      I placed (3) right next to (2) when I added it, specifically to avoid
      spreading validation all over the code. For the same reason, I decided
      to put this new function right next to (1) - this way if someone needs
      to add validation specific to qemu, they go to one location, and if
      they need to add validation applying to everyone, they go to the
      other. It looks a bit strange to have a public function in between a
      bunch of statics, but I think it's better than the alternative of
      further fragmentation. (I'm open to other ideas though, of course.)
      Signed-off-by: NLaine Stump <laine@redhat.com>
      Reviewed-by: NCole Robinson <crobinso@redhat.com>
      b03d9e95
    • L
      conf: change args/return values of remaining virDomainNetGetActual*() to const · 01262421
      Laine Stump 提交于
      These all just return a scalar value, so there's no daisy-chained
      fallout from changing them, and they can easily be combined in a
      single patch.
      Signed-off-by: NLaine Stump <laine@redhat.com>
      Reviewed-by: NCole Robinson <crobinso@redhat.com>
      01262421
    • L
      conf: return a const from virDomainNetGetActualVirtPortProfile · fdcd273b
      Laine Stump 提交于
      This also isn't required (due to the vportprofile being stored in the
      NetDef as a pointer rather than being directly contained), but it
      seemed dishonest to not mark it as const (and thus permit users to
      modify its contents)
      Signed-off-by: NLaine Stump <laine@redhat.com>
      Reviewed-by: NCole Robinson <crobinso@redhat.com>
      fdcd273b
    • L
      conf: make virDomainNetGetActualBandwidth arg/return value const · 583ac17f
      Laine Stump 提交于
      In this case, the virNetDevBandwidthPtr that is returned is not to a
      region within the virDomainNetDef arg, but points elsewhere (the
      NetDef has the pointer, not the entire object), so technically it's
      not necessary to make the return value a const, but it's a bit
      disingenuous to *not* do it.
      Signed-off-by: NLaine Stump <laine@redhat.com>
      Reviewed-by: NCole Robinson <crobinso@redhat.com>
      583ac17f
    • L
      conf: make virDomainNetGetActualVlan arg/return val const · 12207fcf
      Laine Stump 提交于
      This is needed if we want to call the function when the
      virDomainNetDef* we have is a const.
      
      Since virDomainNetGetActualVlan returns a pointer to memory that is
      within the virDomainNetDefPtr arg, the returned pointer must also be
      made const. This leads to a cascade of other virNetDevVlanPtr's that
      must be changed to "const virNetDevVlan *".
      Signed-off-by: NLaine Stump <laine@redhat.com>
      Reviewed-by: NCole Robinson <crobinso@redhat.com>
      12207fcf
  3. 15 11月, 2019 1 次提交
  4. 12 11月, 2019 1 次提交
  5. 23 10月, 2019 1 次提交
  6. 21 10月, 2019 4 次提交
  7. 18 10月, 2019 1 次提交
    • J
      conf: Add 'x' and 'y' resolution into video XML definition · 72862797
      Julio Faracco 提交于
      This commit adds resolution element with parameters 'x' and 'y' into video
      XML domain group definition. Both, properties were added into an element
      called 'resolution' and it was added inside 'model' element. They are set
      as optional. This element does not follow QEMU properties 'xres' and
      'yres' format. Both HTML documentation and schema were changed too. This
      commit includes a simple test case to cover resolution for QEMU video
      models. The new XML format for resolution looks like:
      
          <model ...>
            <resolution x='800' y='600'/>
          </model>
      Reviewed-by: NCole Robinson <crobinso@redhat.com>
      Signed-off-by: NJulio Faracco <jcfaracco@gmail.com>
      72862797
  8. 16 10月, 2019 1 次提交
  9. 15 10月, 2019 1 次提交
  10. 14 10月, 2019 1 次提交
  11. 10 10月, 2019 3 次提交
  12. 27 9月, 2019 1 次提交
    • L
      conf: utility function to update entry in def->nets array · 7e490cda
      Laine Stump 提交于
      A virDomainNetDef object in a domain's nets array might contain a
      virDomainHostdevDef, and when this is the case, the domain's hostdevs
      array will also have a pointer to this embedded hostdev (this is done
      so that internal functions that need to perform some operation on all
      hostdevs won't leave out the type='hostdev' network interfaces).
      
      When a network device was updated with virDomainUpdateDeviceFlags(),
      we were replacing the entry in the nets array (and free'ing the
      original) but forgetting about the pointer in the hostdevs array
      (which would then point to the now-free'd hostdev contained in the old
      net object.) This often resulted in a libvirtd crash.
      
      The solution is to add a function, virDomainNetUpdate(), called by
      qemuDomainUpdateDeviceConfig(), that updates the hostdevs array
      appropriately along with the nets array.
      
      Resolves: https://bugzilla.redhat.com/1558934Signed-off-by: NLaine Stump <laine@redhat.com>
      Reviewed-by: NMichal Privoznik <mprivozn@redhat.com>
      7e490cda
  13. 25 9月, 2019 5 次提交
  14. 19 9月, 2019 1 次提交
  15. 16 9月, 2019 1 次提交
  16. 11 9月, 2019 1 次提交
  17. 10 9月, 2019 1 次提交
    • L
      conf: new "managed" attribute for target dev of <interface type='ethernet'> · 77f72a86
      Laine Stump 提交于
      Although <interface type='ethernet'> has always been able to use an
      existing tap device, this is just a coincidence due to the fact that
      the same ioctl is used to create a new tap device or get a handle to
      an existing device.
      
      Even then, once we have the handle to the device, we still insist on
      doing extra setup to it (setting the MAC address and IFF_UP).  That
      *might* be okay if libvirtd is running as a privileged process, but if
      libvirtd is running as an unprivileged user, those attempted
      modifications to the tap device will fail (yes, even if the tap is set
      to be owned by the user running libvirtd). We could avoid this if we
      knew that the device already existed, but as stated above, an existing
      device and new device are both accessed in the same manner, and
      anyway, we need to preserve existing behavior for those who are
      already using pre-existing devices with privileged libvirtd (and
      allowing/expecting libvirt to configure the pre-existing device).
      
      In order to cleanly support the idea of using a pre-existing and
      pre-configured tap device, this patch introduces a new optional
      attribute "managed" for the interface <target> element. This
      attribute is only valid for <interface type='ethernet'> (since all
      other interface types have mandatory config that doesn't apply in the
      case where we expect the tap device to be setup before we
      get it). The syntax would look something like this:
      
         <interface type='ethernet'>
            <target dev='mytap0' managed='no'/>
            ...
         </interface>
      
      This patch just adds managed to the grammar and parser for <target>,
      but has no functionality behind it.
      
      (NB: when managed='no' (the default when not specified is 'yes'), the
      target dev is always a name explicitly provided, so we don't
      auto-remove it from the config just because it starts with "vnet"
      (VIR_NET_GENERATED_TAP_PREFIX); this makes it possible to use the
      same pattern of names that libvirt itself uses when it automatically
      creates the tap devices.)
      Signed-off-by: NLaine Stump <laine@redhat.com>
      Reviewed-by: NDaniel P. Berrangé <berrange@redhat.com>
      77f72a86
  18. 06 9月, 2019 1 次提交
  19. 21 8月, 2019 1 次提交
  20. 19 8月, 2019 1 次提交
  21. 12 8月, 2019 1 次提交
  22. 09 8月, 2019 2 次提交