Re: [libvirt] RFC: Introduce API to query IP addresses for given domain
Eric, could you please share your opinion as to what should be more appropriate to use for this functionality: Structs/XML/VirTypedParams ? On Tue, Jul 2, 2013 at 7:25 PM, Osier Yang jy...@redhat.com wrote: On 02/07/13 18:33, Daniel P. Berrange wrote: On Fri, Jun 28, 2013 at 03:56:10PM +0530, Nehal J. Wani wrote: Hello, fellow developers! I am a GSoC candidate this year working for libvirt.org. My project is Introduce API to query IP addresses for given domain. The discussion regarding this feature had started here: http://www.mail-archive.com/**libvir-list@redhat.com/**msg51857.htmlhttp://www.mail-archive.com/libvir-list@redhat.com/msg51857.htmland then Michal had sent a patch too (refer: http://www.mail-archive.com/**libvir-list@redhat.com/**msg57141.htmlhttp://www.mail-archive.com/libvir-list@redhat.com/msg57141.html). But it was not pushed upstream due to lack of extensibility. So far I've come up with an API and I want to get your opinion before I start writing the rest so I don't follow the wrong direction. Following are the valid commands: domifaddr domain-name domifaddr domain-name interface-name domifaddr domain-name interface-name method domifaddr domain-name method What are valid values for 'method' here ? methods: (i) Querying qemu-guest-agent (ii) Getting info from dnsmasq.leases file (iii) Using the nwfilter to snoop the traffic If no method is mentioned, qemu-guest-agent will be used. Previous attempts by Michal had used structs and xml. Structs bring in restrictions and xml has to be parsed. Hence I am not planning to continue with either of these. As a start, I would like to know your comments about my API which queries the qemu-guest-agent and returns the results in virTypedParameter **params. Format(JSON) in which the qemu guest agent returns info: [{name:lo, ip-addresses: [{ip-address-type:ipv4,**ip-address:127.0.0.1,* *prefix:8}, {ip-address-type:ipv6,ip-** address:::1,prefix:128}], hardware-address:00:00:00:**00:00:00}, {name:eth0, ip-addresses: [{ip-address-type:ipv4,** ip-address:192.168.122.42,**prefix:24}, {ip-address-type:ipv6,ip-** address:fe80::5054:ff:fe09:**d240,prefix:64}], hardware-address:52:54:00:**09:d2:40}] //Possible 1-D Structure (A little hassle to maintain) params[0] = {iface-count,int,2} params[1] = {iface-name,string,lo} params[2] = {iface-hwaddr,string,00:00:**00:00:00:00} params[3] = {iface-addr-count,int,2} params[4] = {iface-addr-type,string,**ipv4} params[5] = {iface-addr,string,127.0.0.**1} params[6] = {iface-addr-prefix,int,8} params[7] = {iface-addr-type,string,**ipv6} params[8] = {iface-addr,string,::1} params[9] = {iface-addr-prefix,int,128} //2D Structure: (Not very hasslefree, but easier to maintain as one interface per row) params[0] = {iface-name,string,lo}{**iface-hwaddr,string,00:00:** 00:00:00:00}{iface-addr-**type,string,ipv4}{iface-** addr,string,127.0.0.1}{**iface-addr-prefix,int,8}{** iface-addr-type,string,ipv6**}{iface-addr,string,::1}{** iface-addr-prefix,int,128} params[1] = {iface-name,string,eth0}{**iface-hwaddr,string,52:54: **00:09:d2:40}{iface-addr-**type,string,ipv4}{iface-** addr,string,192.168.122.42}**{iface-addr-prefix,int,8}{** iface-addr-type,string,ipv6**}{iface-addr,string,fe80::** 5054:ff:fe09:d240}{iface-**addr-prefix,int,64} IMHO both of these approaches to encoding the data in virTypedParameter are seriously unpleasant for an app to deal with. Now this is a true for virTypedParameter in general, but I think that the need to deal with a list of objects here, each containing a list of typed parameters makes it even worse than normal. I wouldn't really like this as an application developer. Looking at this possible approach of virTypedParameter, I'm think I am preferring either the XML or fixed struct approach to this API as was proposed in the past, with a bias towards a fixed struct for simplicity of use by app developers. agreed. after seeing the trouble caused by multiple addrs, i'm not sure about using virTypedParameter too. even if we have an array type value, it still looks like not easy to use for api user, one has to know how many elements of the array too. Regards, Danuiel -- Nehal J. Wani UG2, BTech CS+MS(CL) IIIT-Hyderabad http://commandlinewani.blogspot.com -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] RFC: Introduce API to query IP addresses for given domain
On 07/08/2013 02:27 AM, Nehal J. Wani wrote: Eric, could you please share your opinion as to what should be more appropriate to use for this functionality: Structs/XML/VirTypedParams ? Looking at this possible approach of virTypedParameter, I'm think I am preferring either the XML or fixed struct approach to this API as was proposed in the past, with a bias towards a fixed struct for simplicity of use by app developers. agreed. after seeing the trouble caused by multiple addrs, i'm not sure about using virTypedParameter too. even if we have an array type value, it still looks like not easy to use for api user, one has to know how many elements of the array too. If extensibility is important (that is, if we think we will ever want to report additional information in the future, perhaps because qemu is expanded to give us additional information when using a guest agent command), then XML or typedParameter makes the most sense. But at this point, I'm not seeing that we have much need for extensibility - we already have as much useful information as you need to establish a connection with the guest using the IP information just queried, at which you could then use that guest connection outside of libvirt for querying any additional information in a format you feel best. So I am also leaning towards a fixed struct for the information we return here. Yes, that means that we aren't as extensible as possible, but ease of use and the unlikeliness of extension are swaying the argument for me. -- Eric Blake eblake redhat com+1-919-301-3266 Libvirt virtualization library http://libvirt.org signature.asc Description: OpenPGP digital signature -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] RFC: Introduce API to query IP addresses for given domain
[please don't top-post on technical lists] On 07/02/2013 05:04 AM, Nehal J. Wani wrote: Following will be the methods: (i) Querying qemu-guest-agent (ii) Getting info from dnsmasq.leases file (iii) Using the nwfilter to snoop the traffic Valid values: domifaddr domain-name qemu-ga domifaddr domain-name dnsmasq domifaddr domain-name snoop Suggestions are welcome for the 'name' of values of the option 'method'. The main idea behind using virTypedParameter: It gives us extensibility - as long as we tell the user how many interfaces and how many parameters per interface, then we can add more parameters per interface. If we use structs, then extensibility is lost. If we use XML, then first JSON output is parsed into XML, then XML is parsed. More effort is involved. But remember, parsing of JSON into XML is done by libvirtd; the end user only ever sees XML (which is what they are used to seeing for all other libvirt interfaces), so it is no additional work for the end user, just a layer of glue code inside libvirtd. As I think the previous patches by Michal were not pushed upstream due to lack of extensibility. That was a question raised at the time. But if extensibility is not important, a struct is probably best. -- Eric Blake eblake redhat com+1-919-301-3266 Libvirt virtualization library http://libvirt.org signature.asc Description: OpenPGP digital signature -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] RFC: Introduce API to query IP addresses for given domain
On Fri, Jun 28, 2013 at 03:56:10PM +0530, Nehal J. Wani wrote: Hello, fellow developers! I am a GSoC candidate this year working for libvirt.org. My project is Introduce API to query IP addresses for given domain. The discussion regarding this feature had started here: http://www.mail-archive.com/libvir-list@redhat.com/msg51857.html and then Michal had sent a patch too (refer: http://www.mail-archive.com/libvir-list@redhat.com/msg57141.html). But it was not pushed upstream due to lack of extensibility. So far I've come up with an API and I want to get your opinion before I start writing the rest so I don't follow the wrong direction. Following are the valid commands: domifaddr domain-name domifaddr domain-name interface-name domifaddr domain-name interface-name method domifaddr domain-name method What are valid values for 'method' here ? methods: (i) Querying qemu-guest-agent (ii) Getting info from dnsmasq.leases file (iii) Using the nwfilter to snoop the traffic If no method is mentioned, qemu-guest-agent will be used. Previous attempts by Michal had used structs and xml. Structs bring in restrictions and xml has to be parsed. Hence I am not planning to continue with either of these. As a start, I would like to know your comments about my API which queries the qemu-guest-agent and returns the results in virTypedParameter **params. Format(JSON) in which the qemu guest agent returns info: [{name:lo, ip-addresses: [{ip-address-type:ipv4,ip-address:127.0.0.1,prefix:8}, {ip-address-type:ipv6,ip-address:::1,prefix:128}], hardware-address:00:00:00:00:00:00}, {name:eth0, ip-addresses: [{ip-address-type:ipv4,ip-address:192.168.122.42,prefix:24}, {ip-address-type:ipv6,ip-address:fe80::5054:ff:fe09:d240,prefix:64}], hardware-address:52:54:00:09:d2:40}] //Possible 1-D Structure (A little hassle to maintain) params[0] = {iface-count,int,2} params[1] = {iface-name,string,lo} params[2] = {iface-hwaddr,string,00:00:00:00:00:00} params[3] = {iface-addr-count,int,2} params[4] = {iface-addr-type,string,ipv4} params[5] = {iface-addr,string,127.0.0.1} params[6] = {iface-addr-prefix,int,8} params[7] = {iface-addr-type,string,ipv6} params[8] = {iface-addr,string,::1} params[9] = {iface-addr-prefix,int,128} //2D Structure: (Not very hasslefree, but easier to maintain as one interface per row) params[0] = {iface-name,string,lo}{iface-hwaddr,string,00:00:00:00:00:00}{iface-addr-type,string,ipv4}{iface-addr,string,127.0.0.1}{iface-addr-prefix,int,8}{iface-addr-type,string,ipv6}{iface-addr,string,::1}{iface-addr-prefix,int,128} params[1] = {iface-name,string,eth0}{iface-hwaddr,string,52:54:00:09:d2:40}{iface-addr-type,string,ipv4}{iface-addr,string,192.168.122.42}{iface-addr-prefix,int,8}{iface-addr-type,string,ipv6}{iface-addr,string,fe80::5054:ff:fe09:d240}{iface-addr-prefix,int,64} IMHO both of these approaches to encoding the data in virTypedParameter are seriously unpleasant for an app to deal with. Now this is a true for virTypedParameter in general, but I think that the need to deal with a list of objects here, each containing a list of typed parameters makes it even worse than normal. I wouldn't really like this as an application developer. Looking at this possible approach of virTypedParameter, I'm think I am preferring either the XML or fixed struct approach to this API as was proposed in the past, with a bias towards a fixed struct for simplicity of use by app developers. Regards, Danuiel -- |: http://berrange.com -o-http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] RFC: Introduce API to query IP addresses for given domain
Following will be the methods: (i) Querying qemu-guest-agent (ii) Getting info from dnsmasq.leases file (iii) Using the nwfilter to snoop the traffic Valid values: domifaddr domain-name qemu-ga domifaddr domain-name dnsmasq domifaddr domain-name snoop Suggestions are welcome for the 'name' of values of the option 'method'. The main idea behind using virTypedParameter: It gives us extensibility - as long as we tell the user how many interfaces and how many parameters per interface, then we can add more parameters per interface. If we use structs, then extensibility is lost. If we use XML, then first JSON output is parsed into XML, then XML is parsed. More effort is involved. As I think the previous patches by Michal were not pushed upstream due to lack of extensibility. On Tue, Jul 2, 2013 at 4:03 PM, Daniel P. Berrange berra...@redhat.comwrote: On Fri, Jun 28, 2013 at 03:56:10PM +0530, Nehal J. Wani wrote: Hello, fellow developers! I am a GSoC candidate this year working for libvirt.org. My project is Introduce API to query IP addresses for given domain. The discussion regarding this feature had started here: http://www.mail-archive.com/libvir-list@redhat.com/msg51857.html and then Michal had sent a patch too (refer: http://www.mail-archive.com/libvir-list@redhat.com/msg57141.html). But it was not pushed upstream due to lack of extensibility. So far I've come up with an API and I want to get your opinion before I start writing the rest so I don't follow the wrong direction. Following are the valid commands: domifaddr domain-name domifaddr domain-name interface-name domifaddr domain-name interface-name method domifaddr domain-name method What are valid values for 'method' here ? methods: (i) Querying qemu-guest-agent (ii) Getting info from dnsmasq.leases file (iii) Using the nwfilter to snoop the traffic If no method is mentioned, qemu-guest-agent will be used. Previous attempts by Michal had used structs and xml. Structs bring in restrictions and xml has to be parsed. Hence I am not planning to continue with either of these. As a start, I would like to know your comments about my API which queries the qemu-guest-agent and returns the results in virTypedParameter **params. Format(JSON) in which the qemu guest agent returns info: [{name:lo, ip-addresses: [{ip-address-type:ipv4,ip-address:127.0.0.1,prefix:8}, {ip-address-type:ipv6,ip-address:::1,prefix:128}], hardware-address:00:00:00:00:00:00}, {name:eth0, ip-addresses: [{ip-address-type:ipv4,ip-address:192.168.122.42,prefix:24}, {ip-address-type:ipv6,ip-address:fe80::5054:ff:fe09:d240,prefix:64}], hardware-address:52:54:00:09:d2:40}] //Possible 1-D Structure (A little hassle to maintain) params[0] = {iface-count,int,2} params[1] = {iface-name,string,lo} params[2] = {iface-hwaddr,string,00:00:00:00:00:00} params[3] = {iface-addr-count,int,2} params[4] = {iface-addr-type,string,ipv4} params[5] = {iface-addr,string,127.0.0.1} params[6] = {iface-addr-prefix,int,8} params[7] = {iface-addr-type,string,ipv6} params[8] = {iface-addr,string,::1} params[9] = {iface-addr-prefix,int,128} //2D Structure: (Not very hasslefree, but easier to maintain as one interface per row) params[0] = {iface-name,string,lo}{iface-hwaddr,string,00:00:00:00:00:00}{iface-addr-type,string,ipv4}{iface-addr,string,127.0.0.1}{iface-addr-prefix,int,8}{iface-addr-type,string,ipv6}{iface-addr,string,::1}{iface-addr-prefix,int,128} params[1] = {iface-name,string,eth0}{iface-hwaddr,string,52:54:00:09:d2:40}{iface-addr-type,string,ipv4}{iface-addr,string,192.168.122.42}{iface-addr-prefix,int,8}{iface-addr-type,string,ipv6}{iface-addr,string,fe80::5054:ff:fe09:d240}{iface-addr-prefix,int,64} IMHO both of these approaches to encoding the data in virTypedParameter are seriously unpleasant for an app to deal with. Now this is a true for virTypedParameter in general, but I think that the need to deal with a list of objects here, each containing a list of typed parameters makes it even worse than normal. I wouldn't really like this as an application developer. Looking at this possible approach of virTypedParameter, I'm think I am preferring either the XML or fixed struct approach to this API as was proposed in the past, with a bias towards a fixed struct for simplicity of use by app developers. Regards, Danuiel -- |: http://berrange.com -o-http://www.flickr.com/photos/dberrange/:| |: http://libvirt.org -o- http://virt-manager.org:| |: http://autobuild.org -o- http://search.cpan.org/~danberr/:| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc:| -- Nehal J. Wani UG2, BTech CS+MS(CL) IIIT-Hyderabad http://commanlinewani.blogspot.com -- libvir-list mailing list libvir-list@redhat.com
Re: [libvirt] RFC: Introduce API to query IP addresses for given domain
On Tue, Jul 02, 2013 at 04:34:49PM +0530, Nehal J. Wani wrote: Following will be the methods: (i) Querying qemu-guest-agent (ii) Getting info from dnsmasq.leases file (iii) Using the nwfilter to snoop the traffic Valid values: domifaddr domain-name qemu-ga domifaddr domain-name dnsmasq domifaddr domain-name snoop Suggestions are welcome for the 'name' of values of the option 'method'. This would be better as virsh domifaddr --method=[agent|dhcp|snoop] domain-name since method is not something that will be used commonly. The main idea behind using virTypedParameter: It gives us extensibility - as long as we tell the user how many interfaces and how many parameters per interface, then we can add more parameters per interface. If we use structs, then extensibility is lost. If we use XML, then first JSON output is parsed into XML, then XML is parsed. More effort is involved. As I think the previous patches by Michal were not pushed upstream due to lack of extensibility. All of the 3 options here suck in some respect. I'm not convinced that virTypedParameter is the least bad option. I think the structs are the least-worst option currently, on the grounds that if people want more detailed information about guest interfaces, then this is outside the scope of libvirt they should use a dedicated mgmt api. The implication being that we don't need to worry about extensibilty if we declare reporting of other information to be out of scope for libvirt. Daniel -- |: http://berrange.com -o-http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] RFC: Introduce API to query IP addresses for given domain
On 28/06/13 18:26, Nehal J. Wani wrote: Hello, fellow developers! I am a GSoC candidate this year working forlibvirt.org http://libvirt.org. My project is Introduce API to query IP addresses for given domain. The discussion regarding this feature had started here:http://www.mail-archive.com/libvir-list@redhat.com/msg51857.html and then Michal had sent a patch too (refer:http://www.mail-archive.com/libvir-list@redhat.com/msg57141.html). But it was not pushed upstream due to lack of extensibility. So far I've come up with an API and I want to get your opinion before I start writing the rest so I don't follow the wrong direction. Following are the valid commands: domifaddr domain-name domifaddr domain-name interface-name domifaddr domain-name interface-name method domifaddr domain-name method with guessing 'domifaddr domain-name' will get all interfaces' info, this looks okay, but it's not the most important thing. methods: (i) Querying qemu-guest-agent (ii) Getting info from dnsmasq.leases file (iii) Using the nwfilter to snoop the traffic not important AT THIS stage. but btw, does nwfilter support both arp and dhcp snooping? If no method is mentioned, qemu-guest-agent will be used. yeah, using guest agent should be the default. Previous attempts by Michal had used structs and xml. Structs bring in restrictions and xml has to be parsed. Hence I am not planning to continue with either of these. As a start, I would like to know your comments about my API which queries the qemu-guest-agent and returns the results in virTypedParameter **params. Format(JSON) in which the qemu guest agent returns info: [{name:lo, ip-addresses: [{ip-address-type:ipv4,ip-address:127.0.0.1,prefix:8}, {ip-address-type:ipv6,ip-address:::1,prefix:128}], hardware-address:00:00:00:00:00:00}, {name:eth0, ip-addresses: [{ip-address-type:ipv4,ip-address:192.168.122.42,prefix:24}, {ip-address-type:ipv6,ip-address:fe80::5054:ff:fe09:d240,prefix:64}], hardware-address:52:54:00:09:d2:40}] //Possible 1-D Structure (A little hassle to maintain) params[0] = {iface-count,int,2} i think this is no need. as long as you returns the number of interfaces as return value of the api, or *nparams. params[1] = {iface-name,string,lo} params[2] = {iface-hwaddr,string,00:00:00:00:00:00} params[3] = {iface-addr-count,int,2} params[4] = {iface-addr-type,string,ipv4} params[5] = {iface-addr,string,127.0.0.1} params[6] = {iface-addr-prefix,int,8} params[7] = {iface-addr-type,string,ipv6} params[8] = {iface-addr,string,::1} params[9] = {iface-addr-prefix,int,128} hm.. this is not well orgnized. param field must be unique, otherwise there are conflicts when getting the param value, assuming that i want to get value of field iface-addr by virTypedParamsGetString, what it should get? what will it get? [1] since there could be multiple addrs for a interface, so we may need to introduce a new param type to have a array param value for the multiple addresses. and if you can have a enum for adress types (they are fixed, ipv4/ipv6), and then the type of iface-addr-type should be 'int'. //2D Structure: (Not very hasslefree, but easier to maintain as one interface per row) params[0] = {iface-name,string,lo}{iface-hwaddr,string,00:00:00:00:00:00}{iface-addr-type,string,ipv4}{iface-addr,string,127.0.0.1}{iface-addr-prefix,int,8}{iface-addr-type,string,ipv6}{iface-addr,string,::1}{iface-addr-prefix,int,128} params[1] = {iface-name,string,eth0}{iface-hwaddr,string,52:54:00:09:d2:40}{iface-addr-type,string,ipv4}{iface-addr,string,192.168.122.42}{iface-addr-prefix,int,8}{iface-addr-type,string,ipv6}{iface-addr,string,fe80::5054:ff:fe09:d240}{iface-addr-prefix,int,64} no, this is not the right way to go, there is no param fields for params[i], i think you still don't understand how typed parameter works. assuming you are a user of your api may help understand what problems you will face with not good design, e.g [1]. Function definitions that I intend to use are: static int remoteDispatchDomainInterfacesAddresses( virNetServerPtr server ATTRIBUTE_UNUSED, virNetServerClientPtr client, virNetMessagePtr msg ATTRIBUTE_UNUSED, virNetMessageErrorPtr rerr, remote_domain_interfaces_addresses_args *args, remote_domain_interfaces_addresses_ret *ret) int virDomainInterfacesAddresses (virDomainPtr dom, virTypedParameterPtr *params, int *nparams, unsigned int flags); [2] no need to list this, we only have to figure out the design of the public api. typedef int (*virDrvDomainInterfacesAddresses) (virDomainPtr dom, virTypedParameterPtr *params, int *nparams,
Re: [libvirt] RFC: Introduce API to query IP addresses for given domain
On 02/07/13 18:33, Daniel P. Berrange wrote: On Fri, Jun 28, 2013 at 03:56:10PM +0530, Nehal J. Wani wrote: Hello, fellow developers! I am a GSoC candidate this year working for libvirt.org. My project is Introduce API to query IP addresses for given domain. The discussion regarding this feature had started here: http://www.mail-archive.com/libvir-list@redhat.com/msg51857.html and then Michal had sent a patch too (refer: http://www.mail-archive.com/libvir-list@redhat.com/msg57141.html). But it was not pushed upstream due to lack of extensibility. So far I've come up with an API and I want to get your opinion before I start writing the rest so I don't follow the wrong direction. Following are the valid commands: domifaddr domain-name domifaddr domain-name interface-name domifaddr domain-name interface-name method domifaddr domain-name method What are valid values for 'method' here ? methods: (i) Querying qemu-guest-agent (ii) Getting info from dnsmasq.leases file (iii) Using the nwfilter to snoop the traffic If no method is mentioned, qemu-guest-agent will be used. Previous attempts by Michal had used structs and xml. Structs bring in restrictions and xml has to be parsed. Hence I am not planning to continue with either of these. As a start, I would like to know your comments about my API which queries the qemu-guest-agent and returns the results in virTypedParameter **params. Format(JSON) in which the qemu guest agent returns info: [{name:lo, ip-addresses: [{ip-address-type:ipv4,ip-address:127.0.0.1,prefix:8}, {ip-address-type:ipv6,ip-address:::1,prefix:128}], hardware-address:00:00:00:00:00:00}, {name:eth0, ip-addresses: [{ip-address-type:ipv4,ip-address:192.168.122.42,prefix:24}, {ip-address-type:ipv6,ip-address:fe80::5054:ff:fe09:d240,prefix:64}], hardware-address:52:54:00:09:d2:40}] //Possible 1-D Structure (A little hassle to maintain) params[0] = {iface-count,int,2} params[1] = {iface-name,string,lo} params[2] = {iface-hwaddr,string,00:00:00:00:00:00} params[3] = {iface-addr-count,int,2} params[4] = {iface-addr-type,string,ipv4} params[5] = {iface-addr,string,127.0.0.1} params[6] = {iface-addr-prefix,int,8} params[7] = {iface-addr-type,string,ipv6} params[8] = {iface-addr,string,::1} params[9] = {iface-addr-prefix,int,128} //2D Structure: (Not very hasslefree, but easier to maintain as one interface per row) params[0] = {iface-name,string,lo}{iface-hwaddr,string,00:00:00:00:00:00}{iface-addr-type,string,ipv4}{iface-addr,string,127.0.0.1}{iface-addr-prefix,int,8}{iface-addr-type,string,ipv6}{iface-addr,string,::1}{iface-addr-prefix,int,128} params[1] = {iface-name,string,eth0}{iface-hwaddr,string,52:54:00:09:d2:40}{iface-addr-type,string,ipv4}{iface-addr,string,192.168.122.42}{iface-addr-prefix,int,8}{iface-addr-type,string,ipv6}{iface-addr,string,fe80::5054:ff:fe09:d240}{iface-addr-prefix,int,64} IMHO both of these approaches to encoding the data in virTypedParameter are seriously unpleasant for an app to deal with. Now this is a true for virTypedParameter in general, but I think that the need to deal with a list of objects here, each containing a list of typed parameters makes it even worse than normal. I wouldn't really like this as an application developer. Looking at this possible approach of virTypedParameter, I'm think I am preferring either the XML or fixed struct approach to this API as was proposed in the past, with a bias towards a fixed struct for simplicity of use by app developers. agreed. after seeing the trouble caused by multiple addrs, i'm not sure about using virTypedParameter too. even if we have an array type value, it still looks like not easy to use for api user, one has to know how many elements of the array too. Regards, Danuiel -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list