1. 24 6月, 2011 26 次提交
    • M
      Add Processor Information to virSysinfoRead() from dmidecode type 4 · 49156a7a
      Minoru Usui 提交于
      * src/util/sysinfo.c: add parsing and formatting of processor
        information data
      49156a7a
    • M
      Cleanup virSysinfoRead() · 532ce9c2
      Minoru Usui 提交于
      * src/util/sysinfo.c: Separate BIOSInfo and SystemInfo part from
                            virSysinfoRead()
      532ce9c2
    • D
      Make sure virnetprotocol.[ch] are in BUILT_SOURCES · 789ab2cc
      Daniel P. Berrange 提交于
      To ensure virnetprotocol.[ch] are generated before any other
      files, add them to BUILT_SOURCES and MAINTAINERCLEANFILES.
      At the same time, move ESX_DRIVER_GENERATED out of DISTCLEAN
      and into MAINTAINERCLEANFILES, since they are included in
      EXTRA_DIST
      
      * src/Makefile.am: Add virnetprotocol.[ch] to BUILT_SOURCES
      789ab2cc
    • E
      maint: typo fixes · acb31cf5
      Eric Blake 提交于
      * src/xenxs/xen_sxpr.c (xenParseSxprPCI): Comment fix.
      * tests/object-locking.ml (driverTables): Likewise.
      * tests/testutils.c (virtTestDifferenceBin): Likewise.
      acb31cf5
    • D
      Fix some bugs in RPC protocol make rules · d6bf7703
      Daniel P. Berrange 提交于
      The Makefile.am rules for generating RPC protocol had a couple
      of bugs
      
       - A instance of remote/rpcgen_fix.pl  was not changed
         to rpc/genprotocol.pl
       - A dep from rpc/virnetmessage.h on the generated
         rpc/virnetprotocol.h was missing
       - The generated rpc/virnetprotocol.[ch] were not listed
         in MAINTAINERCLEANFILES
      
      * Makefile.am: Fix RPC protocol generation
      d6bf7703
    • D
      Add missing translation of error message from QEMU reboot patch · c0cd2929
      Daniel P. Berrange 提交于
      * src/qemu/qemu_process.c: Add missing _(...)
      c0cd2929
    • D
      Fix job type set in qemuMigrationPrepareDirect/PrepareTunnel · 74798313
      Daniel P. Berrange 提交于
      The qemuMigrationPrepareDirect/PrepareTunnel methods accidentally
      set the domain job to  QEMU_JOB_MIGRATION_OUT when it should have
      been  QEMU_JOB_MIGRATION_IN. This didn't have any ill-effect, but
      it is none-the-less wrong.
      
      * src/qemu/qemu_migration.c: Fix job type
      74798313
    • D
      Avoid high privileges taint warning for QEMU session driver · bd180de5
      Daniel P. Berrange 提交于
      The code emitting taint warnings was mistakenly thinking
      that guests run from the QEMU session driver were tainted
      for having high privileges. This is of course nonsense
      since the session driver is always unprivileged
      
      * src/qemu/qemu_domain.c: Don't warn for high privileges in
        non-privileged QEMU
      bd180de5
    • D
      Allow automatic kill of guests when a connection is closed · 3ba937da
      Daniel P. Berrange 提交于
      If an application is using libvirt + KVM as a piece of its
      internal infrastructure to perform a specific task, it can
      be desirable to guarentee the VM dies when the virConnectPtr
      disconnects from libvirtd. This ensures the app can't leak
      any VMs it was using. Adding VIR_DOMAIN_START_AUTOKILL as
      a flag when starting guests enables this to be done.
      
      * include/libvirt/libvirt.h.in: All VIR_DOMAIN_START_AUTOKILL
      * src/qemu/qemu_driver.c: Support automatic killing of guests
        upon connection close
      * tools/virsh.c: Add --autokill flag to 'start' and 'create'
        commands
      3ba937da
    • D
      Automatically kill target QEMU if migration aborts abnormally · 2c2effa1
      Daniel P. Berrange 提交于
      Migration is a multi-step process
      
        1. Begin(src)
        2. Prepare(dst)
        3. Perform(src)
        4. Finish(dst)
        5. Confirm(src)
      
      At step 2, a QEMU process is lauched in the destination to
      accept the incoming migration. Occasionally the process
      that is controlling the migration workflow aborts, and fails
      to call step 4, Finish. This leaves a QEMU process running
      on the target (albeit with paused CPUs). Unfortunately because
      step 2 actives a job on the QEMU process, it is unkillable by
      normal means.
      
      By registering the VM for autokill against the src virConnectPtr
      in step 2, we can ensure that the guest is forcefully killed off
      if the connection is closed without step 4 being invoked
      
      * src/qemu/qemu_migration.c: Register autokill in PrepareDirect
        and PrepareTunnel. Unregister autokill on successful run
        of Finish
      * src/qemu/qemu_process.c: Unregister autokill when stopping a
        process
      2c2effa1
    • D
      Add infrastructure to automatically destroy guests when a connection closes · 558b7fd0
      Daniel P. Berrange 提交于
      Sometimes it is useful to be able to automatically destroy a guest when
      a connection is closed. For example, kill an incoming migration if
      the client managing the migration dies. This introduces a map between
      guest 'uuid' strings and virConnectPtr objects. When a connection is
      closed, any associated guests are killed off.
      
      * src/qemu/qemu_conf.h: Add autokill hash table to qemu driver
      * src/qemu/qemu_process.c, src/qemu/qemu_process.h: Add APIs
        for performing autokill of guests associated with a connection
      * src/qemu/qemu_driver.c: Initialize autodestroy map
      558b7fd0
    • D
      Support reboots with the QEMU driver · 42f43592
      Daniel P. Berrange 提交于
      For controlled shutdown we issue a 'system_powerdown' command
      to the QEMU monitor. This triggers an ACPI event which (most)
      guest OS wire up to a controlled shutdown. There is no equiv
      ACPI event to trigger a controlled reboot. This patch attempts
      to fake a reboot.
      
       - In qemuDomainObjPrivatePtr we have a bool fakeReboot
         flag.
       - The virDomainReboot method sets this flag and then
         triggers a normal 'system_powerdown'.
       - The QEMU process is started with '-no-shutdown'
         so that the guest CPUs pause when it powers off the
         guest
       - When we receive the 'POWEROFF' event from QEMU JSON
         monitor if fakeReboot is not set we invoke the
         qemuProcessKill command and shutdown continues
         normally
       - If fakeReboot was set, we spawn a background thread
         which issues 'system_reset' to perform a warm reboot
         of the guest hardware. Then it issues 'cont' to
         start the CPUs again
      
      * src/qemu/qemu_command.c: Add -no-shutdown flag if
        we have JSON support
      * src/qemu/qemu_domain.h: Add 'fakeReboot' flag to
        qemuDomainObjPrivate struct
      * src/qemu/qemu_driver.c: Fake reboot using the
        system_powerdown command if JSON support is available
      * src/qemu/qemu_monitor.c, src/qemu/qemu_monitor.h,
        src/qemu/qemu_monitor_json.c, src/qemu/qemu_monitor_json.h,
        src/qemu/qemu_monitor_text.c, src/qemu/qemu_monitor_text.h: Add
        binding for system_reset command
      * src/qemu/qemu_process.c: Reset the guest & start CPUs if
        fakeReboot is set
      42f43592
    • D
      Move the RPC generator scripts into src/rpc · b17b4afa
      Daniel P. Berrange 提交于
      Move the daemon/remote_generator.pl to src/rpc/gendispatch.pl
      and move the src/remote/rpcgen_fix.pl to src/rpc/genprotocol.pl
      
      * daemon/Makefile.am: Update for new name/location of generator
      * src/Makefile.am: Update for new name/location of generator
      b17b4afa
    • D
      Introduce generic RPC client objects · 434de30d
      Daniel P. Berrange 提交于
      To facilitate creation of new clients using XDR RPC services,
      pull alot of the remote driver code into a set of reusable
      objects.
      
       - virNetClient: Encapsulates a socket connection to a
         remote RPC server. Handles all the network I/O for
         reading/writing RPC messages. Delegates RPC encoding
         and decoding to the registered programs
      
       - virNetClientProgram: Handles processing and dispatch
         of RPC messages for a single RPC (program,version).
         A program can register to receive async events
         from a client
      
       - virNetClientStream: Handles generic I/O stream
         integration to RPC layer
      
      Each new client program now merely needs to define the list of
      RPC procedures & events it wants and their handlers. It does
      not need to deal with any of the network I/O functionality at
      all.
      434de30d
    • D
      Introduce generic RPC module for advertising via MDNS · e23ec81d
      Daniel P. Berrange 提交于
      Allow RPC servers to advertise themselves using MDNS,
      via Avahi
      
      * src/rpc/virnetserver.c, src/rpc/virnetserver.h: Allow
        registration of MDNS services via avahi
      * src/rpc/virnetserverservice.c, src/rpc/virnetserverservice.h: Add
        API to fetch the listen port number
      * src/rpc/virnetsocket.c, src/rpc/virnetsocket.h: Add API to
        fetch the local port number
      * src/rpc/virnetservermdns.c, src/rpc/virnetservermdns.h: Represent
        an MDNS advertisement
      e23ec81d
    • D
      Introduce generic RPC server objects · 4e00b1da
      Daniel P. Berrange 提交于
      To facilitate creation of new daemons providing XDR RPC services,
      pull a lot of the libvirtd daemon code into a set of reusable
      objects.
      
       * virNetServer: A server contains one or more services which
         accept incoming clients. It maintains the list of active
         clients. It has a list of RPC programs which can be used
         by clients. When clients produce a complete RPC message,
         the server passes this onto the corresponding program for
         handling, and queues any response back with the client.
      
       * virNetServerClient: Encapsulates a single client connection.
         All I/O for the client is handled, reading & writing RPC
         messages.
      
       * virNetServerProgram: Handles processing and dispatch of
         RPC method calls for a single RPC (program,version).
         Multiple programs can be registered with the server.
      
       * virNetServerService: Encapsulates socket(s) listening for
         new connections. Each service listens on a single host/port,
         but may have multiple sockets if on a dual IPv4/6 host.
      
      Each new daemon now merely has to define the list of RPC procedures
      & their handlers. It does not need to deal with any network related
      functionality at all.
      4e00b1da
    • D
      Integrate TLS/SASL directly into the socket APIs · f5fa167e
      Daniel P. Berrange 提交于
      This extends the basic virNetSocket APIs to allow them to have
      a handle to the TLS/SASL session objects, once established.
      This ensures that any data reads/writes are automagically
      passed through the TLS/SASL encryption layers if required.
      
      * src/rpc/virnetsocket.c, src/rpc/virnetsocket.h: Wire up
        SASL/TLS encryption
      f5fa167e
    • D
      Generic module for handling SASL authentication & encryption · bb1c9296
      Daniel P. Berrange 提交于
      This provides two modules for handling SASL
      
       * virNetSASLContext provides the process-wide state, currently
         just a whitelist of usernames on the server and a one time
         library init call
      
       * virNetTLSSession provides the per-connection state, ie the
         SASL session itself. This also include APIs for providing
         data encryption/decryption once the session is established
      
      * src/Makefile.am: Add to libvirt-net-rpc.la
      * src/rpc/virnetsaslcontext.c, src/rpc/virnetsaslcontext.h: Generic
        SASL handling code
      bb1c9296
    • D
      Generic module for handling TLS encryption and x509 certs · 30fd0bbb
      Daniel P. Berrange 提交于
      This provides two modules for handling TLS
      
       * virNetTLSContext provides the process-wide state, in particular
         all the x509 credentials, DH params and x509 whitelists
       * virNetTLSSession provides the per-connection state, ie the
         TLS session itself.
      
      The virNetTLSContext provides APIs for validating a TLS session's
      x509 credentials. The virNetTLSSession includes APIs for performing
      the initial TLS handshake and sending/recving encrypted data
      
      * src/Makefile.am: Add to libvirt-net-rpc.la
      * src/rpc/virnettlscontext.c, src/rpc/virnettlscontext.h: Generic
        TLS handling code
      30fd0bbb
    • D
      Introduce a generic object for using network sockets · 58b5b14e
      Daniel P. Berrange 提交于
      Introduces a simple wrapper around the raw POSIX sockets APIs
      and name resolution APIs. Allows for easy creation of client
      and server sockets with correct usage of name resolution APIs
      for protocol agnostic socket setup.
      
      It can listen for UNIX and TCP stream sockets.
      
      It can connect to UNIX, TCP streams directly, or indirectly
      to UNIX sockets via an SSH tunnel or external command
      
      * src/Makefile.am: Add to libvirt-net-rpc.la
      * src/rpc/virnetsocket.c, src/rpc/virnetsocket.h: Generic
        sockets APIs
      * tests/Makefile.am: Add socket test
      * tests/virnetsockettest.c: New test case
      * tests/testutils.c: Avoid overriding LIBVIRT_DEBUG settings
      * tests/ssh.c: Dumb helper program for SSH tunnelling tests
      58b5b14e
    • D
      Provide a simple object for encoding/decoding RPC messages · ceacc1dd
      Daniel P. Berrange 提交于
      This provides a new struct that contains a buffer for the RPC
      message header+payload, as well as a decoded copy of the message
      header. There is an API for applying a XDR encoding & decoding
      of the message headers and payloads. There are also APIs for
      maintaining a simple FIFO queue of message instances.
      
      Expected usage scenarios are:
      
      To send a message
      
         msg = virNetMessageNew()
      
         ...fill in msg->header fields..
         virNetMessageEncodeHeader(msg)
         ...loook at msg->header fields to determine payload filter
         virNetMessageEncodePayload(msg, xdrfilter, data)
         ...send msg->bufferLength worth of data from buffer
      
      To receive a message
      
         msg = virNetMessageNew()
         ...read VIR_NET_MESSAGE_LEN_MAX of data into buffer
         virNetMessageDecodeLength(msg)
         ...read msg->bufferLength-msg->bufferOffset of data into buffer
         virNetMessageDecodeHeader(msg)
         ...look at msg->header fields to determine payload filter
         virNetMessageDecodePayload(msg, xdrfilter, data)
         ...run payload processor
      
      * src/Makefile.am: Add to libvirt-net-rpc.la
      * src/rpc/virnetmessage.c, src/rpc/virnetmessage.h: Internal
        message handling API.
      * testutils.c, testutils.h: Helper for printing binary differences
      * virnetmessagetest.c: Validate all XDR encoding/decoding
      ceacc1dd
    • D
      Defines the basics of a generic RPC protocol in XDR · 980a132a
      Daniel P. Berrange 提交于
      This patch defines the basics of a generic RPC protocol in XDR.
      This is wire ABI compatible with the original remote_protocol.x.
      It takes everything except for the RPC calls / events from that
      protocol
      
       - The basic header virNetMessageHeader (aka remote_message_header)
       - The error object virNetMessageError  (aka remote_error)
       - Two dummy objects virNetMessageDomain & virNetMessageNetwork
         sadly needed to keep virNetMessageError ABI compatible with
         the old remote_error
      
      The RPC protocol supports method calls, async events and
      bidirectional data streams as before
      
      * src/Makefile.am: Add rules for generating RPC code from
        protocol & define a new libvirt-net-rpc.la helper library
      * src/rpc/virnetprotocol.x: New generic RPC protocol
      980a132a
    • E
      build: avoid python 2.4 build failure · 178bab1c
      Eric Blake 提交于
      On RHEL 5, I got:
      
      /usr/bin/python ./generator.py /usr/bin/python
        File "./generator.py", line 427
          "virStreamFree", # Needed in custom virStream __del__, but free shouldn't
                         ^
      SyntaxError: invalid syntax
      
      * python/generator.py (function_skip_python_impl): Use same syntax
      as other skip lists.
      178bab1c
    • E
      build: avoid compiler failure · ab228c81
      Eric Blake 提交于
      GCC complained about a C99 for-loop declaration outside of C99 mode
      when compiling on RHEL 5.
      
      * src/qemu/qemu_driver.c (qemudDomainPinVcpuFlags): Avoid C99 for
      loop, since gcc 4.1.2 hates it.
      ab228c81
    • D
      documenting the 802.1Qbh parameters of a 'direct' interface · 93d6fd1d
      David S. Wang 提交于
      This patch adds documentation about the 802.1Qbh related parameters
      of the virtualport element for 'direct' interfaces.
      Signed-off-by: NDavid S. Wang <dwang2@cisco.com>
      Signed-off-by: NRoopa Prabhu <roprabhu@cisco.com>
      Signed-off-by: NChristian Benvenuti <benve@cisco.com>
      Signed-off-by: NVasanthy Kolluri <vkolluri@cisco.com>
      93d6fd1d
    • E
      build: update to latest gnulib · 290247c7
      Eric Blake 提交于
      Gnulib has been busy, with 397 commits; it's easier to update now
      even without any known libvirt issue to be fixed, rather than
      having to analyze an even larger changeset later on.
      
      * .gnulib: Update to latest, for lots of changes.
      * bootstrap: Synchronize to upstream.
      290247c7
  2. 23 6月, 2011 14 次提交