<div dir="ltr"><br><br><br>On Fri, Aug 23, 2013 at 8:16 PM, Doug Goldstein <<a href="mailto:cardoe@gentoo.org" target="_blank">cardoe@gentoo.org</a>> wrote:<br>><br>> On Thu, Aug 22, 2013 at 5:18 PM, nehaljwani <<a href="mailto:nehaljw.kkd1@gmail.com" target="_blank">nehaljw.kkd1@gmail.com</a>> wrote:<br>
>><br>>> Use virDomainInterfacesAddresses in virsh<br>>><br>>> tools/virsh-domain-monitor.c<br>>> * Introduce new command : domifaddr<br>>><br>>> virsh # domifaddr f18<br>>> Name MAC address IP address<br>
>> ---------------------------------------------------<br>>> lo 00:00:00:00:00:00 <a href="http://127.0.0.1/8" target="_blank">127.0.0.1/8</a> ::1/128<br>>> eth0 52:54:00:89:ad:35 <a href="http://192.168.102.142/24" target="_blank">192.168.102.142/24</a> fe80::5054:ff:fe89:ad35/64<br>
>> eth1 52:54:00:d3:39:ee <a href="http://192.168.103.183/24" target="_blank">192.168.103.183/24</a> fe80::5054:ff:fed3:39ee/64<br>>> eth2 52:54:00:fe:4c:4f <a href="http://192.168.101.197/24" target="_blank">192.168.101.197/24</a> fe80::5054:ff:fefe:4c4f/64<br>
>> eth3 52:54:00:89:4e:97 <a href="http://192.168.101.130/24" target="_blank">192.168.101.130/24</a> fe80::5054:ff:fe89:4e97/64<br>>><br>><br>> Not a review, but a question. How does this work with IP aliases? Will it show all the aliases 1 per line or just show the primary address?<br>
> <br>>><br>>> tools/virsh.pod<br>>> * Document new command<br>>><br>>> ---<br>>> tools/virsh-domain-monitor.c | 99 ++++++++++++++++++++++++++++++++++++++++++++<br>>> tools/virsh.pod | 10 +++++<br>
>> 2 files changed, 109 insertions(+)<br>>><br>>> diff --git a/tools/virsh-domain-monitor.c b/tools/virsh-domain-monitor.c<br>>> index b29b82a..91efa71 100644<br>>> --- a/tools/virsh-domain-monitor.c<br>
>> +++ b/tools/virsh-domain-monitor.c<br>>> @@ -1871,6 +1871,99 @@ cleanup:<br>>> }<br>>> #undef FILTER<br>>><br>>> +/* "domifaddr" command<br>>> + */<br>>> +static const vshCmdInfo info_domifaddr[] = {<br>
>> + {"help", N_("Get network interfaces' addresses for a running domain")},<br>>> + {"desc", N_("Get network interfaces' addresses for a running domain")},<br>
>> + {NULL, NULL}<br>>> +};<br>>> +<br>>> +static const vshCmdOptDef opts_domifaddr[] = {<br>>> + {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")},<br>
>> + {"interface", VSH_OT_DATA, VSH_OFLAG_NONE, N_("network interface name")},<br>>> + {NULL, 0, 0, NULL}<br>>> +};<br>>> +<br>>> +static bool<br>>> +cmdDomIfAddr(vshControl *ctl, const vshCmd *cmd)<br>
>> +{<br>>> + virDomainPtr dom = NULL;<br>>> + const char *interface = NULL;<br>>> + virDomainInterfacePtr *ifaces = NULL;<br>>> + size_t i, j;<br>>> + int ifaces_count = 0;<br>
>> + unsigned int flags = 0;<br>>> + bool ret = false;<br>>> +<br>>> + if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))<br>>> + return false;<br>>> +<br>>> + if (vshCommandOptString(cmd, "interface", &interface) < 0) {<br>
>> + goto cleanup;<br>>> + }<br>>> +<br>>> + if ((ifaces_count = virDomainInterfacesAddresses(dom, &ifaces, flags)) < 0) {<br>>> + vshError(ctl, _("Failed to query for interfaces addresses"));<br>
>> + goto cleanup;<br>>> + }<br>>> +<br>>> + vshPrintExtra(ctl, " %-10s %-17s %s\n%s\n",<br>>> + _("Name"), _("MAC address"), _("IP address"),<br>
>> + "---------------------------------------------------");<br>>> +<br>>> + for (i = 0; i < ifaces_count; i++) {<br>>> + virDomainInterfacePtr iface = ifaces[i];<br>
>> + virBuffer buf = VIR_BUFFER_INITIALIZER;<br>>> + const char *hwaddr = "";<br>>> + const char *ip_addr_str = NULL;<br>>> +<br>>> + if (interface && STRNEQ(interface, iface->name)) {<br>
>> + virBufferFreeAndReset(&buf);<br>>> + continue;<br>>> + }<br>>> +<br>>> + if (iface->hwaddr)<br>>> + hwaddr = iface->hwaddr;<br>
>> +<br>>> + for (j = 0; j < iface->naddrs; j++) {<br>>> + if (j)<br>>> + virBufferAddChar(&buf, ' ');<br>>> + virBufferAsprintf(&buf, "%s/%d",<br>
>> + iface->addrs[j].addr,<br>>> + iface->addrs[j].prefix);<br>>> + }<br>>> +<br>>> + if (virBufferError(&buf)) {<br>
>> + virBufferFreeAndReset(&buf);<br>>> + virReportOOMError();<br>>> + return ret;<br>>> + }<br>>> +<br>>> + ip_addr_str = virBufferContentAndReset(&buf);<br>
>> +<br>>> + if (!ip_addr_str)<br>>> + ip_addr_str = "";<br>>> +<br>>> + vshPrintExtra(ctl, " %-10s %-17s %s\n",<br>>> + iface->name, hwaddr, ip_addr_str);<br>
>> +<br>>> + virBufferFreeAndReset(&buf);<br>>> + }<br>>> +<br>>> + ret = true;<br>>> +<br>>> +cleanup:<br>>> + for (i = 0; i < ifaces_count; i++) {<br>
>> + if (ifaces[i])<br>>> + virDomainInterfaceFree(ifaces[i]);<br>>> + }<br>>> + VIR_FREE(ifaces);<br>>> +<br>>> + virDomainFree(dom);<br>>> + return ret;<br>
>> +}<br>>> +<br>>> const vshCmdDef domMonitoringCmds[] = {<br>>> {.name = "domblkerror",<br>>> .handler = cmdDomBlkError,<br>>> @@ -1944,5 +2037,11 @@ const vshCmdDef domMonitoringCmds[] = {<br>
>> .info = info_list,<br>>> .flags = 0<br>>> },<br>>> + {.name = "domifaddr",<br>>> + .handler = cmdDomIfAddr,<br>>> + .opts = opts_domifaddr,<br>
>> + .info = info_domifaddr,<br>
>> + .flags = 0<br>>> + },<br>>> {.name = NULL}<br>>> };<br>>> diff --git a/tools/virsh.pod b/tools/virsh.pod<br>>> index 0ae5178..008ffea 100644<br>>> --- a/tools/virsh.pod<br>
>> +++ b/tools/virsh.pod<br>>> @@ -636,6 +636,16 @@ B<Explanation of fields> (fields appear in the following order):<br>>> flush_total_times - total time flush operations took (ns)<br>>> <-- other fields provided by hypervisor --><br>
>><br>>> +<br>>> +=item B<domifaddr> I<domain> [I<interface>]<br>>> +<br>>> +Get a list of interfaces of a running domain along with their IP and MAC<br>>> +addresses, or limited output just for one interface if I<interface> is<br>
>> +specified. Note, that I<interface> can be driver dependent, it can be<br>>> +the name within guest OS or the name you would see in domain XML.<br>>> +Moreover, the whole command may require a guest agent to be configured<br>
>> +for the queried domain under some drivers, notably qemu.<br>>> +<br>>> =item B<domifstat> I<domain> I<interface-device><br>>><br>>> Get network interface stats for a running domain.<br>
>> --<br>>> 1.7.11.7<br>>><br>>> --<br>>> libvir-list mailing list<br>>> <a href="mailto:libvir-list@redhat.com" target="_blank">libvir-list@redhat.com</a><br>>> <a href="https://www.redhat.com/mailman/listinfo/libvir-list" target="_blank">https://www.redhat.com/mailman/listinfo/libvir-list</a><br>
><br>><br>><br>><br>> --<br>> Doug Goldstein<br><br><br>The leases method will be applied to this API when virNetworkGetDHCPLeases() API is accepted, which is the next step after this. <div>Refer: <a href="http://www.redhat.com/archives/libvir-list/2013-July/msg01603.html" target="_blank">http://www.redhat.com/archives/libvir-list/2013-July/msg01603.html</a> and its followups.</div>
<div><br></div><div>The output from the virNetworkGetDHCPLeases will be something of this kind:</div><div><br></div><div><span style="font-family:arial,sans-serif;font-size:13px"> virsh # net-dhcp-leases default</span><br style="font-family:arial,sans-serif;font-size:13px">
<br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px"> Virtual Network Expiry Time MAC address IP address Hostname ClientId</span><br style="font-family:arial,sans-serif;font-size:13px">
<span style="font-family:arial,sans-serif;font-size:13px"> ------------------------------</span><span style="font-family:arial,sans-serif;font-size:13px">------------------------------</span><span style="font-family:arial,sans-serif;font-size:13px">------------------------------</span><span style="font-family:arial,sans-serif;font-size:13px">----------</span><br style="font-family:arial,sans-serif;font-size:13px">
<span style="font-family:arial,sans-serif;font-size:13px"> default 16-08-2013 03:53:11 52:54:00:89:4e:97 192.168.101.130 f18 *</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px"> default 16-08-2013 03:45:20 52:54:00:fe:4c:4f 192.168.101.197 * *</span><br style="font-family:arial,sans-serif;font-size:13px">
<div>
<br></div><div><br>--<br>Nehal J Wani<br>UG3, BTech CS+MS(CL)<br>IIIT-Hyderabad<br><a href="http://commandlinewani.blogspot.com" target="_blank">http://commandlinewani.blogspot.com</a></div></div></div>