1. 28 9月, 2012 13 次提交
    • D
      Add systemd journal support · f6430390
      Daniel P. Berrange 提交于
      Add support for logging to the systemd journal, using its
      simple client library. The benefit over syslog is that it
      accepts structured log data, so the journald can store
      individual items like code file/line/func separately from
      the string message. Tools which require structured log
      data can then query the journal to extract exactly what
      they desire without resorting to string parsing
      
      While systemd provides a simple client library for logging,
      it is more convenient for libvirt to directly write its
      own client code. This lets us build up the iovec's on
      the stack, avoiding the need to alloc memory when writing
      log messages.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      f6430390
    • D
      Refactor qemuCapsParseDeviceStr to work from data tables · b073fe40
      Daniel P. Berrange 提交于
      Currently the qemuCapsParseDeviceStr method has a bunch of open
      coded string searches/comparisons to detect devices and their
      properties. Soon this data will be obtained from QMP queries
      instead of -device help output. Maintaining the list of device
      and properties in two places is undesirable. Thus the existing
      qemuCapsParseDeviceStr() method needs to be refactored to
      separate the device types and properties from the actual
      search code.
      
      Thus the -device help output is now parsed to construct a
      list of device names, and device properties. These are then
      checked against a set of datatables to set the capability
      flags
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      b073fe40
    • D
      Don't initialize logging twice in libvirtd · 90af1bab
      Daniel P. Berrange 提交于
      The virInitialize function initializes logging from the env,
      so there is no need for another call to virLogSetFromEnv
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      90af1bab
    • D
      Change logging category parameter into an enum · e8fd8757
      Daniel P. Berrange 提交于
      The 'const char *category' parameter only has a few possible
      values now that the filename has been separated. Turn this
      parameter into an enum instead.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      e8fd8757
    • D
      Include filename explicitly in logging APIs · 0225c566
      Daniel P. Berrange 提交于
      Currently the logging APIs have a 'const char *category' parameter
      which indicates where the log message comes from. This is typically
      a combination of the __FILE__ string and other prefix. Split the
      __FILE__ off into a dedicated parameter so it can passed to the
      log outputs
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      0225c566
    • D
      Whitespace cleanup in logging files · 96a1be95
      Daniel P. Berrange 提交于
      General whitespace cleanup in the logging files
      
       - Move '{' to a new line after funtion declaration
       - Put each parameter on a new line to avoid long lines
       - Put return type on new line
       - Leave 2 blank lines between functions
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      96a1be95
    • D
      s/int/virLogDestination/ in logging code · 4764a6c5
      Daniel P. Berrange 提交于
      The log destinations are an enum, but most of the code was
      just using a plain 'int' for function params / variables.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      4764a6c5
    • D
      s/long long/size_t/ for file line numbers in logging code · 2dd77cd1
      Daniel P. Berrange 提交于
      The __LINE__ macro value is specified to fit in the size_t
      type, so use that instead of 'long long' in the logging code
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      2dd77cd1
    • D
      s/int/virLogPriority/ in logging code · de29867e
      Daniel P. Berrange 提交于
      The log priority levels are an enum, but most of the code was
      just using a plain 'int' for function params / variables.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      de29867e
    • G
      python: return error if PyObject obj is NULL for unwrapper helper functions · 4c6be02a
      Guannan Ren 提交于
      The result is indeterminate for NULL argument to python
      functions as follows. It's better to return negative value in
      these situations.
      
      PyObject_IsTrue will segfault if the argument is NULL
      PyFloat_AsDouble(NULL) is -1.000000
      PyLong_AsUnsignedLongLong(NULL) is 0.000000
      4c6be02a
    • B
      network: fix dnsmasq/radvd binding to IPv6 on recent kernels · db488c79
      Benjamin Cama 提交于
      I hit this problem recently when trying to create a bridge with an IPv6
      address on a 3.2 kernel: dnsmasq (and, further, radvd) would not bind to
      the given address, waiting 20s and then giving up with -EADDRNOTAVAIL
      (resp. exiting immediately with "error parsing or activating the config
      file", without libvirt noticing it, BTW). This can be reproduced with (I
      think) any kernel >= 2.6.39 and the following XML (to be used with
      "virsh net-create"):
      
              <network>
                <name>test-bridge</name>
                <bridge name='testbr0' />
                <ip family='ipv6' address='fd00::1' prefix='64'>
                </ip>
              </network>
      
      (it happens even when you have an IPv4, too)
      
      The problem is that since commit [1] (which, ironically, was made to
      “help IPv6 autoconfiguration”) the linux bridge code makes bridges
      behave like “real” devices regarding carrier detection. This makes the
      bridges created by libvirt, which are started without any up devices,
      stay with the NO-CARRIER flag set, and thus prevents DAD (Duplicate
      address detection) from happening, thus letting the IPv6 address flagged
      as “tentative”. Such addresses cannot be bound to (see RFC 2462), so
      dnsmasq fails binding to it (for radvd, it detects that "interface XXX
      is not RUNNING", thus that "interface XXX does not exist, ignoring the
      interface" (sic)). It seems that this behavior was enhanced somehow with
      commit [2] by avoiding setting NO-CARRIER on empty bridges, but I
      couldn't reproduce this behavior on my kernel. Anyway, with the “dummy
      tap to set MAC address” trick, this wouldn't work.
      
      To fix this, the idea is to get the bridge's attached device to be up so
      that DAD can happen (deactivating DAD altogether is not a good idea, I
      think). Currently, libvirt creates a dummy TAP device to set the MAC
      address of the bridge, keeping it down. But even if we set this device
      up, it is not RUNNING as soon as the tap file descriptor attached to it
      is closed, thus still preventing DAD. So, we must modify the API a bit,
      so that we can get the fd, keep the tap device persistent, run the
      daemons, and close it after DAD has taken place. After that, the bridge
      will be flagged NO-CARRIER again, but the daemons will be running, even
      if not happy about the device's state (but we don't really care about
      the bridge's daemons doing anything when no up interface is connected to
      it).
      
      Other solutions that I envisioned were:
            * Keeping the *-nic interface up: this would waste an fd for each
              bridge during all its life. May be acceptable, I don't really
              know.
            * Stop using the dummy tap trick, and set the MAC address directly
              on the bridge: it is possible since quite some time it seems,
              even if then there is the problem of the bridge not being
              RUNNING when empty, contrary to what [2] says, so this will need
              fixing (and this fix only happened in 3.1, so it wouldn't work
              for 2.6.39)
            * Using the --interface option of dnsmasq, but I saw somewhere
              that it's not used by libvirt for backward compatibility. I am
              not sure this would solve this problem, though, as I don't know
              how dnsmasq binds itself to it with this option.
      
      This is why this patch does what's described earlier.
      
      This patch also makes radvd start even if the interface is
      “missing” (i.e. it is not RUNNING), as it daemonizes before binding to
      it, and thus sometimes does it after the interface has been brought down
      by us (by closing the tap fd), and then originally stops. This also
      makes it stop yelling about it in the logs when the interface is down at
      a later time.
      
      [1]
      http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commit;h=1faa4356a3bd89ea11fb92752d897cff3a20ec0e
      [2]
      http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commit;h=b64b73d7d0c480f75684519c6134e79d50c1b341
      db488c79
    • D
      Fix regression starting QEMU instances without query-events · 7ccc4d52
      Daniel P. Berrange 提交于
      If QEMU reports CommandNotFound for the 'query-events' command,
      we must treat that as success, returning a zero-length array
      of events
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      7ccc4d52
    • J
      Fix compilation of legacy xen driver with Xen 4.2 · 416eca18
      Jim Fehlig 提交于
      In Xen 4.2, xs.h is deprecated in favor of xenstore.h.  xs.h now
      contains
      
      #warning xs.h is deprecated use xenstore.h instead
      #include <xenstore.h>
      
      which fails compilation when warnings are treated as errors.
      
      Introduce a configure-time check for xenstore.h and if found,
      use it instead of xs.h.
      416eca18
  2. 27 9月, 2012 27 次提交