He Xin
2012-Aug-16 16:52 UTC
[libvirt-users] Where does "cmd" initailize in qemu_command.c?
Hi, Excuse me, I have a question when I reading the libvirt source codes. I have known the process of how libvirt start/manage qemu, since I need to write a driver based on libvirt. But one thing also confused, please give me some tips. 1. In qemu_command.c, there is a function call "cmd virCommandNewArgList(emulator, "-S", NULL);", which initializes pointer "cmd". However, I don't find the initial value of "cmd->args", which represents the input of virFindFileInPath in Util.c. Through virFindFileInPath, one could find a requested executable file in the PATH env to start specified hypervisors. So could you please tell me what the value of args[0] is? Or where does cmd->args initialize? 2. In qemu_driver.c, there is a function call "vm virDomainFindByUUID(&driver->domains, dom->uuid);", whose returned value "vm" is important in the next functions. Then we could get the "vm"'s value in hash.c which is the end part to lookup domains saved in hashtable. May I know where does HashTable initialize? I mean where can I set the hashtable's values in detail, if I want to modify some values? 3. This might be the same as question 1. In command.c, "execve(cmd->args[0], cmd->args, cmd->env)" is a way to exec command. About qemu_driver, what is the value of those three inputs? Thanks a lot! Regard, Corey -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://listman.redhat.com/archives/libvirt-users/attachments/20120817/a1b6a72d/attachment.htm>
Eric Blake
2012-Aug-17 13:02 UTC
[libvirt-users] Where does "cmd" initailize in qemu_command.c?
On 08/16/2012 10:52 AM, He Xin wrote:> > In qemu_command.c, there is a function call "cmd > virCommandNewArgList(emulator, "-S", NULL);", which initializes pointer > "cmd". However, I don't find the initial value of "cmd->args", which > represents the input of virFindFileInPath in Util.c. Through > virFindFileInPath, one could find a requested executable file in the PATH > env to start specified hypervisors. > > So could you please tell me what the value of args[0] is? Or where does > cmd->args initialize?cmd->args is initialized by the constructor - in this case, you are using the virCommandNewArgList constructor, so cmd->args[0] will be a copy of your 'emulator' parameter. So, you merely need trace back up the call stack to see where 'emulator' was first determined (hint: it came from virDomainDefPtr def->emulator, which was populated during virDomainDefParseXML to either match the explicit <emulator> tag in your XML or fall back to the default stored in the virCapsPtr caps structure).> In qemu_driver.c, there is a function call "vm > virDomainFindByUUID(&driver->domains, dom->uuid);", whose returned value > "vm" is important in the next functions. Then we could get the "vm"'s value > in hash.c which is the end part to lookup domains saved in hashtable. > > May I know where does HashTable initialize? I mean where can I set the > hashtable's values in detail, if I want to modify some values?The &driver->domains hash table is manipulated via functions in src/conf/domain_conf.c.> > 3. > > This might be the same as question 1. > > In command.c, "execve(cmd->args[0], cmd->args, cmd->env)" is a way > to exec command. About qemu_driver, what is the value of those three inputs?Yes, this is the same as question 1 - these values are determined by all the calls to the virCommand* functions acting on the cmd structure. Your questions seem to be more of a development nature about the libvirt source code, and less of a user nature about how to use the API in using the libvirt as a library in your own code. As such, you should probably take future questions of this nature to libvir-lists at redhat.com. -- Eric Blake eblake at redhat.com +1-919-301-3266 Libvirt virtualization library http://libvirt.org -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 620 bytes Desc: OpenPGP digital signature URL: <http://listman.redhat.com/archives/libvirt-users/attachments/20120817/070ad544/attachment.sig>