1. 02 4月, 2015 3 次提交
  2. 30 3月, 2015 3 次提交
    • M
      virCgroupController: Check the enum fits into 'int' · 771e6e5a
      Michal Privoznik 提交于
      Throughout our code, the virCgroupController enum is used in two ways.
      First as an index to an array of cgroup controllers:
      
      struct virCgroup {
          char *path;
      
          struct virCgroupController controllers[VIR_CGROUP_CONTROLLER_LAST];
      };
      
      Second way is that when calling virCgroupNew() a bitmask of the enum
      items can be passed to selectively detect only some controllers. For
      instance:
      
      int
      virCgroupNewVcpu(virCgroupPtr domain,
                       int vcpuid,
                       bool create,
                       virCgroupPtr *group)
      {
          ...
          controllers = ((1 << VIR_CGROUP_CONTROLLER_CPU) |
                         (1 << VIR_CGROUP_CONTROLLER_CPUACCT) |
                         (1 << VIR_CGROUP_CONTROLLER_CPUSET));
      
          if (virCgroupNew(-1, name, domain, controllers, group) < 0)
              goto cleanup;
      }
      
      Even though it's highly unlikely that so many new controllers will be
      invented so that we would overflow when constructing the bitmask, it
      doesn't hurt to check at compile time either.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      771e6e5a
    • M
      virCgroupNew: Enhance debug message · 149a62bc
      Michal Privoznik 提交于
      When creating new internal representation of cgroups, all passed
      arguments are logged. Well, except for two: pid and pointer for
      return value. Lets log them too.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      149a62bc
    • M
      virCgroupNewPartition: Fix comment · 0a09bcdc
      Michal Privoznik 提交于
      The function has no argument named @name rather than @path
      instead.  The comment is, however, referring to @name while it
      should have been referring to @path really.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      0a09bcdc
  3. 28 3月, 2015 2 次提交
  4. 27 3月, 2015 5 次提交
    • P
      virnetlink: fix build error · 0614976b
      Pavel Hrdina 提交于
      Commint 0473b45c introduced new function virNetlinkDelLink, but in
      it's counterpart for non-linux platform there should be ATTRIBUTE_UNUSED
      instead of ATTRIBUTE_UNSUPPORTED.
      Signed-off-by: NPavel Hrdina <phrdina@redhat.com>
      0614976b
    • L
      util: use netlink to create bridge devices · fc7b23db
      Laine Stump 提交于
      Just as it is possible to delete a bridge device with the netlink
      RTM_DELLINK message, one can be created with the RTM_NEWLINK
      message. Because of differences in the format of the message, it's not
      as straightforward as with virNetlinkDelLink() to create a single
      utility function that can be used to create any type of interface, so
      the new netlink version of virNetDevBridgeCreate() does its own
      construction of the netlink message and calls virNetlinkCommand()
      itself.
      
      This doesn't provide any extra functionality, just provides symmetry
      with the previous commit.
      
      NB: We *could* alter the API of virNetDevBridgeCreate() to take a MAC
      address, and directly program that mac address into the bridge (by
      adding an IFLA_ADDRESS attribute, as is done in
      virNetDevMacVLanCreate()) rather than separately creating the "dummy
      tap" (e.g. virbr0-nic) to maintain a fixed mac address on the bridge,
      but the commit history of virnetdevbridge.c shows that the presence of
      this dummy tap is essential in some older versions of the kernel
      (between 2.6.39 and 3.1 or 3.2, possibly?) to proper operation of IPv6
      DAD, and I don't want to take the chance of breaking something that I
      don't have the time/setup to test (my RHEL6 box is at kernel
      2.6.32-544, and the next lowest kernel I have is 3.17)
      fc7b23db
    • L
      util: use netlink to delete bridge devices · 09778e09
      Laine Stump 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=1125755
      
      reported that a stray bridge device was left on the system when a
      libvirt network failed to start due to an illegal iptables rule caused
      by bad config. Apparently the reason this was happening was that
      NetworkManager was noticing immediately when the bridge device was
      created and automatically setting it IFF_UP. libvirt would then try to
      setup the iptables rules, get an error back, and since libvirt had
      never IFF_UPed the bridge, it didn't expect that it needed to set it
      ~IFF_UP before deleting it during the cleanup process. But the
      ioctl(SIOCBRDELBR) ioctl will fail to delete a bridge if it is IFF_UP.
      
      Since that bug was reported, NetworkManager has gotten a bit more
      polite in this respect, but just in case something similar happens in
      the future, this patch switches to using the netlink RTM_DELLINK
      message to delete the bridge - unlike SIOCBRDELBR, it will delete the
      requested bridge no matter what the setting of IFF_UP.
      09778e09
    • L
      util: replace body of virNetDevMacVLanDelete() with virNetlinkDelLink() · e849062a
      Laine Stump 提交于
      These two functions are identical, so no sense in having the
      duplication. I resisted the temptation to replace calls to
      virNetDevMacVLanDelete() with calls to virNetlinkDelLink() just in
      case some mythical future platform has macvtap devices that aren't
      managed with netlink (or in case we some day need to do more than just
      tell the kernel to delete the device).
      e849062a
    • L
      util: netlink function to delete any network device · 0473b45c
      Laine Stump 提交于
      libvirt has always used the netlink RTM_DELLINK message to delete
      macvtap/macvlan devices, but it can actually be used to delete other
      types of network devices, such as bonds and bridges. This patch makes
      virNetDevMacVLanDelete() available as a generic function so it can
      intelligibly be called to delete these other types of interfaces.
      0473b45c
  5. 25 3月, 2015 6 次提交
  6. 23 3月, 2015 1 次提交
  7. 20 3月, 2015 1 次提交
  8. 19 3月, 2015 1 次提交
  9. 18 3月, 2015 5 次提交
  10. 17 3月, 2015 1 次提交
  11. 15 3月, 2015 1 次提交
    • E
      netdev: silence valgrind warning about ioctl use · a9abc08d
      Eric Blake 提交于
      Valgrind complained:
      
      ==3770== Syscall param ioctl(SIOCETHTOOL) points to uninitialised byte(s)
      ==3770==    at 0x919D407: ioctl (syscall-template.S:81)
      ==3770==    by 0x530FE7E: rpl_ioctl (ioctl.c:42)
      ==3770==    by 0x50CB433: virNetDevFeatureAvailable (virnetdev.c:2764)
      ==3770==    by 0x50CB6A7: virNetDevGetFeatures (virnetdev.c:2830)
      ==3770==    by 0x1F0E5347: udevProcessNetworkInterface (node_device_udev.c:722)
      ==3770==    by 0x1F0E689F: udevGetDeviceDetails (node_device_udev.c:1300)
      ==3770==    by 0x1F0E6E06: udevAddOneDevice (node_device_udev.c:1422)
      ==3770==    by 0x1F0E6FB8: udevProcessDeviceListEntry (node_device_udev.c:1464)
      ==3770==    by 0x1F0E70CF: udevEnumerateDevices (node_device_udev.c:1494)
      ==3770==    by 0x1F0E7BB4: nodeStateInitialize (node_device_udev.c:1806)
      ==3770==    by 0x51B4303: virStateInitialize (libvirt.c:777)
      ==3770==    by 0x11DEE7: daemonRunStateInit (libvirtd.c:906)
      ==3770==  Address 0x228e38d4 is on thread 12's stack
      ==3770==  in frame #2, created by virNetDevFeatureAvailable (virnetdev.c:2750)
      
      * src/util/virnetdev.c (virNetDevFeatureAvailable): Initialize all
      bytes of ifr.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      a9abc08d
  12. 14 3月, 2015 1 次提交
    • Z
      util: don't fail if no PortData is found while getting migrateData · 25df57db
      zhang bo 提交于
      Introduced by f6a2f97e
      
      Problem Description:
      After multiple times of migrating a domain, which has an ovs interface with no portData set,
      with non-shared disk, nbd ports got overflowed.
      
      The steps to reproduce the problem:
      1 define and start a domain with its network configured as:
          <interface type='bridge'>
                <source bridge='br0'/>
                <virtualport type='openvswitch'>
                </virtualport>
                <model type='virtio'/>
                <driver name='vhost' queues='4'/>
          </interface>
      2 do not set the network's portData.
      3 migrate(ToURI2) it with flag 91(1011011), which means:
        VIR_MIGRATE_LIVE
        VIR_MIGRATE_PEER2PEER
        VIR_MIGRATE_PERSIST_DEST
        VIR_MIGRATE_UNDEFINE_SOURCE
        VIR_MIGRATE_NON_SHARED_DISK
      4 migrate success, but we got an error log in libvirtd.log:
        error : virCommandWait:2423 : internal error: Child process (ovs-vsctl --timeout=5 get Interface
        vnet1 external_ids:PortData) unexpected exit status 1: ovs-vsctl: no key "PortData" in Interface
        record "vnet1" column external_ids
      5 migrate it back, migrate it , migrate it back, .......
      6 nbd port got overflowed.
      
      The reasons for the problem is :
      1 virNetDevOpenvswitchGetMigrateData() takes it as wrong if no portData is available for  the ovs
       interface of a domain. (We think it's not appropriate, as portData is just OPTIONAL)
      2 in func qemuMigrationBakeCookie(), it fails in qemuMigrationCookieAddNetwork(), and returns with -1.
       qemuMigrationCookieAddNBD() is not called thereafter, and mig->nbd is still NULL.
      3 However, qemuMigrationRun() just *WARN* if qemuMigrationBakeCookie() fails, migration still successes.
       cookie is NULL, it's not baked on the src side.
      4 On the destination side, it would alloc a port first and then free the nbd port in COOKIE.
       But the cookie is NULL due to qemuMigrationCookieAddNetwork() failure at src side. thus the nbd port
       is not freed.
      
      In this patch, we add "--if-exists" option to make ovs-vsctl not raise error if there's no portData available.
      Further more, because portData may be NULL in the cookie at the dest side, check it before setting portData.
      Signed-off-by: NZhou Yimin <zhouyimin@huawei.com>
      Signed-off-by: NZhang Bo <oscar.zhangbo@huawei.com>
      25df57db
  13. 13 3月, 2015 2 次提交
    • J
      Introduce virBitmapIsBitSet · 22fd3ac3
      Ján Tomko 提交于
      A helper that never returns an error and treats bits out of bitmap range
      as false.
      
      Use it everywhere we use ignore_value on virBitmapGetBit, or loop over
      the bitmap size.
      22fd3ac3
    • P
      virnetdev: fix build with old kernel · 48461b16
      Pavel Hrdina 提交于
      Commit c9027d8f added a detection of NIC HW features, but some of them
      are not available in old kernel.  Very old kernels lack enum
      ethtool_flags and even if this enum is present, not all values are
      available for all kernels.  To be sure that we have everything in kernel
      that we need, we must check for existence of most of that flags, because
      only few of them were defined at first.
      
      Also to successfully build libvirt with older kernel we need to include
      <linux/types.h> before <linux/ethtool.h> to have __u32 and friends
      defined.
      Signed-off-by: NPavel Hrdina <phrdina@redhat.com>
      48461b16
  14. 06 3月, 2015 3 次提交
  15. 05 3月, 2015 2 次提交
    • J
      Fix build on mingw · 41c5baea
      Ján Tomko 提交于
      Last commit unconditionally included a linux-specific header.
      
      Do not do that.
      41c5baea
    • J
      SRIOV NIC offload feature discovery · c9027d8f
      James Chapman 提交于
      Adding functionality to libvirt that will allow it
      query the ethtool interface for the availability
      of certain NIC HW offload features
      
      Here is an example of the feature XML definition:
      
      <device>
      <name>net_eth4_90_e2_ba_5e_a5_45</name>
        <path>/sys/devices/pci0000:00/0000:00:03.0/0000:08:00.1/net/eth4</path>
        <parent>pci_0000_08_00_1</parent>
        <capability type='net'>
          <interface>eth4</interface>
          <address>90:e2:ba:5e:a5:45</address>
          <link speed='10000' state='up'/>
          <feature name='rx'/>
          <feature name='tx'/>
          <feature name='sg'/>
          <feature name='tso'/>
          <feature name='gso'/>
          <feature name='gro'/>
          <feature name='rxvlan'/>
          <feature name='txvlan'/>
          <feature name='rxhash'/>
          <capability type='80203'/>
        </capability>
      </device>
      Signed-off-by: NJán Tomko <jtomko@redhat.com>
      c9027d8f
  16. 26 2月, 2015 3 次提交
    • P
      util: storage: Fix error type in virStorageSourceParseBackingURI · ef2e6f40
      Peter Krempa 提交于
      The gluster volume name extraction code was copied from the XML parser
      without changing the VIR_ERR_XML_ERROR error code. Use
      VIR_ERR_CONFIG_UNSUPPORTED instead.
      ef2e6f40
    • P
      util: storagefile: Don't crash on gluster URIs without path · fc56ecd7
      Peter Krempa 提交于
      Similar to commit fdb80ed4 libvirtd
      would crash if a gluster URI without path would be used in the backing
      chain of a volume. The crash happens in the gluster specific part of the
      parser that extracts the gluster volume name from the path.
      
      Fix the crash by checking that the PATH is NULL.
      
      This patch does not contain a test case as it's not possible to test it
      with the current infrastructure as the test suite would attempt to
      contact the gluster server in the URI. I'm working on the test suite
      addition but that will be post-release material.
      
      Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1196528
      fc56ecd7
    • L
      util: check for null ifname inside virNetDevBandwidthSet() · 153b06c6
      Laine Stump 提交于
      Previously this function relied on having ATTRIBUTE_NONNULL(1) in its
      prototype rather than explicitly checking for a null
      ifname. Unfortunately, ATTRIBUTE_NONNULL is just a hint to the
      optimizer and code analyzers like Coverity, it doesn't actually check
      anything at execution time, so the result was possible warnings from
      Coverity, along with the possibility of null dereferences when ifname
      wasn't available.
      
      This patch removes the ATTRIBUTE_NONNULL from the prototype, and
      checks ifname inside the function, logging an error if it's NULL (once
      we've determined that the user really is trying to set a bandwidth).
      153b06c6